aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/alpha/include/asm/fcntl.h2
-rw-r--r--arch/alpha/kernel/core_marvel.c2
-rw-r--r--arch/alpha/kernel/core_titan.c2
-rw-r--r--arch/alpha/kernel/init_task.c5
-rw-r--r--arch/alpha/kernel/pci_impl.h2
-rw-r--r--arch/alpha/kernel/pci_iommu.c4
-rw-r--r--arch/alpha/kernel/vmlinux.lds.S95
-rw-r--r--arch/arm/Kconfig5
-rw-r--r--arch/arm/common/locomo.c17
-rw-r--r--arch/arm/common/vic.c1
-rw-r--r--arch/arm/configs/littleton_defconfig783
-rw-r--r--arch/arm/configs/pxa3xx_defconfig1332
-rw-r--r--arch/arm/configs/xcep_defconfig1129
-rw-r--r--arch/arm/configs/zylonite_defconfig736
-rw-r--r--arch/arm/include/asm/atomic.h26
-rw-r--r--arch/arm/include/asm/cache.h2
-rw-r--r--arch/arm/include/asm/cputype.h10
-rw-r--r--arch/arm/include/asm/hardware/iop3xx-adma.h81
-rw-r--r--arch/arm/include/asm/hardware/iop_adma.h3
-rw-r--r--arch/arm/include/asm/mach/mmc.h17
-rw-r--r--arch/arm/include/asm/tcm.h31
-rw-r--r--arch/arm/include/asm/unified.h4
-rw-r--r--arch/arm/kernel/Makefile1
-rw-r--r--arch/arm/kernel/entry-armv.S19
-rw-r--r--arch/arm/kernel/entry-header.S14
-rw-r--r--arch/arm/kernel/kprobes.c19
-rw-r--r--arch/arm/kernel/setup.c2
-rw-r--r--arch/arm/kernel/tcm.c246
-rw-r--r--arch/arm/kernel/tcm.h17
-rw-r--r--arch/arm/kernel/vmlinux.lds.S57
-rw-r--r--arch/arm/lib/copy_page.S16
-rw-r--r--arch/arm/mach-at91/at91cap9_devices.c10
-rw-r--r--arch/arm/mach-at91/at91sam9g45_devices.c104
-rw-r--r--arch/arm/mach-at91/at91sam9rl_devices.c102
-rw-r--r--arch/arm/mach-at91/board-cap9adk.c2
-rw-r--r--arch/arm/mach-at91/board-neocore926.c2
-rw-r--r--arch/arm/mach-at91/board-sam9m10g45ek.c10
-rw-r--r--arch/arm/mach-at91/board-sam9rlek.c10
-rw-r--r--arch/arm/mach-integrator/integrator_cp.c4
-rw-r--r--arch/arm/mach-iop13xx/include/mach/adma.h119
-rw-r--r--arch/arm/mach-iop13xx/setup.c17
-rw-r--r--arch/arm/mach-pxa/Kconfig36
-rw-r--r--arch/arm/mach-pxa/Makefile4
-rw-r--r--arch/arm/mach-pxa/balloon3.c361
-rw-r--r--arch/arm/mach-pxa/clock.h1
-rw-r--r--arch/arm/mach-pxa/cm-x270.c146
-rw-r--r--arch/arm/mach-pxa/cm-x300.c71
-rw-r--r--arch/arm/mach-pxa/colibri-pxa300.c1
-rw-r--r--arch/arm/mach-pxa/colibri-pxa320.c33
-rw-r--r--arch/arm/mach-pxa/colibri-pxa3xx.c52
-rw-r--r--arch/arm/mach-pxa/corgi.c233
-rw-r--r--arch/arm/mach-pxa/csb726.c54
-rw-r--r--arch/arm/mach-pxa/devices.c27
-rw-r--r--arch/arm/mach-pxa/devices.h2
-rw-r--r--arch/arm/mach-pxa/e740.c1
-rw-r--r--arch/arm/mach-pxa/e750.c1
-rw-r--r--arch/arm/mach-pxa/em-x270.c45
-rw-r--r--arch/arm/mach-pxa/eseries.c39
-rw-r--r--arch/arm/mach-pxa/gumstix.c5
-rw-r--r--arch/arm/mach-pxa/hx4700.c65
-rw-r--r--arch/arm/mach-pxa/idp.c5
-rw-r--r--arch/arm/mach-pxa/imote2.c3
-rw-r--r--arch/arm/mach-pxa/include/mach/balloon3.h134
-rw-r--r--arch/arm/mach-pxa/include/mach/colibri.h6
-rw-r--r--arch/arm/mach-pxa/include/mach/entry-macro.S25
-rw-r--r--arch/arm/mach-pxa/include/mach/hardware.h17
-rw-r--r--arch/arm/mach-pxa/include/mach/irda.h2
-rw-r--r--arch/arm/mach-pxa/include/mach/irqs.h42
-rw-r--r--arch/arm/mach-pxa/include/mach/mfp.h301
-rw-r--r--arch/arm/mach-pxa/include/mach/mmc.h5
-rw-r--r--arch/arm/mach-pxa/include/mach/palmtc.h86
-rw-r--r--arch/arm/mach-pxa/include/mach/palmtx.h5
-rw-r--r--arch/arm/mach-pxa/include/mach/pxa3xx-regs.h4
-rw-r--r--arch/arm/mach-pxa/include/mach/pxafb.h3
-rw-r--r--arch/arm/mach-pxa/include/mach/regs-intc.h11
-rw-r--r--arch/arm/mach-pxa/include/mach/uncompress.h2
-rw-r--r--arch/arm/mach-pxa/irq.c8
-rw-r--r--arch/arm/mach-pxa/littleton.c43
-rw-r--r--arch/arm/mach-pxa/lubbock.c18
-rw-r--r--arch/arm/mach-pxa/magician.c59
-rw-r--r--arch/arm/mach-pxa/mainstone.c16
-rw-r--r--arch/arm/mach-pxa/mioa701.c84
-rw-r--r--arch/arm/mach-pxa/palmld.c143
-rw-r--r--arch/arm/mach-pxa/palmt5.c111
-rw-r--r--arch/arm/mach-pxa/palmtc.c436
-rw-r--r--arch/arm/mach-pxa/palmte2.c110
-rw-r--r--arch/arm/mach-pxa/palmtx.c225
-rw-r--r--arch/arm/mach-pxa/palmz72.c116
-rw-r--r--arch/arm/mach-pxa/pcm990-baseboard.c67
-rw-r--r--arch/arm/mach-pxa/poodle.c80
-rw-r--r--arch/arm/mach-pxa/pxa2xx.c1
-rw-r--r--arch/arm/mach-pxa/pxa300.c2
-rw-r--r--arch/arm/mach-pxa/pxa320.c2
-rw-r--r--arch/arm/mach-pxa/pxa930.c19
-rw-r--r--arch/arm/mach-pxa/spitz.c238
-rw-r--r--arch/arm/mach-pxa/tosa.c91
-rw-r--r--arch/arm/mach-pxa/treo680.c159
-rw-r--r--arch/arm/mach-pxa/trizeps4.c4
-rw-r--r--arch/arm/mach-pxa/xcep.c187
-rw-r--r--arch/arm/mach-pxa/zylonite.c3
-rw-r--r--arch/arm/mach-realview/core.c24
-rw-r--r--arch/arm/mach-realview/core.h4
-rw-r--r--arch/arm/mach-realview/realview_eb.c40
-rw-r--r--arch/arm/mach-realview/realview_pb1176.c40
-rw-r--r--arch/arm/mach-realview/realview_pb11mp.c40
-rw-r--r--arch/arm/mach-realview/realview_pba8.c40
-rw-r--r--arch/arm/mach-realview/realview_pbx.c40
-rw-r--r--arch/arm/mach-s3c2410/Kconfig5
-rw-r--r--arch/arm/mach-s3c2412/Kconfig3
-rw-r--r--arch/arm/mach-s3c2440/Kconfig6
-rw-r--r--arch/arm/mach-s3c6400/Kconfig1
-rw-r--r--arch/arm/mach-s3c6410/Kconfig1
-rw-r--r--arch/arm/mach-sa1100/dma.c2
-rw-r--r--arch/arm/mach-u300/Kconfig12
-rw-r--r--arch/arm/mach-u300/Makefile3
-rw-r--r--arch/arm/mach-u300/core.c14
-rw-r--r--arch/arm/mach-u300/dummyspichip.c290
-rw-r--r--arch/arm/mach-u300/gpio.c13
-rw-r--r--arch/arm/mach-u300/i2c.c43
-rw-r--r--arch/arm/mach-u300/i2c.h23
-rw-r--r--arch/arm/mach-u300/include/mach/memory.h8
-rw-r--r--arch/arm/mach-u300/include/mach/syscon.h120
-rw-r--r--arch/arm/mach-u300/mmc.c22
-rw-r--r--arch/arm/mach-u300/padmux.c395
-rw-r--r--arch/arm/mach-u300/padmux.h28
-rw-r--r--arch/arm/mach-u300/spi.c124
-rw-r--r--arch/arm/mach-u300/spi.h26
-rw-r--r--arch/arm/mach-u300/timer.c15
-rw-r--r--arch/arm/mach-versatile/core.c4
-rw-r--r--arch/arm/mach-versatile/versatile_pb.c4
-rw-r--r--arch/arm/mm/Kconfig5
-rw-r--r--arch/arm/mm/fault.c110
-rw-r--r--arch/arm/mm/init.c8
-rw-r--r--arch/arm/plat-iop/adma.c4
-rw-r--r--arch/arm/plat-pxa/dma.c281
-rw-r--r--arch/arm/plat-pxa/include/plat/mfp.h73
-rw-r--r--arch/arm/plat-pxa/mfp.c3
-rw-r--r--arch/arm/plat-s3c/gpio.c2
-rw-r--r--arch/arm/plat-s3c64xx/dma.c6
-rw-r--r--arch/arm/plat-s3c64xx/include/plat/dma-plat.h2
-rw-r--r--arch/arm/plat-s3c64xx/include/plat/irqs.h10
-rw-r--r--arch/arm/plat-s3c64xx/s3c6400-clock.c8
-rw-r--r--arch/arm/plat-stmp3xxx/dma.c2
-rw-r--r--arch/arm/tools/mach-types20
-rw-r--r--arch/blackfin/kernel/vmlinux.lds.S56
-rw-r--r--arch/cris/arch-v10/kernel/time.c1
-rw-r--r--arch/cris/arch-v32/kernel/smp.c2
-rw-r--r--arch/cris/arch-v32/kernel/time.c1
-rw-r--r--arch/cris/arch-v32/mach-a3/io.c2
-rw-r--r--arch/cris/arch-v32/mach-fs/io.c2
-rw-r--r--arch/cris/include/arch-v10/arch/mmu.h9
-rw-r--r--arch/cris/include/arch-v32/arch/mmu.h10
-rw-r--r--arch/cris/include/asm/hardirq.h12
-rw-r--r--arch/cris/include/asm/pgtable.h2
-rw-r--r--arch/cris/kernel/irq.c5
-rw-r--r--arch/cris/kernel/vmlinux.lds.S37
-rw-r--r--arch/frv/kernel/pm.c14
-rw-r--r--arch/frv/mb93090-mb00/Makefile2
-rw-r--r--arch/frv/mb93090-mb00/flash.c90
-rw-r--r--arch/h8300/kernel/vmlinux.lds.S25
-rw-r--r--arch/m32r/include/asm/page.h4
-rw-r--r--arch/m32r/include/asm/processor.h2
-rw-r--r--arch/m32r/include/asm/thread_info.h15
-rw-r--r--arch/m32r/kernel/entry.S7
-rw-r--r--arch/m32r/kernel/head.S4
-rw-r--r--arch/m32r/kernel/vmlinux.lds.S78
-rw-r--r--arch/microblaze/Kconfig1
-rw-r--r--arch/microblaze/Makefile31
-rw-r--r--arch/microblaze/boot/Makefile41
l---------arch/microblaze/boot/dts/system.dts1
-rw-r--r--arch/microblaze/boot/linked_dtb.S3
-rw-r--r--arch/microblaze/configs/mmu_defconfig30
-rw-r--r--arch/microblaze/configs/nommu_defconfig35
-rw-r--r--arch/microblaze/include/asm/asm-compat.h17
-rw-r--r--arch/microblaze/include/asm/io.h3
-rw-r--r--arch/microblaze/include/asm/ipc.h1
-rw-r--r--arch/microblaze/include/asm/page.h3
-rw-r--r--arch/microblaze/include/asm/setup.h2
-rw-r--r--arch/microblaze/include/asm/syscall.h99
-rw-r--r--arch/microblaze/kernel/cpu/cpuinfo.c3
-rw-r--r--arch/microblaze/kernel/entry.S72
-rw-r--r--arch/microblaze/kernel/exceptions.c33
-rw-r--r--arch/microblaze/kernel/head.S14
-rw-r--r--arch/microblaze/kernel/hw_exception_handler.S10
-rw-r--r--arch/microblaze/kernel/process.c1
-rw-r--r--arch/microblaze/kernel/ptrace.c62
-rw-r--r--arch/microblaze/kernel/setup.c12
-rw-r--r--arch/microblaze/kernel/vmlinux.lds.S72
-rw-r--r--arch/microblaze/mm/init.c3
-rw-r--r--arch/mips/lasat/sysctl.c18
-rw-r--r--arch/mn10300/kernel/vmlinux.lds.S40
-rw-r--r--arch/parisc/include/asm/fcntl.h2
-rw-r--r--arch/parisc/kernel/vmlinux.lds.S104
-rw-r--r--arch/powerpc/Kconfig6
-rw-r--r--arch/powerpc/Makefile11
-rw-r--r--arch/powerpc/include/asm/device.h11
-rw-r--r--arch/powerpc/include/asm/dma-mapping.h27
-rw-r--r--arch/powerpc/include/asm/fsldma.h136
-rw-r--r--arch/powerpc/include/asm/iommu.h10
-rw-r--r--arch/powerpc/include/asm/pmc.h2
-rw-r--r--arch/powerpc/include/asm/pte-40x.h1
-rw-r--r--arch/powerpc/include/asm/pte-8xx.h1
-rw-r--r--arch/powerpc/include/asm/pte-common.h5
-rw-r--r--arch/powerpc/kernel/dma-iommu.c16
-rw-r--r--arch/powerpc/kernel/dma.c15
-rw-r--r--arch/powerpc/kernel/exceptions-64e.S1
-rw-r--r--arch/powerpc/kernel/pci-common.c2
-rw-r--r--arch/powerpc/kernel/process.c17
-rw-r--r--arch/powerpc/kernel/prom_init.c3
-rw-r--r--arch/powerpc/kernel/vdso.c14
-rw-r--r--arch/powerpc/kernel/vio.c4
-rw-r--r--arch/powerpc/kernel/vmlinux.lds.S69
-rw-r--r--arch/powerpc/mm/pgtable.c19
-rw-r--r--arch/powerpc/mm/tlb_low_64e.S1
-rw-r--r--arch/powerpc/platforms/cell/beat_iommu.c2
-rw-r--r--arch/powerpc/platforms/cell/iommu.c9
-rw-r--r--arch/powerpc/platforms/iseries/iommu.c2
-rw-r--r--arch/powerpc/platforms/pasemi/iommu.c2
-rw-r--r--arch/powerpc/platforms/pseries/iommu.c8
-rwxr-xr-xarch/powerpc/relocs_check.pl56
-rw-r--r--arch/powerpc/sysdev/dart_iommu.c2
-rw-r--r--arch/powerpc/xmon/xmon.c16
-rw-r--r--arch/s390/appldata/appldata_base.c9
-rw-r--r--arch/s390/kernel/debug.c4
-rw-r--r--arch/s390/mm/cmm.c4
-rw-r--r--arch/sh/drivers/dma/Kconfig12
-rw-r--r--arch/sh/drivers/dma/Makefile3
-rw-r--r--arch/sh/include/asm/dma-sh.h13
-rw-r--r--arch/um/include/asm/common.lds.S29
-rw-r--r--arch/um/kernel/dyn.lds.S9
-rw-r--r--arch/um/kernel/uml.lds.S26
-rw-r--r--arch/x86/include/asm/nmi.h3
-rw-r--r--arch/x86/include/asm/pci.h6
-rw-r--r--arch/x86/kernel/apic/nmi.c4
-rw-r--r--arch/x86/kernel/vsyscall_64.c10
-rw-r--r--arch/x86/mm/fault.c19
-rw-r--r--arch/x86/mm/pageattr.c1
-rw-r--r--arch/x86/pci/common.c2
-rw-r--r--arch/xtensa/kernel/vmlinux.lds.S75
239 files changed, 8359 insertions, 4465 deletions
diff --git a/arch/alpha/include/asm/fcntl.h b/arch/alpha/include/asm/fcntl.h
index 25da0017ec87..e42823e954aa 100644
--- a/arch/alpha/include/asm/fcntl.h
+++ b/arch/alpha/include/asm/fcntl.h
@@ -26,6 +26,8 @@
26#define F_GETOWN 6 /* for sockets. */ 26#define F_GETOWN 6 /* for sockets. */
27#define F_SETSIG 10 /* for sockets. */ 27#define F_SETSIG 10 /* for sockets. */
28#define F_GETSIG 11 /* for sockets. */ 28#define F_GETSIG 11 /* for sockets. */
29#define F_SETOWN_EX 12
30#define F_GETOWN_EX 13
29 31
30/* for posix fcntl() and lockf() */ 32/* for posix fcntl() and lockf() */
31#define F_RDLCK 1 33#define F_RDLCK 1
diff --git a/arch/alpha/kernel/core_marvel.c b/arch/alpha/kernel/core_marvel.c
index e302daecbe56..8e059e58b0ac 100644
--- a/arch/alpha/kernel/core_marvel.c
+++ b/arch/alpha/kernel/core_marvel.c
@@ -1016,7 +1016,7 @@ marvel_agp_bind_memory(alpha_agp_info *agp, off_t pg_start, struct agp_memory *m
1016{ 1016{
1017 struct marvel_agp_aperture *aper = agp->aperture.sysdata; 1017 struct marvel_agp_aperture *aper = agp->aperture.sysdata;
1018 return iommu_bind(aper->arena, aper->pg_start + pg_start, 1018 return iommu_bind(aper->arena, aper->pg_start + pg_start,
1019 mem->page_count, mem->memory); 1019 mem->page_count, mem->pages);
1020} 1020}
1021 1021
1022static int 1022static int
diff --git a/arch/alpha/kernel/core_titan.c b/arch/alpha/kernel/core_titan.c
index 319fcb74611e..76686497b1e2 100644
--- a/arch/alpha/kernel/core_titan.c
+++ b/arch/alpha/kernel/core_titan.c
@@ -680,7 +680,7 @@ titan_agp_bind_memory(alpha_agp_info *agp, off_t pg_start, struct agp_memory *me
680{ 680{
681 struct titan_agp_aperture *aper = agp->aperture.sysdata; 681 struct titan_agp_aperture *aper = agp->aperture.sysdata;
682 return iommu_bind(aper->arena, aper->pg_start + pg_start, 682 return iommu_bind(aper->arena, aper->pg_start + pg_start,
683 mem->page_count, mem->memory); 683 mem->page_count, mem->pages);
684} 684}
685 685
686static int 686static int
diff --git a/arch/alpha/kernel/init_task.c b/arch/alpha/kernel/init_task.c
index 19b86328ffd7..6f80ca4f9766 100644
--- a/arch/alpha/kernel/init_task.c
+++ b/arch/alpha/kernel/init_task.c
@@ -13,6 +13,5 @@ static struct sighand_struct init_sighand = INIT_SIGHAND(init_sighand);
13struct task_struct init_task = INIT_TASK(init_task); 13struct task_struct init_task = INIT_TASK(init_task);
14EXPORT_SYMBOL(init_task); 14EXPORT_SYMBOL(init_task);
15 15
16union thread_union init_thread_union 16union thread_union init_thread_union __init_task_data =
17 __attribute__((section(".data.init_thread"))) 17 { INIT_THREAD_INFO(init_task) };
18 = { INIT_THREAD_INFO(init_task) };
diff --git a/arch/alpha/kernel/pci_impl.h b/arch/alpha/kernel/pci_impl.h
index 00edd04b585e..85457b2d4516 100644
--- a/arch/alpha/kernel/pci_impl.h
+++ b/arch/alpha/kernel/pci_impl.h
@@ -198,7 +198,7 @@ extern unsigned long size_for_memory(unsigned long max);
198 198
199extern int iommu_reserve(struct pci_iommu_arena *, long, long); 199extern int iommu_reserve(struct pci_iommu_arena *, long, long);
200extern int iommu_release(struct pci_iommu_arena *, long, long); 200extern int iommu_release(struct pci_iommu_arena *, long, long);
201extern int iommu_bind(struct pci_iommu_arena *, long, long, unsigned long *); 201extern int iommu_bind(struct pci_iommu_arena *, long, long, struct page **);
202extern int iommu_unbind(struct pci_iommu_arena *, long, long); 202extern int iommu_unbind(struct pci_iommu_arena *, long, long);
203 203
204 204
diff --git a/arch/alpha/kernel/pci_iommu.c b/arch/alpha/kernel/pci_iommu.c
index d15aedfe6066..8449504f5e0b 100644
--- a/arch/alpha/kernel/pci_iommu.c
+++ b/arch/alpha/kernel/pci_iommu.c
@@ -876,7 +876,7 @@ iommu_release(struct pci_iommu_arena *arena, long pg_start, long pg_count)
876 876
877int 877int
878iommu_bind(struct pci_iommu_arena *arena, long pg_start, long pg_count, 878iommu_bind(struct pci_iommu_arena *arena, long pg_start, long pg_count,
879 unsigned long *physaddrs) 879 struct page **pages)
880{ 880{
881 unsigned long flags; 881 unsigned long flags;
882 unsigned long *ptes; 882 unsigned long *ptes;
@@ -896,7 +896,7 @@ iommu_bind(struct pci_iommu_arena *arena, long pg_start, long pg_count,
896 } 896 }
897 897
898 for(i = 0, j = pg_start; i < pg_count; i++, j++) 898 for(i = 0, j = pg_start; i < pg_count; i++, j++)
899 ptes[j] = mk_iommu_pte(physaddrs[i]); 899 ptes[j] = mk_iommu_pte(page_to_phys(pages[i]));
900 900
901 spin_unlock_irqrestore(&arena->lock, flags); 901 spin_unlock_irqrestore(&arena->lock, flags);
902 902
diff --git a/arch/alpha/kernel/vmlinux.lds.S b/arch/alpha/kernel/vmlinux.lds.S
index 6dc03c35caa0..2906665b1c10 100644
--- a/arch/alpha/kernel/vmlinux.lds.S
+++ b/arch/alpha/kernel/vmlinux.lds.S
@@ -1,5 +1,6 @@
1#include <asm-generic/vmlinux.lds.h> 1#include <asm-generic/vmlinux.lds.h>
2#include <asm/page.h> 2#include <asm/page.h>
3#include <asm/thread_info.h>
3 4
4OUTPUT_FORMAT("elf64-alpha") 5OUTPUT_FORMAT("elf64-alpha")
5OUTPUT_ARCH(alpha) 6OUTPUT_ARCH(alpha)
@@ -31,88 +32,21 @@ SECTIONS
31 } :kernel 32 } :kernel
32 33
33 RODATA 34 RODATA
34 35 EXCEPTION_TABLE(16)
35 /* Exception table */
36 . = ALIGN(16);
37 __ex_table : {
38 __start___ex_table = .;
39 *(__ex_table)
40 __stop___ex_table = .;
41 }
42 36
43 /* Will be freed after init */ 37 /* Will be freed after init */
44 . = ALIGN(PAGE_SIZE); 38 __init_begin = ALIGN(PAGE_SIZE);
45 /* Init code and data */ 39 INIT_TEXT_SECTION(PAGE_SIZE)
46 __init_begin = .; 40 INIT_DATA_SECTION(16)
47 .init.text : {
48 _sinittext = .;
49 INIT_TEXT
50 _einittext = .;
51 }
52 .init.data : {
53 INIT_DATA
54 }
55
56 . = ALIGN(16);
57 .init.setup : {
58 __setup_start = .;
59 *(.init.setup)
60 __setup_end = .;
61 }
62
63 . = ALIGN(8);
64 .initcall.init : {
65 __initcall_start = .;
66 INITCALLS
67 __initcall_end = .;
68 }
69
70#ifdef CONFIG_BLK_DEV_INITRD
71 . = ALIGN(PAGE_SIZE);
72 .init.ramfs : {
73 __initramfs_start = .;
74 *(.init.ramfs)
75 __initramfs_end = .;
76 }
77#endif
78
79 . = ALIGN(8);
80 .con_initcall.init : {
81 __con_initcall_start = .;
82 *(.con_initcall.init)
83 __con_initcall_end = .;
84 }
85
86 . = ALIGN(8);
87 SECURITY_INIT
88
89 PERCPU(PAGE_SIZE) 41 PERCPU(PAGE_SIZE)
90 42 /* Align to THREAD_SIZE rather than PAGE_SIZE here so any padding page
91 . = ALIGN(2 * PAGE_SIZE); 43 needed for the THREAD_SIZE aligned init_task gets freed after init */
44 . = ALIGN(THREAD_SIZE);
92 __init_end = .; 45 __init_end = .;
93 /* Freed after init ends here */ 46 /* Freed after init ends here */
94 47
95 /* Note 2 page alignment above. */
96 .data.init_thread : {
97 *(.data.init_thread)
98 }
99
100 . = ALIGN(PAGE_SIZE);
101 .data.page_aligned : {
102 *(.data.page_aligned)
103 }
104
105 . = ALIGN(64);
106 .data.cacheline_aligned : {
107 *(.data.cacheline_aligned)
108 }
109
110 _data = .; 48 _data = .;
111 /* Data */ 49 RW_DATA_SECTION(64, PAGE_SIZE, THREAD_SIZE)
112 .data : {
113 DATA_DATA
114 CONSTRUCTORS
115 }
116 50
117 .got : { 51 .got : {
118 *(.got) 52 *(.got)
@@ -122,16 +56,7 @@ SECTIONS
122 } 56 }
123 _edata = .; /* End of data section */ 57 _edata = .; /* End of data section */
124 58
125 __bss_start = .; 59 BSS_SECTION(0, 0, 0)
126 .sbss : {
127 *(.sbss)
128 *(.scommon)
129 }
130 .bss : {
131 *(.bss)
132 *(COMMON)
133 }
134 __bss_stop = .;
135 _end = .; 60 _end = .;
136 61
137 .mdebug 0 : { 62 .mdebug 0 : {
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index d778a699f577..1c4119c60040 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -46,6 +46,10 @@ config GENERIC_CLOCKEVENTS_BROADCAST
46 depends on GENERIC_CLOCKEVENTS 46 depends on GENERIC_CLOCKEVENTS
47 default y if SMP && !LOCAL_TIMERS 47 default y if SMP && !LOCAL_TIMERS
48 48
49config HAVE_TCM
50 bool
51 select GENERIC_ALLOCATOR
52
49config NO_IOPORT 53config NO_IOPORT
50 bool 54 bool
51 55
@@ -649,6 +653,7 @@ config ARCH_U300
649 bool "ST-Ericsson U300 Series" 653 bool "ST-Ericsson U300 Series"
650 depends on MMU 654 depends on MMU
651 select CPU_ARM926T 655 select CPU_ARM926T
656 select HAVE_TCM
652 select ARM_AMBA 657 select ARM_AMBA
653 select ARM_VIC 658 select ARM_VIC
654 select GENERIC_TIME 659 select GENERIC_TIME
diff --git a/arch/arm/common/locomo.c b/arch/arm/common/locomo.c
index 2293f0ce061e..bd36c778c819 100644
--- a/arch/arm/common/locomo.c
+++ b/arch/arm/common/locomo.c
@@ -865,6 +865,7 @@ void locomo_gpio_set_dir(struct device *dev, unsigned int bits, unsigned int dir
865 865
866 spin_unlock_irqrestore(&lchip->lock, flags); 866 spin_unlock_irqrestore(&lchip->lock, flags);
867} 867}
868EXPORT_SYMBOL(locomo_gpio_set_dir);
868 869
869int locomo_gpio_read_level(struct device *dev, unsigned int bits) 870int locomo_gpio_read_level(struct device *dev, unsigned int bits)
870{ 871{
@@ -882,6 +883,7 @@ int locomo_gpio_read_level(struct device *dev, unsigned int bits)
882 ret &= bits; 883 ret &= bits;
883 return ret; 884 return ret;
884} 885}
886EXPORT_SYMBOL(locomo_gpio_read_level);
885 887
886int locomo_gpio_read_output(struct device *dev, unsigned int bits) 888int locomo_gpio_read_output(struct device *dev, unsigned int bits)
887{ 889{
@@ -899,6 +901,7 @@ int locomo_gpio_read_output(struct device *dev, unsigned int bits)
899 ret &= bits; 901 ret &= bits;
900 return ret; 902 return ret;
901} 903}
904EXPORT_SYMBOL(locomo_gpio_read_output);
902 905
903void locomo_gpio_write(struct device *dev, unsigned int bits, unsigned int set) 906void locomo_gpio_write(struct device *dev, unsigned int bits, unsigned int set)
904{ 907{
@@ -920,6 +923,7 @@ void locomo_gpio_write(struct device *dev, unsigned int bits, unsigned int set)
920 923
921 spin_unlock_irqrestore(&lchip->lock, flags); 924 spin_unlock_irqrestore(&lchip->lock, flags);
922} 925}
926EXPORT_SYMBOL(locomo_gpio_write);
923 927
924static void locomo_m62332_sendbit(void *mapbase, int bit) 928static void locomo_m62332_sendbit(void *mapbase, int bit)
925{ 929{
@@ -1084,13 +1088,12 @@ void locomo_m62332_senddata(struct locomo_dev *ldev, unsigned int dac_data, int
1084 1088
1085 spin_unlock_irqrestore(&lchip->lock, flags); 1089 spin_unlock_irqrestore(&lchip->lock, flags);
1086} 1090}
1091EXPORT_SYMBOL(locomo_m62332_senddata);
1087 1092
1088/* 1093/*
1089 * Frontlight control 1094 * Frontlight control
1090 */ 1095 */
1091 1096
1092static struct locomo *locomo_chip_driver(struct locomo_dev *ldev);
1093
1094void locomo_frontlight_set(struct locomo_dev *dev, int duty, int vr, int bpwf) 1097void locomo_frontlight_set(struct locomo_dev *dev, int duty, int vr, int bpwf)
1095{ 1098{
1096 unsigned long flags; 1099 unsigned long flags;
@@ -1182,11 +1185,13 @@ int locomo_driver_register(struct locomo_driver *driver)
1182 driver->drv.bus = &locomo_bus_type; 1185 driver->drv.bus = &locomo_bus_type;
1183 return driver_register(&driver->drv); 1186 return driver_register(&driver->drv);
1184} 1187}
1188EXPORT_SYMBOL(locomo_driver_register);
1185 1189
1186void locomo_driver_unregister(struct locomo_driver *driver) 1190void locomo_driver_unregister(struct locomo_driver *driver)
1187{ 1191{
1188 driver_unregister(&driver->drv); 1192 driver_unregister(&driver->drv);
1189} 1193}
1194EXPORT_SYMBOL(locomo_driver_unregister);
1190 1195
1191static int __init locomo_init(void) 1196static int __init locomo_init(void)
1192{ 1197{
@@ -1208,11 +1213,3 @@ module_exit(locomo_exit);
1208MODULE_DESCRIPTION("Sharp LoCoMo core driver"); 1213MODULE_DESCRIPTION("Sharp LoCoMo core driver");
1209MODULE_LICENSE("GPL"); 1214MODULE_LICENSE("GPL");
1210MODULE_AUTHOR("John Lenz <lenz@cs.wisc.edu>"); 1215MODULE_AUTHOR("John Lenz <lenz@cs.wisc.edu>");
1211
1212EXPORT_SYMBOL(locomo_driver_register);
1213EXPORT_SYMBOL(locomo_driver_unregister);
1214EXPORT_SYMBOL(locomo_gpio_set_dir);
1215EXPORT_SYMBOL(locomo_gpio_read_level);
1216EXPORT_SYMBOL(locomo_gpio_read_output);
1217EXPORT_SYMBOL(locomo_gpio_write);
1218EXPORT_SYMBOL(locomo_m62332_senddata);
diff --git a/arch/arm/common/vic.c b/arch/arm/common/vic.c
index 920ced0b73c5..f232941de8ab 100644
--- a/arch/arm/common/vic.c
+++ b/arch/arm/common/vic.c
@@ -22,6 +22,7 @@
22#include <linux/list.h> 22#include <linux/list.h>
23#include <linux/io.h> 23#include <linux/io.h>
24#include <linux/sysdev.h> 24#include <linux/sysdev.h>
25#include <linux/device.h>
25#include <linux/amba/bus.h> 26#include <linux/amba/bus.h>
26 27
27#include <asm/mach/irq.h> 28#include <asm/mach/irq.h>
diff --git a/arch/arm/configs/littleton_defconfig b/arch/arm/configs/littleton_defconfig
deleted file mode 100644
index 1db496908052..000000000000
--- a/arch/arm/configs/littleton_defconfig
+++ /dev/null
@@ -1,783 +0,0 @@
1#
2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.24-rc5
4# Fri Dec 21 11:06:19 2007
5#
6CONFIG_ARM=y
7CONFIG_SYS_SUPPORTS_APM_EMULATION=y
8CONFIG_GENERIC_GPIO=y
9CONFIG_GENERIC_TIME=y
10CONFIG_GENERIC_CLOCKEVENTS=y
11CONFIG_MMU=y
12# CONFIG_NO_IOPORT is not set
13CONFIG_GENERIC_HARDIRQS=y
14CONFIG_STACKTRACE_SUPPORT=y
15CONFIG_LOCKDEP_SUPPORT=y
16CONFIG_TRACE_IRQFLAGS_SUPPORT=y
17CONFIG_HARDIRQS_SW_RESEND=y
18CONFIG_GENERIC_IRQ_PROBE=y
19CONFIG_RWSEM_GENERIC_SPINLOCK=y
20# CONFIG_ARCH_HAS_ILOG2_U32 is not set
21# CONFIG_ARCH_HAS_ILOG2_U64 is not set
22CONFIG_GENERIC_HWEIGHT=y
23CONFIG_GENERIC_CALIBRATE_DELAY=y
24CONFIG_ZONE_DMA=y
25CONFIG_ARCH_MTD_XIP=y
26CONFIG_VECTORS_BASE=0xffff0000
27CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
28
29#
30# General setup
31#
32CONFIG_EXPERIMENTAL=y
33CONFIG_BROKEN_ON_SMP=y
34CONFIG_LOCK_KERNEL=y
35CONFIG_INIT_ENV_ARG_LIMIT=32
36CONFIG_LOCALVERSION=""
37CONFIG_LOCALVERSION_AUTO=y
38CONFIG_SWAP=y
39CONFIG_SYSVIPC=y
40CONFIG_SYSVIPC_SYSCTL=y
41# CONFIG_POSIX_MQUEUE is not set
42# CONFIG_BSD_PROCESS_ACCT is not set
43# CONFIG_TASKSTATS is not set
44# CONFIG_USER_NS is not set
45# CONFIG_PID_NS is not set
46# CONFIG_AUDIT is not set
47# CONFIG_IKCONFIG is not set
48CONFIG_LOG_BUF_SHIFT=14
49# CONFIG_CGROUPS is not set
50CONFIG_FAIR_GROUP_SCHED=y
51CONFIG_FAIR_USER_SCHED=y
52# CONFIG_FAIR_CGROUP_SCHED is not set
53CONFIG_SYSFS_DEPRECATED=y
54# CONFIG_RELAY is not set
55CONFIG_BLK_DEV_INITRD=y
56CONFIG_INITRAMFS_SOURCE=""
57CONFIG_CC_OPTIMIZE_FOR_SIZE=y
58CONFIG_SYSCTL=y
59# CONFIG_EMBEDDED is not set
60CONFIG_UID16=y
61CONFIG_SYSCTL_SYSCALL=y
62CONFIG_KALLSYMS=y
63# CONFIG_KALLSYMS_ALL is not set
64# CONFIG_KALLSYMS_EXTRA_PASS is not set
65CONFIG_HOTPLUG=y
66CONFIG_PRINTK=y
67CONFIG_BUG=y
68CONFIG_ELF_CORE=y
69CONFIG_BASE_FULL=y
70CONFIG_FUTEX=y
71CONFIG_ANON_INODES=y
72CONFIG_EPOLL=y
73CONFIG_SIGNALFD=y
74CONFIG_EVENTFD=y
75CONFIG_SHMEM=y
76CONFIG_VM_EVENT_COUNTERS=y
77CONFIG_SLAB=y
78# CONFIG_SLUB is not set
79# CONFIG_SLOB is not set
80CONFIG_RT_MUTEXES=y
81# CONFIG_TINY_SHMEM is not set
82CONFIG_BASE_SMALL=0
83CONFIG_MODULES=y
84CONFIG_MODULE_UNLOAD=y
85CONFIG_MODULE_FORCE_UNLOAD=y
86# CONFIG_MODVERSIONS is not set
87# CONFIG_MODULE_SRCVERSION_ALL is not set
88# CONFIG_KMOD is not set
89CONFIG_BLOCK=y
90# CONFIG_LBD is not set
91# CONFIG_BLK_DEV_IO_TRACE is not set
92# CONFIG_LSF is not set
93# CONFIG_BLK_DEV_BSG is not set
94
95#
96# IO Schedulers
97#
98CONFIG_IOSCHED_NOOP=y
99CONFIG_IOSCHED_AS=y
100CONFIG_IOSCHED_DEADLINE=y
101CONFIG_IOSCHED_CFQ=y
102# CONFIG_DEFAULT_AS is not set
103# CONFIG_DEFAULT_DEADLINE is not set
104CONFIG_DEFAULT_CFQ=y
105# CONFIG_DEFAULT_NOOP is not set
106CONFIG_DEFAULT_IOSCHED="cfq"
107
108#
109# System Type
110#
111# CONFIG_ARCH_AAEC2000 is not set
112# CONFIG_ARCH_INTEGRATOR is not set
113# CONFIG_ARCH_REALVIEW is not set
114# CONFIG_ARCH_VERSATILE is not set
115# CONFIG_ARCH_AT91 is not set
116# CONFIG_ARCH_CLPS7500 is not set
117# CONFIG_ARCH_CLPS711X is not set
118# CONFIG_ARCH_CO285 is not set
119# CONFIG_ARCH_EBSA110 is not set
120# CONFIG_ARCH_EP93XX is not set
121# CONFIG_ARCH_FOOTBRIDGE is not set
122# CONFIG_ARCH_NETX is not set
123# CONFIG_ARCH_H720X is not set
124# CONFIG_ARCH_IMX is not set
125# CONFIG_ARCH_IOP13XX is not set
126# CONFIG_ARCH_IOP32X is not set
127# CONFIG_ARCH_IOP33X is not set
128# CONFIG_ARCH_IXP23XX is not set
129# CONFIG_ARCH_IXP2000 is not set
130# CONFIG_ARCH_IXP4XX is not set
131# CONFIG_ARCH_L7200 is not set
132# CONFIG_ARCH_KS8695 is not set
133# CONFIG_ARCH_NS9XXX is not set
134# CONFIG_ARCH_MXC is not set
135# CONFIG_ARCH_PNX4008 is not set
136CONFIG_ARCH_PXA=y
137# CONFIG_ARCH_RPC is not set
138# CONFIG_ARCH_SA1100 is not set
139# CONFIG_ARCH_S3C2410 is not set
140# CONFIG_ARCH_SHARK is not set
141# CONFIG_ARCH_LH7A40X is not set
142# CONFIG_ARCH_DAVINCI is not set
143# CONFIG_ARCH_OMAP is not set
144
145#
146# Intel PXA2xx/PXA3xx Implementations
147#
148
149#
150# Supported PXA3xx Processor Variants
151#
152CONFIG_CPU_PXA300=y
153CONFIG_CPU_PXA310=y
154# CONFIG_CPU_PXA320 is not set
155# CONFIG_ARCH_LUBBOCK is not set
156# CONFIG_MACH_LOGICPD_PXA270 is not set
157# CONFIG_MACH_MAINSTONE is not set
158# CONFIG_ARCH_PXA_IDP is not set
159# CONFIG_PXA_SHARPSL is not set
160# CONFIG_MACH_TRIZEPS4 is not set
161# CONFIG_MACH_EM_X270 is not set
162# CONFIG_MACH_ZYLONITE is not set
163CONFIG_MACH_LITTLETON=y
164# CONFIG_MACH_ARMCORE is not set
165CONFIG_PXA3xx=y
166CONFIG_PXA_SSP=y
167
168#
169# Boot options
170#
171
172#
173# Power management
174#
175
176#
177# Processor Type
178#
179CONFIG_CPU_32=y
180CONFIG_CPU_XSC3=y
181CONFIG_CPU_32v5=y
182CONFIG_CPU_ABRT_EV5T=y
183CONFIG_CPU_CACHE_VIVT=y
184CONFIG_CPU_TLB_V4WBI=y
185CONFIG_CPU_CP15=y
186CONFIG_CPU_CP15_MMU=y
187CONFIG_IO_36=y
188
189#
190# Processor Features
191#
192# CONFIG_ARM_THUMB is not set
193# CONFIG_CPU_DCACHE_DISABLE is not set
194# CONFIG_CPU_BPREDICT_DISABLE is not set
195# CONFIG_OUTER_CACHE is not set
196CONFIG_IWMMXT=y
197
198#
199# Bus support
200#
201# CONFIG_PCI_SYSCALL is not set
202# CONFIG_ARCH_SUPPORTS_MSI is not set
203# CONFIG_PCCARD is not set
204
205#
206# Kernel Features
207#
208CONFIG_TICK_ONESHOT=y
209# CONFIG_NO_HZ is not set
210# CONFIG_HIGH_RES_TIMERS is not set
211CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
212CONFIG_PREEMPT=y
213CONFIG_HZ=100
214CONFIG_AEABI=y
215CONFIG_OABI_COMPAT=y
216# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
217CONFIG_SELECT_MEMORY_MODEL=y
218CONFIG_FLATMEM_MANUAL=y
219# CONFIG_DISCONTIGMEM_MANUAL is not set
220# CONFIG_SPARSEMEM_MANUAL is not set
221CONFIG_FLATMEM=y
222CONFIG_FLAT_NODE_MEM_MAP=y
223# CONFIG_SPARSEMEM_STATIC is not set
224# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
225CONFIG_SPLIT_PTLOCK_CPUS=4096
226# CONFIG_RESOURCES_64BIT is not set
227CONFIG_ZONE_DMA_FLAG=1
228CONFIG_BOUNCE=y
229CONFIG_VIRT_TO_BUS=y
230CONFIG_ALIGNMENT_TRAP=y
231
232#
233# Boot options
234#
235CONFIG_ZBOOT_ROM_TEXT=0x0
236CONFIG_ZBOOT_ROM_BSS=0x0
237CONFIG_CMDLINE="root=/dev/nfs rootfstype=nfs nfsroot=192.168.1.100:/nfsroot/ ip=192.168.1.101:192.168.1.100::255.255.255.0::eth0:on console=ttyS2,38400 mem=64M"
238# CONFIG_XIP_KERNEL is not set
239# CONFIG_KEXEC is not set
240
241#
242# CPU Frequency scaling
243#
244# CONFIG_CPU_FREQ is not set
245
246#
247# Floating point emulation
248#
249
250#
251# At least one emulation must be selected
252#
253CONFIG_FPE_NWFPE=y
254# CONFIG_FPE_NWFPE_XP is not set
255# CONFIG_FPE_FASTFPE is not set
256
257#
258# Userspace binary formats
259#
260CONFIG_BINFMT_ELF=y
261# CONFIG_BINFMT_AOUT is not set
262# CONFIG_BINFMT_MISC is not set
263
264#
265# Power management options
266#
267# CONFIG_PM is not set
268CONFIG_SUSPEND_UP_POSSIBLE=y
269
270#
271# Networking
272#
273CONFIG_NET=y
274
275#
276# Networking options
277#
278CONFIG_PACKET=y
279# CONFIG_PACKET_MMAP is not set
280CONFIG_UNIX=y
281CONFIG_XFRM=y
282# CONFIG_XFRM_USER is not set
283# CONFIG_XFRM_SUB_POLICY is not set
284# CONFIG_XFRM_MIGRATE is not set
285# CONFIG_NET_KEY is not set
286CONFIG_INET=y
287# CONFIG_IP_MULTICAST is not set
288# CONFIG_IP_ADVANCED_ROUTER is not set
289CONFIG_IP_FIB_HASH=y
290CONFIG_IP_PNP=y
291# CONFIG_IP_PNP_DHCP is not set
292# CONFIG_IP_PNP_BOOTP is not set
293# CONFIG_IP_PNP_RARP is not set
294# CONFIG_NET_IPIP is not set
295# CONFIG_NET_IPGRE is not set
296# CONFIG_ARPD is not set
297# CONFIG_SYN_COOKIES is not set
298# CONFIG_INET_AH is not set
299# CONFIG_INET_ESP is not set
300# CONFIG_INET_IPCOMP is not set
301# CONFIG_INET_XFRM_TUNNEL is not set
302# CONFIG_INET_TUNNEL is not set
303CONFIG_INET_XFRM_MODE_TRANSPORT=y
304CONFIG_INET_XFRM_MODE_TUNNEL=y
305CONFIG_INET_XFRM_MODE_BEET=y
306# CONFIG_INET_LRO is not set
307CONFIG_INET_DIAG=y
308CONFIG_INET_TCP_DIAG=y
309# CONFIG_TCP_CONG_ADVANCED is not set
310CONFIG_TCP_CONG_CUBIC=y
311CONFIG_DEFAULT_TCP_CONG="cubic"
312# CONFIG_TCP_MD5SIG is not set
313# CONFIG_IPV6 is not set
314# CONFIG_INET6_XFRM_TUNNEL is not set
315# CONFIG_INET6_TUNNEL is not set
316# CONFIG_NETWORK_SECMARK is not set
317# CONFIG_NETFILTER is not set
318# CONFIG_IP_DCCP is not set
319# CONFIG_IP_SCTP is not set
320# CONFIG_TIPC is not set
321# CONFIG_ATM is not set
322# CONFIG_BRIDGE is not set
323# CONFIG_VLAN_8021Q is not set
324# CONFIG_DECNET is not set
325# CONFIG_LLC2 is not set
326# CONFIG_IPX is not set
327# CONFIG_ATALK is not set
328# CONFIG_X25 is not set
329# CONFIG_LAPB is not set
330# CONFIG_ECONET is not set
331# CONFIG_WAN_ROUTER is not set
332# CONFIG_NET_SCHED is not set
333
334#
335# Network testing
336#
337# CONFIG_NET_PKTGEN is not set
338# CONFIG_HAMRADIO is not set
339# CONFIG_IRDA is not set
340# CONFIG_BT is not set
341# CONFIG_AF_RXRPC is not set
342
343#
344# Wireless
345#
346# CONFIG_CFG80211 is not set
347# CONFIG_WIRELESS_EXT is not set
348# CONFIG_MAC80211 is not set
349# CONFIG_IEEE80211 is not set
350# CONFIG_RFKILL is not set
351# CONFIG_NET_9P is not set
352
353#
354# Device Drivers
355#
356
357#
358# Generic Driver Options
359#
360CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
361# CONFIG_STANDALONE is not set
362# CONFIG_PREVENT_FIRMWARE_BUILD is not set
363CONFIG_FW_LOADER=y
364# CONFIG_DEBUG_DRIVER is not set
365# CONFIG_DEBUG_DEVRES is not set
366# CONFIG_SYS_HYPERVISOR is not set
367# CONFIG_CONNECTOR is not set
368# CONFIG_MTD is not set
369# CONFIG_PARPORT is not set
370# CONFIG_BLK_DEV is not set
371# CONFIG_MISC_DEVICES is not set
372# CONFIG_IDE is not set
373
374#
375# SCSI device support
376#
377# CONFIG_RAID_ATTRS is not set
378# CONFIG_SCSI is not set
379# CONFIG_SCSI_DMA is not set
380# CONFIG_SCSI_NETLINK is not set
381# CONFIG_ATA is not set
382# CONFIG_MD is not set
383CONFIG_NETDEVICES=y
384# CONFIG_NETDEVICES_MULTIQUEUE is not set
385# CONFIG_DUMMY is not set
386# CONFIG_BONDING is not set
387# CONFIG_MACVLAN is not set
388# CONFIG_EQUALIZER is not set
389# CONFIG_TUN is not set
390# CONFIG_VETH is not set
391# CONFIG_PHYLIB is not set
392CONFIG_NET_ETHERNET=y
393CONFIG_MII=y
394# CONFIG_AX88796 is not set
395CONFIG_SMC91X=y
396# CONFIG_DM9000 is not set
397# CONFIG_SMC911X is not set
398# CONFIG_IBM_NEW_EMAC_ZMII is not set
399# CONFIG_IBM_NEW_EMAC_RGMII is not set
400# CONFIG_IBM_NEW_EMAC_TAH is not set
401# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
402# CONFIG_B44 is not set
403# CONFIG_NETDEV_1000 is not set
404# CONFIG_NETDEV_10000 is not set
405
406#
407# Wireless LAN
408#
409# CONFIG_WLAN_PRE80211 is not set
410# CONFIG_WLAN_80211 is not set
411# CONFIG_WAN is not set
412# CONFIG_PPP is not set
413# CONFIG_SLIP is not set
414# CONFIG_SHAPER is not set
415# CONFIG_NETCONSOLE is not set
416# CONFIG_NETPOLL is not set
417# CONFIG_NET_POLL_CONTROLLER is not set
418# CONFIG_ISDN is not set
419
420#
421# Input device support
422#
423CONFIG_INPUT=y
424# CONFIG_INPUT_FF_MEMLESS is not set
425# CONFIG_INPUT_POLLDEV is not set
426
427#
428# Userland interfaces
429#
430CONFIG_INPUT_MOUSEDEV=y
431# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
432CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
433CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
434# CONFIG_INPUT_JOYDEV is not set
435# CONFIG_INPUT_EVDEV is not set
436# CONFIG_INPUT_EVBUG is not set
437
438#
439# Input Device Drivers
440#
441# CONFIG_INPUT_KEYBOARD is not set
442# CONFIG_INPUT_MOUSE is not set
443# CONFIG_INPUT_JOYSTICK is not set
444# CONFIG_INPUT_TABLET is not set
445# CONFIG_INPUT_TOUCHSCREEN is not set
446# CONFIG_INPUT_MISC is not set
447
448#
449# Hardware I/O ports
450#
451# CONFIG_SERIO is not set
452# CONFIG_GAMEPORT is not set
453
454#
455# Character devices
456#
457CONFIG_VT=y
458CONFIG_VT_CONSOLE=y
459CONFIG_HW_CONSOLE=y
460# CONFIG_VT_HW_CONSOLE_BINDING is not set
461# CONFIG_SERIAL_NONSTANDARD is not set
462
463#
464# Serial drivers
465#
466# CONFIG_SERIAL_8250 is not set
467
468#
469# Non-8250 serial port support
470#
471CONFIG_SERIAL_PXA=y
472CONFIG_SERIAL_PXA_CONSOLE=y
473CONFIG_SERIAL_CORE=y
474CONFIG_SERIAL_CORE_CONSOLE=y
475CONFIG_UNIX98_PTYS=y
476# CONFIG_LEGACY_PTYS is not set
477# CONFIG_IPMI_HANDLER is not set
478# CONFIG_HW_RANDOM is not set
479# CONFIG_NVRAM is not set
480# CONFIG_R3964 is not set
481# CONFIG_RAW_DRIVER is not set
482# CONFIG_TCG_TPM is not set
483# CONFIG_I2C is not set
484
485#
486# SPI support
487#
488# CONFIG_SPI is not set
489# CONFIG_SPI_MASTER is not set
490# CONFIG_W1 is not set
491# CONFIG_POWER_SUPPLY is not set
492# CONFIG_HWMON is not set
493# CONFIG_WATCHDOG is not set
494
495#
496# Sonics Silicon Backplane
497#
498CONFIG_SSB_POSSIBLE=y
499# CONFIG_SSB is not set
500
501#
502# Multifunction device drivers
503#
504# CONFIG_MFD_SM501 is not set
505
506#
507# Multimedia devices
508#
509# CONFIG_VIDEO_DEV is not set
510# CONFIG_DVB_CORE is not set
511# CONFIG_DAB is not set
512
513#
514# Graphics support
515#
516# CONFIG_VGASTATE is not set
517# CONFIG_VIDEO_OUTPUT_CONTROL is not set
518CONFIG_FB=y
519# CONFIG_FIRMWARE_EDID is not set
520# CONFIG_FB_DDC is not set
521CONFIG_FB_CFB_FILLRECT=y
522CONFIG_FB_CFB_COPYAREA=y
523CONFIG_FB_CFB_IMAGEBLIT=y
524# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
525# CONFIG_FB_SYS_FILLRECT is not set
526# CONFIG_FB_SYS_COPYAREA is not set
527# CONFIG_FB_SYS_IMAGEBLIT is not set
528# CONFIG_FB_SYS_FOPS is not set
529CONFIG_FB_DEFERRED_IO=y
530# CONFIG_FB_SVGALIB is not set
531# CONFIG_FB_MACMODES is not set
532# CONFIG_FB_BACKLIGHT is not set
533# CONFIG_FB_MODE_HELPERS is not set
534# CONFIG_FB_TILEBLITTING is not set
535
536#
537# Frame buffer hardware drivers
538#
539# CONFIG_FB_S1D13XXX is not set
540CONFIG_FB_PXA=y
541# CONFIG_FB_PXA_PARAMETERS is not set
542# CONFIG_FB_MBX is not set
543# CONFIG_FB_VIRTUAL is not set
544# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
545
546#
547# Display device support
548#
549# CONFIG_DISPLAY_SUPPORT is not set
550
551#
552# Console display driver support
553#
554# CONFIG_VGA_CONSOLE is not set
555CONFIG_DUMMY_CONSOLE=y
556CONFIG_FRAMEBUFFER_CONSOLE=y
557# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
558# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
559CONFIG_FONTS=y
560# CONFIG_FONT_8x8 is not set
561CONFIG_FONT_8x16=y
562# CONFIG_FONT_6x11 is not set
563# CONFIG_FONT_7x14 is not set
564# CONFIG_FONT_PEARL_8x8 is not set
565# CONFIG_FONT_ACORN_8x8 is not set
566# CONFIG_FONT_MINI_4x6 is not set
567# CONFIG_FONT_SUN8x16 is not set
568# CONFIG_FONT_SUN12x22 is not set
569# CONFIG_FONT_10x18 is not set
570CONFIG_LOGO=y
571CONFIG_LOGO_LINUX_MONO=y
572CONFIG_LOGO_LINUX_VGA16=y
573CONFIG_LOGO_LINUX_CLUT224=y
574
575#
576# Sound
577#
578# CONFIG_SOUND is not set
579# CONFIG_HID_SUPPORT is not set
580# CONFIG_USB_SUPPORT is not set
581# CONFIG_MMC is not set
582# CONFIG_NEW_LEDS is not set
583CONFIG_RTC_LIB=y
584# CONFIG_RTC_CLASS is not set
585
586#
587# File systems
588#
589# CONFIG_EXT2_FS is not set
590# CONFIG_EXT3_FS is not set
591# CONFIG_EXT4DEV_FS is not set
592# CONFIG_REISERFS_FS is not set
593# CONFIG_JFS_FS is not set
594CONFIG_FS_POSIX_ACL=y
595# CONFIG_XFS_FS is not set
596# CONFIG_GFS2_FS is not set
597# CONFIG_OCFS2_FS is not set
598# CONFIG_MINIX_FS is not set
599# CONFIG_ROMFS_FS is not set
600# CONFIG_INOTIFY is not set
601# CONFIG_QUOTA is not set
602# CONFIG_DNOTIFY is not set
603# CONFIG_AUTOFS_FS is not set
604# CONFIG_AUTOFS4_FS is not set
605# CONFIG_FUSE_FS is not set
606
607#
608# CD-ROM/DVD Filesystems
609#
610# CONFIG_ISO9660_FS is not set
611# CONFIG_UDF_FS is not set
612
613#
614# DOS/FAT/NT Filesystems
615#
616# CONFIG_MSDOS_FS is not set
617# CONFIG_VFAT_FS is not set
618# CONFIG_NTFS_FS is not set
619
620#
621# Pseudo filesystems
622#
623CONFIG_PROC_FS=y
624CONFIG_PROC_SYSCTL=y
625CONFIG_SYSFS=y
626# CONFIG_TMPFS is not set
627# CONFIG_HUGETLB_PAGE is not set
628# CONFIG_CONFIGFS_FS is not set
629
630#
631# Miscellaneous filesystems
632#
633# CONFIG_ADFS_FS is not set
634# CONFIG_AFFS_FS is not set
635# CONFIG_HFS_FS is not set
636# CONFIG_HFSPLUS_FS is not set
637# CONFIG_BEFS_FS is not set
638# CONFIG_BFS_FS is not set
639# CONFIG_EFS_FS is not set
640# CONFIG_CRAMFS is not set
641# CONFIG_VXFS_FS is not set
642# CONFIG_HPFS_FS is not set
643# CONFIG_QNX4FS_FS is not set
644# CONFIG_SYSV_FS is not set
645# CONFIG_UFS_FS is not set
646CONFIG_NETWORK_FILESYSTEMS=y
647CONFIG_NFS_FS=y
648CONFIG_NFS_V3=y
649CONFIG_NFS_V3_ACL=y
650CONFIG_NFS_V4=y
651CONFIG_NFS_DIRECTIO=y
652# CONFIG_NFSD is not set
653CONFIG_ROOT_NFS=y
654CONFIG_LOCKD=y
655CONFIG_LOCKD_V4=y
656CONFIG_NFS_ACL_SUPPORT=y
657CONFIG_NFS_COMMON=y
658CONFIG_SUNRPC=y
659CONFIG_SUNRPC_GSS=y
660# CONFIG_SUNRPC_BIND34 is not set
661CONFIG_RPCSEC_GSS_KRB5=y
662# CONFIG_RPCSEC_GSS_SPKM3 is not set
663# CONFIG_SMB_FS is not set
664# CONFIG_CIFS is not set
665# CONFIG_NCP_FS is not set
666# CONFIG_CODA_FS is not set
667# CONFIG_AFS_FS is not set
668
669#
670# Partition Types
671#
672# CONFIG_PARTITION_ADVANCED is not set
673CONFIG_MSDOS_PARTITION=y
674# CONFIG_NLS is not set
675# CONFIG_DLM is not set
676# CONFIG_INSTRUMENTATION is not set
677
678#
679# Kernel hacking
680#
681CONFIG_PRINTK_TIME=y
682CONFIG_ENABLE_WARN_DEPRECATED=y
683CONFIG_ENABLE_MUST_CHECK=y
684CONFIG_MAGIC_SYSRQ=y
685# CONFIG_UNUSED_SYMBOLS is not set
686# CONFIG_DEBUG_FS is not set
687# CONFIG_HEADERS_CHECK is not set
688CONFIG_DEBUG_KERNEL=y
689# CONFIG_DEBUG_SHIRQ is not set
690CONFIG_DETECT_SOFTLOCKUP=y
691CONFIG_SCHED_DEBUG=y
692# CONFIG_SCHEDSTATS is not set
693# CONFIG_TIMER_STATS is not set
694# CONFIG_DEBUG_SLAB is not set
695# CONFIG_DEBUG_PREEMPT is not set
696# CONFIG_DEBUG_RT_MUTEXES is not set
697# CONFIG_RT_MUTEX_TESTER is not set
698# CONFIG_DEBUG_SPINLOCK is not set
699# CONFIG_DEBUG_MUTEXES is not set
700# CONFIG_DEBUG_LOCK_ALLOC is not set
701# CONFIG_PROVE_LOCKING is not set
702# CONFIG_LOCK_STAT is not set
703# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
704# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
705# CONFIG_DEBUG_KOBJECT is not set
706CONFIG_DEBUG_BUGVERBOSE=y
707CONFIG_DEBUG_INFO=y
708# CONFIG_DEBUG_VM is not set
709# CONFIG_DEBUG_LIST is not set
710# CONFIG_DEBUG_SG is not set
711CONFIG_FRAME_POINTER=y
712CONFIG_FORCED_INLINING=y
713# CONFIG_BOOT_PRINTK_DELAY is not set
714# CONFIG_RCU_TORTURE_TEST is not set
715# CONFIG_FAULT_INJECTION is not set
716# CONFIG_SAMPLES is not set
717CONFIG_DEBUG_USER=y
718CONFIG_DEBUG_ERRORS=y
719CONFIG_DEBUG_LL=y
720# CONFIG_DEBUG_ICEDCC is not set
721
722#
723# Security options
724#
725# CONFIG_KEYS is not set
726# CONFIG_SECURITY is not set
727# CONFIG_SECURITY_FILE_CAPABILITIES is not set
728CONFIG_CRYPTO=y
729CONFIG_CRYPTO_ALGAPI=y
730CONFIG_CRYPTO_BLKCIPHER=y
731CONFIG_CRYPTO_MANAGER=y
732# CONFIG_CRYPTO_HMAC is not set
733# CONFIG_CRYPTO_XCBC is not set
734# CONFIG_CRYPTO_NULL is not set
735# CONFIG_CRYPTO_MD4 is not set
736CONFIG_CRYPTO_MD5=y
737# CONFIG_CRYPTO_SHA1 is not set
738# CONFIG_CRYPTO_SHA256 is not set
739# CONFIG_CRYPTO_SHA512 is not set
740# CONFIG_CRYPTO_WP512 is not set
741# CONFIG_CRYPTO_TGR192 is not set
742# CONFIG_CRYPTO_GF128MUL is not set
743# CONFIG_CRYPTO_ECB is not set
744CONFIG_CRYPTO_CBC=y
745# CONFIG_CRYPTO_PCBC is not set
746# CONFIG_CRYPTO_LRW is not set
747# CONFIG_CRYPTO_XTS is not set
748# CONFIG_CRYPTO_CRYPTD is not set
749CONFIG_CRYPTO_DES=y
750# CONFIG_CRYPTO_FCRYPT is not set
751# CONFIG_CRYPTO_BLOWFISH is not set
752# CONFIG_CRYPTO_TWOFISH is not set
753# CONFIG_CRYPTO_SERPENT is not set
754# CONFIG_CRYPTO_AES is not set
755# CONFIG_CRYPTO_CAST5 is not set
756# CONFIG_CRYPTO_CAST6 is not set
757# CONFIG_CRYPTO_TEA is not set
758# CONFIG_CRYPTO_ARC4 is not set
759# CONFIG_CRYPTO_KHAZAD is not set
760# CONFIG_CRYPTO_ANUBIS is not set
761# CONFIG_CRYPTO_SEED is not set
762# CONFIG_CRYPTO_DEFLATE is not set
763# CONFIG_CRYPTO_MICHAEL_MIC is not set
764# CONFIG_CRYPTO_CRC32C is not set
765# CONFIG_CRYPTO_CAMELLIA is not set
766# CONFIG_CRYPTO_TEST is not set
767# CONFIG_CRYPTO_AUTHENC is not set
768CONFIG_CRYPTO_HW=y
769
770#
771# Library routines
772#
773CONFIG_BITREVERSE=y
774CONFIG_CRC_CCITT=y
775# CONFIG_CRC16 is not set
776# CONFIG_CRC_ITU_T is not set
777CONFIG_CRC32=y
778# CONFIG_CRC7 is not set
779# CONFIG_LIBCRC32C is not set
780CONFIG_PLIST=y
781CONFIG_HAS_IOMEM=y
782CONFIG_HAS_IOPORT=y
783CONFIG_HAS_DMA=y
diff --git a/arch/arm/configs/pxa3xx_defconfig b/arch/arm/configs/pxa3xx_defconfig
new file mode 100644
index 000000000000..733b851e5b7e
--- /dev/null
+++ b/arch/arm/configs/pxa3xx_defconfig
@@ -0,0 +1,1332 @@
1#
2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.31-rc1
4# Mon Jul 13 22:48:49 2009
5#
6CONFIG_ARM=y
7CONFIG_HAVE_PWM=y
8CONFIG_SYS_SUPPORTS_APM_EMULATION=y
9CONFIG_GENERIC_GPIO=y
10CONFIG_GENERIC_TIME=y
11CONFIG_GENERIC_CLOCKEVENTS=y
12CONFIG_MMU=y
13CONFIG_GENERIC_HARDIRQS=y
14CONFIG_STACKTRACE_SUPPORT=y
15CONFIG_HAVE_LATENCYTOP_SUPPORT=y
16CONFIG_LOCKDEP_SUPPORT=y
17CONFIG_TRACE_IRQFLAGS_SUPPORT=y
18CONFIG_HARDIRQS_SW_RESEND=y
19CONFIG_GENERIC_IRQ_PROBE=y
20CONFIG_RWSEM_GENERIC_SPINLOCK=y
21CONFIG_GENERIC_HWEIGHT=y
22CONFIG_GENERIC_CALIBRATE_DELAY=y
23CONFIG_ARCH_MTD_XIP=y
24CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
25CONFIG_VECTORS_BASE=0xffff0000
26CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
27CONFIG_CONSTRUCTORS=y
28
29#
30# General setup
31#
32CONFIG_EXPERIMENTAL=y
33CONFIG_BROKEN_ON_SMP=y
34CONFIG_LOCK_KERNEL=y
35CONFIG_INIT_ENV_ARG_LIMIT=32
36CONFIG_LOCALVERSION=""
37CONFIG_LOCALVERSION_AUTO=y
38CONFIG_SWAP=y
39CONFIG_SYSVIPC=y
40CONFIG_SYSVIPC_SYSCTL=y
41# CONFIG_POSIX_MQUEUE is not set
42# CONFIG_BSD_PROCESS_ACCT is not set
43# CONFIG_TASKSTATS is not set
44# CONFIG_AUDIT is not set
45
46#
47# RCU Subsystem
48#
49# CONFIG_CLASSIC_RCU is not set
50CONFIG_TREE_RCU=y
51# CONFIG_PREEMPT_RCU is not set
52# CONFIG_RCU_TRACE is not set
53CONFIG_RCU_FANOUT=32
54# CONFIG_RCU_FANOUT_EXACT is not set
55# CONFIG_TREE_RCU_TRACE is not set
56# CONFIG_PREEMPT_RCU_TRACE is not set
57# CONFIG_IKCONFIG is not set
58CONFIG_LOG_BUF_SHIFT=18
59CONFIG_GROUP_SCHED=y
60CONFIG_FAIR_GROUP_SCHED=y
61# CONFIG_RT_GROUP_SCHED is not set
62CONFIG_USER_SCHED=y
63# CONFIG_CGROUP_SCHED is not set
64# CONFIG_CGROUPS is not set
65CONFIG_SYSFS_DEPRECATED=y
66CONFIG_SYSFS_DEPRECATED_V2=y
67# CONFIG_RELAY is not set
68CONFIG_NAMESPACES=y
69# CONFIG_UTS_NS is not set
70# CONFIG_IPC_NS is not set
71# CONFIG_USER_NS is not set
72# CONFIG_PID_NS is not set
73# CONFIG_NET_NS is not set
74# CONFIG_BLK_DEV_INITRD is not set
75# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
76CONFIG_SYSCTL=y
77CONFIG_ANON_INODES=y
78# CONFIG_EMBEDDED is not set
79CONFIG_UID16=y
80CONFIG_SYSCTL_SYSCALL=y
81CONFIG_KALLSYMS=y
82CONFIG_KALLSYMS_ALL=y
83# CONFIG_KALLSYMS_EXTRA_PASS is not set
84CONFIG_HOTPLUG=y
85CONFIG_PRINTK=y
86CONFIG_BUG=y
87CONFIG_ELF_CORE=y
88CONFIG_BASE_FULL=y
89CONFIG_FUTEX=y
90CONFIG_EPOLL=y
91CONFIG_SIGNALFD=y
92CONFIG_TIMERFD=y
93CONFIG_EVENTFD=y
94CONFIG_SHMEM=y
95CONFIG_AIO=y
96
97#
98# Performance Counters
99#
100CONFIG_VM_EVENT_COUNTERS=y
101# CONFIG_STRIP_ASM_SYMS is not set
102CONFIG_COMPAT_BRK=y
103CONFIG_SLAB=y
104# CONFIG_SLUB is not set
105# CONFIG_SLOB is not set
106# CONFIG_PROFILING is not set
107# CONFIG_MARKERS is not set
108CONFIG_HAVE_OPROFILE=y
109# CONFIG_KPROBES is not set
110CONFIG_HAVE_KPROBES=y
111CONFIG_HAVE_KRETPROBES=y
112CONFIG_HAVE_CLK=y
113
114#
115# GCOV-based kernel profiling
116#
117# CONFIG_SLOW_WORK is not set
118CONFIG_HAVE_GENERIC_DMA_COHERENT=y
119CONFIG_SLABINFO=y
120CONFIG_RT_MUTEXES=y
121CONFIG_BASE_SMALL=0
122CONFIG_MODULES=y
123# CONFIG_MODULE_FORCE_LOAD is not set
124# CONFIG_MODULE_UNLOAD is not set
125# CONFIG_MODVERSIONS is not set
126# CONFIG_MODULE_SRCVERSION_ALL is not set
127CONFIG_BLOCK=y
128CONFIG_LBDAF=y
129# CONFIG_BLK_DEV_BSG is not set
130# CONFIG_BLK_DEV_INTEGRITY is not set
131
132#
133# IO Schedulers
134#
135CONFIG_IOSCHED_NOOP=y
136CONFIG_IOSCHED_AS=y
137CONFIG_IOSCHED_DEADLINE=y
138CONFIG_IOSCHED_CFQ=y
139# CONFIG_DEFAULT_AS is not set
140# CONFIG_DEFAULT_DEADLINE is not set
141CONFIG_DEFAULT_CFQ=y
142# CONFIG_DEFAULT_NOOP is not set
143CONFIG_DEFAULT_IOSCHED="cfq"
144# CONFIG_FREEZER is not set
145
146#
147# System Type
148#
149# CONFIG_ARCH_AAEC2000 is not set
150# CONFIG_ARCH_INTEGRATOR is not set
151# CONFIG_ARCH_REALVIEW is not set
152# CONFIG_ARCH_VERSATILE is not set
153# CONFIG_ARCH_AT91 is not set
154# CONFIG_ARCH_CLPS711X is not set
155# CONFIG_ARCH_GEMINI is not set
156# CONFIG_ARCH_EBSA110 is not set
157# CONFIG_ARCH_EP93XX is not set
158# CONFIG_ARCH_FOOTBRIDGE is not set
159# CONFIG_ARCH_MXC is not set
160# CONFIG_ARCH_STMP3XXX is not set
161# CONFIG_ARCH_NETX is not set
162# CONFIG_ARCH_H720X is not set
163# CONFIG_ARCH_IOP13XX is not set
164# CONFIG_ARCH_IOP32X is not set
165# CONFIG_ARCH_IOP33X is not set
166# CONFIG_ARCH_IXP23XX is not set
167# CONFIG_ARCH_IXP2000 is not set
168# CONFIG_ARCH_IXP4XX is not set
169# CONFIG_ARCH_L7200 is not set
170# CONFIG_ARCH_KIRKWOOD is not set
171# CONFIG_ARCH_LOKI is not set
172# CONFIG_ARCH_MV78XX0 is not set
173# CONFIG_ARCH_ORION5X is not set
174# CONFIG_ARCH_MMP is not set
175# CONFIG_ARCH_KS8695 is not set
176# CONFIG_ARCH_NS9XXX is not set
177# CONFIG_ARCH_W90X900 is not set
178# CONFIG_ARCH_PNX4008 is not set
179CONFIG_ARCH_PXA=y
180# CONFIG_ARCH_MSM is not set
181# CONFIG_ARCH_RPC is not set
182# CONFIG_ARCH_SA1100 is not set
183# CONFIG_ARCH_S3C2410 is not set
184# CONFIG_ARCH_S3C64XX is not set
185# CONFIG_ARCH_SHARK is not set
186# CONFIG_ARCH_LH7A40X is not set
187# CONFIG_ARCH_U300 is not set
188# CONFIG_ARCH_DAVINCI is not set
189# CONFIG_ARCH_OMAP is not set
190
191#
192# Intel PXA2xx/PXA3xx Implementations
193#
194
195#
196# Supported PXA3xx Processor Variants
197#
198CONFIG_CPU_PXA300=y
199CONFIG_CPU_PXA310=y
200CONFIG_CPU_PXA320=y
201CONFIG_CPU_PXA930=y
202CONFIG_CPU_PXA935=y
203# CONFIG_ARCH_GUMSTIX is not set
204# CONFIG_MACH_INTELMOTE2 is not set
205# CONFIG_MACH_STARGATE2 is not set
206# CONFIG_ARCH_LUBBOCK is not set
207# CONFIG_MACH_LOGICPD_PXA270 is not set
208# CONFIG_MACH_MAINSTONE is not set
209# CONFIG_MACH_MP900C is not set
210# CONFIG_ARCH_PXA_IDP is not set
211# CONFIG_PXA_SHARPSL is not set
212# CONFIG_ARCH_VIPER is not set
213# CONFIG_ARCH_PXA_ESERIES is not set
214# CONFIG_TRIZEPS_PXA is not set
215# CONFIG_MACH_H5000 is not set
216# CONFIG_MACH_EM_X270 is not set
217# CONFIG_MACH_EXEDA is not set
218# CONFIG_MACH_COLIBRI is not set
219# CONFIG_MACH_COLIBRI300 is not set
220# CONFIG_MACH_COLIBRI320 is not set
221CONFIG_MACH_ZYLONITE=y
222CONFIG_MACH_LITTLETON=y
223CONFIG_MACH_TAVOREVB=y
224CONFIG_MACH_SAAR=y
225# CONFIG_MACH_ARMCORE is not set
226# CONFIG_MACH_CM_X300 is not set
227# CONFIG_MACH_H4700 is not set
228# CONFIG_MACH_MAGICIAN is not set
229# CONFIG_MACH_HIMALAYA is not set
230# CONFIG_MACH_MIOA701 is not set
231# CONFIG_MACH_PCM027 is not set
232# CONFIG_ARCH_PXA_PALM is not set
233# CONFIG_MACH_CSB726 is not set
234# CONFIG_PXA_EZX is not set
235CONFIG_PXA3xx=y
236CONFIG_PXA_SSP=y
237CONFIG_PXA_HAVE_BOARD_IRQS=y
238CONFIG_PLAT_PXA=y
239
240#
241# Processor Type
242#
243CONFIG_CPU_32=y
244CONFIG_CPU_XSC3=y
245CONFIG_CPU_32v5=y
246CONFIG_CPU_ABRT_EV5T=y
247CONFIG_CPU_PABRT_NOIFAR=y
248CONFIG_CPU_CACHE_VIVT=y
249CONFIG_CPU_TLB_V4WBI=y
250CONFIG_CPU_CP15=y
251CONFIG_CPU_CP15_MMU=y
252CONFIG_IO_36=y
253
254#
255# Processor Features
256#
257CONFIG_ARM_THUMB=y
258# CONFIG_CPU_DCACHE_DISABLE is not set
259# CONFIG_CPU_BPREDICT_DISABLE is not set
260CONFIG_OUTER_CACHE=y
261CONFIG_CACHE_XSC3L2=y
262CONFIG_IWMMXT=y
263CONFIG_COMMON_CLKDEV=y
264
265#
266# Bus support
267#
268# CONFIG_PCI_SYSCALL is not set
269# CONFIG_ARCH_SUPPORTS_MSI is not set
270# CONFIG_PCCARD is not set
271
272#
273# Kernel Features
274#
275CONFIG_TICK_ONESHOT=y
276# CONFIG_NO_HZ is not set
277# CONFIG_HIGH_RES_TIMERS is not set
278CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
279CONFIG_VMSPLIT_3G=y
280# CONFIG_VMSPLIT_2G is not set
281# CONFIG_VMSPLIT_1G is not set
282CONFIG_PAGE_OFFSET=0xC0000000
283CONFIG_PREEMPT=y
284CONFIG_HZ=100
285CONFIG_AEABI=y
286CONFIG_OABI_COMPAT=y
287# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
288# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
289# CONFIG_HIGHMEM is not set
290CONFIG_SELECT_MEMORY_MODEL=y
291CONFIG_FLATMEM_MANUAL=y
292# CONFIG_DISCONTIGMEM_MANUAL is not set
293# CONFIG_SPARSEMEM_MANUAL is not set
294CONFIG_FLATMEM=y
295CONFIG_FLAT_NODE_MEM_MAP=y
296CONFIG_PAGEFLAGS_EXTENDED=y
297CONFIG_SPLIT_PTLOCK_CPUS=4096
298# CONFIG_PHYS_ADDR_T_64BIT is not set
299CONFIG_ZONE_DMA_FLAG=0
300CONFIG_VIRT_TO_BUS=y
301CONFIG_HAVE_MLOCK=y
302CONFIG_HAVE_MLOCKED_PAGE_BIT=y
303CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
304CONFIG_ALIGNMENT_TRAP=y
305# CONFIG_UACCESS_WITH_MEMCPY is not set
306
307#
308# Boot options
309#
310CONFIG_ZBOOT_ROM_TEXT=0x0
311CONFIG_ZBOOT_ROM_BSS=0x0
312CONFIG_CMDLINE="root=/dev/nfs rootfstype=nfs nfsroot=192.168.1.100:/nfsroot/ ip=192.168.1.101:192.168.1.100::255.255.255.0::eth0:on console=ttyS0,115200 mem=64M debug"
313# CONFIG_XIP_KERNEL is not set
314# CONFIG_KEXEC is not set
315
316#
317# CPU Power Management
318#
319# CONFIG_CPU_FREQ is not set
320# CONFIG_CPU_IDLE is not set
321
322#
323# Floating point emulation
324#
325
326#
327# At least one emulation must be selected
328#
329CONFIG_FPE_NWFPE=y
330# CONFIG_FPE_NWFPE_XP is not set
331# CONFIG_FPE_FASTFPE is not set
332
333#
334# Userspace binary formats
335#
336CONFIG_BINFMT_ELF=y
337# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
338CONFIG_HAVE_AOUT=y
339# CONFIG_BINFMT_AOUT is not set
340# CONFIG_BINFMT_MISC is not set
341
342#
343# Power management options
344#
345# CONFIG_PM is not set
346CONFIG_ARCH_SUSPEND_POSSIBLE=y
347CONFIG_NET=y
348
349#
350# Networking options
351#
352CONFIG_PACKET=y
353# CONFIG_PACKET_MMAP is not set
354CONFIG_UNIX=y
355# CONFIG_NET_KEY is not set
356CONFIG_INET=y
357# CONFIG_IP_MULTICAST is not set
358# CONFIG_IP_ADVANCED_ROUTER is not set
359CONFIG_IP_FIB_HASH=y
360CONFIG_IP_PNP=y
361# CONFIG_IP_PNP_DHCP is not set
362# CONFIG_IP_PNP_BOOTP is not set
363# CONFIG_IP_PNP_RARP is not set
364# CONFIG_NET_IPIP is not set
365# CONFIG_NET_IPGRE is not set
366# CONFIG_ARPD is not set
367# CONFIG_SYN_COOKIES is not set
368# CONFIG_INET_AH is not set
369# CONFIG_INET_ESP is not set
370# CONFIG_INET_IPCOMP is not set
371# CONFIG_INET_XFRM_TUNNEL is not set
372# CONFIG_INET_TUNNEL is not set
373# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
374# CONFIG_INET_XFRM_MODE_TUNNEL is not set
375# CONFIG_INET_XFRM_MODE_BEET is not set
376# CONFIG_INET_LRO is not set
377# CONFIG_INET_DIAG is not set
378# CONFIG_TCP_CONG_ADVANCED is not set
379CONFIG_TCP_CONG_CUBIC=y
380CONFIG_DEFAULT_TCP_CONG="cubic"
381# CONFIG_TCP_MD5SIG is not set
382# CONFIG_IPV6 is not set
383# CONFIG_NETWORK_SECMARK is not set
384# CONFIG_NETFILTER is not set
385# CONFIG_IP_DCCP is not set
386# CONFIG_IP_SCTP is not set
387# CONFIG_TIPC is not set
388# CONFIG_ATM is not set
389# CONFIG_BRIDGE is not set
390# CONFIG_NET_DSA is not set
391# CONFIG_VLAN_8021Q is not set
392# CONFIG_DECNET is not set
393# CONFIG_LLC2 is not set
394# CONFIG_IPX is not set
395# CONFIG_ATALK is not set
396# CONFIG_X25 is not set
397# CONFIG_LAPB is not set
398# CONFIG_ECONET is not set
399# CONFIG_WAN_ROUTER is not set
400# CONFIG_PHONET is not set
401# CONFIG_IEEE802154 is not set
402# CONFIG_NET_SCHED is not set
403# CONFIG_DCB is not set
404
405#
406# Network testing
407#
408# CONFIG_NET_PKTGEN is not set
409# CONFIG_HAMRADIO is not set
410# CONFIG_CAN is not set
411# CONFIG_IRDA is not set
412# CONFIG_BT is not set
413# CONFIG_AF_RXRPC is not set
414# CONFIG_WIRELESS is not set
415# CONFIG_WIMAX is not set
416# CONFIG_RFKILL is not set
417# CONFIG_NET_9P is not set
418
419#
420# Device Drivers
421#
422
423#
424# Generic Driver Options
425#
426CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
427# CONFIG_STANDALONE is not set
428# CONFIG_PREVENT_FIRMWARE_BUILD is not set
429CONFIG_FW_LOADER=y
430CONFIG_FIRMWARE_IN_KERNEL=y
431CONFIG_EXTRA_FIRMWARE=""
432# CONFIG_DEBUG_DRIVER is not set
433# CONFIG_DEBUG_DEVRES is not set
434# CONFIG_SYS_HYPERVISOR is not set
435# CONFIG_CONNECTOR is not set
436CONFIG_MTD=y
437# CONFIG_MTD_DEBUG is not set
438CONFIG_MTD_CONCAT=y
439CONFIG_MTD_PARTITIONS=y
440# CONFIG_MTD_TESTS is not set
441# CONFIG_MTD_REDBOOT_PARTS is not set
442# CONFIG_MTD_CMDLINE_PARTS is not set
443# CONFIG_MTD_AFS_PARTS is not set
444# CONFIG_MTD_AR7_PARTS is not set
445
446#
447# User Modules And Translation Layers
448#
449CONFIG_MTD_CHAR=y
450CONFIG_MTD_BLKDEVS=y
451CONFIG_MTD_BLOCK=y
452# CONFIG_FTL is not set
453# CONFIG_NFTL is not set
454# CONFIG_INFTL is not set
455# CONFIG_RFD_FTL is not set
456# CONFIG_SSFDC is not set
457# CONFIG_MTD_OOPS is not set
458
459#
460# RAM/ROM/Flash chip drivers
461#
462# CONFIG_MTD_CFI is not set
463# CONFIG_MTD_JEDECPROBE is not set
464CONFIG_MTD_MAP_BANK_WIDTH_1=y
465CONFIG_MTD_MAP_BANK_WIDTH_2=y
466CONFIG_MTD_MAP_BANK_WIDTH_4=y
467# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
468# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
469# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
470CONFIG_MTD_CFI_I1=y
471CONFIG_MTD_CFI_I2=y
472# CONFIG_MTD_CFI_I4 is not set
473# CONFIG_MTD_CFI_I8 is not set
474# CONFIG_MTD_RAM is not set
475# CONFIG_MTD_ROM is not set
476# CONFIG_MTD_ABSENT is not set
477
478#
479# Mapping drivers for chip access
480#
481# CONFIG_MTD_COMPLEX_MAPPINGS is not set
482# CONFIG_MTD_PLATRAM is not set
483
484#
485# Self-contained MTD device drivers
486#
487# CONFIG_MTD_DATAFLASH is not set
488# CONFIG_MTD_M25P80 is not set
489# CONFIG_MTD_SLRAM is not set
490# CONFIG_MTD_PHRAM is not set
491# CONFIG_MTD_MTDRAM is not set
492# CONFIG_MTD_BLOCK2MTD is not set
493
494#
495# Disk-On-Chip Device Drivers
496#
497# CONFIG_MTD_DOC2000 is not set
498# CONFIG_MTD_DOC2001 is not set
499# CONFIG_MTD_DOC2001PLUS is not set
500CONFIG_MTD_NAND=y
501CONFIG_MTD_NAND_VERIFY_WRITE=y
502# CONFIG_MTD_NAND_ECC_SMC is not set
503# CONFIG_MTD_NAND_MUSEUM_IDS is not set
504# CONFIG_MTD_NAND_H1900 is not set
505# CONFIG_MTD_NAND_GPIO is not set
506CONFIG_MTD_NAND_IDS=y
507# CONFIG_MTD_NAND_DISKONCHIP is not set
508# CONFIG_MTD_NAND_SHARPSL is not set
509CONFIG_MTD_NAND_PXA3xx=y
510CONFIG_MTD_NAND_PXA3xx_BUILTIN=y
511# CONFIG_MTD_NAND_NANDSIM is not set
512# CONFIG_MTD_NAND_PLATFORM is not set
513CONFIG_MTD_ONENAND=y
514CONFIG_MTD_ONENAND_VERIFY_WRITE=y
515CONFIG_MTD_ONENAND_GENERIC=y
516# CONFIG_MTD_ONENAND_OTP is not set
517# CONFIG_MTD_ONENAND_2X_PROGRAM is not set
518# CONFIG_MTD_ONENAND_SIM is not set
519
520#
521# LPDDR flash memory drivers
522#
523# CONFIG_MTD_LPDDR is not set
524
525#
526# UBI - Unsorted block images
527#
528# CONFIG_MTD_UBI is not set
529# CONFIG_PARPORT is not set
530CONFIG_BLK_DEV=y
531# CONFIG_BLK_DEV_COW_COMMON is not set
532CONFIG_BLK_DEV_LOOP=y
533# CONFIG_BLK_DEV_CRYPTOLOOP is not set
534# CONFIG_BLK_DEV_NBD is not set
535CONFIG_BLK_DEV_RAM=y
536CONFIG_BLK_DEV_RAM_COUNT=16
537CONFIG_BLK_DEV_RAM_SIZE=4096
538# CONFIG_BLK_DEV_XIP is not set
539# CONFIG_CDROM_PKTCDVD is not set
540# CONFIG_ATA_OVER_ETH is not set
541# CONFIG_MG_DISK is not set
542# CONFIG_MISC_DEVICES is not set
543CONFIG_HAVE_IDE=y
544# CONFIG_IDE is not set
545
546#
547# SCSI device support
548#
549# CONFIG_RAID_ATTRS is not set
550# CONFIG_SCSI is not set
551# CONFIG_SCSI_DMA is not set
552# CONFIG_SCSI_NETLINK is not set
553# CONFIG_ATA is not set
554# CONFIG_MD is not set
555CONFIG_NETDEVICES=y
556# CONFIG_DUMMY is not set
557# CONFIG_BONDING is not set
558# CONFIG_MACVLAN is not set
559# CONFIG_EQUALIZER is not set
560# CONFIG_TUN is not set
561# CONFIG_VETH is not set
562# CONFIG_PHYLIB is not set
563CONFIG_NET_ETHERNET=y
564CONFIG_MII=y
565# CONFIG_AX88796 is not set
566CONFIG_SMC91X=y
567# CONFIG_DM9000 is not set
568# CONFIG_ENC28J60 is not set
569# CONFIG_ETHOC is not set
570# CONFIG_SMC911X is not set
571# CONFIG_SMSC911X is not set
572# CONFIG_DNET is not set
573# CONFIG_IBM_NEW_EMAC_ZMII is not set
574# CONFIG_IBM_NEW_EMAC_RGMII is not set
575# CONFIG_IBM_NEW_EMAC_TAH is not set
576# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
577# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
578# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
579# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
580# CONFIG_B44 is not set
581# CONFIG_KS8842 is not set
582# CONFIG_NETDEV_1000 is not set
583# CONFIG_NETDEV_10000 is not set
584
585#
586# Wireless LAN
587#
588# CONFIG_WLAN_PRE80211 is not set
589# CONFIG_WLAN_80211 is not set
590
591#
592# Enable WiMAX (Networking options) to see the WiMAX drivers
593#
594# CONFIG_WAN is not set
595# CONFIG_PPP is not set
596# CONFIG_SLIP is not set
597# CONFIG_NETCONSOLE is not set
598# CONFIG_NETPOLL is not set
599# CONFIG_NET_POLL_CONTROLLER is not set
600# CONFIG_ISDN is not set
601
602#
603# Input device support
604#
605CONFIG_INPUT=y
606# CONFIG_INPUT_FF_MEMLESS is not set
607# CONFIG_INPUT_POLLDEV is not set
608
609#
610# Userland interfaces
611#
612CONFIG_INPUT_MOUSEDEV=y
613# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
614CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
615CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
616# CONFIG_INPUT_JOYDEV is not set
617# CONFIG_INPUT_EVDEV is not set
618# CONFIG_INPUT_EVBUG is not set
619
620#
621# Input Device Drivers
622#
623CONFIG_INPUT_KEYBOARD=y
624# CONFIG_KEYBOARD_ATKBD is not set
625# CONFIG_KEYBOARD_SUNKBD is not set
626# CONFIG_KEYBOARD_LKKBD is not set
627# CONFIG_KEYBOARD_XTKBD is not set
628# CONFIG_KEYBOARD_NEWTON is not set
629# CONFIG_KEYBOARD_STOWAWAY is not set
630# CONFIG_KEYBOARD_LM8323 is not set
631CONFIG_KEYBOARD_PXA27x=y
632CONFIG_KEYBOARD_PXA930_ROTARY=y
633CONFIG_KEYBOARD_GPIO=y
634CONFIG_INPUT_MOUSE=y
635CONFIG_MOUSE_PS2=y
636CONFIG_MOUSE_PS2_ALPS=y
637CONFIG_MOUSE_PS2_LOGIPS2PP=y
638CONFIG_MOUSE_PS2_SYNAPTICS=y
639CONFIG_MOUSE_PS2_TRACKPOINT=y
640# CONFIG_MOUSE_PS2_ELANTECH is not set
641# CONFIG_MOUSE_PS2_TOUCHKIT is not set
642# CONFIG_MOUSE_SERIAL is not set
643# CONFIG_MOUSE_VSXXXAA is not set
644# CONFIG_MOUSE_GPIO is not set
645CONFIG_MOUSE_PXA930_TRKBALL=y
646# CONFIG_MOUSE_SYNAPTICS_I2C is not set
647# CONFIG_INPUT_JOYSTICK is not set
648# CONFIG_INPUT_TABLET is not set
649CONFIG_INPUT_TOUCHSCREEN=y
650# CONFIG_TOUCHSCREEN_ADS7846 is not set
651# CONFIG_TOUCHSCREEN_AD7877 is not set
652# CONFIG_TOUCHSCREEN_AD7879_I2C is not set
653# CONFIG_TOUCHSCREEN_AD7879_SPI is not set
654# CONFIG_TOUCHSCREEN_AD7879 is not set
655CONFIG_TOUCHSCREEN_DA9034=y
656# CONFIG_TOUCHSCREEN_EETI is not set
657# CONFIG_TOUCHSCREEN_FUJITSU is not set
658# CONFIG_TOUCHSCREEN_GUNZE is not set
659# CONFIG_TOUCHSCREEN_ELO is not set
660# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
661# CONFIG_TOUCHSCREEN_MTOUCH is not set
662# CONFIG_TOUCHSCREEN_INEXIO is not set
663# CONFIG_TOUCHSCREEN_MK712 is not set
664# CONFIG_TOUCHSCREEN_PENMOUNT is not set
665# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
666# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
667# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
668# CONFIG_TOUCHSCREEN_TSC2007 is not set
669# CONFIG_TOUCHSCREEN_W90X900 is not set
670# CONFIG_INPUT_MISC is not set
671
672#
673# Hardware I/O ports
674#
675CONFIG_SERIO=y
676CONFIG_SERIO_SERPORT=y
677CONFIG_SERIO_LIBPS2=y
678# CONFIG_SERIO_RAW is not set
679# CONFIG_GAMEPORT is not set
680
681#
682# Character devices
683#
684CONFIG_VT=y
685CONFIG_CONSOLE_TRANSLATIONS=y
686CONFIG_VT_CONSOLE=y
687CONFIG_HW_CONSOLE=y
688# CONFIG_VT_HW_CONSOLE_BINDING is not set
689CONFIG_DEVKMEM=y
690# CONFIG_SERIAL_NONSTANDARD is not set
691
692#
693# Serial drivers
694#
695# CONFIG_SERIAL_8250 is not set
696
697#
698# Non-8250 serial port support
699#
700# CONFIG_SERIAL_MAX3100 is not set
701CONFIG_SERIAL_PXA=y
702CONFIG_SERIAL_PXA_CONSOLE=y
703CONFIG_SERIAL_CORE=y
704CONFIG_SERIAL_CORE_CONSOLE=y
705CONFIG_UNIX98_PTYS=y
706# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
707# CONFIG_LEGACY_PTYS is not set
708# CONFIG_IPMI_HANDLER is not set
709# CONFIG_HW_RANDOM is not set
710# CONFIG_R3964 is not set
711# CONFIG_RAW_DRIVER is not set
712# CONFIG_TCG_TPM is not set
713CONFIG_I2C=y
714CONFIG_I2C_BOARDINFO=y
715# CONFIG_I2C_CHARDEV is not set
716# CONFIG_I2C_HELPER_AUTO is not set
717
718#
719# I2C Algorithms
720#
721# CONFIG_I2C_ALGOBIT is not set
722# CONFIG_I2C_ALGOPCF is not set
723# CONFIG_I2C_ALGOPCA is not set
724
725#
726# I2C Hardware Bus support
727#
728
729#
730# I2C system bus drivers (mostly embedded / system-on-chip)
731#
732# CONFIG_I2C_DESIGNWARE is not set
733# CONFIG_I2C_GPIO is not set
734# CONFIG_I2C_OCORES is not set
735CONFIG_I2C_PXA=y
736# CONFIG_I2C_PXA_SLAVE is not set
737# CONFIG_I2C_SIMTEC is not set
738
739#
740# External I2C/SMBus adapter drivers
741#
742# CONFIG_I2C_PARPORT_LIGHT is not set
743# CONFIG_I2C_TAOS_EVM is not set
744
745#
746# Other I2C/SMBus bus drivers
747#
748# CONFIG_I2C_PCA_PLATFORM is not set
749# CONFIG_I2C_STUB is not set
750
751#
752# Miscellaneous I2C Chip support
753#
754# CONFIG_DS1682 is not set
755# CONFIG_SENSORS_TSL2550 is not set
756# CONFIG_I2C_DEBUG_CORE is not set
757# CONFIG_I2C_DEBUG_ALGO is not set
758# CONFIG_I2C_DEBUG_BUS is not set
759# CONFIG_I2C_DEBUG_CHIP is not set
760CONFIG_SPI=y
761# CONFIG_SPI_DEBUG is not set
762CONFIG_SPI_MASTER=y
763
764#
765# SPI Master Controller Drivers
766#
767# CONFIG_SPI_BITBANG is not set
768# CONFIG_SPI_GPIO is not set
769CONFIG_SPI_PXA2XX=y
770
771#
772# SPI Protocol Masters
773#
774# CONFIG_SPI_SPIDEV is not set
775# CONFIG_SPI_TLE62X0 is not set
776CONFIG_ARCH_REQUIRE_GPIOLIB=y
777CONFIG_GPIOLIB=y
778# CONFIG_DEBUG_GPIO is not set
779# CONFIG_GPIO_SYSFS is not set
780
781#
782# Memory mapped GPIO expanders:
783#
784
785#
786# I2C GPIO expanders:
787#
788CONFIG_GPIO_MAX732X=y
789CONFIG_GPIO_PCA953X=y
790CONFIG_GPIO_PCF857X=y
791
792#
793# PCI GPIO expanders:
794#
795
796#
797# SPI GPIO expanders:
798#
799CONFIG_GPIO_MAX7301=y
800# CONFIG_GPIO_MCP23S08 is not set
801# CONFIG_W1 is not set
802CONFIG_POWER_SUPPLY=y
803CONFIG_POWER_SUPPLY_DEBUG=y
804CONFIG_PDA_POWER=y
805# CONFIG_BATTERY_DS2760 is not set
806# CONFIG_BATTERY_BQ27x00 is not set
807CONFIG_BATTERY_DA9030=y
808# CONFIG_BATTERY_MAX17040 is not set
809# CONFIG_HWMON is not set
810# CONFIG_THERMAL is not set
811# CONFIG_THERMAL_HWMON is not set
812# CONFIG_WATCHDOG is not set
813CONFIG_SSB_POSSIBLE=y
814
815#
816# Sonics Silicon Backplane
817#
818# CONFIG_SSB is not set
819
820#
821# Multifunction device drivers
822#
823# CONFIG_MFD_CORE is not set
824# CONFIG_MFD_SM501 is not set
825# CONFIG_MFD_ASIC3 is not set
826# CONFIG_HTC_EGPIO is not set
827# CONFIG_HTC_PASIC3 is not set
828# CONFIG_TPS65010 is not set
829# CONFIG_TWL4030_CORE is not set
830# CONFIG_MFD_TMIO is not set
831# CONFIG_MFD_T7L66XB is not set
832# CONFIG_MFD_TC6387XB is not set
833# CONFIG_MFD_TC6393XB is not set
834CONFIG_PMIC_DA903X=y
835# CONFIG_MFD_WM8400 is not set
836# CONFIG_MFD_WM8350_I2C is not set
837# CONFIG_MFD_PCF50633 is not set
838# CONFIG_AB3100_CORE is not set
839# CONFIG_EZX_PCAP is not set
840# CONFIG_MEDIA_SUPPORT is not set
841
842#
843# Graphics support
844#
845# CONFIG_VGASTATE is not set
846# CONFIG_VIDEO_OUTPUT_CONTROL is not set
847CONFIG_FB=y
848# CONFIG_FIRMWARE_EDID is not set
849# CONFIG_FB_DDC is not set
850# CONFIG_FB_BOOT_VESA_SUPPORT is not set
851CONFIG_FB_CFB_FILLRECT=y
852CONFIG_FB_CFB_COPYAREA=y
853CONFIG_FB_CFB_IMAGEBLIT=y
854# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
855# CONFIG_FB_SYS_FILLRECT is not set
856# CONFIG_FB_SYS_COPYAREA is not set
857# CONFIG_FB_SYS_IMAGEBLIT is not set
858# CONFIG_FB_FOREIGN_ENDIAN is not set
859# CONFIG_FB_SYS_FOPS is not set
860# CONFIG_FB_SVGALIB is not set
861# CONFIG_FB_MACMODES is not set
862# CONFIG_FB_BACKLIGHT is not set
863# CONFIG_FB_MODE_HELPERS is not set
864# CONFIG_FB_TILEBLITTING is not set
865
866#
867# Frame buffer hardware drivers
868#
869# CONFIG_FB_S1D13XXX is not set
870CONFIG_FB_PXA=y
871# CONFIG_FB_PXA_OVERLAY is not set
872# CONFIG_FB_PXA_SMARTPANEL is not set
873# CONFIG_FB_PXA_PARAMETERS is not set
874# CONFIG_FB_MBX is not set
875# CONFIG_FB_W100 is not set
876# CONFIG_FB_VIRTUAL is not set
877# CONFIG_FB_METRONOME is not set
878# CONFIG_FB_MB862XX is not set
879# CONFIG_FB_BROADSHEET is not set
880CONFIG_BACKLIGHT_LCD_SUPPORT=y
881CONFIG_LCD_CLASS_DEVICE=y
882# CONFIG_LCD_LTV350QV is not set
883# CONFIG_LCD_ILI9320 is not set
884CONFIG_LCD_TDO24M=y
885# CONFIG_LCD_VGG2432A4 is not set
886# CONFIG_LCD_PLATFORM is not set
887CONFIG_BACKLIGHT_CLASS_DEVICE=y
888# CONFIG_BACKLIGHT_GENERIC is not set
889CONFIG_BACKLIGHT_PWM=y
890CONFIG_BACKLIGHT_DA903X=y
891
892#
893# Display device support
894#
895# CONFIG_DISPLAY_SUPPORT is not set
896
897#
898# Console display driver support
899#
900# CONFIG_VGA_CONSOLE is not set
901CONFIG_DUMMY_CONSOLE=y
902CONFIG_FRAMEBUFFER_CONSOLE=y
903CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
904# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
905CONFIG_FONTS=y
906# CONFIG_FONT_8x8 is not set
907# CONFIG_FONT_8x16 is not set
908CONFIG_FONT_6x11=y
909# CONFIG_FONT_7x14 is not set
910# CONFIG_FONT_PEARL_8x8 is not set
911# CONFIG_FONT_ACORN_8x8 is not set
912# CONFIG_FONT_MINI_4x6 is not set
913# CONFIG_FONT_SUN8x16 is not set
914# CONFIG_FONT_SUN12x22 is not set
915# CONFIG_FONT_10x18 is not set
916CONFIG_LOGO=y
917CONFIG_LOGO_LINUX_MONO=y
918CONFIG_LOGO_LINUX_VGA16=y
919CONFIG_LOGO_LINUX_CLUT224=y
920# CONFIG_SOUND is not set
921# CONFIG_HID_SUPPORT is not set
922# CONFIG_USB_SUPPORT is not set
923CONFIG_MMC=y
924# CONFIG_MMC_DEBUG is not set
925# CONFIG_MMC_UNSAFE_RESUME is not set
926
927#
928# MMC/SD/SDIO Card Drivers
929#
930CONFIG_MMC_BLOCK=y
931CONFIG_MMC_BLOCK_BOUNCE=y
932# CONFIG_SDIO_UART is not set
933# CONFIG_MMC_TEST is not set
934
935#
936# MMC/SD/SDIO Host Controller Drivers
937#
938CONFIG_MMC_PXA=y
939# CONFIG_MMC_SDHCI is not set
940# CONFIG_MMC_SPI is not set
941# CONFIG_MEMSTICK is not set
942# CONFIG_ACCESSIBILITY is not set
943CONFIG_NEW_LEDS=y
944CONFIG_LEDS_CLASS=m
945
946#
947# LED drivers
948#
949# CONFIG_LEDS_PCA9532 is not set
950CONFIG_LEDS_GPIO=m
951CONFIG_LEDS_GPIO_PLATFORM=y
952# CONFIG_LEDS_LP5521 is not set
953# CONFIG_LEDS_PCA955X is not set
954CONFIG_LEDS_DA903X=m
955# CONFIG_LEDS_DAC124S085 is not set
956# CONFIG_LEDS_PWM is not set
957# CONFIG_LEDS_BD2802 is not set
958
959#
960# LED Triggers
961#
962CONFIG_LEDS_TRIGGERS=y
963CONFIG_LEDS_TRIGGER_TIMER=m
964CONFIG_LEDS_TRIGGER_HEARTBEAT=m
965CONFIG_LEDS_TRIGGER_BACKLIGHT=m
966CONFIG_LEDS_TRIGGER_GPIO=m
967CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
968
969#
970# iptables trigger is under Netfilter config (LED target)
971#
972CONFIG_RTC_LIB=y
973# CONFIG_RTC_CLASS is not set
974# CONFIG_DMADEVICES is not set
975# CONFIG_AUXDISPLAY is not set
976CONFIG_REGULATOR=y
977CONFIG_REGULATOR_DEBUG=y
978# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
979CONFIG_REGULATOR_VIRTUAL_CONSUMER=y
980# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set
981# CONFIG_REGULATOR_BQ24022 is not set
982# CONFIG_REGULATOR_MAX1586 is not set
983CONFIG_REGULATOR_DA903X=y
984# CONFIG_REGULATOR_LP3971 is not set
985# CONFIG_UIO is not set
986# CONFIG_STAGING is not set
987
988#
989# File systems
990#
991# CONFIG_EXT2_FS is not set
992# CONFIG_EXT3_FS is not set
993# CONFIG_EXT4_FS is not set
994# CONFIG_REISERFS_FS is not set
995# CONFIG_JFS_FS is not set
996CONFIG_FS_POSIX_ACL=y
997# CONFIG_XFS_FS is not set
998# CONFIG_GFS2_FS is not set
999# CONFIG_OCFS2_FS is not set
1000# CONFIG_BTRFS_FS is not set
1001CONFIG_FILE_LOCKING=y
1002CONFIG_FSNOTIFY=y
1003CONFIG_DNOTIFY=y
1004# CONFIG_INOTIFY is not set
1005CONFIG_INOTIFY_USER=y
1006# CONFIG_QUOTA is not set
1007# CONFIG_AUTOFS_FS is not set
1008# CONFIG_AUTOFS4_FS is not set
1009# CONFIG_FUSE_FS is not set
1010
1011#
1012# Caches
1013#
1014# CONFIG_FSCACHE is not set
1015
1016#
1017# CD-ROM/DVD Filesystems
1018#
1019# CONFIG_ISO9660_FS is not set
1020# CONFIG_UDF_FS is not set
1021
1022#
1023# DOS/FAT/NT Filesystems
1024#
1025# CONFIG_MSDOS_FS is not set
1026# CONFIG_VFAT_FS is not set
1027# CONFIG_NTFS_FS is not set
1028
1029#
1030# Pseudo filesystems
1031#
1032CONFIG_PROC_FS=y
1033CONFIG_PROC_SYSCTL=y
1034CONFIG_PROC_PAGE_MONITOR=y
1035CONFIG_SYSFS=y
1036# CONFIG_TMPFS is not set
1037# CONFIG_HUGETLB_PAGE is not set
1038# CONFIG_CONFIGFS_FS is not set
1039CONFIG_MISC_FILESYSTEMS=y
1040# CONFIG_ADFS_FS is not set
1041# CONFIG_AFFS_FS is not set
1042# CONFIG_HFS_FS is not set
1043# CONFIG_HFSPLUS_FS is not set
1044# CONFIG_BEFS_FS is not set
1045# CONFIG_BFS_FS is not set
1046# CONFIG_EFS_FS is not set
1047CONFIG_JFFS2_FS=y
1048CONFIG_JFFS2_FS_DEBUG=0
1049CONFIG_JFFS2_FS_WRITEBUFFER=y
1050CONFIG_JFFS2_FS_WBUF_VERIFY=y
1051# CONFIG_JFFS2_SUMMARY is not set
1052# CONFIG_JFFS2_FS_XATTR is not set
1053CONFIG_JFFS2_COMPRESSION_OPTIONS=y
1054CONFIG_JFFS2_ZLIB=y
1055CONFIG_JFFS2_LZO=y
1056CONFIG_JFFS2_RTIME=y
1057CONFIG_JFFS2_RUBIN=y
1058# CONFIG_JFFS2_CMODE_NONE is not set
1059CONFIG_JFFS2_CMODE_PRIORITY=y
1060# CONFIG_JFFS2_CMODE_SIZE is not set
1061# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
1062# CONFIG_CRAMFS is not set
1063# CONFIG_SQUASHFS is not set
1064# CONFIG_VXFS_FS is not set
1065# CONFIG_MINIX_FS is not set
1066# CONFIG_OMFS_FS is not set
1067# CONFIG_HPFS_FS is not set
1068# CONFIG_QNX4FS_FS is not set
1069# CONFIG_ROMFS_FS is not set
1070# CONFIG_SYSV_FS is not set
1071# CONFIG_UFS_FS is not set
1072# CONFIG_NILFS2_FS is not set
1073CONFIG_NETWORK_FILESYSTEMS=y
1074CONFIG_NFS_FS=y
1075CONFIG_NFS_V3=y
1076CONFIG_NFS_V3_ACL=y
1077CONFIG_NFS_V4=y
1078# CONFIG_NFS_V4_1 is not set
1079CONFIG_ROOT_NFS=y
1080# CONFIG_NFSD is not set
1081CONFIG_LOCKD=y
1082CONFIG_LOCKD_V4=y
1083CONFIG_NFS_ACL_SUPPORT=y
1084CONFIG_NFS_COMMON=y
1085CONFIG_SUNRPC=y
1086CONFIG_SUNRPC_GSS=y
1087CONFIG_RPCSEC_GSS_KRB5=y
1088# CONFIG_RPCSEC_GSS_SPKM3 is not set
1089# CONFIG_SMB_FS is not set
1090# CONFIG_CIFS is not set
1091# CONFIG_NCP_FS is not set
1092# CONFIG_CODA_FS is not set
1093# CONFIG_AFS_FS is not set
1094
1095#
1096# Partition Types
1097#
1098# CONFIG_PARTITION_ADVANCED is not set
1099CONFIG_MSDOS_PARTITION=y
1100CONFIG_NLS=y
1101CONFIG_NLS_DEFAULT="iso8859-1"
1102# CONFIG_NLS_CODEPAGE_437 is not set
1103# CONFIG_NLS_CODEPAGE_737 is not set
1104# CONFIG_NLS_CODEPAGE_775 is not set
1105# CONFIG_NLS_CODEPAGE_850 is not set
1106# CONFIG_NLS_CODEPAGE_852 is not set
1107# CONFIG_NLS_CODEPAGE_855 is not set
1108# CONFIG_NLS_CODEPAGE_857 is not set
1109# CONFIG_NLS_CODEPAGE_860 is not set
1110# CONFIG_NLS_CODEPAGE_861 is not set
1111# CONFIG_NLS_CODEPAGE_862 is not set
1112# CONFIG_NLS_CODEPAGE_863 is not set
1113# CONFIG_NLS_CODEPAGE_864 is not set
1114# CONFIG_NLS_CODEPAGE_865 is not set
1115# CONFIG_NLS_CODEPAGE_866 is not set
1116# CONFIG_NLS_CODEPAGE_869 is not set
1117# CONFIG_NLS_CODEPAGE_936 is not set
1118# CONFIG_NLS_CODEPAGE_950 is not set
1119# CONFIG_NLS_CODEPAGE_932 is not set
1120# CONFIG_NLS_CODEPAGE_949 is not set
1121# CONFIG_NLS_CODEPAGE_874 is not set
1122# CONFIG_NLS_ISO8859_8 is not set
1123# CONFIG_NLS_CODEPAGE_1250 is not set
1124# CONFIG_NLS_CODEPAGE_1251 is not set
1125# CONFIG_NLS_ASCII is not set
1126# CONFIG_NLS_ISO8859_1 is not set
1127# CONFIG_NLS_ISO8859_2 is not set
1128# CONFIG_NLS_ISO8859_3 is not set
1129# CONFIG_NLS_ISO8859_4 is not set
1130# CONFIG_NLS_ISO8859_5 is not set
1131# CONFIG_NLS_ISO8859_6 is not set
1132# CONFIG_NLS_ISO8859_7 is not set
1133# CONFIG_NLS_ISO8859_9 is not set
1134# CONFIG_NLS_ISO8859_13 is not set
1135# CONFIG_NLS_ISO8859_14 is not set
1136# CONFIG_NLS_ISO8859_15 is not set
1137# CONFIG_NLS_KOI8_R is not set
1138# CONFIG_NLS_KOI8_U is not set
1139# CONFIG_NLS_UTF8 is not set
1140# CONFIG_DLM is not set
1141
1142#
1143# Kernel hacking
1144#
1145CONFIG_PRINTK_TIME=y
1146CONFIG_ENABLE_WARN_DEPRECATED=y
1147CONFIG_ENABLE_MUST_CHECK=y
1148CONFIG_FRAME_WARN=1024
1149CONFIG_MAGIC_SYSRQ=y
1150# CONFIG_UNUSED_SYMBOLS is not set
1151# CONFIG_DEBUG_FS is not set
1152# CONFIG_HEADERS_CHECK is not set
1153CONFIG_DEBUG_KERNEL=y
1154CONFIG_DEBUG_SHIRQ=y
1155CONFIG_DETECT_SOFTLOCKUP=y
1156CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y
1157CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=1
1158CONFIG_DETECT_HUNG_TASK=y
1159# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
1160CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0
1161# CONFIG_SCHED_DEBUG is not set
1162# CONFIG_SCHEDSTATS is not set
1163# CONFIG_TIMER_STATS is not set
1164# CONFIG_DEBUG_OBJECTS is not set
1165# CONFIG_DEBUG_SLAB is not set
1166# CONFIG_DEBUG_KMEMLEAK is not set
1167CONFIG_DEBUG_PREEMPT=y
1168# CONFIG_DEBUG_RT_MUTEXES is not set
1169# CONFIG_RT_MUTEX_TESTER is not set
1170CONFIG_DEBUG_SPINLOCK=y
1171# CONFIG_DEBUG_MUTEXES is not set
1172# CONFIG_DEBUG_LOCK_ALLOC is not set
1173# CONFIG_PROVE_LOCKING is not set
1174# CONFIG_LOCK_STAT is not set
1175CONFIG_DEBUG_SPINLOCK_SLEEP=y
1176# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
1177# CONFIG_DEBUG_KOBJECT is not set
1178CONFIG_DEBUG_BUGVERBOSE=y
1179# CONFIG_DEBUG_INFO is not set
1180# CONFIG_DEBUG_VM is not set
1181# CONFIG_DEBUG_WRITECOUNT is not set
1182CONFIG_DEBUG_MEMORY_INIT=y
1183# CONFIG_DEBUG_LIST is not set
1184# CONFIG_DEBUG_SG is not set
1185# CONFIG_DEBUG_NOTIFIERS is not set
1186# CONFIG_BOOT_PRINTK_DELAY is not set
1187# CONFIG_RCU_TORTURE_TEST is not set
1188# CONFIG_RCU_CPU_STALL_DETECTOR is not set
1189# CONFIG_BACKTRACE_SELF_TEST is not set
1190# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
1191# CONFIG_FAULT_INJECTION is not set
1192# CONFIG_LATENCYTOP is not set
1193# CONFIG_SYSCTL_SYSCALL_CHECK is not set
1194# CONFIG_PAGE_POISONING is not set
1195CONFIG_HAVE_FUNCTION_TRACER=y
1196CONFIG_TRACING_SUPPORT=y
1197# CONFIG_FTRACE is not set
1198# CONFIG_SAMPLES is not set
1199CONFIG_HAVE_ARCH_KGDB=y
1200# CONFIG_KGDB is not set
1201# CONFIG_KMEMCHECK is not set
1202CONFIG_ARM_UNWIND=y
1203CONFIG_DEBUG_USER=y
1204# CONFIG_DEBUG_ERRORS is not set
1205# CONFIG_DEBUG_STACK_USAGE is not set
1206# CONFIG_DEBUG_LL is not set
1207
1208#
1209# Security options
1210#
1211# CONFIG_KEYS is not set
1212# CONFIG_SECURITY is not set
1213# CONFIG_SECURITYFS is not set
1214# CONFIG_SECURITY_FILE_CAPABILITIES is not set
1215CONFIG_CRYPTO=y
1216
1217#
1218# Crypto core or helper
1219#
1220# CONFIG_CRYPTO_FIPS is not set
1221CONFIG_CRYPTO_ALGAPI=y
1222CONFIG_CRYPTO_ALGAPI2=y
1223CONFIG_CRYPTO_AEAD2=y
1224CONFIG_CRYPTO_BLKCIPHER=y
1225CONFIG_CRYPTO_BLKCIPHER2=y
1226CONFIG_CRYPTO_HASH=y
1227CONFIG_CRYPTO_HASH2=y
1228CONFIG_CRYPTO_RNG2=y
1229CONFIG_CRYPTO_PCOMP=y
1230CONFIG_CRYPTO_MANAGER=y
1231CONFIG_CRYPTO_MANAGER2=y
1232# CONFIG_CRYPTO_GF128MUL is not set
1233# CONFIG_CRYPTO_NULL is not set
1234CONFIG_CRYPTO_WORKQUEUE=y
1235# CONFIG_CRYPTO_CRYPTD is not set
1236# CONFIG_CRYPTO_AUTHENC is not set
1237# CONFIG_CRYPTO_TEST is not set
1238
1239#
1240# Authenticated Encryption with Associated Data
1241#
1242# CONFIG_CRYPTO_CCM is not set
1243# CONFIG_CRYPTO_GCM is not set
1244# CONFIG_CRYPTO_SEQIV is not set
1245
1246#
1247# Block modes
1248#
1249CONFIG_CRYPTO_CBC=y
1250# CONFIG_CRYPTO_CTR is not set
1251# CONFIG_CRYPTO_CTS is not set
1252# CONFIG_CRYPTO_ECB is not set
1253# CONFIG_CRYPTO_LRW is not set
1254# CONFIG_CRYPTO_PCBC is not set
1255# CONFIG_CRYPTO_XTS is not set
1256
1257#
1258# Hash modes
1259#
1260# CONFIG_CRYPTO_HMAC is not set
1261# CONFIG_CRYPTO_XCBC is not set
1262
1263#
1264# Digest
1265#
1266# CONFIG_CRYPTO_CRC32C is not set
1267# CONFIG_CRYPTO_MD4 is not set
1268CONFIG_CRYPTO_MD5=y
1269# CONFIG_CRYPTO_MICHAEL_MIC is not set
1270# CONFIG_CRYPTO_RMD128 is not set
1271# CONFIG_CRYPTO_RMD160 is not set
1272# CONFIG_CRYPTO_RMD256 is not set
1273# CONFIG_CRYPTO_RMD320 is not set
1274# CONFIG_CRYPTO_SHA1 is not set
1275# CONFIG_CRYPTO_SHA256 is not set
1276# CONFIG_CRYPTO_SHA512 is not set
1277# CONFIG_CRYPTO_TGR192 is not set
1278# CONFIG_CRYPTO_WP512 is not set
1279
1280#
1281# Ciphers
1282#
1283# CONFIG_CRYPTO_AES is not set
1284# CONFIG_CRYPTO_ANUBIS is not set
1285# CONFIG_CRYPTO_ARC4 is not set
1286# CONFIG_CRYPTO_BLOWFISH is not set
1287# CONFIG_CRYPTO_CAMELLIA is not set
1288# CONFIG_CRYPTO_CAST5 is not set
1289# CONFIG_CRYPTO_CAST6 is not set
1290CONFIG_CRYPTO_DES=y
1291# CONFIG_CRYPTO_FCRYPT is not set
1292# CONFIG_CRYPTO_KHAZAD is not set
1293# CONFIG_CRYPTO_SALSA20 is not set
1294# CONFIG_CRYPTO_SEED is not set
1295# CONFIG_CRYPTO_SERPENT is not set
1296# CONFIG_CRYPTO_TEA is not set
1297# CONFIG_CRYPTO_TWOFISH is not set
1298
1299#
1300# Compression
1301#
1302# CONFIG_CRYPTO_DEFLATE is not set
1303# CONFIG_CRYPTO_ZLIB is not set
1304# CONFIG_CRYPTO_LZO is not set
1305
1306#
1307# Random Number Generation
1308#
1309# CONFIG_CRYPTO_ANSI_CPRNG is not set
1310# CONFIG_CRYPTO_HW is not set
1311# CONFIG_BINARY_PRINTF is not set
1312
1313#
1314# Library routines
1315#
1316CONFIG_BITREVERSE=y
1317CONFIG_GENERIC_FIND_LAST_BIT=y
1318# CONFIG_CRC_CCITT is not set
1319# CONFIG_CRC16 is not set
1320# CONFIG_CRC_T10DIF is not set
1321# CONFIG_CRC_ITU_T is not set
1322CONFIG_CRC32=y
1323# CONFIG_CRC7 is not set
1324# CONFIG_LIBCRC32C is not set
1325CONFIG_ZLIB_INFLATE=y
1326CONFIG_ZLIB_DEFLATE=y
1327CONFIG_LZO_COMPRESS=y
1328CONFIG_LZO_DECOMPRESS=y
1329CONFIG_HAS_IOMEM=y
1330CONFIG_HAS_IOPORT=y
1331CONFIG_HAS_DMA=y
1332CONFIG_NLATTR=y
diff --git a/arch/arm/configs/xcep_defconfig b/arch/arm/configs/xcep_defconfig
new file mode 100644
index 000000000000..33bb7250946b
--- /dev/null
+++ b/arch/arm/configs/xcep_defconfig
@@ -0,0 +1,1129 @@
1#
2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.31-rc6
4# Thu Aug 20 09:02:37 2009
5#
6CONFIG_ARM=y
7CONFIG_SYS_SUPPORTS_APM_EMULATION=y
8CONFIG_GENERIC_GPIO=y
9CONFIG_GENERIC_TIME=y
10CONFIG_GENERIC_CLOCKEVENTS=y
11CONFIG_MMU=y
12CONFIG_GENERIC_HARDIRQS=y
13CONFIG_STACKTRACE_SUPPORT=y
14CONFIG_HAVE_LATENCYTOP_SUPPORT=y
15CONFIG_LOCKDEP_SUPPORT=y
16CONFIG_TRACE_IRQFLAGS_SUPPORT=y
17CONFIG_HARDIRQS_SW_RESEND=y
18CONFIG_GENERIC_IRQ_PROBE=y
19CONFIG_RWSEM_GENERIC_SPINLOCK=y
20CONFIG_GENERIC_HWEIGHT=y
21CONFIG_GENERIC_CALIBRATE_DELAY=y
22CONFIG_ARCH_MTD_XIP=y
23CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
24CONFIG_VECTORS_BASE=0xffff0000
25CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
26CONFIG_CONSTRUCTORS=y
27
28#
29# General setup
30#
31CONFIG_EXPERIMENTAL=y
32CONFIG_BROKEN_ON_SMP=y
33CONFIG_INIT_ENV_ARG_LIMIT=32
34CONFIG_LOCALVERSION=".xcep-itech"
35# CONFIG_LOCALVERSION_AUTO is not set
36CONFIG_SYSVIPC=y
37CONFIG_SYSVIPC_SYSCTL=y
38# CONFIG_POSIX_MQUEUE is not set
39CONFIG_BSD_PROCESS_ACCT=y
40# CONFIG_BSD_PROCESS_ACCT_V3 is not set
41# CONFIG_TASKSTATS is not set
42# CONFIG_AUDIT is not set
43
44#
45# RCU Subsystem
46#
47CONFIG_CLASSIC_RCU=y
48# CONFIG_TREE_RCU is not set
49# CONFIG_PREEMPT_RCU is not set
50# CONFIG_TREE_RCU_TRACE is not set
51# CONFIG_PREEMPT_RCU_TRACE is not set
52CONFIG_IKCONFIG=y
53CONFIG_IKCONFIG_PROC=y
54CONFIG_LOG_BUF_SHIFT=16
55# CONFIG_GROUP_SCHED is not set
56# CONFIG_CGROUPS is not set
57CONFIG_SYSFS_DEPRECATED=y
58CONFIG_SYSFS_DEPRECATED_V2=y
59# CONFIG_RELAY is not set
60# CONFIG_NAMESPACES is not set
61CONFIG_BLK_DEV_INITRD=y
62CONFIG_INITRAMFS_SOURCE=""
63CONFIG_RD_GZIP=y
64# CONFIG_RD_BZIP2 is not set
65# CONFIG_RD_LZMA is not set
66CONFIG_CC_OPTIMIZE_FOR_SIZE=y
67CONFIG_SYSCTL=y
68CONFIG_ANON_INODES=y
69CONFIG_EMBEDDED=y
70# CONFIG_UID16 is not set
71CONFIG_SYSCTL_SYSCALL=y
72CONFIG_KALLSYMS=y
73# CONFIG_KALLSYMS_ALL is not set
74# CONFIG_KALLSYMS_EXTRA_PASS is not set
75CONFIG_HOTPLUG=y
76CONFIG_PRINTK=y
77CONFIG_BUG=y
78CONFIG_ELF_CORE=y
79CONFIG_BASE_FULL=y
80CONFIG_FUTEX=y
81CONFIG_EPOLL=y
82CONFIG_SIGNALFD=y
83CONFIG_TIMERFD=y
84CONFIG_EVENTFD=y
85# CONFIG_SHMEM is not set
86CONFIG_AIO=y
87
88#
89# Performance Counters
90#
91# CONFIG_VM_EVENT_COUNTERS is not set
92CONFIG_STRIP_ASM_SYMS=y
93# CONFIG_COMPAT_BRK is not set
94# CONFIG_SLAB is not set
95# CONFIG_SLUB is not set
96CONFIG_SLOB=y
97# CONFIG_PROFILING is not set
98CONFIG_TRACEPOINTS=y
99CONFIG_MARKERS=y
100CONFIG_HAVE_OPROFILE=y
101CONFIG_KPROBES=y
102CONFIG_KRETPROBES=y
103CONFIG_HAVE_KPROBES=y
104CONFIG_HAVE_KRETPROBES=y
105CONFIG_HAVE_CLK=y
106
107#
108# GCOV-based kernel profiling
109#
110# CONFIG_SLOW_WORK is not set
111CONFIG_HAVE_GENERIC_DMA_COHERENT=y
112CONFIG_RT_MUTEXES=y
113CONFIG_BASE_SMALL=0
114CONFIG_MODULES=y
115# CONFIG_MODULE_FORCE_LOAD is not set
116CONFIG_MODULE_UNLOAD=y
117# CONFIG_MODULE_FORCE_UNLOAD is not set
118CONFIG_MODVERSIONS=y
119CONFIG_MODULE_SRCVERSION_ALL=y
120# CONFIG_BLOCK is not set
121# CONFIG_FREEZER is not set
122
123#
124# System Type
125#
126# CONFIG_ARCH_AAEC2000 is not set
127# CONFIG_ARCH_INTEGRATOR is not set
128# CONFIG_ARCH_REALVIEW is not set
129# CONFIG_ARCH_VERSATILE is not set
130# CONFIG_ARCH_AT91 is not set
131# CONFIG_ARCH_CLPS711X is not set
132# CONFIG_ARCH_GEMINI is not set
133# CONFIG_ARCH_EBSA110 is not set
134# CONFIG_ARCH_EP93XX is not set
135# CONFIG_ARCH_FOOTBRIDGE is not set
136# CONFIG_ARCH_MXC is not set
137# CONFIG_ARCH_STMP3XXX is not set
138# CONFIG_ARCH_NETX is not set
139# CONFIG_ARCH_H720X is not set
140# CONFIG_ARCH_IOP13XX is not set
141# CONFIG_ARCH_IOP32X is not set
142# CONFIG_ARCH_IOP33X is not set
143# CONFIG_ARCH_IXP23XX is not set
144# CONFIG_ARCH_IXP2000 is not set
145# CONFIG_ARCH_IXP4XX is not set
146# CONFIG_ARCH_L7200 is not set
147# CONFIG_ARCH_KIRKWOOD is not set
148# CONFIG_ARCH_LOKI is not set
149# CONFIG_ARCH_MV78XX0 is not set
150# CONFIG_ARCH_ORION5X is not set
151# CONFIG_ARCH_MMP is not set
152# CONFIG_ARCH_KS8695 is not set
153# CONFIG_ARCH_NS9XXX is not set
154# CONFIG_ARCH_W90X900 is not set
155# CONFIG_ARCH_PNX4008 is not set
156CONFIG_ARCH_PXA=y
157# CONFIG_ARCH_MSM is not set
158# CONFIG_ARCH_RPC is not set
159# CONFIG_ARCH_SA1100 is not set
160# CONFIG_ARCH_S3C2410 is not set
161# CONFIG_ARCH_S3C64XX is not set
162# CONFIG_ARCH_SHARK is not set
163# CONFIG_ARCH_LH7A40X is not set
164# CONFIG_ARCH_U300 is not set
165# CONFIG_ARCH_DAVINCI is not set
166# CONFIG_ARCH_OMAP is not set
167
168#
169# Intel PXA2xx/PXA3xx Implementations
170#
171# CONFIG_ARCH_GUMSTIX is not set
172# CONFIG_MACH_INTELMOTE2 is not set
173# CONFIG_MACH_STARGATE2 is not set
174# CONFIG_ARCH_LUBBOCK is not set
175# CONFIG_MACH_LOGICPD_PXA270 is not set
176# CONFIG_MACH_MAINSTONE is not set
177# CONFIG_MACH_MP900C is not set
178# CONFIG_ARCH_PXA_IDP is not set
179# CONFIG_PXA_SHARPSL is not set
180# CONFIG_ARCH_VIPER is not set
181# CONFIG_ARCH_PXA_ESERIES is not set
182# CONFIG_TRIZEPS_PXA is not set
183# CONFIG_MACH_H5000 is not set
184# CONFIG_MACH_EM_X270 is not set
185# CONFIG_MACH_EXEDA is not set
186# CONFIG_MACH_COLIBRI is not set
187# CONFIG_MACH_COLIBRI300 is not set
188# CONFIG_MACH_COLIBRI320 is not set
189# CONFIG_MACH_ZYLONITE is not set
190# CONFIG_MACH_LITTLETON is not set
191# CONFIG_MACH_TAVOREVB is not set
192# CONFIG_MACH_SAAR is not set
193# CONFIG_MACH_ARMCORE is not set
194# CONFIG_MACH_CM_X300 is not set
195# CONFIG_MACH_H4700 is not set
196# CONFIG_MACH_MAGICIAN is not set
197# CONFIG_MACH_HIMALAYA is not set
198# CONFIG_MACH_MIOA701 is not set
199# CONFIG_MACH_PCM027 is not set
200# CONFIG_ARCH_PXA_PALM is not set
201# CONFIG_MACH_CSB726 is not set
202# CONFIG_PXA_EZX is not set
203CONFIG_MACH_XCEP=y
204CONFIG_PXA25x=y
205CONFIG_PXA_SSP=y
206CONFIG_PLAT_PXA=y
207
208#
209# Processor Type
210#
211CONFIG_CPU_32=y
212CONFIG_CPU_XSCALE=y
213CONFIG_CPU_32v5=y
214CONFIG_CPU_ABRT_EV5T=y
215CONFIG_CPU_PABRT_NOIFAR=y
216CONFIG_CPU_CACHE_VIVT=y
217CONFIG_CPU_TLB_V4WBI=y
218CONFIG_CPU_CP15=y
219CONFIG_CPU_CP15_MMU=y
220
221#
222# Processor Features
223#
224CONFIG_ARM_THUMB=y
225# CONFIG_CPU_DCACHE_DISABLE is not set
226CONFIG_IWMMXT=y
227CONFIG_XSCALE_PMU=y
228CONFIG_COMMON_CLKDEV=y
229
230#
231# Bus support
232#
233# CONFIG_PCI_SYSCALL is not set
234# CONFIG_ARCH_SUPPORTS_MSI is not set
235# CONFIG_PCCARD is not set
236
237#
238# Kernel Features
239#
240CONFIG_TICK_ONESHOT=y
241CONFIG_NO_HZ=y
242CONFIG_HIGH_RES_TIMERS=y
243CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
244CONFIG_VMSPLIT_3G=y
245# CONFIG_VMSPLIT_2G is not set
246# CONFIG_VMSPLIT_1G is not set
247CONFIG_PAGE_OFFSET=0xC0000000
248# CONFIG_PREEMPT is not set
249CONFIG_HZ=100
250CONFIG_AEABI=y
251CONFIG_OABI_COMPAT=y
252# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
253# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
254# CONFIG_HIGHMEM is not set
255CONFIG_SELECT_MEMORY_MODEL=y
256CONFIG_FLATMEM_MANUAL=y
257# CONFIG_DISCONTIGMEM_MANUAL is not set
258# CONFIG_SPARSEMEM_MANUAL is not set
259CONFIG_FLATMEM=y
260CONFIG_FLAT_NODE_MEM_MAP=y
261CONFIG_PAGEFLAGS_EXTENDED=y
262CONFIG_SPLIT_PTLOCK_CPUS=4096
263# CONFIG_PHYS_ADDR_T_64BIT is not set
264CONFIG_ZONE_DMA_FLAG=0
265CONFIG_VIRT_TO_BUS=y
266CONFIG_HAVE_MLOCK=y
267CONFIG_HAVE_MLOCKED_PAGE_BIT=y
268CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
269CONFIG_ALIGNMENT_TRAP=y
270# CONFIG_UACCESS_WITH_MEMCPY is not set
271
272#
273# Boot options
274#
275CONFIG_ZBOOT_ROM_TEXT=0x0
276CONFIG_ZBOOT_ROM_BSS=0x0
277CONFIG_CMDLINE="root=mtd4 rootfstype=jffs2 ro console=ttyS0,115200"
278# CONFIG_XIP_KERNEL is not set
279# CONFIG_KEXEC is not set
280
281#
282# CPU Power Management
283#
284# CONFIG_CPU_FREQ is not set
285# CONFIG_CPU_IDLE is not set
286
287#
288# Floating point emulation
289#
290
291#
292# At least one emulation must be selected
293#
294CONFIG_FPE_NWFPE=y
295# CONFIG_FPE_NWFPE_XP is not set
296# CONFIG_FPE_FASTFPE is not set
297
298#
299# Userspace binary formats
300#
301CONFIG_BINFMT_ELF=y
302# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
303CONFIG_HAVE_AOUT=y
304# CONFIG_BINFMT_AOUT is not set
305# CONFIG_BINFMT_MISC is not set
306
307#
308# Power management options
309#
310# CONFIG_PM is not set
311CONFIG_ARCH_SUSPEND_POSSIBLE=y
312CONFIG_NET=y
313
314#
315# Networking options
316#
317CONFIG_PACKET=m
318CONFIG_PACKET_MMAP=y
319CONFIG_UNIX=y
320CONFIG_XFRM=y
321# CONFIG_XFRM_USER is not set
322# CONFIG_XFRM_SUB_POLICY is not set
323# CONFIG_XFRM_MIGRATE is not set
324# CONFIG_XFRM_STATISTICS is not set
325CONFIG_NET_KEY=y
326# CONFIG_NET_KEY_MIGRATE is not set
327CONFIG_INET=y
328CONFIG_IP_MULTICAST=y
329# CONFIG_IP_ADVANCED_ROUTER is not set
330CONFIG_IP_FIB_HASH=y
331CONFIG_IP_PNP=y
332CONFIG_IP_PNP_DHCP=y
333CONFIG_IP_PNP_BOOTP=y
334# CONFIG_IP_PNP_RARP is not set
335# CONFIG_NET_IPIP is not set
336# CONFIG_NET_IPGRE is not set
337# CONFIG_IP_MROUTE is not set
338# CONFIG_ARPD is not set
339# CONFIG_SYN_COOKIES is not set
340# CONFIG_INET_AH is not set
341# CONFIG_INET_ESP is not set
342# CONFIG_INET_IPCOMP is not set
343# CONFIG_INET_XFRM_TUNNEL is not set
344# CONFIG_INET_TUNNEL is not set
345# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
346# CONFIG_INET_XFRM_MODE_TUNNEL is not set
347# CONFIG_INET_XFRM_MODE_BEET is not set
348CONFIG_INET_LRO=y
349# CONFIG_INET_DIAG is not set
350# CONFIG_TCP_CONG_ADVANCED is not set
351CONFIG_TCP_CONG_CUBIC=y
352CONFIG_DEFAULT_TCP_CONG="cubic"
353# CONFIG_TCP_MD5SIG is not set
354# CONFIG_IPV6 is not set
355# CONFIG_NETWORK_SECMARK is not set
356# CONFIG_NETFILTER is not set
357# CONFIG_IP_DCCP is not set
358# CONFIG_IP_SCTP is not set
359# CONFIG_TIPC is not set
360# CONFIG_ATM is not set
361# CONFIG_BRIDGE is not set
362# CONFIG_NET_DSA is not set
363# CONFIG_VLAN_8021Q is not set
364# CONFIG_DECNET is not set
365# CONFIG_LLC2 is not set
366# CONFIG_IPX is not set
367# CONFIG_ATALK is not set
368# CONFIG_X25 is not set
369# CONFIG_LAPB is not set
370# CONFIG_ECONET is not set
371# CONFIG_WAN_ROUTER is not set
372# CONFIG_PHONET is not set
373# CONFIG_IEEE802154 is not set
374# CONFIG_NET_SCHED is not set
375# CONFIG_DCB is not set
376
377#
378# Network testing
379#
380# CONFIG_NET_PKTGEN is not set
381# CONFIG_NET_TCPPROBE is not set
382# CONFIG_NET_DROP_MONITOR is not set
383# CONFIG_HAMRADIO is not set
384# CONFIG_CAN is not set
385# CONFIG_IRDA is not set
386# CONFIG_BT is not set
387# CONFIG_AF_RXRPC is not set
388# CONFIG_WIRELESS is not set
389# CONFIG_WIMAX is not set
390# CONFIG_RFKILL is not set
391# CONFIG_NET_9P is not set
392
393#
394# Device Drivers
395#
396
397#
398# Generic Driver Options
399#
400CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
401CONFIG_STANDALONE=y
402# CONFIG_PREVENT_FIRMWARE_BUILD is not set
403# CONFIG_FW_LOADER is not set
404# CONFIG_DEBUG_DRIVER is not set
405# CONFIG_DEBUG_DEVRES is not set
406# CONFIG_SYS_HYPERVISOR is not set
407# CONFIG_CONNECTOR is not set
408CONFIG_MTD=y
409# CONFIG_MTD_DEBUG is not set
410CONFIG_MTD_CONCAT=y
411CONFIG_MTD_PARTITIONS=y
412# CONFIG_MTD_TESTS is not set
413# CONFIG_MTD_REDBOOT_PARTS is not set
414# CONFIG_MTD_CMDLINE_PARTS is not set
415# CONFIG_MTD_AFS_PARTS is not set
416# CONFIG_MTD_AR7_PARTS is not set
417
418#
419# User Modules And Translation Layers
420#
421CONFIG_MTD_CHAR=y
422# CONFIG_MTD_OOPS is not set
423
424#
425# RAM/ROM/Flash chip drivers
426#
427CONFIG_MTD_CFI=y
428# CONFIG_MTD_JEDECPROBE is not set
429CONFIG_MTD_GEN_PROBE=y
430# CONFIG_MTD_CFI_ADV_OPTIONS is not set
431CONFIG_MTD_MAP_BANK_WIDTH_1=y
432CONFIG_MTD_MAP_BANK_WIDTH_2=y
433CONFIG_MTD_MAP_BANK_WIDTH_4=y
434# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
435# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
436# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
437CONFIG_MTD_CFI_I1=y
438CONFIG_MTD_CFI_I2=y
439# CONFIG_MTD_CFI_I4 is not set
440# CONFIG_MTD_CFI_I8 is not set
441CONFIG_MTD_CFI_INTELEXT=y
442# CONFIG_MTD_CFI_AMDSTD is not set
443# CONFIG_MTD_CFI_STAA is not set
444CONFIG_MTD_CFI_UTIL=y
445# CONFIG_MTD_RAM is not set
446# CONFIG_MTD_ROM is not set
447# CONFIG_MTD_ABSENT is not set
448# CONFIG_MTD_XIP is not set
449
450#
451# Mapping drivers for chip access
452#
453CONFIG_MTD_COMPLEX_MAPPINGS=y
454CONFIG_MTD_PHYSMAP=y
455# CONFIG_MTD_PHYSMAP_COMPAT is not set
456CONFIG_MTD_PXA2XX=y
457# CONFIG_MTD_ARM_INTEGRATOR is not set
458# CONFIG_MTD_PLATRAM is not set
459
460#
461# Self-contained MTD device drivers
462#
463# CONFIG_MTD_SLRAM is not set
464# CONFIG_MTD_PHRAM is not set
465# CONFIG_MTD_MTDRAM is not set
466
467#
468# Disk-On-Chip Device Drivers
469#
470# CONFIG_MTD_DOC2000 is not set
471# CONFIG_MTD_DOC2001 is not set
472# CONFIG_MTD_DOC2001PLUS is not set
473# CONFIG_MTD_NAND is not set
474# CONFIG_MTD_ONENAND is not set
475
476#
477# LPDDR flash memory drivers
478#
479# CONFIG_MTD_LPDDR is not set
480
481#
482# UBI - Unsorted block images
483#
484# CONFIG_MTD_UBI is not set
485# CONFIG_PARPORT is not set
486# CONFIG_MISC_DEVICES is not set
487CONFIG_HAVE_IDE=y
488
489#
490# SCSI device support
491#
492# CONFIG_SCSI_DMA is not set
493# CONFIG_SCSI_NETLINK is not set
494CONFIG_NETDEVICES=y
495# CONFIG_DUMMY is not set
496# CONFIG_BONDING is not set
497# CONFIG_MACVLAN is not set
498# CONFIG_EQUALIZER is not set
499# CONFIG_TUN is not set
500# CONFIG_VETH is not set
501# CONFIG_PHYLIB is not set
502CONFIG_NET_ETHERNET=y
503CONFIG_MII=y
504# CONFIG_AX88796 is not set
505CONFIG_SMC91X=y
506# CONFIG_DM9000 is not set
507# CONFIG_ETHOC is not set
508# CONFIG_SMC911X is not set
509# CONFIG_SMSC911X is not set
510# CONFIG_DNET is not set
511# CONFIG_IBM_NEW_EMAC_ZMII is not set
512# CONFIG_IBM_NEW_EMAC_RGMII is not set
513# CONFIG_IBM_NEW_EMAC_TAH is not set
514# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
515# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
516# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
517# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
518# CONFIG_B44 is not set
519# CONFIG_KS8842 is not set
520# CONFIG_NETDEV_1000 is not set
521# CONFIG_NETDEV_10000 is not set
522
523#
524# Wireless LAN
525#
526# CONFIG_WLAN_PRE80211 is not set
527# CONFIG_WLAN_80211 is not set
528
529#
530# Enable WiMAX (Networking options) to see the WiMAX drivers
531#
532# CONFIG_WAN is not set
533# CONFIG_PPP is not set
534# CONFIG_SLIP is not set
535# CONFIG_NETCONSOLE is not set
536# CONFIG_NETPOLL is not set
537# CONFIG_NET_POLL_CONTROLLER is not set
538# CONFIG_ISDN is not set
539
540#
541# Input device support
542#
543CONFIG_INPUT=y
544# CONFIG_INPUT_FF_MEMLESS is not set
545# CONFIG_INPUT_POLLDEV is not set
546
547#
548# Userland interfaces
549#
550# CONFIG_INPUT_MOUSEDEV is not set
551# CONFIG_INPUT_JOYDEV is not set
552# CONFIG_INPUT_EVDEV is not set
553# CONFIG_INPUT_EVBUG is not set
554
555#
556# Input Device Drivers
557#
558# CONFIG_INPUT_KEYBOARD is not set
559# CONFIG_INPUT_MOUSE is not set
560# CONFIG_INPUT_JOYSTICK is not set
561# CONFIG_INPUT_TABLET is not set
562# CONFIG_INPUT_TOUCHSCREEN is not set
563# CONFIG_INPUT_MISC is not set
564
565#
566# Hardware I/O ports
567#
568# CONFIG_SERIO is not set
569# CONFIG_GAMEPORT is not set
570
571#
572# Character devices
573#
574CONFIG_VT=y
575CONFIG_CONSOLE_TRANSLATIONS=y
576CONFIG_VT_CONSOLE=y
577CONFIG_HW_CONSOLE=y
578# CONFIG_VT_HW_CONSOLE_BINDING is not set
579# CONFIG_DEVKMEM is not set
580# CONFIG_SERIAL_NONSTANDARD is not set
581
582#
583# Serial drivers
584#
585# CONFIG_SERIAL_8250 is not set
586
587#
588# Non-8250 serial port support
589#
590CONFIG_SERIAL_PXA=y
591CONFIG_SERIAL_PXA_CONSOLE=y
592CONFIG_SERIAL_CORE=y
593CONFIG_SERIAL_CORE_CONSOLE=y
594CONFIG_UNIX98_PTYS=y
595# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
596# CONFIG_LEGACY_PTYS is not set
597# CONFIG_IPMI_HANDLER is not set
598# CONFIG_HW_RANDOM is not set
599# CONFIG_R3964 is not set
600# CONFIG_TCG_TPM is not set
601CONFIG_I2C=m
602CONFIG_I2C_BOARDINFO=y
603CONFIG_I2C_CHARDEV=m
604CONFIG_I2C_HELPER_AUTO=y
605
606#
607# I2C Hardware Bus support
608#
609
610#
611# I2C system bus drivers (mostly embedded / system-on-chip)
612#
613# CONFIG_I2C_DESIGNWARE is not set
614# CONFIG_I2C_GPIO is not set
615# CONFIG_I2C_OCORES is not set
616CONFIG_I2C_PXA=m
617# CONFIG_I2C_PXA_SLAVE is not set
618# CONFIG_I2C_SIMTEC is not set
619
620#
621# External I2C/SMBus adapter drivers
622#
623# CONFIG_I2C_PARPORT_LIGHT is not set
624# CONFIG_I2C_TAOS_EVM is not set
625
626#
627# Other I2C/SMBus bus drivers
628#
629# CONFIG_I2C_PCA_PLATFORM is not set
630# CONFIG_I2C_STUB is not set
631
632#
633# Miscellaneous I2C Chip support
634#
635# CONFIG_DS1682 is not set
636# CONFIG_SENSORS_PCF8574 is not set
637# CONFIG_PCF8575 is not set
638# CONFIG_SENSORS_PCA9539 is not set
639# CONFIG_SENSORS_TSL2550 is not set
640# CONFIG_I2C_DEBUG_CORE is not set
641# CONFIG_I2C_DEBUG_ALGO is not set
642# CONFIG_I2C_DEBUG_BUS is not set
643# CONFIG_I2C_DEBUG_CHIP is not set
644# CONFIG_SPI is not set
645CONFIG_ARCH_REQUIRE_GPIOLIB=y
646CONFIG_GPIOLIB=y
647# CONFIG_DEBUG_GPIO is not set
648# CONFIG_GPIO_SYSFS is not set
649
650#
651# Memory mapped GPIO expanders:
652#
653
654#
655# I2C GPIO expanders:
656#
657# CONFIG_GPIO_MAX732X is not set
658# CONFIG_GPIO_PCA953X is not set
659# CONFIG_GPIO_PCF857X is not set
660
661#
662# PCI GPIO expanders:
663#
664
665#
666# SPI GPIO expanders:
667#
668# CONFIG_W1 is not set
669# CONFIG_POWER_SUPPLY is not set
670CONFIG_HWMON=m
671# CONFIG_HWMON_VID is not set
672# CONFIG_SENSORS_AD7414 is not set
673# CONFIG_SENSORS_AD7418 is not set
674CONFIG_SENSORS_ADM1021=m
675# CONFIG_SENSORS_ADM1025 is not set
676# CONFIG_SENSORS_ADM1026 is not set
677# CONFIG_SENSORS_ADM1029 is not set
678# CONFIG_SENSORS_ADM1031 is not set
679# CONFIG_SENSORS_ADM9240 is not set
680# CONFIG_SENSORS_ADT7462 is not set
681# CONFIG_SENSORS_ADT7470 is not set
682# CONFIG_SENSORS_ADT7473 is not set
683# CONFIG_SENSORS_ADT7475 is not set
684# CONFIG_SENSORS_ATXP1 is not set
685# CONFIG_SENSORS_DS1621 is not set
686# CONFIG_SENSORS_F71805F is not set
687# CONFIG_SENSORS_F71882FG is not set
688# CONFIG_SENSORS_F75375S is not set
689# CONFIG_SENSORS_G760A is not set
690# CONFIG_SENSORS_GL518SM is not set
691# CONFIG_SENSORS_GL520SM is not set
692# CONFIG_SENSORS_IT87 is not set
693# CONFIG_SENSORS_LM63 is not set
694# CONFIG_SENSORS_LM75 is not set
695# CONFIG_SENSORS_LM77 is not set
696# CONFIG_SENSORS_LM78 is not set
697# CONFIG_SENSORS_LM80 is not set
698# CONFIG_SENSORS_LM83 is not set
699# CONFIG_SENSORS_LM85 is not set
700# CONFIG_SENSORS_LM87 is not set
701# CONFIG_SENSORS_LM90 is not set
702# CONFIG_SENSORS_LM92 is not set
703# CONFIG_SENSORS_LM93 is not set
704# CONFIG_SENSORS_LTC4215 is not set
705# CONFIG_SENSORS_LTC4245 is not set
706# CONFIG_SENSORS_LM95241 is not set
707# CONFIG_SENSORS_MAX1619 is not set
708CONFIG_SENSORS_MAX6650=m
709# CONFIG_SENSORS_PC87360 is not set
710# CONFIG_SENSORS_PC87427 is not set
711# CONFIG_SENSORS_PCF8591 is not set
712# CONFIG_SENSORS_SHT15 is not set
713# CONFIG_SENSORS_DME1737 is not set
714# CONFIG_SENSORS_SMSC47M1 is not set
715# CONFIG_SENSORS_SMSC47M192 is not set
716# CONFIG_SENSORS_SMSC47B397 is not set
717# CONFIG_SENSORS_ADS7828 is not set
718# CONFIG_SENSORS_THMC50 is not set
719# CONFIG_SENSORS_TMP401 is not set
720# CONFIG_SENSORS_VT1211 is not set
721# CONFIG_SENSORS_W83781D is not set
722# CONFIG_SENSORS_W83791D is not set
723# CONFIG_SENSORS_W83792D is not set
724# CONFIG_SENSORS_W83793 is not set
725# CONFIG_SENSORS_W83L785TS is not set
726# CONFIG_SENSORS_W83L786NG is not set
727# CONFIG_SENSORS_W83627HF is not set
728# CONFIG_SENSORS_W83627EHF is not set
729# CONFIG_HWMON_DEBUG_CHIP is not set
730# CONFIG_THERMAL is not set
731# CONFIG_WATCHDOG is not set
732CONFIG_SSB_POSSIBLE=y
733
734#
735# Sonics Silicon Backplane
736#
737# CONFIG_SSB is not set
738
739#
740# Multifunction device drivers
741#
742# CONFIG_MFD_CORE is not set
743# CONFIG_MFD_SM501 is not set
744# CONFIG_MFD_ASIC3 is not set
745# CONFIG_HTC_EGPIO is not set
746# CONFIG_HTC_PASIC3 is not set
747# CONFIG_TPS65010 is not set
748# CONFIG_MFD_TMIO is not set
749# CONFIG_MFD_T7L66XB is not set
750# CONFIG_MFD_TC6387XB is not set
751# CONFIG_MFD_TC6393XB is not set
752# CONFIG_MFD_WM8400 is not set
753# CONFIG_MFD_WM8350_I2C is not set
754# CONFIG_MFD_PCF50633 is not set
755# CONFIG_AB3100_CORE is not set
756# CONFIG_MEDIA_SUPPORT is not set
757
758#
759# Graphics support
760#
761# CONFIG_VGASTATE is not set
762# CONFIG_VIDEO_OUTPUT_CONTROL is not set
763# CONFIG_FB is not set
764# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
765
766#
767# Display device support
768#
769# CONFIG_DISPLAY_SUPPORT is not set
770
771#
772# Console display driver support
773#
774# CONFIG_VGA_CONSOLE is not set
775CONFIG_DUMMY_CONSOLE=y
776# CONFIG_SOUND is not set
777# CONFIG_HID_SUPPORT is not set
778# CONFIG_USB_SUPPORT is not set
779# CONFIG_MMC is not set
780# CONFIG_MEMSTICK is not set
781# CONFIG_ACCESSIBILITY is not set
782# CONFIG_NEW_LEDS is not set
783CONFIG_RTC_LIB=y
784CONFIG_RTC_CLASS=m
785
786#
787# RTC interfaces
788#
789CONFIG_RTC_INTF_SYSFS=y
790CONFIG_RTC_INTF_PROC=y
791CONFIG_RTC_INTF_DEV=y
792# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
793# CONFIG_RTC_DRV_TEST is not set
794
795#
796# I2C RTC drivers
797#
798# CONFIG_RTC_DRV_DS1307 is not set
799# CONFIG_RTC_DRV_DS1374 is not set
800# CONFIG_RTC_DRV_DS1672 is not set
801# CONFIG_RTC_DRV_MAX6900 is not set
802# CONFIG_RTC_DRV_RS5C372 is not set
803# CONFIG_RTC_DRV_ISL1208 is not set
804# CONFIG_RTC_DRV_X1205 is not set
805# CONFIG_RTC_DRV_PCF8563 is not set
806# CONFIG_RTC_DRV_PCF8583 is not set
807# CONFIG_RTC_DRV_M41T80 is not set
808# CONFIG_RTC_DRV_S35390A is not set
809# CONFIG_RTC_DRV_FM3130 is not set
810# CONFIG_RTC_DRV_RX8581 is not set
811# CONFIG_RTC_DRV_RX8025 is not set
812
813#
814# SPI RTC drivers
815#
816
817#
818# Platform RTC drivers
819#
820# CONFIG_RTC_DRV_CMOS is not set
821# CONFIG_RTC_DRV_DS1286 is not set
822# CONFIG_RTC_DRV_DS1511 is not set
823# CONFIG_RTC_DRV_DS1553 is not set
824# CONFIG_RTC_DRV_DS1742 is not set
825# CONFIG_RTC_DRV_STK17TA8 is not set
826# CONFIG_RTC_DRV_M48T86 is not set
827# CONFIG_RTC_DRV_M48T35 is not set
828# CONFIG_RTC_DRV_M48T59 is not set
829# CONFIG_RTC_DRV_BQ4802 is not set
830# CONFIG_RTC_DRV_V3020 is not set
831
832#
833# on-CPU RTC drivers
834#
835CONFIG_RTC_DRV_SA1100=m
836# CONFIG_RTC_DRV_PXA is not set
837CONFIG_DMADEVICES=y
838
839#
840# DMA Devices
841#
842# CONFIG_AUXDISPLAY is not set
843# CONFIG_REGULATOR is not set
844# CONFIG_UIO is not set
845# CONFIG_STAGING is not set
846
847#
848# File systems
849#
850CONFIG_FILE_LOCKING=y
851# CONFIG_FSNOTIFY is not set
852# CONFIG_DNOTIFY is not set
853# CONFIG_INOTIFY is not set
854# CONFIG_INOTIFY_USER is not set
855# CONFIG_QUOTA is not set
856# CONFIG_AUTOFS_FS is not set
857# CONFIG_AUTOFS4_FS is not set
858# CONFIG_FUSE_FS is not set
859
860#
861# Caches
862#
863# CONFIG_FSCACHE is not set
864
865#
866# Pseudo filesystems
867#
868CONFIG_PROC_FS=y
869CONFIG_PROC_SYSCTL=y
870CONFIG_PROC_PAGE_MONITOR=y
871CONFIG_SYSFS=y
872CONFIG_TMPFS=y
873# CONFIG_TMPFS_POSIX_ACL is not set
874# CONFIG_HUGETLB_PAGE is not set
875# CONFIG_CONFIGFS_FS is not set
876CONFIG_MISC_FILESYSTEMS=y
877CONFIG_JFFS2_FS=y
878CONFIG_JFFS2_FS_DEBUG=0
879CONFIG_JFFS2_FS_WRITEBUFFER=y
880CONFIG_JFFS2_FS_WBUF_VERIFY=y
881# CONFIG_JFFS2_SUMMARY is not set
882# CONFIG_JFFS2_FS_XATTR is not set
883# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
884CONFIG_JFFS2_ZLIB=y
885# CONFIG_JFFS2_LZO is not set
886CONFIG_JFFS2_RTIME=y
887# CONFIG_JFFS2_RUBIN is not set
888# CONFIG_ROMFS_FS is not set
889CONFIG_NETWORK_FILESYSTEMS=y
890CONFIG_NFS_FS=m
891CONFIG_NFS_V3=y
892# CONFIG_NFS_V3_ACL is not set
893# CONFIG_NFS_V4 is not set
894# CONFIG_NFSD is not set
895CONFIG_LOCKD=m
896CONFIG_LOCKD_V4=y
897CONFIG_NFS_COMMON=y
898CONFIG_SUNRPC=m
899# CONFIG_RPCSEC_GSS_KRB5 is not set
900# CONFIG_RPCSEC_GSS_SPKM3 is not set
901# CONFIG_SMB_FS is not set
902# CONFIG_CIFS is not set
903# CONFIG_NCP_FS is not set
904# CONFIG_CODA_FS is not set
905# CONFIG_AFS_FS is not set
906CONFIG_NLS=m
907CONFIG_NLS_DEFAULT="utf8"
908# CONFIG_NLS_CODEPAGE_437 is not set
909# CONFIG_NLS_CODEPAGE_737 is not set
910# CONFIG_NLS_CODEPAGE_775 is not set
911# CONFIG_NLS_CODEPAGE_850 is not set
912# CONFIG_NLS_CODEPAGE_852 is not set
913# CONFIG_NLS_CODEPAGE_855 is not set
914# CONFIG_NLS_CODEPAGE_857 is not set
915# CONFIG_NLS_CODEPAGE_860 is not set
916# CONFIG_NLS_CODEPAGE_861 is not set
917# CONFIG_NLS_CODEPAGE_862 is not set
918# CONFIG_NLS_CODEPAGE_863 is not set
919# CONFIG_NLS_CODEPAGE_864 is not set
920# CONFIG_NLS_CODEPAGE_865 is not set
921# CONFIG_NLS_CODEPAGE_866 is not set
922# CONFIG_NLS_CODEPAGE_869 is not set
923# CONFIG_NLS_CODEPAGE_936 is not set
924# CONFIG_NLS_CODEPAGE_950 is not set
925# CONFIG_NLS_CODEPAGE_932 is not set
926# CONFIG_NLS_CODEPAGE_949 is not set
927# CONFIG_NLS_CODEPAGE_874 is not set
928# CONFIG_NLS_ISO8859_8 is not set
929# CONFIG_NLS_CODEPAGE_1250 is not set
930# CONFIG_NLS_CODEPAGE_1251 is not set
931# CONFIG_NLS_ASCII is not set
932# CONFIG_NLS_ISO8859_1 is not set
933# CONFIG_NLS_ISO8859_2 is not set
934# CONFIG_NLS_ISO8859_3 is not set
935# CONFIG_NLS_ISO8859_4 is not set
936# CONFIG_NLS_ISO8859_5 is not set
937# CONFIG_NLS_ISO8859_6 is not set
938# CONFIG_NLS_ISO8859_7 is not set
939# CONFIG_NLS_ISO8859_9 is not set
940# CONFIG_NLS_ISO8859_13 is not set
941# CONFIG_NLS_ISO8859_14 is not set
942# CONFIG_NLS_ISO8859_15 is not set
943# CONFIG_NLS_KOI8_R is not set
944# CONFIG_NLS_KOI8_U is not set
945CONFIG_NLS_UTF8=m
946# CONFIG_DLM is not set
947
948#
949# Kernel hacking
950#
951CONFIG_PRINTK_TIME=y
952CONFIG_ENABLE_WARN_DEPRECATED=y
953CONFIG_ENABLE_MUST_CHECK=y
954CONFIG_FRAME_WARN=1024
955# CONFIG_MAGIC_SYSRQ is not set
956# CONFIG_UNUSED_SYMBOLS is not set
957# CONFIG_DEBUG_FS is not set
958# CONFIG_HEADERS_CHECK is not set
959CONFIG_DEBUG_KERNEL=y
960# CONFIG_DEBUG_SHIRQ is not set
961CONFIG_DETECT_SOFTLOCKUP=y
962# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
963CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
964CONFIG_DETECT_HUNG_TASK=y
965# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
966CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0
967# CONFIG_SCHED_DEBUG is not set
968# CONFIG_SCHEDSTATS is not set
969# CONFIG_TIMER_STATS is not set
970# CONFIG_DEBUG_OBJECTS is not set
971# CONFIG_DEBUG_KMEMLEAK is not set
972# CONFIG_DEBUG_RT_MUTEXES is not set
973# CONFIG_RT_MUTEX_TESTER is not set
974# CONFIG_DEBUG_SPINLOCK is not set
975# CONFIG_DEBUG_MUTEXES is not set
976# CONFIG_DEBUG_LOCK_ALLOC is not set
977# CONFIG_PROVE_LOCKING is not set
978# CONFIG_LOCK_STAT is not set
979# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
980# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
981# CONFIG_DEBUG_KOBJECT is not set
982# CONFIG_DEBUG_BUGVERBOSE is not set
983# CONFIG_DEBUG_INFO is not set
984# CONFIG_DEBUG_VM is not set
985# CONFIG_DEBUG_WRITECOUNT is not set
986# CONFIG_DEBUG_MEMORY_INIT is not set
987# CONFIG_DEBUG_LIST is not set
988# CONFIG_DEBUG_SG is not set
989# CONFIG_DEBUG_NOTIFIERS is not set
990CONFIG_FRAME_POINTER=y
991# CONFIG_BOOT_PRINTK_DELAY is not set
992# CONFIG_RCU_TORTURE_TEST is not set
993# CONFIG_RCU_CPU_STALL_DETECTOR is not set
994# CONFIG_KPROBES_SANITY_TEST is not set
995# CONFIG_BACKTRACE_SELF_TEST is not set
996# CONFIG_FAULT_INJECTION is not set
997# CONFIG_LATENCYTOP is not set
998CONFIG_SYSCTL_SYSCALL_CHECK=y
999# CONFIG_PAGE_POISONING is not set
1000CONFIG_HAVE_FUNCTION_TRACER=y
1001CONFIG_TRACING_SUPPORT=y
1002# CONFIG_FTRACE is not set
1003# CONFIG_SAMPLES is not set
1004CONFIG_HAVE_ARCH_KGDB=y
1005# CONFIG_KGDB is not set
1006# CONFIG_ARM_UNWIND is not set
1007# CONFIG_DEBUG_USER is not set
1008# CONFIG_DEBUG_ERRORS is not set
1009# CONFIG_DEBUG_STACK_USAGE is not set
1010# CONFIG_DEBUG_LL is not set
1011
1012#
1013# Security options
1014#
1015# CONFIG_KEYS is not set
1016# CONFIG_SECURITY is not set
1017# CONFIG_SECURITYFS is not set
1018# CONFIG_SECURITY_FILE_CAPABILITIES is not set
1019CONFIG_CRYPTO=y
1020
1021#
1022# Crypto core or helper
1023#
1024# CONFIG_CRYPTO_FIPS is not set
1025CONFIG_CRYPTO_ALGAPI=m
1026CONFIG_CRYPTO_ALGAPI2=m
1027CONFIG_CRYPTO_HASH=m
1028CONFIG_CRYPTO_HASH2=m
1029# CONFIG_CRYPTO_MANAGER is not set
1030# CONFIG_CRYPTO_MANAGER2 is not set
1031# CONFIG_CRYPTO_GF128MUL is not set
1032# CONFIG_CRYPTO_NULL is not set
1033# CONFIG_CRYPTO_CRYPTD is not set
1034# CONFIG_CRYPTO_AUTHENC is not set
1035# CONFIG_CRYPTO_TEST is not set
1036
1037#
1038# Authenticated Encryption with Associated Data
1039#
1040# CONFIG_CRYPTO_CCM is not set
1041# CONFIG_CRYPTO_GCM is not set
1042# CONFIG_CRYPTO_SEQIV is not set
1043
1044#
1045# Block modes
1046#
1047# CONFIG_CRYPTO_CBC is not set
1048# CONFIG_CRYPTO_CTR is not set
1049# CONFIG_CRYPTO_CTS is not set
1050# CONFIG_CRYPTO_ECB is not set
1051# CONFIG_CRYPTO_LRW is not set
1052# CONFIG_CRYPTO_PCBC is not set
1053# CONFIG_CRYPTO_XTS is not set
1054
1055#
1056# Hash modes
1057#
1058# CONFIG_CRYPTO_HMAC is not set
1059# CONFIG_CRYPTO_XCBC is not set
1060
1061#
1062# Digest
1063#
1064CONFIG_CRYPTO_CRC32C=m
1065# CONFIG_CRYPTO_MD4 is not set
1066# CONFIG_CRYPTO_MD5 is not set
1067# CONFIG_CRYPTO_MICHAEL_MIC is not set
1068# CONFIG_CRYPTO_RMD128 is not set
1069# CONFIG_CRYPTO_RMD160 is not set
1070# CONFIG_CRYPTO_RMD256 is not set
1071# CONFIG_CRYPTO_RMD320 is not set
1072# CONFIG_CRYPTO_SHA1 is not set
1073# CONFIG_CRYPTO_SHA256 is not set
1074# CONFIG_CRYPTO_SHA512 is not set
1075# CONFIG_CRYPTO_TGR192 is not set
1076# CONFIG_CRYPTO_WP512 is not set
1077
1078#
1079# Ciphers
1080#
1081# CONFIG_CRYPTO_AES is not set
1082# CONFIG_CRYPTO_ANUBIS is not set
1083# CONFIG_CRYPTO_ARC4 is not set
1084# CONFIG_CRYPTO_BLOWFISH is not set
1085# CONFIG_CRYPTO_CAMELLIA is not set
1086# CONFIG_CRYPTO_CAST5 is not set
1087# CONFIG_CRYPTO_CAST6 is not set
1088# CONFIG_CRYPTO_DES is not set
1089# CONFIG_CRYPTO_FCRYPT is not set
1090# CONFIG_CRYPTO_KHAZAD is not set
1091# CONFIG_CRYPTO_SALSA20 is not set
1092# CONFIG_CRYPTO_SEED is not set
1093# CONFIG_CRYPTO_SERPENT is not set
1094# CONFIG_CRYPTO_TEA is not set
1095# CONFIG_CRYPTO_TWOFISH is not set
1096
1097#
1098# Compression
1099#
1100# CONFIG_CRYPTO_DEFLATE is not set
1101# CONFIG_CRYPTO_ZLIB is not set
1102# CONFIG_CRYPTO_LZO is not set
1103
1104#
1105# Random Number Generation
1106#
1107# CONFIG_CRYPTO_ANSI_CPRNG is not set
1108# CONFIG_CRYPTO_HW is not set
1109# CONFIG_BINARY_PRINTF is not set
1110
1111#
1112# Library routines
1113#
1114CONFIG_BITREVERSE=y
1115CONFIG_GENERIC_FIND_LAST_BIT=y
1116# CONFIG_CRC_CCITT is not set
1117# CONFIG_CRC16 is not set
1118# CONFIG_CRC_T10DIF is not set
1119# CONFIG_CRC_ITU_T is not set
1120CONFIG_CRC32=y
1121# CONFIG_CRC7 is not set
1122CONFIG_LIBCRC32C=m
1123CONFIG_ZLIB_INFLATE=y
1124CONFIG_ZLIB_DEFLATE=y
1125CONFIG_DECOMPRESS_GZIP=y
1126CONFIG_HAS_IOMEM=y
1127CONFIG_HAS_IOPORT=y
1128CONFIG_HAS_DMA=y
1129CONFIG_NLATTR=y
diff --git a/arch/arm/configs/zylonite_defconfig b/arch/arm/configs/zylonite_defconfig
deleted file mode 100644
index 7949d04a3602..000000000000
--- a/arch/arm/configs/zylonite_defconfig
+++ /dev/null
@@ -1,736 +0,0 @@
1#
2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.23
4# Tue Oct 23 13:33:20 2007
5#
6CONFIG_ARM=y
7CONFIG_SYS_SUPPORTS_APM_EMULATION=y
8CONFIG_GENERIC_GPIO=y
9CONFIG_GENERIC_TIME=y
10CONFIG_GENERIC_CLOCKEVENTS=y
11CONFIG_MMU=y
12# CONFIG_NO_IOPORT is not set
13CONFIG_GENERIC_HARDIRQS=y
14CONFIG_STACKTRACE_SUPPORT=y
15CONFIG_LOCKDEP_SUPPORT=y
16CONFIG_TRACE_IRQFLAGS_SUPPORT=y
17CONFIG_HARDIRQS_SW_RESEND=y
18CONFIG_GENERIC_IRQ_PROBE=y
19CONFIG_RWSEM_GENERIC_SPINLOCK=y
20# CONFIG_ARCH_HAS_ILOG2_U32 is not set
21# CONFIG_ARCH_HAS_ILOG2_U64 is not set
22CONFIG_GENERIC_HWEIGHT=y
23CONFIG_GENERIC_CALIBRATE_DELAY=y
24CONFIG_ZONE_DMA=y
25CONFIG_ARCH_MTD_XIP=y
26CONFIG_VECTORS_BASE=0xffff0000
27CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
28
29#
30# General setup
31#
32CONFIG_EXPERIMENTAL=y
33CONFIG_BROKEN_ON_SMP=y
34CONFIG_INIT_ENV_ARG_LIMIT=32
35CONFIG_LOCALVERSION=""
36CONFIG_LOCALVERSION_AUTO=y
37CONFIG_SWAP=y
38CONFIG_SYSVIPC=y
39CONFIG_SYSVIPC_SYSCTL=y
40# CONFIG_POSIX_MQUEUE is not set
41# CONFIG_BSD_PROCESS_ACCT is not set
42# CONFIG_TASKSTATS is not set
43# CONFIG_USER_NS is not set
44# CONFIG_AUDIT is not set
45# CONFIG_IKCONFIG is not set
46CONFIG_LOG_BUF_SHIFT=18
47# CONFIG_CGROUPS is not set
48CONFIG_FAIR_GROUP_SCHED=y
49CONFIG_FAIR_USER_SCHED=y
50# CONFIG_FAIR_CGROUP_SCHED is not set
51CONFIG_SYSFS_DEPRECATED=y
52# CONFIG_RELAY is not set
53# CONFIG_BLK_DEV_INITRD is not set
54# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
55CONFIG_SYSCTL=y
56# CONFIG_EMBEDDED is not set
57CONFIG_UID16=y
58CONFIG_SYSCTL_SYSCALL=y
59CONFIG_KALLSYMS=y
60# CONFIG_KALLSYMS_EXTRA_PASS is not set
61CONFIG_HOTPLUG=y
62CONFIG_PRINTK=y
63CONFIG_BUG=y
64CONFIG_ELF_CORE=y
65CONFIG_BASE_FULL=y
66CONFIG_FUTEX=y
67CONFIG_ANON_INODES=y
68CONFIG_EPOLL=y
69CONFIG_SIGNALFD=y
70CONFIG_EVENTFD=y
71CONFIG_SHMEM=y
72CONFIG_VM_EVENT_COUNTERS=y
73CONFIG_SLUB_DEBUG=y
74# CONFIG_SLAB is not set
75CONFIG_SLUB=y
76# CONFIG_SLOB is not set
77CONFIG_RT_MUTEXES=y
78# CONFIG_TINY_SHMEM is not set
79CONFIG_BASE_SMALL=0
80CONFIG_MODULES=y
81# CONFIG_MODULE_UNLOAD is not set
82# CONFIG_MODVERSIONS is not set
83# CONFIG_MODULE_SRCVERSION_ALL is not set
84# CONFIG_KMOD is not set
85CONFIG_BLOCK=y
86# CONFIG_LBD is not set
87# CONFIG_BLK_DEV_IO_TRACE is not set
88# CONFIG_LSF is not set
89# CONFIG_BLK_DEV_BSG is not set
90
91#
92# IO Schedulers
93#
94CONFIG_IOSCHED_NOOP=y
95CONFIG_IOSCHED_AS=y
96CONFIG_IOSCHED_DEADLINE=y
97CONFIG_IOSCHED_CFQ=y
98# CONFIG_DEFAULT_AS is not set
99# CONFIG_DEFAULT_DEADLINE is not set
100CONFIG_DEFAULT_CFQ=y
101# CONFIG_DEFAULT_NOOP is not set
102CONFIG_DEFAULT_IOSCHED="cfq"
103
104#
105# System Type
106#
107# CONFIG_ARCH_AAEC2000 is not set
108# CONFIG_ARCH_INTEGRATOR is not set
109# CONFIG_ARCH_REALVIEW is not set
110# CONFIG_ARCH_VERSATILE is not set
111# CONFIG_ARCH_AT91 is not set
112# CONFIG_ARCH_CLPS7500 is not set
113# CONFIG_ARCH_CLPS711X is not set
114# CONFIG_ARCH_CO285 is not set
115# CONFIG_ARCH_EBSA110 is not set
116# CONFIG_ARCH_EP93XX is not set
117# CONFIG_ARCH_FOOTBRIDGE is not set
118# CONFIG_ARCH_NETX is not set
119# CONFIG_ARCH_H720X is not set
120# CONFIG_ARCH_IMX is not set
121# CONFIG_ARCH_IOP13XX is not set
122# CONFIG_ARCH_IOP32X is not set
123# CONFIG_ARCH_IOP33X is not set
124# CONFIG_ARCH_IXP23XX is not set
125# CONFIG_ARCH_IXP2000 is not set
126# CONFIG_ARCH_IXP4XX is not set
127# CONFIG_ARCH_L7200 is not set
128# CONFIG_ARCH_KS8695 is not set
129# CONFIG_ARCH_NS9XXX is not set
130# CONFIG_ARCH_MXC is not set
131# CONFIG_ARCH_PNX4008 is not set
132CONFIG_ARCH_PXA=y
133# CONFIG_ARCH_RPC is not set
134# CONFIG_ARCH_SA1100 is not set
135# CONFIG_ARCH_S3C2410 is not set
136# CONFIG_ARCH_SHARK is not set
137# CONFIG_ARCH_LH7A40X is not set
138# CONFIG_ARCH_DAVINCI is not set
139# CONFIG_ARCH_OMAP is not set
140
141#
142# Intel PXA2xx/PXA3xx Implementations
143#
144
145#
146# Supported PXA3xx Processor Variants
147#
148CONFIG_CPU_PXA300=y
149CONFIG_CPU_PXA310=y
150CONFIG_CPU_PXA320=y
151# CONFIG_ARCH_LUBBOCK is not set
152# CONFIG_MACH_LOGICPD_PXA270 is not set
153# CONFIG_MACH_MAINSTONE is not set
154# CONFIG_ARCH_PXA_IDP is not set
155# CONFIG_PXA_SHARPSL is not set
156# CONFIG_MACH_TRIZEPS4 is not set
157# CONFIG_MACH_EM_X270 is not set
158CONFIG_MACH_ZYLONITE=y
159# CONFIG_MACH_ARMCORE is not set
160CONFIG_PXA3xx=y
161
162#
163# Boot options
164#
165
166#
167# Power management
168#
169
170#
171# Processor Type
172#
173CONFIG_CPU_32=y
174CONFIG_CPU_XSC3=y
175CONFIG_CPU_32v5=y
176CONFIG_CPU_ABRT_EV5T=y
177CONFIG_CPU_CACHE_VIVT=y
178CONFIG_CPU_TLB_V4WBI=y
179CONFIG_CPU_CP15=y
180CONFIG_CPU_CP15_MMU=y
181CONFIG_IO_36=y
182
183#
184# Processor Features
185#
186# CONFIG_ARM_THUMB is not set
187# CONFIG_CPU_DCACHE_DISABLE is not set
188# CONFIG_CPU_BPREDICT_DISABLE is not set
189# CONFIG_OUTER_CACHE is not set
190CONFIG_IWMMXT=y
191
192#
193# Bus support
194#
195# CONFIG_PCI_SYSCALL is not set
196# CONFIG_ARCH_SUPPORTS_MSI is not set
197# CONFIG_PCCARD is not set
198
199#
200# Kernel Features
201#
202# CONFIG_TICK_ONESHOT is not set
203# CONFIG_NO_HZ is not set
204# CONFIG_HIGH_RES_TIMERS is not set
205CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
206# CONFIG_PREEMPT is not set
207CONFIG_HZ=100
208CONFIG_AEABI=y
209CONFIG_OABI_COMPAT=y
210# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
211CONFIG_SELECT_MEMORY_MODEL=y
212CONFIG_FLATMEM_MANUAL=y
213# CONFIG_DISCONTIGMEM_MANUAL is not set
214# CONFIG_SPARSEMEM_MANUAL is not set
215CONFIG_FLATMEM=y
216CONFIG_FLAT_NODE_MEM_MAP=y
217# CONFIG_SPARSEMEM_STATIC is not set
218# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
219CONFIG_SPLIT_PTLOCK_CPUS=4096
220# CONFIG_RESOURCES_64BIT is not set
221CONFIG_ZONE_DMA_FLAG=1
222CONFIG_BOUNCE=y
223CONFIG_VIRT_TO_BUS=y
224CONFIG_ALIGNMENT_TRAP=y
225
226#
227# Boot options
228#
229CONFIG_ZBOOT_ROM_TEXT=0x0
230CONFIG_ZBOOT_ROM_BSS=0x0
231CONFIG_CMDLINE="root=/dev/nfs rootfstype=nfs nfsroot=192.168.1.100:/nfs/rootfs/ ip=192.168.1.101:192.168.1.100::255.255.255.0::eth0:on console=ttyS0,38400 mem=64M debug"
232# CONFIG_XIP_KERNEL is not set
233# CONFIG_KEXEC is not set
234
235#
236# Floating point emulation
237#
238
239#
240# At least one emulation must be selected
241#
242CONFIG_FPE_NWFPE=y
243# CONFIG_FPE_NWFPE_XP is not set
244# CONFIG_FPE_FASTFPE is not set
245
246#
247# Userspace binary formats
248#
249CONFIG_BINFMT_ELF=y
250# CONFIG_BINFMT_AOUT is not set
251# CONFIG_BINFMT_MISC is not set
252
253#
254# Power management options
255#
256# CONFIG_PM is not set
257CONFIG_SUSPEND_UP_POSSIBLE=y
258
259#
260# Networking
261#
262CONFIG_NET=y
263
264#
265# Networking options
266#
267CONFIG_PACKET=y
268# CONFIG_PACKET_MMAP is not set
269CONFIG_UNIX=y
270# CONFIG_NET_KEY is not set
271CONFIG_INET=y
272# CONFIG_IP_MULTICAST is not set
273# CONFIG_IP_ADVANCED_ROUTER is not set
274CONFIG_IP_FIB_HASH=y
275CONFIG_IP_PNP=y
276CONFIG_IP_PNP_DHCP=y
277CONFIG_IP_PNP_BOOTP=y
278CONFIG_IP_PNP_RARP=y
279# CONFIG_NET_IPIP is not set
280# CONFIG_NET_IPGRE is not set
281# CONFIG_ARPD is not set
282# CONFIG_SYN_COOKIES is not set
283# CONFIG_INET_AH is not set
284# CONFIG_INET_ESP is not set
285# CONFIG_INET_IPCOMP is not set
286# CONFIG_INET_XFRM_TUNNEL is not set
287# CONFIG_INET_TUNNEL is not set
288# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
289# CONFIG_INET_XFRM_MODE_TUNNEL is not set
290# CONFIG_INET_XFRM_MODE_BEET is not set
291# CONFIG_INET_LRO is not set
292# CONFIG_INET_DIAG is not set
293# CONFIG_TCP_CONG_ADVANCED is not set
294CONFIG_TCP_CONG_CUBIC=y
295CONFIG_DEFAULT_TCP_CONG="cubic"
296# CONFIG_TCP_MD5SIG is not set
297# CONFIG_IPV6 is not set
298# CONFIG_INET6_XFRM_TUNNEL is not set
299# CONFIG_INET6_TUNNEL is not set
300# CONFIG_NETWORK_SECMARK is not set
301# CONFIG_NETFILTER is not set
302# CONFIG_IP_DCCP is not set
303# CONFIG_IP_SCTP is not set
304# CONFIG_TIPC is not set
305# CONFIG_ATM is not set
306# CONFIG_BRIDGE is not set
307# CONFIG_VLAN_8021Q is not set
308# CONFIG_DECNET is not set
309# CONFIG_LLC2 is not set
310# CONFIG_IPX is not set
311# CONFIG_ATALK is not set
312# CONFIG_X25 is not set
313# CONFIG_LAPB is not set
314# CONFIG_ECONET is not set
315# CONFIG_WAN_ROUTER is not set
316# CONFIG_NET_SCHED is not set
317
318#
319# Network testing
320#
321# CONFIG_NET_PKTGEN is not set
322# CONFIG_HAMRADIO is not set
323# CONFIG_IRDA is not set
324# CONFIG_BT is not set
325# CONFIG_AF_RXRPC is not set
326
327#
328# Wireless
329#
330# CONFIG_CFG80211 is not set
331# CONFIG_WIRELESS_EXT is not set
332# CONFIG_MAC80211 is not set
333# CONFIG_IEEE80211 is not set
334# CONFIG_RFKILL is not set
335# CONFIG_NET_9P is not set
336
337#
338# Device Drivers
339#
340
341#
342# Generic Driver Options
343#
344CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
345CONFIG_STANDALONE=y
346CONFIG_PREVENT_FIRMWARE_BUILD=y
347CONFIG_FW_LOADER=y
348# CONFIG_SYS_HYPERVISOR is not set
349# CONFIG_CONNECTOR is not set
350# CONFIG_MTD is not set
351# CONFIG_PARPORT is not set
352# CONFIG_BLK_DEV is not set
353# CONFIG_MISC_DEVICES is not set
354# CONFIG_IDE is not set
355
356#
357# SCSI device support
358#
359# CONFIG_RAID_ATTRS is not set
360# CONFIG_SCSI is not set
361# CONFIG_SCSI_DMA is not set
362# CONFIG_SCSI_NETLINK is not set
363# CONFIG_ATA is not set
364# CONFIG_MD is not set
365CONFIG_NETDEVICES=y
366# CONFIG_NETDEVICES_MULTIQUEUE is not set
367# CONFIG_DUMMY is not set
368# CONFIG_BONDING is not set
369# CONFIG_MACVLAN is not set
370# CONFIG_EQUALIZER is not set
371# CONFIG_TUN is not set
372# CONFIG_VETH is not set
373# CONFIG_PHYLIB is not set
374CONFIG_NET_ETHERNET=y
375CONFIG_MII=y
376# CONFIG_AX88796 is not set
377CONFIG_SMC91X=y
378# CONFIG_DM9000 is not set
379# CONFIG_SMC911X is not set
380# CONFIG_IBM_NEW_EMAC_ZMII is not set
381# CONFIG_IBM_NEW_EMAC_RGMII is not set
382# CONFIG_IBM_NEW_EMAC_TAH is not set
383# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
384# CONFIG_B44 is not set
385# CONFIG_NETDEV_1000 is not set
386# CONFIG_NETDEV_10000 is not set
387
388#
389# Wireless LAN
390#
391# CONFIG_WLAN_PRE80211 is not set
392# CONFIG_WLAN_80211 is not set
393# CONFIG_WAN is not set
394# CONFIG_PPP is not set
395# CONFIG_SLIP is not set
396# CONFIG_SHAPER is not set
397# CONFIG_NETCONSOLE is not set
398# CONFIG_NETPOLL is not set
399# CONFIG_NET_POLL_CONTROLLER is not set
400# CONFIG_ISDN is not set
401
402#
403# Input device support
404#
405CONFIG_INPUT=y
406# CONFIG_INPUT_FF_MEMLESS is not set
407# CONFIG_INPUT_POLLDEV is not set
408
409#
410# Userland interfaces
411#
412CONFIG_INPUT_MOUSEDEV=y
413# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
414CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
415CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
416# CONFIG_INPUT_JOYDEV is not set
417# CONFIG_INPUT_EVDEV is not set
418# CONFIG_INPUT_EVBUG is not set
419
420#
421# Input Device Drivers
422#
423# CONFIG_INPUT_KEYBOARD is not set
424# CONFIG_INPUT_MOUSE is not set
425# CONFIG_INPUT_JOYSTICK is not set
426# CONFIG_INPUT_TABLET is not set
427# CONFIG_INPUT_TOUCHSCREEN is not set
428# CONFIG_INPUT_MISC is not set
429
430#
431# Hardware I/O ports
432#
433# CONFIG_SERIO is not set
434# CONFIG_GAMEPORT is not set
435
436#
437# Character devices
438#
439CONFIG_VT=y
440CONFIG_VT_CONSOLE=y
441CONFIG_HW_CONSOLE=y
442# CONFIG_VT_HW_CONSOLE_BINDING is not set
443# CONFIG_SERIAL_NONSTANDARD is not set
444
445#
446# Serial drivers
447#
448# CONFIG_SERIAL_8250 is not set
449
450#
451# Non-8250 serial port support
452#
453CONFIG_SERIAL_PXA=y
454CONFIG_SERIAL_PXA_CONSOLE=y
455CONFIG_SERIAL_CORE=y
456CONFIG_SERIAL_CORE_CONSOLE=y
457CONFIG_UNIX98_PTYS=y
458# CONFIG_LEGACY_PTYS is not set
459# CONFIG_IPMI_HANDLER is not set
460# CONFIG_HW_RANDOM is not set
461# CONFIG_NVRAM is not set
462# CONFIG_R3964 is not set
463# CONFIG_RAW_DRIVER is not set
464# CONFIG_TCG_TPM is not set
465# CONFIG_I2C is not set
466
467#
468# SPI support
469#
470# CONFIG_SPI is not set
471# CONFIG_SPI_MASTER is not set
472# CONFIG_W1 is not set
473# CONFIG_POWER_SUPPLY is not set
474# CONFIG_HWMON is not set
475
476#
477# Sonics Silicon Backplane
478#
479CONFIG_SSB_POSSIBLE=y
480# CONFIG_SSB is not set
481
482#
483# Multifunction device drivers
484#
485# CONFIG_MFD_SM501 is not set
486
487#
488# Multimedia devices
489#
490# CONFIG_VIDEO_DEV is not set
491# CONFIG_DVB_CORE is not set
492# CONFIG_DAB is not set
493
494#
495# Graphics support
496#
497# CONFIG_VGASTATE is not set
498# CONFIG_VIDEO_OUTPUT_CONTROL is not set
499CONFIG_FB=y
500# CONFIG_FIRMWARE_EDID is not set
501# CONFIG_FB_DDC is not set
502CONFIG_FB_CFB_FILLRECT=y
503CONFIG_FB_CFB_COPYAREA=y
504CONFIG_FB_CFB_IMAGEBLIT=y
505# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
506# CONFIG_FB_SYS_FILLRECT is not set
507# CONFIG_FB_SYS_COPYAREA is not set
508# CONFIG_FB_SYS_IMAGEBLIT is not set
509# CONFIG_FB_SYS_FOPS is not set
510CONFIG_FB_DEFERRED_IO=y
511# CONFIG_FB_SVGALIB is not set
512# CONFIG_FB_MACMODES is not set
513# CONFIG_FB_BACKLIGHT is not set
514# CONFIG_FB_MODE_HELPERS is not set
515# CONFIG_FB_TILEBLITTING is not set
516
517#
518# Frame buffer hardware drivers
519#
520# CONFIG_FB_S1D13XXX is not set
521CONFIG_FB_PXA=y
522# CONFIG_FB_PXA_PARAMETERS is not set
523# CONFIG_FB_MBX is not set
524# CONFIG_FB_VIRTUAL is not set
525# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
526
527#
528# Display device support
529#
530# CONFIG_DISPLAY_SUPPORT is not set
531
532#
533# Console display driver support
534#
535# CONFIG_VGA_CONSOLE is not set
536CONFIG_DUMMY_CONSOLE=y
537CONFIG_FRAMEBUFFER_CONSOLE=y
538CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
539# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
540CONFIG_FONTS=y
541# CONFIG_FONT_8x8 is not set
542# CONFIG_FONT_8x16 is not set
543CONFIG_FONT_6x11=y
544# CONFIG_FONT_7x14 is not set
545# CONFIG_FONT_PEARL_8x8 is not set
546# CONFIG_FONT_ACORN_8x8 is not set
547# CONFIG_FONT_MINI_4x6 is not set
548# CONFIG_FONT_SUN8x16 is not set
549# CONFIG_FONT_SUN12x22 is not set
550# CONFIG_FONT_10x18 is not set
551CONFIG_LOGO=y
552CONFIG_LOGO_LINUX_MONO=y
553CONFIG_LOGO_LINUX_VGA16=y
554CONFIG_LOGO_LINUX_CLUT224=y
555
556#
557# Sound
558#
559# CONFIG_SOUND is not set
560# CONFIG_HID_SUPPORT is not set
561# CONFIG_USB_SUPPORT is not set
562# CONFIG_MMC is not set
563# CONFIG_NEW_LEDS is not set
564CONFIG_RTC_LIB=y
565# CONFIG_RTC_CLASS is not set
566
567#
568# File systems
569#
570# CONFIG_EXT2_FS is not set
571# CONFIG_EXT3_FS is not set
572# CONFIG_EXT4DEV_FS is not set
573# CONFIG_REISERFS_FS is not set
574# CONFIG_JFS_FS is not set
575CONFIG_FS_POSIX_ACL=y
576# CONFIG_XFS_FS is not set
577# CONFIG_GFS2_FS is not set
578# CONFIG_OCFS2_FS is not set
579# CONFIG_MINIX_FS is not set
580# CONFIG_ROMFS_FS is not set
581# CONFIG_INOTIFY is not set
582# CONFIG_QUOTA is not set
583CONFIG_DNOTIFY=y
584# CONFIG_AUTOFS_FS is not set
585# CONFIG_AUTOFS4_FS is not set
586# CONFIG_FUSE_FS is not set
587
588#
589# CD-ROM/DVD Filesystems
590#
591# CONFIG_ISO9660_FS is not set
592# CONFIG_UDF_FS is not set
593
594#
595# DOS/FAT/NT Filesystems
596#
597# CONFIG_MSDOS_FS is not set
598# CONFIG_VFAT_FS is not set
599# CONFIG_NTFS_FS is not set
600
601#
602# Pseudo filesystems
603#
604CONFIG_PROC_FS=y
605CONFIG_PROC_SYSCTL=y
606CONFIG_SYSFS=y
607# CONFIG_TMPFS is not set
608# CONFIG_HUGETLB_PAGE is not set
609# CONFIG_CONFIGFS_FS is not set
610
611#
612# Miscellaneous filesystems
613#
614# CONFIG_ADFS_FS is not set
615# CONFIG_AFFS_FS is not set
616# CONFIG_HFS_FS is not set
617# CONFIG_HFSPLUS_FS is not set
618# CONFIG_BEFS_FS is not set
619# CONFIG_BFS_FS is not set
620# CONFIG_EFS_FS is not set
621# CONFIG_CRAMFS is not set
622# CONFIG_VXFS_FS is not set
623# CONFIG_HPFS_FS is not set
624# CONFIG_QNX4FS_FS is not set
625# CONFIG_SYSV_FS is not set
626# CONFIG_UFS_FS is not set
627CONFIG_NETWORK_FILESYSTEMS=y
628CONFIG_NFS_FS=y
629CONFIG_NFS_V3=y
630CONFIG_NFS_V3_ACL=y
631CONFIG_NFS_V4=y
632CONFIG_NFS_DIRECTIO=y
633# CONFIG_NFSD is not set
634CONFIG_ROOT_NFS=y
635CONFIG_LOCKD=y
636CONFIG_LOCKD_V4=y
637CONFIG_NFS_ACL_SUPPORT=y
638CONFIG_NFS_COMMON=y
639CONFIG_SUNRPC=y
640CONFIG_SUNRPC_GSS=y
641# CONFIG_SUNRPC_BIND34 is not set
642CONFIG_RPCSEC_GSS_KRB5=y
643# CONFIG_RPCSEC_GSS_SPKM3 is not set
644# CONFIG_SMB_FS is not set
645# CONFIG_CIFS is not set
646# CONFIG_NCP_FS is not set
647# CONFIG_CODA_FS is not set
648# CONFIG_AFS_FS is not set
649
650#
651# Partition Types
652#
653# CONFIG_PARTITION_ADVANCED is not set
654CONFIG_MSDOS_PARTITION=y
655# CONFIG_NLS is not set
656# CONFIG_DLM is not set
657# CONFIG_INSTRUMENTATION is not set
658
659#
660# Kernel hacking
661#
662# CONFIG_PRINTK_TIME is not set
663CONFIG_ENABLE_MUST_CHECK=y
664# CONFIG_MAGIC_SYSRQ is not set
665# CONFIG_UNUSED_SYMBOLS is not set
666# CONFIG_DEBUG_FS is not set
667# CONFIG_HEADERS_CHECK is not set
668# CONFIG_DEBUG_KERNEL is not set
669# CONFIG_SLUB_DEBUG_ON is not set
670CONFIG_DEBUG_BUGVERBOSE=y
671CONFIG_FRAME_POINTER=y
672# CONFIG_SAMPLES is not set
673CONFIG_DEBUG_USER=y
674
675#
676# Security options
677#
678# CONFIG_KEYS is not set
679# CONFIG_SECURITY is not set
680# CONFIG_SECURITY_FILE_CAPABILITIES is not set
681CONFIG_CRYPTO=y
682CONFIG_CRYPTO_ALGAPI=y
683CONFIG_CRYPTO_BLKCIPHER=y
684CONFIG_CRYPTO_MANAGER=y
685# CONFIG_CRYPTO_HMAC is not set
686# CONFIG_CRYPTO_XCBC is not set
687# CONFIG_CRYPTO_NULL is not set
688# CONFIG_CRYPTO_MD4 is not set
689CONFIG_CRYPTO_MD5=y
690# CONFIG_CRYPTO_SHA1 is not set
691# CONFIG_CRYPTO_SHA256 is not set
692# CONFIG_CRYPTO_SHA512 is not set
693# CONFIG_CRYPTO_WP512 is not set
694# CONFIG_CRYPTO_TGR192 is not set
695# CONFIG_CRYPTO_GF128MUL is not set
696# CONFIG_CRYPTO_ECB is not set
697CONFIG_CRYPTO_CBC=y
698# CONFIG_CRYPTO_PCBC is not set
699# CONFIG_CRYPTO_LRW is not set
700# CONFIG_CRYPTO_XTS is not set
701# CONFIG_CRYPTO_CRYPTD is not set
702CONFIG_CRYPTO_DES=y
703# CONFIG_CRYPTO_FCRYPT is not set
704# CONFIG_CRYPTO_BLOWFISH is not set
705# CONFIG_CRYPTO_TWOFISH is not set
706# CONFIG_CRYPTO_SERPENT is not set
707# CONFIG_CRYPTO_AES is not set
708# CONFIG_CRYPTO_CAST5 is not set
709# CONFIG_CRYPTO_CAST6 is not set
710# CONFIG_CRYPTO_TEA is not set
711# CONFIG_CRYPTO_ARC4 is not set
712# CONFIG_CRYPTO_KHAZAD is not set
713# CONFIG_CRYPTO_ANUBIS is not set
714# CONFIG_CRYPTO_SEED is not set
715# CONFIG_CRYPTO_DEFLATE is not set
716# CONFIG_CRYPTO_MICHAEL_MIC is not set
717# CONFIG_CRYPTO_CRC32C is not set
718# CONFIG_CRYPTO_CAMELLIA is not set
719# CONFIG_CRYPTO_TEST is not set
720# CONFIG_CRYPTO_AUTHENC is not set
721# CONFIG_CRYPTO_HW is not set
722
723#
724# Library routines
725#
726CONFIG_BITREVERSE=y
727# CONFIG_CRC_CCITT is not set
728# CONFIG_CRC16 is not set
729# CONFIG_CRC_ITU_T is not set
730CONFIG_CRC32=y
731# CONFIG_CRC7 is not set
732# CONFIG_LIBCRC32C is not set
733CONFIG_PLIST=y
734CONFIG_HAS_IOMEM=y
735CONFIG_HAS_IOPORT=y
736CONFIG_HAS_DMA=y
diff --git a/arch/arm/include/asm/atomic.h b/arch/arm/include/asm/atomic.h
index 9ed2377fe8e5..d0daeab2234e 100644
--- a/arch/arm/include/asm/atomic.h
+++ b/arch/arm/include/asm/atomic.h
@@ -19,31 +19,21 @@
19 19
20#ifdef __KERNEL__ 20#ifdef __KERNEL__
21 21
22/*
23 * On ARM, ordinary assignment (str instruction) doesn't clear the local
24 * strex/ldrex monitor on some implementations. The reason we can use it for
25 * atomic_set() is the clrex or dummy strex done on every exception return.
26 */
22#define atomic_read(v) ((v)->counter) 27#define atomic_read(v) ((v)->counter)
28#define atomic_set(v,i) (((v)->counter) = (i))
23 29
24#if __LINUX_ARM_ARCH__ >= 6 30#if __LINUX_ARM_ARCH__ >= 6
25 31
26/* 32/*
27 * ARMv6 UP and SMP safe atomic ops. We use load exclusive and 33 * ARMv6 UP and SMP safe atomic ops. We use load exclusive and
28 * store exclusive to ensure that these are atomic. We may loop 34 * store exclusive to ensure that these are atomic. We may loop
29 * to ensure that the update happens. Writing to 'v->counter' 35 * to ensure that the update happens.
30 * without using the following operations WILL break the atomic
31 * nature of these ops.
32 */ 36 */
33static inline void atomic_set(atomic_t *v, int i)
34{
35 unsigned long tmp;
36
37 __asm__ __volatile__("@ atomic_set\n"
38"1: ldrex %0, [%1]\n"
39" strex %0, %2, [%1]\n"
40" teq %0, #0\n"
41" bne 1b"
42 : "=&r" (tmp)
43 : "r" (&v->counter), "r" (i)
44 : "cc");
45}
46
47static inline void atomic_add(int i, atomic_t *v) 37static inline void atomic_add(int i, atomic_t *v)
48{ 38{
49 unsigned long tmp; 39 unsigned long tmp;
@@ -163,8 +153,6 @@ static inline void atomic_clear_mask(unsigned long mask, unsigned long *addr)
163#error SMP not supported on pre-ARMv6 CPUs 153#error SMP not supported on pre-ARMv6 CPUs
164#endif 154#endif
165 155
166#define atomic_set(v,i) (((v)->counter) = (i))
167
168static inline int atomic_add_return(int i, atomic_t *v) 156static inline int atomic_add_return(int i, atomic_t *v)
169{ 157{
170 unsigned long flags; 158 unsigned long flags;
diff --git a/arch/arm/include/asm/cache.h b/arch/arm/include/asm/cache.h
index feaa75f0013e..66c160b8547f 100644
--- a/arch/arm/include/asm/cache.h
+++ b/arch/arm/include/asm/cache.h
@@ -4,7 +4,7 @@
4#ifndef __ASMARM_CACHE_H 4#ifndef __ASMARM_CACHE_H
5#define __ASMARM_CACHE_H 5#define __ASMARM_CACHE_H
6 6
7#define L1_CACHE_SHIFT 5 7#define L1_CACHE_SHIFT CONFIG_ARM_L1_CACHE_SHIFT
8#define L1_CACHE_BYTES (1 << L1_CACHE_SHIFT) 8#define L1_CACHE_BYTES (1 << L1_CACHE_SHIFT)
9 9
10/* 10/*
diff --git a/arch/arm/include/asm/cputype.h b/arch/arm/include/asm/cputype.h
index b3e656c6fb78..20ae96cc0020 100644
--- a/arch/arm/include/asm/cputype.h
+++ b/arch/arm/include/asm/cputype.h
@@ -63,6 +63,11 @@ static inline unsigned int __attribute_const__ read_cpuid_cachetype(void)
63 return read_cpuid(CPUID_CACHETYPE); 63 return read_cpuid(CPUID_CACHETYPE);
64} 64}
65 65
66static inline unsigned int __attribute_const__ read_cpuid_tcmstatus(void)
67{
68 return read_cpuid(CPUID_TCM);
69}
70
66/* 71/*
67 * Intel's XScale3 core supports some v6 features (supersections, L2) 72 * Intel's XScale3 core supports some v6 features (supersections, L2)
68 * but advertises itself as v5 as it does not support the v6 ISA. For 73 * but advertises itself as v5 as it does not support the v6 ISA. For
@@ -73,7 +78,10 @@ static inline unsigned int __attribute_const__ read_cpuid_cachetype(void)
73#else 78#else
74static inline int cpu_is_xsc3(void) 79static inline int cpu_is_xsc3(void)
75{ 80{
76 if ((read_cpuid_id() & 0xffffe000) == 0x69056000) 81 unsigned int id;
82 id = read_cpuid_id() & 0xffffe000;
83 /* It covers both Intel ID and Marvell ID */
84 if ((id == 0x69056000) || (id == 0x56056000))
77 return 1; 85 return 1;
78 86
79 return 0; 87 return 0;
diff --git a/arch/arm/include/asm/hardware/iop3xx-adma.h b/arch/arm/include/asm/hardware/iop3xx-adma.h
index 83e6ba338e2c..1a8c7279a28b 100644
--- a/arch/arm/include/asm/hardware/iop3xx-adma.h
+++ b/arch/arm/include/asm/hardware/iop3xx-adma.h
@@ -187,11 +187,74 @@ union iop3xx_desc {
187 void *ptr; 187 void *ptr;
188}; 188};
189 189
190/* No support for p+q operations */
191static inline int
192iop_chan_pq_slot_count(size_t len, int src_cnt, int *slots_per_op)
193{
194 BUG();
195 return 0;
196}
197
198static inline void
199iop_desc_init_pq(struct iop_adma_desc_slot *desc, int src_cnt,
200 unsigned long flags)
201{
202 BUG();
203}
204
205static inline void
206iop_desc_set_pq_addr(struct iop_adma_desc_slot *desc, dma_addr_t *addr)
207{
208 BUG();
209}
210
211static inline void
212iop_desc_set_pq_src_addr(struct iop_adma_desc_slot *desc, int src_idx,
213 dma_addr_t addr, unsigned char coef)
214{
215 BUG();
216}
217
218static inline int
219iop_chan_pq_zero_sum_slot_count(size_t len, int src_cnt, int *slots_per_op)
220{
221 BUG();
222 return 0;
223}
224
225static inline void
226iop_desc_init_pq_zero_sum(struct iop_adma_desc_slot *desc, int src_cnt,
227 unsigned long flags)
228{
229 BUG();
230}
231
232static inline void
233iop_desc_set_pq_zero_sum_byte_count(struct iop_adma_desc_slot *desc, u32 len)
234{
235 BUG();
236}
237
238#define iop_desc_set_pq_zero_sum_src_addr iop_desc_set_pq_src_addr
239
240static inline void
241iop_desc_set_pq_zero_sum_addr(struct iop_adma_desc_slot *desc, int pq_idx,
242 dma_addr_t *src)
243{
244 BUG();
245}
246
190static inline int iop_adma_get_max_xor(void) 247static inline int iop_adma_get_max_xor(void)
191{ 248{
192 return 32; 249 return 32;
193} 250}
194 251
252static inline int iop_adma_get_max_pq(void)
253{
254 BUG();
255 return 0;
256}
257
195static inline u32 iop_chan_get_current_descriptor(struct iop_adma_chan *chan) 258static inline u32 iop_chan_get_current_descriptor(struct iop_adma_chan *chan)
196{ 259{
197 int id = chan->device->id; 260 int id = chan->device->id;
@@ -332,6 +395,11 @@ static inline int iop_chan_zero_sum_slot_count(size_t len, int src_cnt,
332 return slot_cnt; 395 return slot_cnt;
333} 396}
334 397
398static inline int iop_desc_is_pq(struct iop_adma_desc_slot *desc)
399{
400 return 0;
401}
402
335static inline u32 iop_desc_get_dest_addr(struct iop_adma_desc_slot *desc, 403static inline u32 iop_desc_get_dest_addr(struct iop_adma_desc_slot *desc,
336 struct iop_adma_chan *chan) 404 struct iop_adma_chan *chan)
337{ 405{
@@ -349,6 +417,14 @@ static inline u32 iop_desc_get_dest_addr(struct iop_adma_desc_slot *desc,
349 return 0; 417 return 0;
350} 418}
351 419
420
421static inline u32 iop_desc_get_qdest_addr(struct iop_adma_desc_slot *desc,
422 struct iop_adma_chan *chan)
423{
424 BUG();
425 return 0;
426}
427
352static inline u32 iop_desc_get_byte_count(struct iop_adma_desc_slot *desc, 428static inline u32 iop_desc_get_byte_count(struct iop_adma_desc_slot *desc,
353 struct iop_adma_chan *chan) 429 struct iop_adma_chan *chan)
354{ 430{
@@ -756,13 +832,14 @@ static inline void iop_desc_set_block_fill_val(struct iop_adma_desc_slot *desc,
756 hw_desc->src[0] = val; 832 hw_desc->src[0] = val;
757} 833}
758 834
759static inline int iop_desc_get_zero_result(struct iop_adma_desc_slot *desc) 835static inline enum sum_check_flags
836iop_desc_get_zero_result(struct iop_adma_desc_slot *desc)
760{ 837{
761 struct iop3xx_desc_aau *hw_desc = desc->hw_desc; 838 struct iop3xx_desc_aau *hw_desc = desc->hw_desc;
762 struct iop3xx_aau_desc_ctrl desc_ctrl = hw_desc->desc_ctrl_field; 839 struct iop3xx_aau_desc_ctrl desc_ctrl = hw_desc->desc_ctrl_field;
763 840
764 iop_paranoia(!(desc_ctrl.tx_complete && desc_ctrl.zero_result_en)); 841 iop_paranoia(!(desc_ctrl.tx_complete && desc_ctrl.zero_result_en));
765 return desc_ctrl.zero_result_err; 842 return desc_ctrl.zero_result_err << SUM_CHECK_P;
766} 843}
767 844
768static inline void iop_chan_append(struct iop_adma_chan *chan) 845static inline void iop_chan_append(struct iop_adma_chan *chan)
diff --git a/arch/arm/include/asm/hardware/iop_adma.h b/arch/arm/include/asm/hardware/iop_adma.h
index 385c6e8cbbd2..59b8c3892f76 100644
--- a/arch/arm/include/asm/hardware/iop_adma.h
+++ b/arch/arm/include/asm/hardware/iop_adma.h
@@ -86,6 +86,7 @@ struct iop_adma_chan {
86 * @idx: pool index 86 * @idx: pool index
87 * @unmap_src_cnt: number of xor sources 87 * @unmap_src_cnt: number of xor sources
88 * @unmap_len: transaction bytecount 88 * @unmap_len: transaction bytecount
89 * @tx_list: list of descriptors that are associated with one operation
89 * @async_tx: support for the async_tx api 90 * @async_tx: support for the async_tx api
90 * @group_list: list of slots that make up a multi-descriptor transaction 91 * @group_list: list of slots that make up a multi-descriptor transaction
91 * for example transfer lengths larger than the supported hw max 92 * for example transfer lengths larger than the supported hw max
@@ -102,10 +103,12 @@ struct iop_adma_desc_slot {
102 u16 idx; 103 u16 idx;
103 u16 unmap_src_cnt; 104 u16 unmap_src_cnt;
104 size_t unmap_len; 105 size_t unmap_len;
106 struct list_head tx_list;
105 struct dma_async_tx_descriptor async_tx; 107 struct dma_async_tx_descriptor async_tx;
106 union { 108 union {
107 u32 *xor_check_result; 109 u32 *xor_check_result;
108 u32 *crc32_result; 110 u32 *crc32_result;
111 u32 *pq_check_result;
109 }; 112 };
110}; 113};
111 114
diff --git a/arch/arm/include/asm/mach/mmc.h b/arch/arm/include/asm/mach/mmc.h
deleted file mode 100644
index b490ecc79def..000000000000
--- a/arch/arm/include/asm/mach/mmc.h
+++ /dev/null
@@ -1,17 +0,0 @@
1/*
2 * arch/arm/include/asm/mach/mmc.h
3 */
4#ifndef ASMARM_MACH_MMC_H
5#define ASMARM_MACH_MMC_H
6
7#include <linux/mmc/host.h>
8
9struct mmc_platform_data {
10 unsigned int ocr_mask; /* available voltages */
11 u32 (*translate_vdd)(struct device *, unsigned int);
12 unsigned int (*status)(struct device *);
13 int gpio_wp;
14 int gpio_cd;
15};
16
17#endif
diff --git a/arch/arm/include/asm/tcm.h b/arch/arm/include/asm/tcm.h
new file mode 100644
index 000000000000..5929ef5d927a
--- /dev/null
+++ b/arch/arm/include/asm/tcm.h
@@ -0,0 +1,31 @@
1/*
2 *
3 * Copyright (C) 2008-2009 ST-Ericsson AB
4 * License terms: GNU General Public License (GPL) version 2
5 *
6 * Author: Rickard Andersson <rickard.andersson@stericsson.com>
7 * Author: Linus Walleij <linus.walleij@stericsson.com>
8 *
9 */
10#ifndef __ASMARM_TCM_H
11#define __ASMARM_TCM_H
12
13#ifndef CONFIG_HAVE_TCM
14#error "You should not be including tcm.h unless you have a TCM!"
15#endif
16
17#include <linux/compiler.h>
18
19/* Tag variables with this */
20#define __tcmdata __section(.tcm.data)
21/* Tag constants with this */
22#define __tcmconst __section(.tcm.rodata)
23/* Tag functions inside TCM called from outside TCM with this */
24#define __tcmfunc __attribute__((long_call)) __section(.tcm.text) noinline
25/* Tag function inside TCM called from inside TCM with this */
26#define __tcmlocalfunc __section(.tcm.text)
27
28void *tcm_alloc(size_t len);
29void tcm_free(void *addr, size_t len);
30
31#endif
diff --git a/arch/arm/include/asm/unified.h b/arch/arm/include/asm/unified.h
index 073e85b9b961..bc631161e9c6 100644
--- a/arch/arm/include/asm/unified.h
+++ b/arch/arm/include/asm/unified.h
@@ -35,7 +35,9 @@
35 35
36#define ARM(x...) 36#define ARM(x...)
37#define THUMB(x...) x 37#define THUMB(x...) x
38#ifdef __ASSEMBLY__
38#define W(instr) instr.w 39#define W(instr) instr.w
40#endif
39#define BSYM(sym) sym + 1 41#define BSYM(sym) sym + 1
40 42
41#else /* !CONFIG_THUMB2_KERNEL */ 43#else /* !CONFIG_THUMB2_KERNEL */
@@ -45,7 +47,9 @@
45 47
46#define ARM(x...) x 48#define ARM(x...) x
47#define THUMB(x...) 49#define THUMB(x...)
50#ifdef __ASSEMBLY__
48#define W(instr) instr 51#define W(instr) instr
52#endif
49#define BSYM(sym) sym 53#define BSYM(sym) sym
50 54
51#endif /* CONFIG_THUMB2_KERNEL */ 55#endif /* CONFIG_THUMB2_KERNEL */
diff --git a/arch/arm/kernel/Makefile b/arch/arm/kernel/Makefile
index c446aeff7b89..79087dd6d869 100644
--- a/arch/arm/kernel/Makefile
+++ b/arch/arm/kernel/Makefile
@@ -35,6 +35,7 @@ obj-$(CONFIG_OABI_COMPAT) += sys_oabi-compat.o
35obj-$(CONFIG_ARM_THUMBEE) += thumbee.o 35obj-$(CONFIG_ARM_THUMBEE) += thumbee.o
36obj-$(CONFIG_KGDB) += kgdb.o 36obj-$(CONFIG_KGDB) += kgdb.o
37obj-$(CONFIG_ARM_UNWIND) += unwind.o 37obj-$(CONFIG_ARM_UNWIND) += unwind.o
38obj-$(CONFIG_HAVE_TCM) += tcm.o
38 39
39obj-$(CONFIG_CRUNCH) += crunch.o crunch-bits.o 40obj-$(CONFIG_CRUNCH) += crunch.o crunch-bits.o
40AFLAGS_crunch-bits.o := -Wa,-mcpu=ep9312 41AFLAGS_crunch-bits.o := -Wa,-mcpu=ep9312
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S
index 3d727a8a23bc..0a2ba51cf35d 100644
--- a/arch/arm/kernel/entry-armv.S
+++ b/arch/arm/kernel/entry-armv.S
@@ -272,7 +272,15 @@ __und_svc:
272 @ 272 @
273 @ r0 - instruction 273 @ r0 - instruction
274 @ 274 @
275#ifndef CONFIG_THUMB2_KERNEL
275 ldr r0, [r2, #-4] 276 ldr r0, [r2, #-4]
277#else
278 ldrh r0, [r2, #-2] @ Thumb instruction at LR - 2
279 and r9, r0, #0xf800
280 cmp r9, #0xe800 @ 32-bit instruction if xx >= 0
281 ldrhhs r9, [r2] @ bottom 16 bits
282 orrhs r0, r9, r0, lsl #16
283#endif
276 adr r9, BSYM(1f) 284 adr r9, BSYM(1f)
277 bl call_fpe 285 bl call_fpe
278 286
@@ -678,7 +686,9 @@ ENTRY(fp_enter)
678 .word no_fp 686 .word no_fp
679 .previous 687 .previous
680 688
681no_fp: mov pc, lr 689ENTRY(no_fp)
690 mov pc, lr
691ENDPROC(no_fp)
682 692
683__und_usr_unknown: 693__und_usr_unknown:
684 enable_irq 694 enable_irq
@@ -734,13 +744,6 @@ ENTRY(__switch_to)
734#ifdef CONFIG_MMU 744#ifdef CONFIG_MMU
735 ldr r6, [r2, #TI_CPU_DOMAIN] 745 ldr r6, [r2, #TI_CPU_DOMAIN]
736#endif 746#endif
737#if __LINUX_ARM_ARCH__ >= 6
738#ifdef CONFIG_CPU_32v6K
739 clrex
740#else
741 strex r5, r4, [ip] @ Clear exclusive monitor
742#endif
743#endif
744#if defined(CONFIG_HAS_TLS_REG) 747#if defined(CONFIG_HAS_TLS_REG)
745 mcr p15, 0, r3, c13, c0, 3 @ set TLS register 748 mcr p15, 0, r3, c13, c0, 3 @ set TLS register
746#elif !defined(CONFIG_TLS_REG_EMUL) 749#elif !defined(CONFIG_TLS_REG_EMUL)
diff --git a/arch/arm/kernel/entry-header.S b/arch/arm/kernel/entry-header.S
index a4eaf4f920c5..e17e3c30d957 100644
--- a/arch/arm/kernel/entry-header.S
+++ b/arch/arm/kernel/entry-header.S
@@ -76,13 +76,25 @@
76#ifndef CONFIG_THUMB2_KERNEL 76#ifndef CONFIG_THUMB2_KERNEL
77 .macro svc_exit, rpsr 77 .macro svc_exit, rpsr
78 msr spsr_cxsf, \rpsr 78 msr spsr_cxsf, \rpsr
79#if defined(CONFIG_CPU_32v6K)
80 clrex @ clear the exclusive monitor
79 ldmia sp, {r0 - pc}^ @ load r0 - pc, cpsr 81 ldmia sp, {r0 - pc}^ @ load r0 - pc, cpsr
82#elif defined (CONFIG_CPU_V6)
83 ldr r0, [sp]
84 strex r1, r2, [sp] @ clear the exclusive monitor
85 ldmib sp, {r1 - pc}^ @ load r1 - pc, cpsr
86#endif
80 .endm 87 .endm
81 88
82 .macro restore_user_regs, fast = 0, offset = 0 89 .macro restore_user_regs, fast = 0, offset = 0
83 ldr r1, [sp, #\offset + S_PSR] @ get calling cpsr 90 ldr r1, [sp, #\offset + S_PSR] @ get calling cpsr
84 ldr lr, [sp, #\offset + S_PC]! @ get pc 91 ldr lr, [sp, #\offset + S_PC]! @ get pc
85 msr spsr_cxsf, r1 @ save in spsr_svc 92 msr spsr_cxsf, r1 @ save in spsr_svc
93#if defined(CONFIG_CPU_32v6K)
94 clrex @ clear the exclusive monitor
95#elif defined (CONFIG_CPU_V6)
96 strex r1, r2, [sp] @ clear the exclusive monitor
97#endif
86 .if \fast 98 .if \fast
87 ldmdb sp, {r1 - lr}^ @ get calling r1 - lr 99 ldmdb sp, {r1 - lr}^ @ get calling r1 - lr
88 .else 100 .else
@@ -98,6 +110,7 @@
98 .endm 110 .endm
99#else /* CONFIG_THUMB2_KERNEL */ 111#else /* CONFIG_THUMB2_KERNEL */
100 .macro svc_exit, rpsr 112 .macro svc_exit, rpsr
113 clrex @ clear the exclusive monitor
101 ldr r0, [sp, #S_SP] @ top of the stack 114 ldr r0, [sp, #S_SP] @ top of the stack
102 ldr r1, [sp, #S_PC] @ return address 115 ldr r1, [sp, #S_PC] @ return address
103 tst r0, #4 @ orig stack 8-byte aligned? 116 tst r0, #4 @ orig stack 8-byte aligned?
@@ -110,6 +123,7 @@
110 .endm 123 .endm
111 124
112 .macro restore_user_regs, fast = 0, offset = 0 125 .macro restore_user_regs, fast = 0, offset = 0
126 clrex @ clear the exclusive monitor
113 mov r2, sp 127 mov r2, sp
114 load_user_sp_lr r2, r3, \offset + S_SP @ calling sp, lr 128 load_user_sp_lr r2, r3, \offset + S_SP @ calling sp, lr
115 ldr r1, [sp, #\offset + S_PSR] @ get calling cpsr 129 ldr r1, [sp, #\offset + S_PSR] @ get calling cpsr
diff --git a/arch/arm/kernel/kprobes.c b/arch/arm/kernel/kprobes.c
index f692efddd449..60c62c377fa9 100644
--- a/arch/arm/kernel/kprobes.c
+++ b/arch/arm/kernel/kprobes.c
@@ -22,6 +22,7 @@
22#include <linux/kernel.h> 22#include <linux/kernel.h>
23#include <linux/kprobes.h> 23#include <linux/kprobes.h>
24#include <linux/module.h> 24#include <linux/module.h>
25#include <linux/stop_machine.h>
25#include <linux/stringify.h> 26#include <linux/stringify.h>
26#include <asm/traps.h> 27#include <asm/traps.h>
27#include <asm/cacheflush.h> 28#include <asm/cacheflush.h>
@@ -83,10 +84,24 @@ void __kprobes arch_arm_kprobe(struct kprobe *p)
83 flush_insns(p->addr, 1); 84 flush_insns(p->addr, 1);
84} 85}
85 86
87/*
88 * The actual disarming is done here on each CPU and synchronized using
89 * stop_machine. This synchronization is necessary on SMP to avoid removing
90 * a probe between the moment the 'Undefined Instruction' exception is raised
91 * and the moment the exception handler reads the faulting instruction from
92 * memory.
93 */
94int __kprobes __arch_disarm_kprobe(void *p)
95{
96 struct kprobe *kp = p;
97 *kp->addr = kp->opcode;
98 flush_insns(kp->addr, 1);
99 return 0;
100}
101
86void __kprobes arch_disarm_kprobe(struct kprobe *p) 102void __kprobes arch_disarm_kprobe(struct kprobe *p)
87{ 103{
88 *p->addr = p->opcode; 104 stop_machine(__arch_disarm_kprobe, p, &cpu_online_map);
89 flush_insns(p->addr, 1);
90} 105}
91 106
92void __kprobes arch_remove_kprobe(struct kprobe *p) 107void __kprobes arch_remove_kprobe(struct kprobe *p)
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
index d4d4f77c91b2..c6c57b640b6b 100644
--- a/arch/arm/kernel/setup.c
+++ b/arch/arm/kernel/setup.c
@@ -45,6 +45,7 @@
45 45
46#include "compat.h" 46#include "compat.h"
47#include "atags.h" 47#include "atags.h"
48#include "tcm.h"
48 49
49#ifndef MEM_SIZE 50#ifndef MEM_SIZE
50#define MEM_SIZE (16*1024*1024) 51#define MEM_SIZE (16*1024*1024)
@@ -749,6 +750,7 @@ void __init setup_arch(char **cmdline_p)
749#endif 750#endif
750 751
751 cpu_init(); 752 cpu_init();
753 tcm_init();
752 754
753 /* 755 /*
754 * Set up various architecture-specific pointers 756 * Set up various architecture-specific pointers
diff --git a/arch/arm/kernel/tcm.c b/arch/arm/kernel/tcm.c
new file mode 100644
index 000000000000..e50303868f1b
--- /dev/null
+++ b/arch/arm/kernel/tcm.c
@@ -0,0 +1,246 @@
1/*
2 * Copyright (C) 2008-2009 ST-Ericsson AB
3 * License terms: GNU General Public License (GPL) version 2
4 * TCM memory handling for ARM systems
5 *
6 * Author: Linus Walleij <linus.walleij@stericsson.com>
7 * Author: Rickard Andersson <rickard.andersson@stericsson.com>
8 */
9#include <linux/init.h>
10#include <linux/kernel.h>
11#include <linux/module.h>
12#include <linux/stddef.h>
13#include <linux/ioport.h>
14#include <linux/genalloc.h>
15#include <linux/string.h> /* memcpy */
16#include <asm/page.h> /* PAGE_SHIFT */
17#include <asm/cputype.h>
18#include <asm/mach/map.h>
19#include <mach/memory.h>
20#include "tcm.h"
21
22/* Scream and warn about misuse */
23#if !defined(ITCM_OFFSET) || !defined(ITCM_END) || \
24 !defined(DTCM_OFFSET) || !defined(DTCM_END)
25#error "TCM support selected but offsets not defined!"
26#endif
27
28static struct gen_pool *tcm_pool;
29
30/* TCM section definitions from the linker */
31extern char __itcm_start, __sitcm_text, __eitcm_text;
32extern char __dtcm_start, __sdtcm_data, __edtcm_data;
33
34/*
35 * TCM memory resources
36 */
37static struct resource dtcm_res = {
38 .name = "DTCM RAM",
39 .start = DTCM_OFFSET,
40 .end = DTCM_END,
41 .flags = IORESOURCE_MEM
42};
43
44static struct resource itcm_res = {
45 .name = "ITCM RAM",
46 .start = ITCM_OFFSET,
47 .end = ITCM_END,
48 .flags = IORESOURCE_MEM
49};
50
51static struct map_desc dtcm_iomap[] __initdata = {
52 {
53 .virtual = DTCM_OFFSET,
54 .pfn = __phys_to_pfn(DTCM_OFFSET),
55 .length = (DTCM_END - DTCM_OFFSET + 1),
56 .type = MT_UNCACHED
57 }
58};
59
60static struct map_desc itcm_iomap[] __initdata = {
61 {
62 .virtual = ITCM_OFFSET,
63 .pfn = __phys_to_pfn(ITCM_OFFSET),
64 .length = (ITCM_END - ITCM_OFFSET + 1),
65 .type = MT_UNCACHED
66 }
67};
68
69/*
70 * Allocate a chunk of TCM memory
71 */
72void *tcm_alloc(size_t len)
73{
74 unsigned long vaddr;
75
76 if (!tcm_pool)
77 return NULL;
78
79 vaddr = gen_pool_alloc(tcm_pool, len);
80 if (!vaddr)
81 return NULL;
82
83 return (void *) vaddr;
84}
85EXPORT_SYMBOL(tcm_alloc);
86
87/*
88 * Free a chunk of TCM memory
89 */
90void tcm_free(void *addr, size_t len)
91{
92 gen_pool_free(tcm_pool, (unsigned long) addr, len);
93}
94EXPORT_SYMBOL(tcm_free);
95
96
97static void __init setup_tcm_bank(u8 type, u32 offset, u32 expected_size)
98{
99 const int tcm_sizes[16] = { 0, -1, -1, 4, 8, 16, 32, 64, 128,
100 256, 512, 1024, -1, -1, -1, -1 };
101 u32 tcm_region;
102 int tcm_size;
103
104 /* Read the special TCM region register c9, 0 */
105 if (!type)
106 asm("mrc p15, 0, %0, c9, c1, 0"
107 : "=r" (tcm_region));
108 else
109 asm("mrc p15, 0, %0, c9, c1, 1"
110 : "=r" (tcm_region));
111
112 tcm_size = tcm_sizes[(tcm_region >> 2) & 0x0f];
113 if (tcm_size < 0) {
114 pr_err("CPU: %sTCM of unknown size!\n",
115 type ? "I" : "D");
116 } else {
117 pr_info("CPU: found %sTCM %dk @ %08x, %senabled\n",
118 type ? "I" : "D",
119 tcm_size,
120 (tcm_region & 0xfffff000U),
121 (tcm_region & 1) ? "" : "not ");
122 }
123
124 if (tcm_size != expected_size) {
125 pr_crit("CPU: %sTCM was detected %dk but expected %dk!\n",
126 type ? "I" : "D",
127 tcm_size,
128 expected_size);
129 /* Adjust to the expected size? what can we do... */
130 }
131
132 /* Force move the TCM bank to where we want it, enable */
133 tcm_region = offset | (tcm_region & 0x00000ffeU) | 1;
134
135 if (!type)
136 asm("mcr p15, 0, %0, c9, c1, 0"
137 : /* No output operands */
138 : "r" (tcm_region));
139 else
140 asm("mcr p15, 0, %0, c9, c1, 1"
141 : /* No output operands */
142 : "r" (tcm_region));
143
144 pr_debug("CPU: moved %sTCM %dk to %08x, enabled\n",
145 type ? "I" : "D",
146 tcm_size,
147 (tcm_region & 0xfffff000U));
148}
149
150/*
151 * This initializes the TCM memory
152 */
153void __init tcm_init(void)
154{
155 u32 tcm_status = read_cpuid_tcmstatus();
156 char *start;
157 char *end;
158 char *ram;
159
160 /* Setup DTCM if present */
161 if (tcm_status & (1 << 16)) {
162 setup_tcm_bank(0, DTCM_OFFSET,
163 (DTCM_END - DTCM_OFFSET + 1) >> 10);
164 request_resource(&iomem_resource, &dtcm_res);
165 iotable_init(dtcm_iomap, 1);
166 /* Copy data from RAM to DTCM */
167 start = &__sdtcm_data;
168 end = &__edtcm_data;
169 ram = &__dtcm_start;
170 memcpy(start, ram, (end-start));
171 pr_debug("CPU DTCM: copied data from %p - %p\n", start, end);
172 }
173
174 /* Setup ITCM if present */
175 if (tcm_status & 1) {
176 setup_tcm_bank(1, ITCM_OFFSET,
177 (ITCM_END - ITCM_OFFSET + 1) >> 10);
178 request_resource(&iomem_resource, &itcm_res);
179 iotable_init(itcm_iomap, 1);
180 /* Copy code from RAM to ITCM */
181 start = &__sitcm_text;
182 end = &__eitcm_text;
183 ram = &__itcm_start;
184 memcpy(start, ram, (end-start));
185 pr_debug("CPU ITCM: copied code from %p - %p\n", start, end);
186 }
187}
188
189/*
190 * This creates the TCM memory pool and has to be done later,
191 * during the core_initicalls, since the allocator is not yet
192 * up and running when the first initialization runs.
193 */
194static int __init setup_tcm_pool(void)
195{
196 u32 tcm_status = read_cpuid_tcmstatus();
197 u32 dtcm_pool_start = (u32) &__edtcm_data;
198 u32 itcm_pool_start = (u32) &__eitcm_text;
199 int ret;
200
201 /*
202 * Set up malloc pool, 2^2 = 4 bytes granularity since
203 * the TCM is sometimes just 4 KiB. NB: pages and cache
204 * line alignments does not matter in TCM!
205 */
206 tcm_pool = gen_pool_create(2, -1);
207
208 pr_debug("Setting up TCM memory pool\n");
209
210 /* Add the rest of DTCM to the TCM pool */
211 if (tcm_status & (1 << 16)) {
212 if (dtcm_pool_start < DTCM_END) {
213 ret = gen_pool_add(tcm_pool, dtcm_pool_start,
214 DTCM_END - dtcm_pool_start + 1, -1);
215 if (ret) {
216 pr_err("CPU DTCM: could not add DTCM " \
217 "remainder to pool!\n");
218 return ret;
219 }
220 pr_debug("CPU DTCM: Added %08x bytes @ %08x to " \
221 "the TCM memory pool\n",
222 DTCM_END - dtcm_pool_start + 1,
223 dtcm_pool_start);
224 }
225 }
226
227 /* Add the rest of ITCM to the TCM pool */
228 if (tcm_status & 1) {
229 if (itcm_pool_start < ITCM_END) {
230 ret = gen_pool_add(tcm_pool, itcm_pool_start,
231 ITCM_END - itcm_pool_start + 1, -1);
232 if (ret) {
233 pr_err("CPU ITCM: could not add ITCM " \
234 "remainder to pool!\n");
235 return ret;
236 }
237 pr_debug("CPU ITCM: Added %08x bytes @ %08x to " \
238 "the TCM memory pool\n",
239 ITCM_END - itcm_pool_start + 1,
240 itcm_pool_start);
241 }
242 }
243 return 0;
244}
245
246core_initcall(setup_tcm_pool);
diff --git a/arch/arm/kernel/tcm.h b/arch/arm/kernel/tcm.h
new file mode 100644
index 000000000000..8015ad434a40
--- /dev/null
+++ b/arch/arm/kernel/tcm.h
@@ -0,0 +1,17 @@
1/*
2 * Copyright (C) 2008-2009 ST-Ericsson AB
3 * License terms: GNU General Public License (GPL) version 2
4 * TCM memory handling for ARM systems
5 *
6 * Author: Linus Walleij <linus.walleij@stericsson.com>
7 * Author: Rickard Andersson <rickard.andersson@stericsson.com>
8 */
9
10#ifdef CONFIG_HAVE_TCM
11void __init tcm_init(void);
12#else
13/* No TCM support, just blank inlines to be optimized out */
14inline void tcm_init(void)
15{
16}
17#endif
diff --git a/arch/arm/kernel/vmlinux.lds.S b/arch/arm/kernel/vmlinux.lds.S
index 5cc4812c9763..aecf87dfbaec 100644
--- a/arch/arm/kernel/vmlinux.lds.S
+++ b/arch/arm/kernel/vmlinux.lds.S
@@ -199,6 +199,63 @@ SECTIONS
199 } 199 }
200 _edata_loc = __data_loc + SIZEOF(.data); 200 _edata_loc = __data_loc + SIZEOF(.data);
201 201
202#ifdef CONFIG_HAVE_TCM
203 /*
204 * We align everything to a page boundary so we can
205 * free it after init has commenced and TCM contents have
206 * been copied to its destination.
207 */
208 .tcm_start : {
209 . = ALIGN(PAGE_SIZE);
210 __tcm_start = .;
211 __itcm_start = .;
212 }
213
214 /*
215 * Link these to the ITCM RAM
216 * Put VMA to the TCM address and LMA to the common RAM
217 * and we'll upload the contents from RAM to TCM and free
218 * the used RAM after that.
219 */
220 .text_itcm ITCM_OFFSET : AT(__itcm_start)
221 {
222 __sitcm_text = .;
223 *(.tcm.text)
224 *(.tcm.rodata)
225 . = ALIGN(4);
226 __eitcm_text = .;
227 }
228
229 /*
230 * Reset the dot pointer, this is needed to create the
231 * relative __dtcm_start below (to be used as extern in code).
232 */
233 . = ADDR(.tcm_start) + SIZEOF(.tcm_start) + SIZEOF(.text_itcm);
234
235 .dtcm_start : {
236 __dtcm_start = .;
237 }
238
239 /* TODO: add remainder of ITCM as well, that can be used for data! */
240 .data_dtcm DTCM_OFFSET : AT(__dtcm_start)
241 {
242 . = ALIGN(4);
243 __sdtcm_data = .;
244 *(.tcm.data)
245 . = ALIGN(4);
246 __edtcm_data = .;
247 }
248
249 /* Reset the dot pointer or the linker gets confused */
250 . = ADDR(.dtcm_start) + SIZEOF(.data_dtcm);
251
252 /* End marker for freeing TCM copy in linked object */
253 .tcm_end : AT(ADDR(.dtcm_start) + SIZEOF(.data_dtcm)){
254 . = ALIGN(PAGE_SIZE);
255 __tcm_end = .;
256 }
257#endif
258
202 .bss : { 259 .bss : {
203 __bss_start = .; /* BSS */ 260 __bss_start = .; /* BSS */
204 *(.bss) 261 *(.bss)
diff --git a/arch/arm/lib/copy_page.S b/arch/arm/lib/copy_page.S
index 6ae04db1ca4f..6ee2f6706f86 100644
--- a/arch/arm/lib/copy_page.S
+++ b/arch/arm/lib/copy_page.S
@@ -12,8 +12,9 @@
12#include <linux/linkage.h> 12#include <linux/linkage.h>
13#include <asm/assembler.h> 13#include <asm/assembler.h>
14#include <asm/asm-offsets.h> 14#include <asm/asm-offsets.h>
15#include <asm/cache.h>
15 16
16#define COPY_COUNT (PAGE_SZ/64 PLD( -1 )) 17#define COPY_COUNT (PAGE_SZ / (2 * L1_CACHE_BYTES) PLD( -1 ))
17 18
18 .text 19 .text
19 .align 5 20 .align 5
@@ -26,17 +27,16 @@
26ENTRY(copy_page) 27ENTRY(copy_page)
27 stmfd sp!, {r4, lr} @ 2 28 stmfd sp!, {r4, lr} @ 2
28 PLD( pld [r1, #0] ) 29 PLD( pld [r1, #0] )
29 PLD( pld [r1, #32] ) 30 PLD( pld [r1, #L1_CACHE_BYTES] )
30 mov r2, #COPY_COUNT @ 1 31 mov r2, #COPY_COUNT @ 1
31 ldmia r1!, {r3, r4, ip, lr} @ 4+1 32 ldmia r1!, {r3, r4, ip, lr} @ 4+1
321: PLD( pld [r1, #64] ) 331: PLD( pld [r1, #2 * L1_CACHE_BYTES])
33 PLD( pld [r1, #96] ) 34 PLD( pld [r1, #3 * L1_CACHE_BYTES])
342: stmia r0!, {r3, r4, ip, lr} @ 4 352:
35 ldmia r1!, {r3, r4, ip, lr} @ 4+1 36 .rept (2 * L1_CACHE_BYTES / 16 - 1)
36 stmia r0!, {r3, r4, ip, lr} @ 4
37 ldmia r1!, {r3, r4, ip, lr} @ 4+1
38 stmia r0!, {r3, r4, ip, lr} @ 4 37 stmia r0!, {r3, r4, ip, lr} @ 4
39 ldmia r1!, {r3, r4, ip, lr} @ 4 38 ldmia r1!, {r3, r4, ip, lr} @ 4
39 .endr
40 subs r2, r2, #1 @ 1 40 subs r2, r2, #1 @ 1
41 stmia r0!, {r3, r4, ip, lr} @ 4 41 stmia r0!, {r3, r4, ip, lr} @ 4
42 ldmgtia r1!, {r3, r4, ip, lr} @ 4 42 ldmgtia r1!, {r3, r4, ip, lr} @ 4
diff --git a/arch/arm/mach-at91/at91cap9_devices.c b/arch/arm/mach-at91/at91cap9_devices.c
index 412aa49ad2fb..d1f775e86353 100644
--- a/arch/arm/mach-at91/at91cap9_devices.c
+++ b/arch/arm/mach-at91/at91cap9_devices.c
@@ -771,9 +771,9 @@ void __init at91_add_device_pwm(u32 mask) {}
771 * AC97 771 * AC97
772 * -------------------------------------------------------------------- */ 772 * -------------------------------------------------------------------- */
773 773
774#if defined(CONFIG_SND_AT91_AC97) || defined(CONFIG_SND_AT91_AC97_MODULE) 774#if defined(CONFIG_SND_ATMEL_AC97C) || defined(CONFIG_SND_ATMEL_AC97C_MODULE)
775static u64 ac97_dmamask = DMA_BIT_MASK(32); 775static u64 ac97_dmamask = DMA_BIT_MASK(32);
776static struct atmel_ac97_data ac97_data; 776static struct ac97c_platform_data ac97_data;
777 777
778static struct resource ac97_resources[] = { 778static struct resource ac97_resources[] = {
779 [0] = { 779 [0] = {
@@ -789,7 +789,7 @@ static struct resource ac97_resources[] = {
789}; 789};
790 790
791static struct platform_device at91cap9_ac97_device = { 791static struct platform_device at91cap9_ac97_device = {
792 .name = "ac97c", 792 .name = "atmel_ac97c",
793 .id = 1, 793 .id = 1,
794 .dev = { 794 .dev = {
795 .dma_mask = &ac97_dmamask, 795 .dma_mask = &ac97_dmamask,
@@ -800,7 +800,7 @@ static struct platform_device at91cap9_ac97_device = {
800 .num_resources = ARRAY_SIZE(ac97_resources), 800 .num_resources = ARRAY_SIZE(ac97_resources),
801}; 801};
802 802
803void __init at91_add_device_ac97(struct atmel_ac97_data *data) 803void __init at91_add_device_ac97(struct ac97c_platform_data *data)
804{ 804{
805 if (!data) 805 if (!data)
806 return; 806 return;
@@ -818,7 +818,7 @@ void __init at91_add_device_ac97(struct atmel_ac97_data *data)
818 platform_device_register(&at91cap9_ac97_device); 818 platform_device_register(&at91cap9_ac97_device);
819} 819}
820#else 820#else
821void __init at91_add_device_ac97(struct atmel_ac97_data *data) {} 821void __init at91_add_device_ac97(struct ac97c_platform_data *data) {}
822#endif 822#endif
823 823
824 824
diff --git a/arch/arm/mach-at91/at91sam9g45_devices.c b/arch/arm/mach-at91/at91sam9g45_devices.c
index d746e8621bc2..d581cff80c4c 100644
--- a/arch/arm/mach-at91/at91sam9g45_devices.c
+++ b/arch/arm/mach-at91/at91sam9g45_devices.c
@@ -24,11 +24,59 @@
24#include <mach/at91sam9g45.h> 24#include <mach/at91sam9g45.h>
25#include <mach/at91sam9g45_matrix.h> 25#include <mach/at91sam9g45_matrix.h>
26#include <mach/at91sam9_smc.h> 26#include <mach/at91sam9_smc.h>
27#include <mach/at_hdmac.h>
27 28
28#include "generic.h" 29#include "generic.h"
29 30
30 31
31/* -------------------------------------------------------------------- 32/* --------------------------------------------------------------------
33 * HDMAC - AHB DMA Controller
34 * -------------------------------------------------------------------- */
35
36#if defined(CONFIG_AT_HDMAC) || defined(CONFIG_AT_HDMAC_MODULE)
37static u64 hdmac_dmamask = DMA_BIT_MASK(32);
38
39static struct at_dma_platform_data atdma_pdata = {
40 .nr_channels = 8,
41};
42
43static struct resource hdmac_resources[] = {
44 [0] = {
45 .start = AT91_BASE_SYS + AT91_DMA,
46 .end = AT91_BASE_SYS + AT91_DMA + SZ_512 - 1,
47 .flags = IORESOURCE_MEM,
48 },
49 [2] = {
50 .start = AT91SAM9G45_ID_DMA,
51 .end = AT91SAM9G45_ID_DMA,
52 .flags = IORESOURCE_IRQ,
53 },
54};
55
56static struct platform_device at_hdmac_device = {
57 .name = "at_hdmac",
58 .id = -1,
59 .dev = {
60 .dma_mask = &hdmac_dmamask,
61 .coherent_dma_mask = DMA_BIT_MASK(32),
62 .platform_data = &atdma_pdata,
63 },
64 .resource = hdmac_resources,
65 .num_resources = ARRAY_SIZE(hdmac_resources),
66};
67
68void __init at91_add_device_hdmac(void)
69{
70 dma_cap_set(DMA_MEMCPY, atdma_pdata.cap_mask);
71 dma_cap_set(DMA_SLAVE, atdma_pdata.cap_mask);
72 platform_device_register(&at_hdmac_device);
73}
74#else
75void __init at91_add_device_hdmac(void) {}
76#endif
77
78
79/* --------------------------------------------------------------------
32 * USB Host (OHCI) 80 * USB Host (OHCI)
33 * -------------------------------------------------------------------- */ 81 * -------------------------------------------------------------------- */
34 82
@@ -550,6 +598,61 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices)
550 598
551 599
552/* -------------------------------------------------------------------- 600/* --------------------------------------------------------------------
601 * AC97
602 * -------------------------------------------------------------------- */
603
604#if defined(CONFIG_SND_ATMEL_AC97C) || defined(CONFIG_SND_ATMEL_AC97C_MODULE)
605static u64 ac97_dmamask = DMA_BIT_MASK(32);
606static struct ac97c_platform_data ac97_data;
607
608static struct resource ac97_resources[] = {
609 [0] = {
610 .start = AT91SAM9G45_BASE_AC97C,
611 .end = AT91SAM9G45_BASE_AC97C + SZ_16K - 1,
612 .flags = IORESOURCE_MEM,
613 },
614 [1] = {
615 .start = AT91SAM9G45_ID_AC97C,
616 .end = AT91SAM9G45_ID_AC97C,
617 .flags = IORESOURCE_IRQ,
618 },
619};
620
621static struct platform_device at91sam9g45_ac97_device = {
622 .name = "atmel_ac97c",
623 .id = 0,
624 .dev = {
625 .dma_mask = &ac97_dmamask,
626 .coherent_dma_mask = DMA_BIT_MASK(32),
627 .platform_data = &ac97_data,
628 },
629 .resource = ac97_resources,
630 .num_resources = ARRAY_SIZE(ac97_resources),
631};
632
633void __init at91_add_device_ac97(struct ac97c_platform_data *data)
634{
635 if (!data)
636 return;
637
638 at91_set_A_periph(AT91_PIN_PD8, 0); /* AC97FS */
639 at91_set_A_periph(AT91_PIN_PD9, 0); /* AC97CK */
640 at91_set_A_periph(AT91_PIN_PD7, 0); /* AC97TX */
641 at91_set_A_periph(AT91_PIN_PD6, 0); /* AC97RX */
642
643 /* reset */
644 if (data->reset_pin)
645 at91_set_gpio_output(data->reset_pin, 0);
646
647 ac97_data = *data;
648 platform_device_register(&at91sam9g45_ac97_device);
649}
650#else
651void __init at91_add_device_ac97(struct ac97c_platform_data *data) {}
652#endif
653
654
655/* --------------------------------------------------------------------
553 * LCD Controller 656 * LCD Controller
554 * -------------------------------------------------------------------- */ 657 * -------------------------------------------------------------------- */
555 658
@@ -1220,6 +1323,7 @@ void __init at91_add_device_serial(void) {}
1220 */ 1323 */
1221static int __init at91_add_standard_devices(void) 1324static int __init at91_add_standard_devices(void)
1222{ 1325{
1326 at91_add_device_hdmac();
1223 at91_add_device_rtc(); 1327 at91_add_device_rtc();
1224 at91_add_device_rtt(); 1328 at91_add_device_rtt();
1225 at91_add_device_watchdog(); 1329 at91_add_device_watchdog();
diff --git a/arch/arm/mach-at91/at91sam9rl_devices.c b/arch/arm/mach-at91/at91sam9rl_devices.c
index 728186515cdf..d345f5453dbe 100644
--- a/arch/arm/mach-at91/at91sam9rl_devices.c
+++ b/arch/arm/mach-at91/at91sam9rl_devices.c
@@ -21,11 +21,57 @@
21#include <mach/at91sam9rl.h> 21#include <mach/at91sam9rl.h>
22#include <mach/at91sam9rl_matrix.h> 22#include <mach/at91sam9rl_matrix.h>
23#include <mach/at91sam9_smc.h> 23#include <mach/at91sam9_smc.h>
24#include <mach/at_hdmac.h>
24 25
25#include "generic.h" 26#include "generic.h"
26 27
27 28
28/* -------------------------------------------------------------------- 29/* --------------------------------------------------------------------
30 * HDMAC - AHB DMA Controller
31 * -------------------------------------------------------------------- */
32
33#if defined(CONFIG_AT_HDMAC) || defined(CONFIG_AT_HDMAC_MODULE)
34static u64 hdmac_dmamask = DMA_BIT_MASK(32);
35
36static struct at_dma_platform_data atdma_pdata = {
37 .nr_channels = 2,
38};
39
40static struct resource hdmac_resources[] = {
41 [0] = {
42 .start = AT91_BASE_SYS + AT91_DMA,
43 .end = AT91_BASE_SYS + AT91_DMA + SZ_512 - 1,
44 .flags = IORESOURCE_MEM,
45 },
46 [2] = {
47 .start = AT91SAM9RL_ID_DMA,
48 .end = AT91SAM9RL_ID_DMA,
49 .flags = IORESOURCE_IRQ,
50 },
51};
52
53static struct platform_device at_hdmac_device = {
54 .name = "at_hdmac",
55 .id = -1,
56 .dev = {
57 .dma_mask = &hdmac_dmamask,
58 .coherent_dma_mask = DMA_BIT_MASK(32),
59 .platform_data = &atdma_pdata,
60 },
61 .resource = hdmac_resources,
62 .num_resources = ARRAY_SIZE(hdmac_resources),
63};
64
65void __init at91_add_device_hdmac(void)
66{
67 dma_cap_set(DMA_MEMCPY, atdma_pdata.cap_mask);
68 platform_device_register(&at_hdmac_device);
69}
70#else
71void __init at91_add_device_hdmac(void) {}
72#endif
73
74/* --------------------------------------------------------------------
29 * USB HS Device (Gadget) 75 * USB HS Device (Gadget)
30 * -------------------------------------------------------------------- */ 76 * -------------------------------------------------------------------- */
31 77
@@ -398,6 +444,61 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices)
398 444
399 445
400/* -------------------------------------------------------------------- 446/* --------------------------------------------------------------------
447 * AC97
448 * -------------------------------------------------------------------- */
449
450#if defined(CONFIG_SND_ATMEL_AC97C) || defined(CONFIG_SND_ATMEL_AC97C_MODULE)
451static u64 ac97_dmamask = DMA_BIT_MASK(32);
452static struct ac97c_platform_data ac97_data;
453
454static struct resource ac97_resources[] = {
455 [0] = {
456 .start = AT91SAM9RL_BASE_AC97C,
457 .end = AT91SAM9RL_BASE_AC97C + SZ_16K - 1,
458 .flags = IORESOURCE_MEM,
459 },
460 [1] = {
461 .start = AT91SAM9RL_ID_AC97C,
462 .end = AT91SAM9RL_ID_AC97C,
463 .flags = IORESOURCE_IRQ,
464 },
465};
466
467static struct platform_device at91sam9rl_ac97_device = {
468 .name = "atmel_ac97c",
469 .id = 0,
470 .dev = {
471 .dma_mask = &ac97_dmamask,
472 .coherent_dma_mask = DMA_BIT_MASK(32),
473 .platform_data = &ac97_data,
474 },
475 .resource = ac97_resources,
476 .num_resources = ARRAY_SIZE(ac97_resources),
477};
478
479void __init at91_add_device_ac97(struct ac97c_platform_data *data)
480{
481 if (!data)
482 return;
483
484 at91_set_A_periph(AT91_PIN_PD1, 0); /* AC97FS */
485 at91_set_A_periph(AT91_PIN_PD2, 0); /* AC97CK */
486 at91_set_A_periph(AT91_PIN_PD3, 0); /* AC97TX */
487 at91_set_A_periph(AT91_PIN_PD4, 0); /* AC97RX */
488
489 /* reset */
490 if (data->reset_pin)
491 at91_set_gpio_output(data->reset_pin, 0);
492
493 ac97_data = *data;
494 platform_device_register(&at91sam9rl_ac97_device);
495}
496#else
497void __init at91_add_device_ac97(struct ac97c_platform_data *data) {}
498#endif
499
500
501/* --------------------------------------------------------------------
401 * LCD Controller 502 * LCD Controller
402 * -------------------------------------------------------------------- */ 503 * -------------------------------------------------------------------- */
403 504
@@ -1103,6 +1204,7 @@ void __init at91_add_device_serial(void) {}
1103 */ 1204 */
1104static int __init at91_add_standard_devices(void) 1205static int __init at91_add_standard_devices(void)
1105{ 1206{
1207 at91_add_device_hdmac();
1106 at91_add_device_rtc(); 1208 at91_add_device_rtc();
1107 at91_add_device_rtt(); 1209 at91_add_device_rtt();
1108 at91_add_device_watchdog(); 1210 at91_add_device_watchdog();
diff --git a/arch/arm/mach-at91/board-cap9adk.c b/arch/arm/mach-at91/board-cap9adk.c
index 83a1a0fef47b..d6940870e403 100644
--- a/arch/arm/mach-at91/board-cap9adk.c
+++ b/arch/arm/mach-at91/board-cap9adk.c
@@ -364,7 +364,7 @@ static struct atmel_lcdfb_info __initdata cap9adk_lcdc_data;
364/* 364/*
365 * AC97 365 * AC97
366 */ 366 */
367static struct atmel_ac97_data cap9adk_ac97_data = { 367static struct ac97c_platform_data cap9adk_ac97_data = {
368// .reset_pin = ... not connected 368// .reset_pin = ... not connected
369}; 369};
370 370
diff --git a/arch/arm/mach-at91/board-neocore926.c b/arch/arm/mach-at91/board-neocore926.c
index 8c0b71c95be4..7c1e382330fb 100644
--- a/arch/arm/mach-at91/board-neocore926.c
+++ b/arch/arm/mach-at91/board-neocore926.c
@@ -340,7 +340,7 @@ static void __init neocore926_add_device_buttons(void) {}
340/* 340/*
341 * AC97 341 * AC97
342 */ 342 */
343static struct atmel_ac97_data neocore926_ac97_data = { 343static struct ac97c_platform_data neocore926_ac97_data = {
344 .reset_pin = AT91_PIN_PA13, 344 .reset_pin = AT91_PIN_PA13,
345}; 345};
346 346
diff --git a/arch/arm/mach-at91/board-sam9m10g45ek.c b/arch/arm/mach-at91/board-sam9m10g45ek.c
index b8558eae5229..64c3843f323d 100644
--- a/arch/arm/mach-at91/board-sam9m10g45ek.c
+++ b/arch/arm/mach-at91/board-sam9m10g45ek.c
@@ -311,6 +311,14 @@ static void __init ek_add_device_buttons(void) {}
311 311
312 312
313/* 313/*
314 * AC97
315 * reset_pin is not connected: NRST
316 */
317static struct ac97c_platform_data ek_ac97_data = {
318};
319
320
321/*
314 * LEDs ... these could all be PWM-driven, for variable brightness 322 * LEDs ... these could all be PWM-driven, for variable brightness
315 */ 323 */
316static struct gpio_led ek_leds[] = { 324static struct gpio_led ek_leds[] = {
@@ -372,6 +380,8 @@ static void __init ek_board_init(void)
372 at91_add_device_lcdc(&ek_lcdc_data); 380 at91_add_device_lcdc(&ek_lcdc_data);
373 /* Push Buttons */ 381 /* Push Buttons */
374 ek_add_device_buttons(); 382 ek_add_device_buttons();
383 /* AC97 */
384 at91_add_device_ac97(&ek_ac97_data);
375 /* LEDs */ 385 /* LEDs */
376 at91_gpio_leds(ek_leds, ARRAY_SIZE(ek_leds)); 386 at91_gpio_leds(ek_leds, ARRAY_SIZE(ek_leds));
377 at91_pwm_leds(ek_pwm_led, ARRAY_SIZE(ek_pwm_led)); 387 at91_pwm_leds(ek_pwm_led, ARRAY_SIZE(ek_pwm_led));
diff --git a/arch/arm/mach-at91/board-sam9rlek.c b/arch/arm/mach-at91/board-sam9rlek.c
index 94ffb5c103b9..bd28e989e54e 100644
--- a/arch/arm/mach-at91/board-sam9rlek.c
+++ b/arch/arm/mach-at91/board-sam9rlek.c
@@ -211,6 +211,14 @@ static struct atmel_lcdfb_info __initdata ek_lcdc_data;
211 211
212 212
213/* 213/*
214 * AC97
215 * reset_pin is not connected: NRST
216 */
217static struct ac97c_platform_data ek_ac97_data = {
218};
219
220
221/*
214 * LEDs 222 * LEDs
215 */ 223 */
216static struct gpio_led ek_leds[] = { 224static struct gpio_led ek_leds[] = {
@@ -299,6 +307,8 @@ static void __init ek_board_init(void)
299 at91_add_device_mmc(0, &ek_mmc_data); 307 at91_add_device_mmc(0, &ek_mmc_data);
300 /* LCD Controller */ 308 /* LCD Controller */
301 at91_add_device_lcdc(&ek_lcdc_data); 309 at91_add_device_lcdc(&ek_lcdc_data);
310 /* AC97 */
311 at91_add_device_ac97(&ek_ac97_data);
302 /* Touch Screen Controller */ 312 /* Touch Screen Controller */
303 at91_add_device_tsadcc(); 313 at91_add_device_tsadcc();
304 /* LEDs */ 314 /* LEDs */
diff --git a/arch/arm/mach-integrator/integrator_cp.c b/arch/arm/mach-integrator/integrator_cp.c
index 2a318eba1b07..3f35293d457a 100644
--- a/arch/arm/mach-integrator/integrator_cp.c
+++ b/arch/arm/mach-integrator/integrator_cp.c
@@ -19,6 +19,7 @@
19#include <linux/amba/bus.h> 19#include <linux/amba/bus.h>
20#include <linux/amba/kmi.h> 20#include <linux/amba/kmi.h>
21#include <linux/amba/clcd.h> 21#include <linux/amba/clcd.h>
22#include <linux/amba/mmci.h>
22#include <linux/io.h> 23#include <linux/io.h>
23 24
24#include <asm/clkdev.h> 25#include <asm/clkdev.h>
@@ -35,7 +36,6 @@
35#include <asm/mach/arch.h> 36#include <asm/mach/arch.h>
36#include <asm/mach/flash.h> 37#include <asm/mach/flash.h>
37#include <asm/mach/irq.h> 38#include <asm/mach/irq.h>
38#include <asm/mach/mmc.h>
39#include <asm/mach/map.h> 39#include <asm/mach/map.h>
40#include <asm/mach/time.h> 40#include <asm/mach/time.h>
41 41
@@ -400,7 +400,7 @@ static unsigned int mmc_status(struct device *dev)
400 return status & 8; 400 return status & 8;
401} 401}
402 402
403static struct mmc_platform_data mmc_data = { 403static struct mmci_platform_data mmc_data = {
404 .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34, 404 .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34,
405 .status = mmc_status, 405 .status = mmc_status,
406 .gpio_wp = -1, 406 .gpio_wp = -1,
diff --git a/arch/arm/mach-iop13xx/include/mach/adma.h b/arch/arm/mach-iop13xx/include/mach/adma.h
index 5722e86f2174..6d3782d85a9f 100644
--- a/arch/arm/mach-iop13xx/include/mach/adma.h
+++ b/arch/arm/mach-iop13xx/include/mach/adma.h
@@ -150,6 +150,8 @@ static inline int iop_adma_get_max_xor(void)
150 return 16; 150 return 16;
151} 151}
152 152
153#define iop_adma_get_max_pq iop_adma_get_max_xor
154
153static inline u32 iop_chan_get_current_descriptor(struct iop_adma_chan *chan) 155static inline u32 iop_chan_get_current_descriptor(struct iop_adma_chan *chan)
154{ 156{
155 return __raw_readl(ADMA_ADAR(chan)); 157 return __raw_readl(ADMA_ADAR(chan));
@@ -211,7 +213,10 @@ iop_chan_xor_slot_count(size_t len, int src_cnt, int *slots_per_op)
211#define IOP_ADMA_MAX_BYTE_COUNT ADMA_MAX_BYTE_COUNT 213#define IOP_ADMA_MAX_BYTE_COUNT ADMA_MAX_BYTE_COUNT
212#define IOP_ADMA_ZERO_SUM_MAX_BYTE_COUNT ADMA_MAX_BYTE_COUNT 214#define IOP_ADMA_ZERO_SUM_MAX_BYTE_COUNT ADMA_MAX_BYTE_COUNT
213#define IOP_ADMA_XOR_MAX_BYTE_COUNT ADMA_MAX_BYTE_COUNT 215#define IOP_ADMA_XOR_MAX_BYTE_COUNT ADMA_MAX_BYTE_COUNT
216#define IOP_ADMA_PQ_MAX_BYTE_COUNT ADMA_MAX_BYTE_COUNT
214#define iop_chan_zero_sum_slot_count(l, s, o) iop_chan_xor_slot_count(l, s, o) 217#define iop_chan_zero_sum_slot_count(l, s, o) iop_chan_xor_slot_count(l, s, o)
218#define iop_chan_pq_slot_count iop_chan_xor_slot_count
219#define iop_chan_pq_zero_sum_slot_count iop_chan_xor_slot_count
215 220
216static inline u32 iop_desc_get_dest_addr(struct iop_adma_desc_slot *desc, 221static inline u32 iop_desc_get_dest_addr(struct iop_adma_desc_slot *desc,
217 struct iop_adma_chan *chan) 222 struct iop_adma_chan *chan)
@@ -220,6 +225,13 @@ static inline u32 iop_desc_get_dest_addr(struct iop_adma_desc_slot *desc,
220 return hw_desc->dest_addr; 225 return hw_desc->dest_addr;
221} 226}
222 227
228static inline u32 iop_desc_get_qdest_addr(struct iop_adma_desc_slot *desc,
229 struct iop_adma_chan *chan)
230{
231 struct iop13xx_adma_desc_hw *hw_desc = desc->hw_desc;
232 return hw_desc->q_dest_addr;
233}
234
223static inline u32 iop_desc_get_byte_count(struct iop_adma_desc_slot *desc, 235static inline u32 iop_desc_get_byte_count(struct iop_adma_desc_slot *desc,
224 struct iop_adma_chan *chan) 236 struct iop_adma_chan *chan)
225{ 237{
@@ -319,6 +331,58 @@ iop_desc_init_zero_sum(struct iop_adma_desc_slot *desc, int src_cnt,
319 return 1; 331 return 1;
320} 332}
321 333
334static inline void
335iop_desc_init_pq(struct iop_adma_desc_slot *desc, int src_cnt,
336 unsigned long flags)
337{
338 struct iop13xx_adma_desc_hw *hw_desc = desc->hw_desc;
339 union {
340 u32 value;
341 struct iop13xx_adma_desc_ctrl field;
342 } u_desc_ctrl;
343
344 u_desc_ctrl.value = 0;
345 u_desc_ctrl.field.src_select = src_cnt - 1;
346 u_desc_ctrl.field.xfer_dir = 3; /* local to internal bus */
347 u_desc_ctrl.field.pq_xfer_en = 1;
348 u_desc_ctrl.field.p_xfer_dis = !!(flags & DMA_PREP_PQ_DISABLE_P);
349 u_desc_ctrl.field.int_en = flags & DMA_PREP_INTERRUPT;
350 hw_desc->desc_ctrl = u_desc_ctrl.value;
351}
352
353static inline int iop_desc_is_pq(struct iop_adma_desc_slot *desc)
354{
355 struct iop13xx_adma_desc_hw *hw_desc = desc->hw_desc;
356 union {
357 u32 value;
358 struct iop13xx_adma_desc_ctrl field;
359 } u_desc_ctrl;
360
361 u_desc_ctrl.value = hw_desc->desc_ctrl;
362 return u_desc_ctrl.field.pq_xfer_en;
363}
364
365static inline void
366iop_desc_init_pq_zero_sum(struct iop_adma_desc_slot *desc, int src_cnt,
367 unsigned long flags)
368{
369 struct iop13xx_adma_desc_hw *hw_desc = desc->hw_desc;
370 union {
371 u32 value;
372 struct iop13xx_adma_desc_ctrl field;
373 } u_desc_ctrl;
374
375 u_desc_ctrl.value = 0;
376 u_desc_ctrl.field.src_select = src_cnt - 1;
377 u_desc_ctrl.field.xfer_dir = 3; /* local to internal bus */
378 u_desc_ctrl.field.zero_result = 1;
379 u_desc_ctrl.field.status_write_back_en = 1;
380 u_desc_ctrl.field.pq_xfer_en = 1;
381 u_desc_ctrl.field.p_xfer_dis = !!(flags & DMA_PREP_PQ_DISABLE_P);
382 u_desc_ctrl.field.int_en = flags & DMA_PREP_INTERRUPT;
383 hw_desc->desc_ctrl = u_desc_ctrl.value;
384}
385
322static inline void iop_desc_set_byte_count(struct iop_adma_desc_slot *desc, 386static inline void iop_desc_set_byte_count(struct iop_adma_desc_slot *desc,
323 struct iop_adma_chan *chan, 387 struct iop_adma_chan *chan,
324 u32 byte_count) 388 u32 byte_count)
@@ -351,6 +415,7 @@ iop_desc_set_zero_sum_byte_count(struct iop_adma_desc_slot *desc, u32 len)
351 } 415 }
352} 416}
353 417
418#define iop_desc_set_pq_zero_sum_byte_count iop_desc_set_zero_sum_byte_count
354 419
355static inline void iop_desc_set_dest_addr(struct iop_adma_desc_slot *desc, 420static inline void iop_desc_set_dest_addr(struct iop_adma_desc_slot *desc,
356 struct iop_adma_chan *chan, 421 struct iop_adma_chan *chan,
@@ -361,6 +426,16 @@ static inline void iop_desc_set_dest_addr(struct iop_adma_desc_slot *desc,
361 hw_desc->upper_dest_addr = 0; 426 hw_desc->upper_dest_addr = 0;
362} 427}
363 428
429static inline void
430iop_desc_set_pq_addr(struct iop_adma_desc_slot *desc, dma_addr_t *addr)
431{
432 struct iop13xx_adma_desc_hw *hw_desc = desc->hw_desc;
433
434 hw_desc->dest_addr = addr[0];
435 hw_desc->q_dest_addr = addr[1];
436 hw_desc->upper_dest_addr = 0;
437}
438
364static inline void iop_desc_set_memcpy_src_addr(struct iop_adma_desc_slot *desc, 439static inline void iop_desc_set_memcpy_src_addr(struct iop_adma_desc_slot *desc,
365 dma_addr_t addr) 440 dma_addr_t addr)
366{ 441{
@@ -389,6 +464,29 @@ static inline void iop_desc_set_xor_src_addr(struct iop_adma_desc_slot *desc,
389} 464}
390 465
391static inline void 466static inline void
467iop_desc_set_pq_src_addr(struct iop_adma_desc_slot *desc, int src_idx,
468 dma_addr_t addr, unsigned char coef)
469{
470 int slot_cnt = desc->slot_cnt, slots_per_op = desc->slots_per_op;
471 struct iop13xx_adma_desc_hw *hw_desc = desc->hw_desc, *iter;
472 struct iop13xx_adma_src *src;
473 int i = 0;
474
475 do {
476 iter = iop_hw_desc_slot_idx(hw_desc, i);
477 src = &iter->src[src_idx];
478 src->src_addr = addr;
479 src->pq_upper_src_addr = 0;
480 src->pq_dmlt = coef;
481 slot_cnt -= slots_per_op;
482 if (slot_cnt) {
483 i += slots_per_op;
484 addr += IOP_ADMA_PQ_MAX_BYTE_COUNT;
485 }
486 } while (slot_cnt);
487}
488
489static inline void
392iop_desc_init_interrupt(struct iop_adma_desc_slot *desc, 490iop_desc_init_interrupt(struct iop_adma_desc_slot *desc,
393 struct iop_adma_chan *chan) 491 struct iop_adma_chan *chan)
394{ 492{
@@ -399,6 +497,15 @@ iop_desc_init_interrupt(struct iop_adma_desc_slot *desc,
399} 497}
400 498
401#define iop_desc_set_zero_sum_src_addr iop_desc_set_xor_src_addr 499#define iop_desc_set_zero_sum_src_addr iop_desc_set_xor_src_addr
500#define iop_desc_set_pq_zero_sum_src_addr iop_desc_set_pq_src_addr
501
502static inline void
503iop_desc_set_pq_zero_sum_addr(struct iop_adma_desc_slot *desc, int pq_idx,
504 dma_addr_t *src)
505{
506 iop_desc_set_xor_src_addr(desc, pq_idx, src[pq_idx]);
507 iop_desc_set_xor_src_addr(desc, pq_idx+1, src[pq_idx+1]);
508}
402 509
403static inline void iop_desc_set_next_desc(struct iop_adma_desc_slot *desc, 510static inline void iop_desc_set_next_desc(struct iop_adma_desc_slot *desc,
404 u32 next_desc_addr) 511 u32 next_desc_addr)
@@ -428,18 +535,20 @@ static inline void iop_desc_set_block_fill_val(struct iop_adma_desc_slot *desc,
428 hw_desc->block_fill_data = val; 535 hw_desc->block_fill_data = val;
429} 536}
430 537
431static inline int iop_desc_get_zero_result(struct iop_adma_desc_slot *desc) 538static inline enum sum_check_flags
539iop_desc_get_zero_result(struct iop_adma_desc_slot *desc)
432{ 540{
433 struct iop13xx_adma_desc_hw *hw_desc = desc->hw_desc; 541 struct iop13xx_adma_desc_hw *hw_desc = desc->hw_desc;
434 struct iop13xx_adma_desc_ctrl desc_ctrl = hw_desc->desc_ctrl_field; 542 struct iop13xx_adma_desc_ctrl desc_ctrl = hw_desc->desc_ctrl_field;
435 struct iop13xx_adma_byte_count byte_count = hw_desc->byte_count_field; 543 struct iop13xx_adma_byte_count byte_count = hw_desc->byte_count_field;
544 enum sum_check_flags flags;
436 545
437 BUG_ON(!(byte_count.tx_complete && desc_ctrl.zero_result)); 546 BUG_ON(!(byte_count.tx_complete && desc_ctrl.zero_result));
438 547
439 if (desc_ctrl.pq_xfer_en) 548 flags = byte_count.zero_result_err_q << SUM_CHECK_Q;
440 return byte_count.zero_result_err_q; 549 flags |= byte_count.zero_result_err << SUM_CHECK_P;
441 else 550
442 return byte_count.zero_result_err; 551 return flags;
443} 552}
444 553
445static inline void iop_chan_append(struct iop_adma_chan *chan) 554static inline void iop_chan_append(struct iop_adma_chan *chan)
diff --git a/arch/arm/mach-iop13xx/setup.c b/arch/arm/mach-iop13xx/setup.c
index bee42c609df6..5c147fb66a01 100644
--- a/arch/arm/mach-iop13xx/setup.c
+++ b/arch/arm/mach-iop13xx/setup.c
@@ -477,10 +477,8 @@ void __init iop13xx_platform_init(void)
477 plat_data = &iop13xx_adma_0_data; 477 plat_data = &iop13xx_adma_0_data;
478 dma_cap_set(DMA_MEMCPY, plat_data->cap_mask); 478 dma_cap_set(DMA_MEMCPY, plat_data->cap_mask);
479 dma_cap_set(DMA_XOR, plat_data->cap_mask); 479 dma_cap_set(DMA_XOR, plat_data->cap_mask);
480 dma_cap_set(DMA_DUAL_XOR, plat_data->cap_mask); 480 dma_cap_set(DMA_XOR_VAL, plat_data->cap_mask);
481 dma_cap_set(DMA_ZERO_SUM, plat_data->cap_mask);
482 dma_cap_set(DMA_MEMSET, plat_data->cap_mask); 481 dma_cap_set(DMA_MEMSET, plat_data->cap_mask);
483 dma_cap_set(DMA_MEMCPY_CRC32C, plat_data->cap_mask);
484 dma_cap_set(DMA_INTERRUPT, plat_data->cap_mask); 482 dma_cap_set(DMA_INTERRUPT, plat_data->cap_mask);
485 break; 483 break;
486 case IOP13XX_INIT_ADMA_1: 484 case IOP13XX_INIT_ADMA_1:
@@ -489,10 +487,8 @@ void __init iop13xx_platform_init(void)
489 plat_data = &iop13xx_adma_1_data; 487 plat_data = &iop13xx_adma_1_data;
490 dma_cap_set(DMA_MEMCPY, plat_data->cap_mask); 488 dma_cap_set(DMA_MEMCPY, plat_data->cap_mask);
491 dma_cap_set(DMA_XOR, plat_data->cap_mask); 489 dma_cap_set(DMA_XOR, plat_data->cap_mask);
492 dma_cap_set(DMA_DUAL_XOR, plat_data->cap_mask); 490 dma_cap_set(DMA_XOR_VAL, plat_data->cap_mask);
493 dma_cap_set(DMA_ZERO_SUM, plat_data->cap_mask);
494 dma_cap_set(DMA_MEMSET, plat_data->cap_mask); 491 dma_cap_set(DMA_MEMSET, plat_data->cap_mask);
495 dma_cap_set(DMA_MEMCPY_CRC32C, plat_data->cap_mask);
496 dma_cap_set(DMA_INTERRUPT, plat_data->cap_mask); 492 dma_cap_set(DMA_INTERRUPT, plat_data->cap_mask);
497 break; 493 break;
498 case IOP13XX_INIT_ADMA_2: 494 case IOP13XX_INIT_ADMA_2:
@@ -501,14 +497,11 @@ void __init iop13xx_platform_init(void)
501 plat_data = &iop13xx_adma_2_data; 497 plat_data = &iop13xx_adma_2_data;
502 dma_cap_set(DMA_MEMCPY, plat_data->cap_mask); 498 dma_cap_set(DMA_MEMCPY, plat_data->cap_mask);
503 dma_cap_set(DMA_XOR, plat_data->cap_mask); 499 dma_cap_set(DMA_XOR, plat_data->cap_mask);
504 dma_cap_set(DMA_DUAL_XOR, plat_data->cap_mask); 500 dma_cap_set(DMA_XOR_VAL, plat_data->cap_mask);
505 dma_cap_set(DMA_ZERO_SUM, plat_data->cap_mask);
506 dma_cap_set(DMA_MEMSET, plat_data->cap_mask); 501 dma_cap_set(DMA_MEMSET, plat_data->cap_mask);
507 dma_cap_set(DMA_MEMCPY_CRC32C, plat_data->cap_mask);
508 dma_cap_set(DMA_INTERRUPT, plat_data->cap_mask); 502 dma_cap_set(DMA_INTERRUPT, plat_data->cap_mask);
509 dma_cap_set(DMA_PQ_XOR, plat_data->cap_mask); 503 dma_cap_set(DMA_PQ, plat_data->cap_mask);
510 dma_cap_set(DMA_PQ_UPDATE, plat_data->cap_mask); 504 dma_cap_set(DMA_PQ_VAL, plat_data->cap_mask);
511 dma_cap_set(DMA_PQ_ZERO_SUM, plat_data->cap_mask);
512 break; 505 break;
513 } 506 }
514 } 507 }
diff --git a/arch/arm/mach-pxa/Kconfig b/arch/arm/mach-pxa/Kconfig
index 89c992b8f75b..a6f8eab14ba5 100644
--- a/arch/arm/mach-pxa/Kconfig
+++ b/arch/arm/mach-pxa/Kconfig
@@ -21,6 +21,11 @@ config CPU_PXA930
21 21
22config CPU_PXA935 22config CPU_PXA935
23 bool "PXA935 (codename Tavor-P65)" 23 bool "PXA935 (codename Tavor-P65)"
24 select CPU_PXA930
25
26config CPU_PXA950
27 bool "PXA950 (codename Tavor-PV2)"
28 select CPU_PXA930
24 29
25endmenu 30endmenu
26 31
@@ -79,6 +84,12 @@ config MACH_MP900C
79 bool "Nec Mobilepro 900/c" 84 bool "Nec Mobilepro 900/c"
80 select PXA25x 85 select PXA25x
81 86
87config MACH_BALLOON3
88 bool "Balloon 3 board"
89 select PXA27x
90 select IWMMXT
91 select PXA_HAVE_BOARD_IRQS
92
82config ARCH_PXA_IDP 93config ARCH_PXA_IDP
83 bool "Accelent Xscale IDP" 94 bool "Accelent Xscale IDP"
84 select PXA25x 95 select PXA25x
@@ -371,6 +382,15 @@ config MACH_PALMTE2
371 Say Y here if you intend to run this kernel on a Palm Tungsten|E2 382 Say Y here if you intend to run this kernel on a Palm Tungsten|E2
372 handheld computer. 383 handheld computer.
373 384
385config MACH_PALMTC
386 bool "Palm Tungsten|C"
387 default y
388 depends on ARCH_PXA_PALM
389 select PXA25x
390 help
391 Say Y here if you intend to run this kernel on a Palm Tungsten|C
392 handheld computer.
393
374config MACH_PALMT5 394config MACH_PALMT5
375 bool "Palm Tungsten|T5" 395 bool "Palm Tungsten|T5"
376 default y 396 default y
@@ -458,6 +478,7 @@ config PXA_EZX
458 select PXA27x 478 select PXA27x
459 select IWMMXT 479 select IWMMXT
460 select HAVE_PWM 480 select HAVE_PWM
481 select PXA_HAVE_BOARD_IRQS
461 482
462config MACH_EZX_A780 483config MACH_EZX_A780
463 bool "Motorola EZX A780" 484 bool "Motorola EZX A780"
@@ -489,6 +510,21 @@ config MACH_EZX_E2
489 default y 510 default y
490 depends on PXA_EZX 511 depends on PXA_EZX
491 512
513config MACH_XCEP
514 bool "Iskratel Electronics XCEP"
515 select PXA25x
516 select MTD
517 select MTD_PARTITIONS
518 select MTD_PHYSMAP
519 select MTD_CFI_INTELEXT
520 select MTD_CFI
521 select MTD_CHAR
522 select SMC91X
523 select PXA_SSP
524 help
525 PXA255 based Single Board Computer with SMC 91C111 ethernet chip and 64 MB of flash.
526 Tuned for usage in Libera instruments for particle accelerators.
527
492endmenu 528endmenu
493 529
494config PXA25x 530config PXA25x
diff --git a/arch/arm/mach-pxa/Makefile b/arch/arm/mach-pxa/Makefile
index d4c6122a342f..f10e152bfc27 100644
--- a/arch/arm/mach-pxa/Makefile
+++ b/arch/arm/mach-pxa/Makefile
@@ -31,6 +31,7 @@ obj-$(CONFIG_GUMSTIX_AM300EPD) += am300epd.o
31obj-$(CONFIG_ARCH_LUBBOCK) += lubbock.o 31obj-$(CONFIG_ARCH_LUBBOCK) += lubbock.o
32obj-$(CONFIG_MACH_LOGICPD_PXA270) += lpd270.o 32obj-$(CONFIG_MACH_LOGICPD_PXA270) += lpd270.o
33obj-$(CONFIG_MACH_MAINSTONE) += mainstone.o 33obj-$(CONFIG_MACH_MAINSTONE) += mainstone.o
34obj-$(CONFIG_MACH_BALLOON3) += balloon3.o
34obj-$(CONFIG_MACH_MP900C) += mp900.o 35obj-$(CONFIG_MACH_MP900C) += mp900.o
35obj-$(CONFIG_ARCH_PXA_IDP) += idp.o 36obj-$(CONFIG_ARCH_PXA_IDP) += idp.o
36obj-$(CONFIG_MACH_TRIZEPS4) += trizeps4.o 37obj-$(CONFIG_MACH_TRIZEPS4) += trizeps4.o
@@ -58,6 +59,7 @@ obj-$(CONFIG_MACH_E750) += e750.o
58obj-$(CONFIG_MACH_E400) += e400.o 59obj-$(CONFIG_MACH_E400) += e400.o
59obj-$(CONFIG_MACH_E800) += e800.o 60obj-$(CONFIG_MACH_E800) += e800.o
60obj-$(CONFIG_MACH_PALMTE2) += palmte2.o 61obj-$(CONFIG_MACH_PALMTE2) += palmte2.o
62obj-$(CONFIG_MACH_PALMTC) += palmtc.o
61obj-$(CONFIG_MACH_PALMT5) += palmt5.o 63obj-$(CONFIG_MACH_PALMT5) += palmt5.o
62obj-$(CONFIG_MACH_PALMTX) += palmtx.o 64obj-$(CONFIG_MACH_PALMTX) += palmtx.o
63obj-$(CONFIG_MACH_PALMLD) += palmld.o 65obj-$(CONFIG_MACH_PALMLD) += palmld.o
@@ -78,6 +80,8 @@ obj-$(CONFIG_MACH_ARMCORE) += cm-x2xx.o cm-x255.o cm-x270.o
78obj-$(CONFIG_MACH_CM_X300) += cm-x300.o 80obj-$(CONFIG_MACH_CM_X300) += cm-x300.o
79obj-$(CONFIG_PXA_EZX) += ezx.o 81obj-$(CONFIG_PXA_EZX) += ezx.o
80 82
83obj-$(CONFIG_MACH_XCEP) += xcep.o
84
81obj-$(CONFIG_MACH_INTELMOTE2) += imote2.o 85obj-$(CONFIG_MACH_INTELMOTE2) += imote2.o
82obj-$(CONFIG_MACH_STARGATE2) += stargate2.o 86obj-$(CONFIG_MACH_STARGATE2) += stargate2.o
83obj-$(CONFIG_MACH_CSB726) += csb726.o 87obj-$(CONFIG_MACH_CSB726) += csb726.o
diff --git a/arch/arm/mach-pxa/balloon3.c b/arch/arm/mach-pxa/balloon3.c
new file mode 100644
index 000000000000..f23138b8fca3
--- /dev/null
+++ b/arch/arm/mach-pxa/balloon3.c
@@ -0,0 +1,361 @@
1/*
2 * linux/arch/arm/mach-pxa/balloon3.c
3 *
4 * Support for Balloonboard.org Balloon3 board.
5 *
6 * Author: Nick Bane, Wookey, Jonathan McDowell
7 * Created: June, 2006
8 * Copyright: Toby Churchill Ltd
9 * Derived from mainstone.c, by Nico Pitre
10 *
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License version 2 as
13 * published by the Free Software Foundation.
14 */
15
16#include <linux/init.h>
17#include <linux/platform_device.h>
18#include <linux/sysdev.h>
19#include <linux/interrupt.h>
20#include <linux/sched.h>
21#include <linux/bitops.h>
22#include <linux/fb.h>
23#include <linux/gpio.h>
24#include <linux/ioport.h>
25#include <linux/mtd/mtd.h>
26#include <linux/mtd/partitions.h>
27#include <linux/types.h>
28
29#include <asm/setup.h>
30#include <asm/mach-types.h>
31#include <asm/irq.h>
32#include <asm/sizes.h>
33
34#include <asm/mach/arch.h>
35#include <asm/mach/map.h>
36#include <asm/mach/irq.h>
37#include <asm/mach/flash.h>
38
39#include <mach/pxa27x.h>
40#include <mach/balloon3.h>
41#include <mach/audio.h>
42#include <mach/pxafb.h>
43#include <mach/mmc.h>
44#include <mach/udc.h>
45#include <mach/pxa27x-udc.h>
46#include <mach/irda.h>
47#include <mach/ohci.h>
48
49#include <plat/i2c.h>
50
51#include "generic.h"
52#include "devices.h"
53
54static unsigned long balloon3_irq_enabled;
55
56static unsigned long balloon3_features_present =
57 (1 << BALLOON3_FEATURE_OHCI) | (1 << BALLOON3_FEATURE_CF) |
58 (1 << BALLOON3_FEATURE_AUDIO) |
59 (1 << BALLOON3_FEATURE_TOPPOLY);
60
61int balloon3_has(enum balloon3_features feature)
62{
63 return (balloon3_features_present & (1 << feature)) ? 1 : 0;
64}
65EXPORT_SYMBOL_GPL(balloon3_has);
66
67int __init parse_balloon3_features(char *arg)
68{
69 if (!arg)
70 return 0;
71
72 return strict_strtoul(arg, 0, &balloon3_features_present);
73}
74early_param("balloon3_features", parse_balloon3_features);
75
76static void balloon3_mask_irq(unsigned int irq)
77{
78 int balloon3_irq = (irq - BALLOON3_IRQ(0));
79 balloon3_irq_enabled &= ~(1 << balloon3_irq);
80 __raw_writel(~balloon3_irq_enabled, BALLOON3_INT_CONTROL_REG);
81}
82
83static void balloon3_unmask_irq(unsigned int irq)
84{
85 int balloon3_irq = (irq - BALLOON3_IRQ(0));
86 balloon3_irq_enabled |= (1 << balloon3_irq);
87 __raw_writel(~balloon3_irq_enabled, BALLOON3_INT_CONTROL_REG);
88}
89
90static struct irq_chip balloon3_irq_chip = {
91 .name = "FPGA",
92 .ack = balloon3_mask_irq,
93 .mask = balloon3_mask_irq,
94 .unmask = balloon3_unmask_irq,
95};
96
97static void balloon3_irq_handler(unsigned int irq, struct irq_desc *desc)
98{
99 unsigned long pending = __raw_readl(BALLOON3_INT_CONTROL_REG) &
100 balloon3_irq_enabled;
101
102 do {
103 /* clear useless edge notification */
104 if (desc->chip->ack)
105 desc->chip->ack(BALLOON3_AUX_NIRQ);
106 while (pending) {
107 irq = BALLOON3_IRQ(0) + __ffs(pending);
108 generic_handle_irq(irq);
109 pending &= pending - 1;
110 }
111 pending = __raw_readl(BALLOON3_INT_CONTROL_REG) &
112 balloon3_irq_enabled;
113 } while (pending);
114}
115
116static void __init balloon3_init_irq(void)
117{
118 int irq;
119
120 pxa27x_init_irq();
121 /* setup extra Balloon3 irqs */
122 for (irq = BALLOON3_IRQ(0); irq <= BALLOON3_IRQ(7); irq++) {
123 set_irq_chip(irq, &balloon3_irq_chip);
124 set_irq_handler(irq, handle_level_irq);
125 set_irq_flags(irq, IRQF_VALID | IRQF_PROBE);
126 }
127
128 set_irq_chained_handler(BALLOON3_AUX_NIRQ, balloon3_irq_handler);
129 set_irq_type(BALLOON3_AUX_NIRQ, IRQ_TYPE_EDGE_FALLING);
130
131 pr_debug("%s: chained handler installed - irq %d automatically "
132 "enabled\n", __func__, BALLOON3_AUX_NIRQ);
133}
134
135static void balloon3_backlight_power(int on)
136{
137 pr_debug("%s: power is %s\n", __func__, on ? "on" : "off");
138 gpio_set_value(BALLOON3_GPIO_RUN_BACKLIGHT, on);
139}
140
141static unsigned long balloon3_lcd_pin_config[] = {
142 /* LCD - 16bpp Active TFT */
143 GPIO58_LCD_LDD_0,
144 GPIO59_LCD_LDD_1,
145 GPIO60_LCD_LDD_2,
146 GPIO61_LCD_LDD_3,
147 GPIO62_LCD_LDD_4,
148 GPIO63_LCD_LDD_5,
149 GPIO64_LCD_LDD_6,
150 GPIO65_LCD_LDD_7,
151 GPIO66_LCD_LDD_8,
152 GPIO67_LCD_LDD_9,
153 GPIO68_LCD_LDD_10,
154 GPIO69_LCD_LDD_11,
155 GPIO70_LCD_LDD_12,
156 GPIO71_LCD_LDD_13,
157 GPIO72_LCD_LDD_14,
158 GPIO73_LCD_LDD_15,
159 GPIO74_LCD_FCLK,
160 GPIO75_LCD_LCLK,
161 GPIO76_LCD_PCLK,
162 GPIO77_LCD_BIAS,
163
164 GPIO99_GPIO, /* Backlight */
165};
166
167static struct pxafb_mode_info balloon3_lcd_modes[] = {
168 {
169 .pixclock = 38000,
170 .xres = 480,
171 .yres = 640,
172 .bpp = 16,
173 .hsync_len = 8,
174 .left_margin = 8,
175 .right_margin = 8,
176 .vsync_len = 2,
177 .upper_margin = 4,
178 .lower_margin = 5,
179 .sync = 0,
180 },
181};
182
183static struct pxafb_mach_info balloon3_pxafb_info = {
184 .modes = balloon3_lcd_modes,
185 .num_modes = ARRAY_SIZE(balloon3_lcd_modes),
186 .lcd_conn = LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL,
187 .pxafb_backlight_power = balloon3_backlight_power,
188};
189
190static unsigned long balloon3_mmc_pin_config[] = {
191 GPIO32_MMC_CLK,
192 GPIO92_MMC_DAT_0,
193 GPIO109_MMC_DAT_1,
194 GPIO110_MMC_DAT_2,
195 GPIO111_MMC_DAT_3,
196 GPIO112_MMC_CMD,
197};
198
199static void balloon3_mci_setpower(struct device *dev, unsigned int vdd)
200{
201 struct pxamci_platform_data *p_d = dev->platform_data;
202
203 if ((1 << vdd) & p_d->ocr_mask) {
204 pr_debug("%s: on\n", __func__);
205 /* FIXME something to prod here? */
206 } else {
207 pr_debug("%s: off\n", __func__);
208 /* FIXME something to prod here? */
209 }
210}
211
212static struct pxamci_platform_data balloon3_mci_platform_data = {
213 .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34,
214 .setpower = balloon3_mci_setpower,
215};
216
217static int balloon3_udc_is_connected(void)
218{
219 pr_debug("%s: udc connected\n", __func__);
220 return 1;
221}
222
223static void balloon3_udc_command(int cmd)
224{
225 switch (cmd) {
226 case PXA2XX_UDC_CMD_CONNECT:
227 UP2OCR |= (UP2OCR_DPPUE + UP2OCR_DPPUBE);
228 pr_debug("%s: connect\n", __func__);
229 break;
230 case PXA2XX_UDC_CMD_DISCONNECT:
231 UP2OCR &= ~UP2OCR_DPPUE;
232 pr_debug("%s: disconnect\n", __func__);
233 break;
234 }
235}
236
237static struct pxa2xx_udc_mach_info balloon3_udc_info = {
238 .udc_is_connected = balloon3_udc_is_connected,
239 .udc_command = balloon3_udc_command,
240};
241
242static struct pxaficp_platform_data balloon3_ficp_platform_data = {
243 .transceiver_cap = IR_SIRMODE | IR_FIRMODE | IR_OFF,
244};
245
246static unsigned long balloon3_ohci_pin_config[] = {
247 GPIO88_USBH1_PWR,
248 GPIO89_USBH1_PEN,
249};
250
251static struct pxaohci_platform_data balloon3_ohci_platform_data = {
252 .port_mode = PMM_PERPORT_MODE,
253 .flags = ENABLE_PORT_ALL | POWER_CONTROL_LOW | POWER_SENSE_LOW,
254};
255
256static unsigned long balloon3_pin_config[] __initdata = {
257 /* Select BTUART 'COM1/ttyS0' as IO option for pins 42/43/44/45 */
258 GPIO42_BTUART_RXD,
259 GPIO43_BTUART_TXD,
260 GPIO44_BTUART_CTS,
261 GPIO45_BTUART_RTS,
262
263 /* Wakeup GPIO */
264 GPIO1_GPIO | WAKEUP_ON_EDGE_BOTH,
265
266 /* NAND & IDLE LED GPIOs */
267 GPIO9_GPIO,
268 GPIO10_GPIO,
269};
270
271static struct gpio_led balloon3_gpio_leds[] = {
272 {
273 .name = "balloon3:green:idle",
274 .default_trigger = "heartbeat",
275 .gpio = BALLOON3_GPIO_LED_IDLE,
276 .active_low = 1,
277 },
278 {
279 .name = "balloon3:green:nand",
280 .default_trigger = "nand-disk",
281 .gpio = BALLOON3_GPIO_LED_NAND,
282 .active_low = 1,
283 },
284};
285
286static struct gpio_led_platform_data balloon3_gpio_leds_platform_data = {
287 .leds = balloon3_gpio_leds,
288 .num_leds = ARRAY_SIZE(balloon3_gpio_leds),
289};
290
291static struct platform_device balloon3led_device = {
292 .name = "leds-gpio",
293 .id = -1,
294 .dev = {
295 .platform_data = &balloon3_gpio_leds_platform_data,
296 },
297};
298
299static void __init balloon3_init(void)
300{
301 pr_info("Initialising Balloon3\n");
302
303 /* system bus arbiter setting
304 * - Core_Park
305 * - LCD_wt:DMA_wt:CORE_Wt = 2:3:4
306 */
307 ARB_CNTRL = ARB_CORE_PARK | 0x234;
308
309 pxa_set_i2c_info(NULL);
310 if (balloon3_has(BALLOON3_FEATURE_AUDIO))
311 pxa_set_ac97_info(NULL);
312
313 if (balloon3_has(BALLOON3_FEATURE_TOPPOLY)) {
314 pxa2xx_mfp_config(ARRAY_AND_SIZE(balloon3_lcd_pin_config));
315 gpio_request(BALLOON3_GPIO_RUN_BACKLIGHT,
316 "LCD Backlight Power");
317 gpio_direction_output(BALLOON3_GPIO_RUN_BACKLIGHT, 1);
318 set_pxa_fb_info(&balloon3_pxafb_info);
319 }
320
321 if (balloon3_has(BALLOON3_FEATURE_MMC)) {
322 pxa2xx_mfp_config(ARRAY_AND_SIZE(balloon3_mmc_pin_config));
323 pxa_set_mci_info(&balloon3_mci_platform_data);
324 }
325 pxa_set_ficp_info(&balloon3_ficp_platform_data);
326 if (balloon3_has(BALLOON3_FEATURE_OHCI)) {
327 pxa2xx_mfp_config(ARRAY_AND_SIZE(balloon3_ohci_pin_config));
328 pxa_set_ohci_info(&balloon3_ohci_platform_data);
329 }
330 pxa_set_udc_info(&balloon3_udc_info);
331
332 pxa2xx_mfp_config(ARRAY_AND_SIZE(balloon3_pin_config));
333
334 platform_device_register(&balloon3led_device);
335}
336
337static struct map_desc balloon3_io_desc[] __initdata = {
338 { /* CPLD/FPGA */
339 .virtual = BALLOON3_FPGA_VIRT,
340 .pfn = __phys_to_pfn(BALLOON3_FPGA_PHYS),
341 .length = BALLOON3_FPGA_LENGTH,
342 .type = MT_DEVICE,
343 },
344};
345
346static void __init balloon3_map_io(void)
347{
348 pxa_map_io();
349 iotable_init(balloon3_io_desc, ARRAY_SIZE(balloon3_io_desc));
350}
351
352MACHINE_START(BALLOON3, "Balloon3")
353 /* Maintainer: Nick Bane. */
354 .phys_io = 0x40000000,
355 .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
356 .map_io = balloon3_map_io,
357 .init_irq = balloon3_init_irq,
358 .timer = &pxa_timer,
359 .init_machine = balloon3_init,
360 .boot_params = PHYS_OFFSET + 0x100,
361MACHINE_END
diff --git a/arch/arm/mach-pxa/clock.h b/arch/arm/mach-pxa/clock.h
index 5599bceff738..978a3667e90d 100644
--- a/arch/arm/mach-pxa/clock.h
+++ b/arch/arm/mach-pxa/clock.h
@@ -12,7 +12,6 @@ struct clk {
12 unsigned int cken; 12 unsigned int cken;
13 unsigned int delay; 13 unsigned int delay;
14 unsigned int enabled; 14 unsigned int enabled;
15 struct clk *other;
16}; 15};
17 16
18#define INIT_CLKREG(_clk,_devname,_conname) \ 17#define INIT_CLKREG(_clk,_devname,_conname) \
diff --git a/arch/arm/mach-pxa/cm-x270.c b/arch/arm/mach-pxa/cm-x270.c
index 1d2cec25391d..eea78b6c2bc5 100644
--- a/arch/arm/mach-pxa/cm-x270.c
+++ b/arch/arm/mach-pxa/cm-x270.c
@@ -13,13 +13,18 @@
13#include <linux/sysdev.h> 13#include <linux/sysdev.h>
14#include <linux/irq.h> 14#include <linux/irq.h>
15#include <linux/gpio.h> 15#include <linux/gpio.h>
16#include <linux/delay.h>
16 17
17#include <linux/rtc-v3020.h> 18#include <linux/rtc-v3020.h>
18#include <video/mbxfb.h> 19#include <video/mbxfb.h>
19 20
21#include <linux/spi/spi.h>
22#include <linux/spi/libertas_spi.h>
23
20#include <mach/pxa27x.h> 24#include <mach/pxa27x.h>
21#include <mach/ohci.h> 25#include <mach/ohci.h>
22#include <mach/mmc.h> 26#include <mach/mmc.h>
27#include <mach/pxa2xx_spi.h>
23 28
24#include "generic.h" 29#include "generic.h"
25 30
@@ -34,6 +39,10 @@
34/* MMC power enable */ 39/* MMC power enable */
35#define GPIO105_MMC_POWER (105) 40#define GPIO105_MMC_POWER (105)
36 41
42/* WLAN GPIOS */
43#define GPIO19_WLAN_STRAP (19)
44#define GPIO102_WLAN_RST (102)
45
37static unsigned long cmx270_pin_config[] = { 46static unsigned long cmx270_pin_config[] = {
38 /* AC'97 */ 47 /* AC'97 */
39 GPIO28_AC97_BITCLK, 48 GPIO28_AC97_BITCLK,
@@ -94,8 +103,8 @@ static unsigned long cmx270_pin_config[] = {
94 GPIO26_SSP1_RXD, 103 GPIO26_SSP1_RXD,
95 104
96 /* SSP2 */ 105 /* SSP2 */
97 GPIO19_SSP2_SCLK, 106 GPIO19_GPIO, /* SSP2 clock is used as GPIO for Libertas pin-strap */
98 GPIO14_SSP2_SFRM, 107 GPIO14_GPIO,
99 GPIO87_SSP2_TXD, 108 GPIO87_SSP2_TXD,
100 GPIO88_SSP2_RXD, 109 GPIO88_SSP2_RXD,
101 110
@@ -123,6 +132,7 @@ static unsigned long cmx270_pin_config[] = {
123 GPIO0_GPIO | WAKEUP_ON_EDGE_BOTH, 132 GPIO0_GPIO | WAKEUP_ON_EDGE_BOTH,
124 GPIO105_GPIO | MFP_LPM_DRIVE_HIGH, /* MMC/SD power */ 133 GPIO105_GPIO | MFP_LPM_DRIVE_HIGH, /* MMC/SD power */
125 GPIO53_GPIO, /* PC card reset */ 134 GPIO53_GPIO, /* PC card reset */
135 GPIO102_GPIO, /* WLAN reset */
126 136
127 /* NAND controls */ 137 /* NAND controls */
128 GPIO11_GPIO | MFP_LPM_DRIVE_HIGH, /* NAND CE# */ 138 GPIO11_GPIO | MFP_LPM_DRIVE_HIGH, /* NAND CE# */
@@ -131,6 +141,7 @@ static unsigned long cmx270_pin_config[] = {
131 /* interrupts */ 141 /* interrupts */
132 GPIO10_GPIO, /* DM9000 interrupt */ 142 GPIO10_GPIO, /* DM9000 interrupt */
133 GPIO83_GPIO, /* MMC card detect */ 143 GPIO83_GPIO, /* MMC card detect */
144 GPIO95_GPIO, /* WLAN interrupt */
134}; 145};
135 146
136/* V3020 RTC */ 147/* V3020 RTC */
@@ -271,64 +282,114 @@ static inline void cmx270_init_ohci(void) {}
271#endif 282#endif
272 283
273#if defined(CONFIG_MMC) || defined(CONFIG_MMC_MODULE) 284#if defined(CONFIG_MMC) || defined(CONFIG_MMC_MODULE)
274static int cmx270_mci_init(struct device *dev, 285static struct pxamci_platform_data cmx270_mci_platform_data = {
275 irq_handler_t cmx270_detect_int, 286 .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34,
276 void *data) 287 .gpio_card_detect = GPIO83_MMC_IRQ,
288 .gpio_card_ro = -1,
289 .gpio_power = GPIO105_MMC_POWER,
290 .gpio_power_invert = 1,
291};
292
293static void __init cmx270_init_mmc(void)
277{ 294{
278 int err; 295 pxa_set_mci_info(&cmx270_mci_platform_data);
296}
297#else
298static inline void cmx270_init_mmc(void) {}
299#endif
300
301#if defined(CONFIG_SPI_PXA2XX) || defined(CONFIG_SPI_PXA2XX_MODULE)
302static struct pxa2xx_spi_master cm_x270_spi_info = {
303 .num_chipselect = 1,
304 .enable_dma = 1,
305};
306
307static struct pxa2xx_spi_chip cm_x270_libertas_chip = {
308 .rx_threshold = 1,
309 .tx_threshold = 1,
310 .timeout = 1000,
311 .gpio_cs = 14,
312};
313
314static unsigned long cm_x270_libertas_pin_config[] = {
315 /* SSP2 */
316 GPIO19_SSP2_SCLK,
317 GPIO14_GPIO,
318 GPIO87_SSP2_TXD,
319 GPIO88_SSP2_RXD,
320
321};
279 322
280 err = gpio_request(GPIO105_MMC_POWER, "MMC/SD power"); 323static int cm_x270_libertas_setup(struct spi_device *spi)
281 if (err) { 324{
282 dev_warn(dev, "power gpio unavailable\n"); 325 int err = gpio_request(GPIO19_WLAN_STRAP, "WLAN STRAP");
326 if (err)
283 return err; 327 return err;
284 }
285 328
286 gpio_direction_output(GPIO105_MMC_POWER, 0); 329 err = gpio_request(GPIO102_WLAN_RST, "WLAN RST");
330 if (err)
331 goto err_free_strap;
287 332
288 err = request_irq(CMX270_MMC_IRQ, cmx270_detect_int, 333 err = gpio_direction_output(GPIO102_WLAN_RST, 0);
289 IRQF_DISABLED | IRQF_TRIGGER_FALLING, 334 if (err)
290 "MMC card detect", data); 335 goto err_free_strap;
291 if (err) { 336 msleep(100);
292 gpio_free(GPIO105_MMC_POWER); 337
293 dev_err(dev, "cmx270_mci_init: MMC/SD: can't" 338 err = gpio_direction_output(GPIO19_WLAN_STRAP, 1);
294 " request MMC card detect IRQ\n"); 339 if (err)
295 } 340 goto err_free_strap;
341 msleep(100);
342
343 pxa2xx_mfp_config(ARRAY_AND_SIZE(cm_x270_libertas_pin_config));
344
345 gpio_set_value(GPIO102_WLAN_RST, 1);
346 msleep(100);
347
348 spi->bits_per_word = 16;
349 spi_setup(spi);
350
351 return 0;
352
353err_free_strap:
354 gpio_free(GPIO19_WLAN_STRAP);
296 355
297 return err; 356 return err;
298} 357}
299 358
300static void cmx270_mci_setpower(struct device *dev, unsigned int vdd) 359static int cm_x270_libertas_teardown(struct spi_device *spi)
301{ 360{
302 struct pxamci_platform_data *p_d = dev->platform_data; 361 gpio_set_value(GPIO102_WLAN_RST, 0);
303 362 gpio_free(GPIO102_WLAN_RST);
304 if ((1 << vdd) & p_d->ocr_mask) { 363 gpio_free(GPIO19_WLAN_STRAP);
305 dev_dbg(dev, "power on\n");
306 gpio_set_value(GPIO105_MMC_POWER, 0);
307 } else {
308 gpio_set_value(GPIO105_MMC_POWER, 1);
309 dev_dbg(dev, "power off\n");
310 }
311}
312 364
313static void cmx270_mci_exit(struct device *dev, void *data) 365 return 0;
314{
315 free_irq(CMX270_MMC_IRQ, data);
316 gpio_free(GPIO105_MMC_POWER);
317} 366}
318 367
319static struct pxamci_platform_data cmx270_mci_platform_data = { 368struct libertas_spi_platform_data cm_x270_libertas_pdata = {
320 .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34, 369 .use_dummy_writes = 1,
321 .init = cmx270_mci_init, 370 .setup = cm_x270_libertas_setup,
322 .setpower = cmx270_mci_setpower, 371 .teardown = cm_x270_libertas_teardown,
323 .exit = cmx270_mci_exit,
324}; 372};
325 373
326static void __init cmx270_init_mmc(void) 374static struct spi_board_info cm_x270_spi_devices[] __initdata = {
375 {
376 .modalias = "libertas_spi",
377 .max_speed_hz = 13000000,
378 .bus_num = 2,
379 .irq = gpio_to_irq(95),
380 .chip_select = 0,
381 .controller_data = &cm_x270_libertas_chip,
382 .platform_data = &cm_x270_libertas_pdata,
383 },
384};
385
386static void __init cmx270_init_spi(void)
327{ 387{
328 pxa_set_mci_info(&cmx270_mci_platform_data); 388 pxa2xx_set_spi_info(2, &cm_x270_spi_info);
389 spi_register_board_info(ARRAY_AND_SIZE(cm_x270_spi_devices));
329} 390}
330#else 391#else
331static inline void cmx270_init_mmc(void) {} 392static inline void cmx270_init_spi(void) {}
332#endif 393#endif
333 394
334void __init cmx270_init(void) 395void __init cmx270_init(void)
@@ -343,4 +404,5 @@ void __init cmx270_init(void)
343 cmx270_init_mmc(); 404 cmx270_init_mmc();
344 cmx270_init_ohci(); 405 cmx270_init_ohci();
345 cmx270_init_2700G(); 406 cmx270_init_2700G();
407 cmx270_init_spi();
346} 408}
diff --git a/arch/arm/mach-pxa/cm-x300.c b/arch/arm/mach-pxa/cm-x300.c
index 465da26591bd..aac2cda60e09 100644
--- a/arch/arm/mach-pxa/cm-x300.c
+++ b/arch/arm/mach-pxa/cm-x300.c
@@ -306,68 +306,21 @@ static void cm_x300_mci_exit(struct device *dev, void *data)
306} 306}
307 307
308static struct pxamci_platform_data cm_x300_mci_platform_data = { 308static struct pxamci_platform_data cm_x300_mci_platform_data = {
309 .detect_delay = 20, 309 .detect_delay = 20,
310 .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34, 310 .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34,
311 .init = cm_x300_mci_init, 311 .init = cm_x300_mci_init,
312 .exit = cm_x300_mci_exit, 312 .exit = cm_x300_mci_exit,
313 .gpio_card_detect = -1,
314 .gpio_card_ro = -1,
315 .gpio_power = -1,
313}; 316};
314 317
315static int cm_x300_mci2_ro(struct device *dev)
316{
317 return gpio_get_value(GPIO85_MMC2_WP);
318}
319
320static int cm_x300_mci2_init(struct device *dev,
321 irq_handler_t cm_x300_detect_int,
322 void *data)
323{
324 int err;
325
326 /*
327 * setup GPIO for CM-X300 MMC controller
328 */
329 err = gpio_request(GPIO82_MMC2_IRQ, "mmc card detect");
330 if (err)
331 goto err_request_cd;
332 gpio_direction_input(GPIO82_MMC2_IRQ);
333
334 err = gpio_request(GPIO85_MMC2_WP, "mmc write protect");
335 if (err)
336 goto err_request_wp;
337 gpio_direction_input(GPIO85_MMC2_WP);
338
339 err = request_irq(CM_X300_MMC2_IRQ, cm_x300_detect_int,
340 IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
341 "MMC card detect", data);
342 if (err) {
343 printk(KERN_ERR "%s: MMC/SD/SDIO: "
344 "can't request card detect IRQ\n", __func__);
345 goto err_request_irq;
346 }
347
348 return 0;
349
350err_request_irq:
351 gpio_free(GPIO85_MMC2_WP);
352err_request_wp:
353 gpio_free(GPIO82_MMC2_IRQ);
354err_request_cd:
355 return err;
356}
357
358static void cm_x300_mci2_exit(struct device *dev, void *data)
359{
360 free_irq(CM_X300_MMC2_IRQ, data);
361 gpio_free(GPIO82_MMC2_IRQ);
362 gpio_free(GPIO85_MMC2_WP);
363}
364
365static struct pxamci_platform_data cm_x300_mci2_platform_data = { 318static struct pxamci_platform_data cm_x300_mci2_platform_data = {
366 .detect_delay = 20, 319 .detect_delay = 20,
367 .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34, 320 .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34,
368 .init = cm_x300_mci2_init, 321 .gpio_card_detect = GPIO82_MMC2_IRQ,
369 .exit = cm_x300_mci2_exit, 322 .gpio_card_ro = GPIO85_MMC2_WP,
370 .get_ro = cm_x300_mci2_ro, 323 .gpio_power = -1,
371}; 324};
372 325
373static void __init cm_x300_init_mmc(void) 326static void __init cm_x300_init_mmc(void)
diff --git a/arch/arm/mach-pxa/colibri-pxa300.c b/arch/arm/mach-pxa/colibri-pxa300.c
index 7c9c34c19ae2..37c239c56568 100644
--- a/arch/arm/mach-pxa/colibri-pxa300.c
+++ b/arch/arm/mach-pxa/colibri-pxa300.c
@@ -172,6 +172,7 @@ void __init colibri_pxa300_init(void)
172{ 172{
173 colibri_pxa300_init_eth(); 173 colibri_pxa300_init_eth();
174 colibri_pxa300_init_ohci(); 174 colibri_pxa300_init_ohci();
175 colibri_pxa3xx_init_nand();
175 colibri_pxa300_init_lcd(); 176 colibri_pxa300_init_lcd();
176 colibri_pxa3xx_init_lcd(mfp_to_gpio(GPIO39_GPIO)); 177 colibri_pxa3xx_init_lcd(mfp_to_gpio(GPIO39_GPIO));
177 colibri_pxa310_init_ac97(); 178 colibri_pxa310_init_ac97();
diff --git a/arch/arm/mach-pxa/colibri-pxa320.c b/arch/arm/mach-pxa/colibri-pxa320.c
index a18d37b3c5e6..494572825c7d 100644
--- a/arch/arm/mach-pxa/colibri-pxa320.c
+++ b/arch/arm/mach-pxa/colibri-pxa320.c
@@ -164,15 +164,48 @@ static inline void __init colibri_pxa320_init_ac97(void)
164static inline void colibri_pxa320_init_ac97(void) {} 164static inline void colibri_pxa320_init_ac97(void) {}
165#endif 165#endif
166 166
167/*
168 * The following configuration is verified to work with the Toradex Orchid
169 * carrier board
170 */
171static mfp_cfg_t colibri_pxa320_uart_pin_config[] __initdata = {
172 /* UART 1 configuration (may be set by bootloader) */
173 GPIO99_UART1_CTS,
174 GPIO104_UART1_RTS,
175 GPIO97_UART1_RXD,
176 GPIO98_UART1_TXD,
177 GPIO101_UART1_DTR,
178 GPIO103_UART1_DSR,
179 GPIO100_UART1_DCD,
180 GPIO102_UART1_RI,
181
182 /* UART 2 configuration */
183 GPIO109_UART2_CTS,
184 GPIO112_UART2_RTS,
185 GPIO110_UART2_RXD,
186 GPIO111_UART2_TXD,
187
188 /* UART 3 configuration */
189 GPIO30_UART3_RXD,
190 GPIO31_UART3_TXD,
191};
192
193static void __init colibri_pxa320_init_uart(void)
194{
195 pxa3xx_mfp_config(ARRAY_AND_SIZE(colibri_pxa320_uart_pin_config));
196}
197
167void __init colibri_pxa320_init(void) 198void __init colibri_pxa320_init(void)
168{ 199{
169 colibri_pxa320_init_eth(); 200 colibri_pxa320_init_eth();
170 colibri_pxa320_init_ohci(); 201 colibri_pxa320_init_ohci();
202 colibri_pxa3xx_init_nand();
171 colibri_pxa320_init_lcd(); 203 colibri_pxa320_init_lcd();
172 colibri_pxa3xx_init_lcd(mfp_to_gpio(GPIO49_GPIO)); 204 colibri_pxa3xx_init_lcd(mfp_to_gpio(GPIO49_GPIO));
173 colibri_pxa320_init_ac97(); 205 colibri_pxa320_init_ac97();
174 colibri_pxa3xx_init_mmc(ARRAY_AND_SIZE(colibri_pxa320_mmc_pin_config), 206 colibri_pxa3xx_init_mmc(ARRAY_AND_SIZE(colibri_pxa320_mmc_pin_config),
175 mfp_to_gpio(MFP_PIN_GPIO28)); 207 mfp_to_gpio(MFP_PIN_GPIO28));
208 colibri_pxa320_init_uart();
176} 209}
177 210
178MACHINE_START(COLIBRI320, "Toradex Colibri PXA320") 211MACHINE_START(COLIBRI320, "Toradex Colibri PXA320")
diff --git a/arch/arm/mach-pxa/colibri-pxa3xx.c b/arch/arm/mach-pxa/colibri-pxa3xx.c
index ea34e34f8cd8..efebaf4d734d 100644
--- a/arch/arm/mach-pxa/colibri-pxa3xx.c
+++ b/arch/arm/mach-pxa/colibri-pxa3xx.c
@@ -25,6 +25,7 @@
25#include <mach/colibri.h> 25#include <mach/colibri.h>
26#include <mach/mmc.h> 26#include <mach/mmc.h>
27#include <mach/pxafb.h> 27#include <mach/pxafb.h>
28#include <mach/pxa3xx_nand.h>
28 29
29#include "generic.h" 30#include "generic.h"
30#include "devices.h" 31#include "devices.h"
@@ -95,10 +96,13 @@ static void colibri_pxa3xx_mci_exit(struct device *dev, void *data)
95} 96}
96 97
97static struct pxamci_platform_data colibri_pxa3xx_mci_platform_data = { 98static struct pxamci_platform_data colibri_pxa3xx_mci_platform_data = {
98 .detect_delay = 20, 99 .detect_delay = 20,
99 .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34, 100 .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,
100 .init = colibri_pxa3xx_mci_init, 101 .init = colibri_pxa3xx_mci_init,
101 .exit = colibri_pxa3xx_mci_exit, 102 .exit = colibri_pxa3xx_mci_exit,
103 .gpio_card_detect = -1,
104 .gpio_card_ro = -1,
105 .gpio_power = -1,
102}; 106};
103 107
104void __init colibri_pxa3xx_init_mmc(mfp_cfg_t *pins, int len, int detect_pin) 108void __init colibri_pxa3xx_init_mmc(mfp_cfg_t *pins, int len, int detect_pin)
@@ -154,3 +158,43 @@ void __init colibri_pxa3xx_init_lcd(int bl_pin)
154} 158}
155#endif 159#endif
156 160
161#if defined(CONFIG_MTD_NAND_PXA3xx) || defined(CONFIG_MTD_NAND_PXA3xx_MODULE)
162static struct mtd_partition colibri_nand_partitions[] = {
163 {
164 .name = "bootloader",
165 .offset = 0,
166 .size = SZ_512K,
167 .mask_flags = MTD_WRITEABLE, /* force read-only */
168 },
169 {
170 .name = "kernel",
171 .offset = MTDPART_OFS_APPEND,
172 .size = SZ_4M,
173 .mask_flags = MTD_WRITEABLE, /* force read-only */
174 },
175 {
176 .name = "reserved",
177 .offset = MTDPART_OFS_APPEND,
178 .size = SZ_1M,
179 .mask_flags = MTD_WRITEABLE, /* force read-only */
180 },
181 {
182 .name = "fs",
183 .offset = MTDPART_OFS_APPEND,
184 .size = MTDPART_SIZ_FULL,
185 },
186};
187
188static struct pxa3xx_nand_platform_data colibri_nand_info = {
189 .enable_arbiter = 1,
190 .keep_config = 1,
191 .parts = colibri_nand_partitions,
192 .nr_parts = ARRAY_SIZE(colibri_nand_partitions),
193};
194
195void __init colibri_pxa3xx_init_nand(void)
196{
197 pxa3xx_set_nand_info(&colibri_nand_info);
198}
199#endif
200
diff --git a/arch/arm/mach-pxa/corgi.c b/arch/arm/mach-pxa/corgi.c
index 5363e1aea3fb..b536b5a5a10d 100644
--- a/arch/arm/mach-pxa/corgi.c
+++ b/arch/arm/mach-pxa/corgi.c
@@ -29,6 +29,7 @@
29#include <linux/spi/ads7846.h> 29#include <linux/spi/ads7846.h>
30#include <linux/spi/corgi_lcd.h> 30#include <linux/spi/corgi_lcd.h>
31#include <linux/mtd/sharpsl.h> 31#include <linux/mtd/sharpsl.h>
32#include <linux/input/matrix_keypad.h>
32#include <video/w100fb.h> 33#include <video/w100fb.h>
33 34
34#include <asm/setup.h> 35#include <asm/setup.h>
@@ -104,6 +105,28 @@ static unsigned long corgi_pin_config[] __initdata = {
104 GPIO6_MMC_CLK, 105 GPIO6_MMC_CLK,
105 GPIO8_MMC_CS0, 106 GPIO8_MMC_CS0,
106 107
108 /* GPIO Matrix Keypad */
109 GPIO66_GPIO, /* column 0 */
110 GPIO67_GPIO, /* column 1 */
111 GPIO68_GPIO, /* column 2 */
112 GPIO69_GPIO, /* column 3 */
113 GPIO70_GPIO, /* column 4 */
114 GPIO71_GPIO, /* column 5 */
115 GPIO72_GPIO, /* column 6 */
116 GPIO73_GPIO, /* column 7 */
117 GPIO74_GPIO, /* column 8 */
118 GPIO75_GPIO, /* column 9 */
119 GPIO76_GPIO, /* column 10 */
120 GPIO77_GPIO, /* column 11 */
121 GPIO58_GPIO, /* row 0 */
122 GPIO59_GPIO, /* row 1 */
123 GPIO60_GPIO, /* row 2 */
124 GPIO61_GPIO, /* row 3 */
125 GPIO62_GPIO, /* row 4 */
126 GPIO63_GPIO, /* row 5 */
127 GPIO64_GPIO, /* row 6 */
128 GPIO65_GPIO, /* row 7 */
129
107 /* GPIO */ 130 /* GPIO */
108 GPIO9_GPIO, /* CORGI_GPIO_nSD_DETECT */ 131 GPIO9_GPIO, /* CORGI_GPIO_nSD_DETECT */
109 GPIO7_GPIO, /* CORGI_GPIO_nSD_WP */ 132 GPIO7_GPIO, /* CORGI_GPIO_nSD_WP */
@@ -267,9 +290,115 @@ static struct platform_device corgifb_device = {
267/* 290/*
268 * Corgi Keyboard Device 291 * Corgi Keyboard Device
269 */ 292 */
293#define CORGI_KEY_CALENDER KEY_F1
294#define CORGI_KEY_ADDRESS KEY_F2
295#define CORGI_KEY_FN KEY_F3
296#define CORGI_KEY_CANCEL KEY_F4
297#define CORGI_KEY_OFF KEY_SUSPEND
298#define CORGI_KEY_EXOK KEY_F5
299#define CORGI_KEY_EXCANCEL KEY_F6
300#define CORGI_KEY_EXJOGDOWN KEY_F7
301#define CORGI_KEY_EXJOGUP KEY_F8
302#define CORGI_KEY_JAP1 KEY_LEFTCTRL
303#define CORGI_KEY_JAP2 KEY_LEFTALT
304#define CORGI_KEY_MAIL KEY_F10
305#define CORGI_KEY_OK KEY_F11
306#define CORGI_KEY_MENU KEY_F12
307
308static const uint32_t corgikbd_keymap[] = {
309 KEY(0, 1, KEY_1),
310 KEY(0, 2, KEY_3),
311 KEY(0, 3, KEY_5),
312 KEY(0, 4, KEY_6),
313 KEY(0, 5, KEY_7),
314 KEY(0, 6, KEY_9),
315 KEY(0, 7, KEY_0),
316 KEY(0, 8, KEY_BACKSPACE),
317 KEY(1, 1, KEY_2),
318 KEY(1, 2, KEY_4),
319 KEY(1, 3, KEY_R),
320 KEY(1, 4, KEY_Y),
321 KEY(1, 5, KEY_8),
322 KEY(1, 6, KEY_I),
323 KEY(1, 7, KEY_O),
324 KEY(1, 8, KEY_P),
325 KEY(2, 0, KEY_TAB),
326 KEY(2, 1, KEY_Q),
327 KEY(2, 2, KEY_E),
328 KEY(2, 3, KEY_T),
329 KEY(2, 4, KEY_G),
330 KEY(2, 5, KEY_U),
331 KEY(2, 6, KEY_J),
332 KEY(2, 7, KEY_K),
333 KEY(3, 0, CORGI_KEY_CALENDER),
334 KEY(3, 1, KEY_W),
335 KEY(3, 2, KEY_S),
336 KEY(3, 3, KEY_F),
337 KEY(3, 4, KEY_V),
338 KEY(3, 5, KEY_H),
339 KEY(3, 6, KEY_M),
340 KEY(3, 7, KEY_L),
341 KEY(3, 9, KEY_RIGHTSHIFT),
342 KEY(4, 0, CORGI_KEY_ADDRESS),
343 KEY(4, 1, KEY_A),
344 KEY(4, 2, KEY_D),
345 KEY(4, 3, KEY_C),
346 KEY(4, 4, KEY_B),
347 KEY(4, 5, KEY_N),
348 KEY(4, 6, KEY_DOT),
349 KEY(4, 8, KEY_ENTER),
350 KEY(4, 10, KEY_LEFTSHIFT),
351 KEY(5, 0, CORGI_KEY_MAIL),
352 KEY(5, 1, KEY_Z),
353 KEY(5, 2, KEY_X),
354 KEY(5, 3, KEY_MINUS),
355 KEY(5, 4, KEY_SPACE),
356 KEY(5, 5, KEY_COMMA),
357 KEY(5, 7, KEY_UP),
358 KEY(5, 11, CORGI_KEY_FN),
359 KEY(6, 0, KEY_SYSRQ),
360 KEY(6, 1, CORGI_KEY_JAP1),
361 KEY(6, 2, CORGI_KEY_JAP2),
362 KEY(6, 3, CORGI_KEY_CANCEL),
363 KEY(6, 4, CORGI_KEY_OK),
364 KEY(6, 5, CORGI_KEY_MENU),
365 KEY(6, 6, KEY_LEFT),
366 KEY(6, 7, KEY_DOWN),
367 KEY(6, 8, KEY_RIGHT),
368 KEY(7, 0, CORGI_KEY_OFF),
369 KEY(7, 1, CORGI_KEY_EXOK),
370 KEY(7, 2, CORGI_KEY_EXCANCEL),
371 KEY(7, 3, CORGI_KEY_EXJOGDOWN),
372 KEY(7, 4, CORGI_KEY_EXJOGUP),
373};
374
375static struct matrix_keymap_data corgikbd_keymap_data = {
376 .keymap = corgikbd_keymap,
377 .keymap_size = ARRAY_SIZE(corgikbd_keymap),
378};
379
380static const int corgikbd_row_gpios[] =
381 { 58, 59, 60, 61, 62, 63, 64, 65 };
382static const int corgikbd_col_gpios[] =
383 { 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77 };
384
385static struct matrix_keypad_platform_data corgikbd_pdata = {
386 .keymap_data = &corgikbd_keymap_data,
387 .row_gpios = corgikbd_row_gpios,
388 .col_gpios = corgikbd_col_gpios,
389 .num_row_gpios = ARRAY_SIZE(corgikbd_row_gpios),
390 .num_col_gpios = ARRAY_SIZE(corgikbd_col_gpios),
391 .col_scan_delay_us = 10,
392 .debounce_ms = 10,
393 .wakeup = 1,
394};
395
270static struct platform_device corgikbd_device = { 396static struct platform_device corgikbd_device = {
271 .name = "corgi-keyboard", 397 .name = "matrix-keypad",
272 .id = -1, 398 .id = -1,
399 .dev = {
400 .platform_data = &corgikbd_pdata,
401 },
273}; 402};
274 403
275/* 404/*
@@ -307,111 +436,20 @@ static struct platform_device corgiled_device = {
307 * The card detect interrupt isn't debounced so we delay it by 250ms 436 * The card detect interrupt isn't debounced so we delay it by 250ms
308 * to give the card a chance to fully insert/eject. 437 * to give the card a chance to fully insert/eject.
309 */ 438 */
310static struct pxamci_platform_data corgi_mci_platform_data;
311
312static int corgi_mci_init(struct device *dev, irq_handler_t corgi_detect_int, void *data)
313{
314 int err;
315
316 err = gpio_request(CORGI_GPIO_nSD_DETECT, "nSD_DETECT");
317 if (err)
318 goto err_out;
319
320 err = gpio_request(CORGI_GPIO_nSD_WP, "nSD_WP");
321 if (err)
322 goto err_free_1;
323
324 err = gpio_request(CORGI_GPIO_SD_PWR, "SD_PWR");
325 if (err)
326 goto err_free_2;
327
328 gpio_direction_input(CORGI_GPIO_nSD_DETECT);
329 gpio_direction_input(CORGI_GPIO_nSD_WP);
330 gpio_direction_output(CORGI_GPIO_SD_PWR, 0);
331
332 corgi_mci_platform_data.detect_delay = msecs_to_jiffies(250);
333
334 err = request_irq(CORGI_IRQ_GPIO_nSD_DETECT, corgi_detect_int,
335 IRQF_DISABLED | IRQF_TRIGGER_RISING |
336 IRQF_TRIGGER_FALLING,
337 "MMC card detect", data);
338 if (err) {
339 pr_err("%s: MMC/SD: can't request MMC card detect IRQ\n",
340 __func__);
341 goto err_free_3;
342 }
343 return 0;
344
345err_free_3:
346 gpio_free(CORGI_GPIO_SD_PWR);
347err_free_2:
348 gpio_free(CORGI_GPIO_nSD_WP);
349err_free_1:
350 gpio_free(CORGI_GPIO_nSD_DETECT);
351err_out:
352 return err;
353}
354
355static void corgi_mci_setpower(struct device *dev, unsigned int vdd)
356{
357 struct pxamci_platform_data* p_d = dev->platform_data;
358
359 gpio_set_value(CORGI_GPIO_SD_PWR, ((1 << vdd) & p_d->ocr_mask));
360}
361
362static int corgi_mci_get_ro(struct device *dev)
363{
364 return gpio_get_value(CORGI_GPIO_nSD_WP);
365}
366
367static void corgi_mci_exit(struct device *dev, void *data)
368{
369 free_irq(CORGI_IRQ_GPIO_nSD_DETECT, data);
370 gpio_free(CORGI_GPIO_SD_PWR);
371 gpio_free(CORGI_GPIO_nSD_WP);
372 gpio_free(CORGI_GPIO_nSD_DETECT);
373}
374
375static struct pxamci_platform_data corgi_mci_platform_data = { 439static struct pxamci_platform_data corgi_mci_platform_data = {
376 .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34, 440 .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34,
377 .init = corgi_mci_init, 441 .gpio_card_detect = -1,
378 .get_ro = corgi_mci_get_ro, 442 .gpio_card_ro = CORGI_GPIO_nSD_WP,
379 .setpower = corgi_mci_setpower, 443 .gpio_power = CORGI_GPIO_SD_PWR,
380 .exit = corgi_mci_exit,
381}; 444};
382 445
383 446
384/* 447/*
385 * Irda 448 * Irda
386 */ 449 */
387static void corgi_irda_transceiver_mode(struct device *dev, int mode)
388{
389 gpio_set_value(CORGI_GPIO_IR_ON, mode & IR_OFF);
390 pxa2xx_transceiver_mode(dev, mode);
391}
392
393static int corgi_irda_startup(struct device *dev)
394{
395 int err;
396
397 err = gpio_request(CORGI_GPIO_IR_ON, "IR_ON");
398 if (err)
399 return err;
400
401 gpio_direction_output(CORGI_GPIO_IR_ON, 1);
402 return 0;
403}
404
405static void corgi_irda_shutdown(struct device *dev)
406{
407 gpio_free(CORGI_GPIO_IR_ON);
408}
409
410static struct pxaficp_platform_data corgi_ficp_platform_data = { 450static struct pxaficp_platform_data corgi_ficp_platform_data = {
451 .gpio_pwdown = CORGI_GPIO_IR_ON,
411 .transceiver_cap = IR_SIRMODE | IR_OFF, 452 .transceiver_cap = IR_SIRMODE | IR_OFF,
412 .transceiver_mode = corgi_irda_transceiver_mode,
413 .startup = corgi_irda_startup,
414 .shutdown = corgi_irda_shutdown,
415}; 453};
416 454
417 455
@@ -636,6 +674,7 @@ static void __init corgi_init(void)
636 corgi_init_spi(); 674 corgi_init_spi();
637 675
638 pxa_set_udc_info(&udc_info); 676 pxa_set_udc_info(&udc_info);
677 corgi_mci_platform_data.detect_delay = msecs_to_jiffies(250);
639 pxa_set_mci_info(&corgi_mci_platform_data); 678 pxa_set_mci_info(&corgi_mci_platform_data);
640 pxa_set_ficp_info(&corgi_ficp_platform_data); 679 pxa_set_ficp_info(&corgi_ficp_platform_data);
641 pxa_set_i2c_info(NULL); 680 pxa_set_i2c_info(NULL);
diff --git a/arch/arm/mach-pxa/csb726.c b/arch/arm/mach-pxa/csb726.c
index 7d3e1b46e550..79141f862728 100644
--- a/arch/arm/mach-pxa/csb726.c
+++ b/arch/arm/mach-pxa/csb726.c
@@ -130,61 +130,17 @@ static struct pxamci_platform_data csb726_mci_data;
130static int csb726_mci_init(struct device *dev, 130static int csb726_mci_init(struct device *dev,
131 irq_handler_t detect, void *data) 131 irq_handler_t detect, void *data)
132{ 132{
133 int err;
134
135 csb726_mci_data.detect_delay = msecs_to_jiffies(500); 133 csb726_mci_data.detect_delay = msecs_to_jiffies(500);
136
137 err = gpio_request(CSB726_GPIO_MMC_DETECT, "MMC detect");
138 if (err)
139 goto err_det_req;
140
141 err = gpio_direction_input(CSB726_GPIO_MMC_DETECT);
142 if (err)
143 goto err_det_dir;
144
145 err = gpio_request(CSB726_GPIO_MMC_RO, "MMC ro");
146 if (err)
147 goto err_ro_req;
148
149 err = gpio_direction_input(CSB726_GPIO_MMC_RO);
150 if (err)
151 goto err_ro_dir;
152
153 err = request_irq(gpio_to_irq(CSB726_GPIO_MMC_DETECT), detect,
154 IRQF_DISABLED, "MMC card detect", data);
155 if (err)
156 goto err_irq;
157
158 return 0; 134 return 0;
159
160err_irq:
161err_ro_dir:
162 gpio_free(CSB726_GPIO_MMC_RO);
163err_ro_req:
164err_det_dir:
165 gpio_free(CSB726_GPIO_MMC_DETECT);
166err_det_req:
167 return err;
168}
169
170static int csb726_mci_get_ro(struct device *dev)
171{
172 return gpio_get_value(CSB726_GPIO_MMC_RO);
173}
174
175static void csb726_mci_exit(struct device *dev, void *data)
176{
177 free_irq(gpio_to_irq(CSB726_GPIO_MMC_DETECT), data);
178 gpio_free(CSB726_GPIO_MMC_RO);
179 gpio_free(CSB726_GPIO_MMC_DETECT);
180} 135}
181 136
182static struct pxamci_platform_data csb726_mci = { 137static struct pxamci_platform_data csb726_mci = {
183 .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34, 138 .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34,
184 .init = csb726_mci_init, 139 .init = csb726_mci_init,
185 .get_ro = csb726_mci_get_ro,
186 /* FIXME setpower */ 140 /* FIXME setpower */
187 .exit = csb726_mci_exit, 141 .gpio_card_detect = CSB726_GPIO_MMC_DETECT,
142 .gpio_card_ro = CSB726_GPIO_MMC_RO,
143 .gpio_power = -1,
188}; 144};
189 145
190static struct pxaohci_platform_data csb726_ohci_platform_data = { 146static struct pxaohci_platform_data csb726_ohci_platform_data = {
diff --git a/arch/arm/mach-pxa/devices.c b/arch/arm/mach-pxa/devices.c
index ecc08f360b68..46fabe1cca11 100644
--- a/arch/arm/mach-pxa/devices.c
+++ b/arch/arm/mach-pxa/devices.c
@@ -935,6 +935,33 @@ void __init pxa3xx_set_nand_info(struct pxa3xx_nand_platform_data *info)
935{ 935{
936 pxa_register_device(&pxa3xx_device_nand, info); 936 pxa_register_device(&pxa3xx_device_nand, info);
937} 937}
938
939static struct resource pxa3xx_resources_gcu[] = {
940 {
941 .start = 0x54000000,
942 .end = 0x54000fff,
943 .flags = IORESOURCE_MEM,
944 },
945 {
946 .start = IRQ_GCU,
947 .end = IRQ_GCU,
948 .flags = IORESOURCE_IRQ,
949 },
950};
951
952static u64 pxa3xx_gcu_dmamask = DMA_BIT_MASK(32);
953
954struct platform_device pxa3xx_device_gcu = {
955 .name = "pxa3xx-gcu",
956 .id = -1,
957 .num_resources = ARRAY_SIZE(pxa3xx_resources_gcu),
958 .resource = pxa3xx_resources_gcu,
959 .dev = {
960 .dma_mask = &pxa3xx_gcu_dmamask,
961 .coherent_dma_mask = 0xffffffff,
962 },
963};
964
938#endif /* CONFIG_PXA3xx */ 965#endif /* CONFIG_PXA3xx */
939 966
940/* pxa2xx-spi platform-device ID equals respective SSP platform-device ID + 1. 967/* pxa2xx-spi platform-device ID equals respective SSP platform-device ID + 1.
diff --git a/arch/arm/mach-pxa/devices.h b/arch/arm/mach-pxa/devices.h
index ecc24a4dca6d..93817d99761e 100644
--- a/arch/arm/mach-pxa/devices.h
+++ b/arch/arm/mach-pxa/devices.h
@@ -35,4 +35,6 @@ extern struct platform_device pxa27x_device_pwm1;
35extern struct platform_device pxa3xx_device_nand; 35extern struct platform_device pxa3xx_device_nand;
36extern struct platform_device pxa3xx_device_i2c_power; 36extern struct platform_device pxa3xx_device_i2c_power;
37 37
38extern struct platform_device pxa3xx_device_gcu;
39
38void __init pxa_register_device(struct platform_device *dev, void *data); 40void __init pxa_register_device(struct platform_device *dev, void *data);
diff --git a/arch/arm/mach-pxa/e740.c b/arch/arm/mach-pxa/e740.c
index a36fc17f671d..49acdfa6650d 100644
--- a/arch/arm/mach-pxa/e740.c
+++ b/arch/arm/mach-pxa/e740.c
@@ -199,7 +199,6 @@ static void __init e740_init(void)
199 platform_add_devices(devices, ARRAY_SIZE(devices)); 199 platform_add_devices(devices, ARRAY_SIZE(devices));
200 pxa_set_udc_info(&e7xx_udc_mach_info); 200 pxa_set_udc_info(&e7xx_udc_mach_info);
201 pxa_set_ac97_info(NULL); 201 pxa_set_ac97_info(NULL);
202 e7xx_irda_init();
203 pxa_set_ficp_info(&e7xx_ficp_platform_data); 202 pxa_set_ficp_info(&e7xx_ficp_platform_data);
204} 203}
205 204
diff --git a/arch/arm/mach-pxa/e750.c b/arch/arm/mach-pxa/e750.c
index 1d00110590e5..4052ece3ef49 100644
--- a/arch/arm/mach-pxa/e750.c
+++ b/arch/arm/mach-pxa/e750.c
@@ -200,7 +200,6 @@ static void __init e750_init(void)
200 platform_add_devices(devices, ARRAY_SIZE(devices)); 200 platform_add_devices(devices, ARRAY_SIZE(devices));
201 pxa_set_udc_info(&e7xx_udc_mach_info); 201 pxa_set_udc_info(&e7xx_udc_mach_info);
202 pxa_set_ac97_info(NULL); 202 pxa_set_ac97_info(NULL);
203 e7xx_irda_init();
204 pxa_set_ficp_info(&e7xx_ficp_platform_data); 203 pxa_set_ficp_info(&e7xx_ficp_platform_data);
205} 204}
206 205
diff --git a/arch/arm/mach-pxa/em-x270.c b/arch/arm/mach-pxa/em-x270.c
index 9cd09465a0e8..aec7f4214b14 100644
--- a/arch/arm/mach-pxa/em-x270.c
+++ b/arch/arm/mach-pxa/em-x270.c
@@ -646,13 +646,16 @@ static int em_x270_mci_get_ro(struct device *dev)
646} 646}
647 647
648static struct pxamci_platform_data em_x270_mci_platform_data = { 648static struct pxamci_platform_data em_x270_mci_platform_data = {
649 .ocr_mask = MMC_VDD_20_21|MMC_VDD_21_22|MMC_VDD_22_23| 649 .ocr_mask = MMC_VDD_20_21|MMC_VDD_21_22|MMC_VDD_22_23|
650 MMC_VDD_24_25|MMC_VDD_25_26|MMC_VDD_26_27| 650 MMC_VDD_24_25|MMC_VDD_25_26|MMC_VDD_26_27|
651 MMC_VDD_27_28|MMC_VDD_28_29|MMC_VDD_29_30| 651 MMC_VDD_27_28|MMC_VDD_28_29|MMC_VDD_29_30|
652 MMC_VDD_30_31|MMC_VDD_31_32, 652 MMC_VDD_30_31|MMC_VDD_31_32,
653 .init = em_x270_mci_init, 653 .init = em_x270_mci_init,
654 .setpower = em_x270_mci_setpower, 654 .setpower = em_x270_mci_setpower,
655 .exit = em_x270_mci_exit, 655 .exit = em_x270_mci_exit,
656 .gpio_card_detect = -1,
657 .gpio_card_ro = -1,
658 .gpio_power = -1,
656}; 659};
657 660
658static void __init em_x270_init_mmc(void) 661static void __init em_x270_init_mmc(void)
@@ -1022,22 +1025,32 @@ static int em_x270_sensor_power(struct device *dev, int on)
1022 return 0; 1025 return 0;
1023} 1026}
1024 1027
1025static struct soc_camera_link iclink = {
1026 .bus_id = 0,
1027 .power = em_x270_sensor_power,
1028};
1029
1030static struct i2c_board_info em_x270_i2c_cam_info[] = { 1028static struct i2c_board_info em_x270_i2c_cam_info[] = {
1031 { 1029 {
1032 I2C_BOARD_INFO("mt9m111", 0x48), 1030 I2C_BOARD_INFO("mt9m111", 0x48),
1031 },
1032};
1033
1034static struct soc_camera_link iclink = {
1035 .bus_id = 0,
1036 .power = em_x270_sensor_power,
1037 .board_info = &em_x270_i2c_cam_info[0],
1038 .i2c_adapter_id = 0,
1039 .module_name = "mt9m111",
1040};
1041
1042static struct platform_device em_x270_camera = {
1043 .name = "soc-camera-pdrv",
1044 .id = -1,
1045 .dev = {
1033 .platform_data = &iclink, 1046 .platform_data = &iclink,
1034 }, 1047 },
1035}; 1048};
1036 1049
1037static void __init em_x270_init_camera(void) 1050static void __init em_x270_init_camera(void)
1038{ 1051{
1039 i2c_register_board_info(0, ARRAY_AND_SIZE(em_x270_i2c_cam_info));
1040 pxa_set_camera_info(&em_x270_camera_platform_data); 1052 pxa_set_camera_info(&em_x270_camera_platform_data);
1053 platform_device_register(&em_x270_camera);
1041} 1054}
1042#else 1055#else
1043static inline void em_x270_init_camera(void) {} 1056static inline void em_x270_init_camera(void) {}
@@ -1103,6 +1116,7 @@ REGULATOR_CONSUMER(ldo5, NULL, "vcc cam");
1103REGULATOR_CONSUMER(ldo10, &pxa_device_mci.dev, "vcc sdio"); 1116REGULATOR_CONSUMER(ldo10, &pxa_device_mci.dev, "vcc sdio");
1104REGULATOR_CONSUMER(ldo12, NULL, "vcc usb"); 1117REGULATOR_CONSUMER(ldo12, NULL, "vcc usb");
1105REGULATOR_CONSUMER(ldo19, &em_x270_gprs_userspace_consumer.dev, "vcc gprs"); 1118REGULATOR_CONSUMER(ldo19, &em_x270_gprs_userspace_consumer.dev, "vcc gprs");
1119REGULATOR_CONSUMER(buck2, NULL, "vcc_core");
1106 1120
1107#define REGULATOR_INIT(_ldo, _min_uV, _max_uV, _ops_mask) \ 1121#define REGULATOR_INIT(_ldo, _min_uV, _max_uV, _ops_mask) \
1108 static struct regulator_init_data _ldo##_data = { \ 1122 static struct regulator_init_data _ldo##_data = { \
@@ -1125,6 +1139,7 @@ REGULATOR_INIT(ldo10, 2000000, 3200000,
1125 REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE); 1139 REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE);
1126REGULATOR_INIT(ldo12, 3000000, 3000000, REGULATOR_CHANGE_STATUS); 1140REGULATOR_INIT(ldo12, 3000000, 3000000, REGULATOR_CHANGE_STATUS);
1127REGULATOR_INIT(ldo19, 3200000, 3200000, REGULATOR_CHANGE_STATUS); 1141REGULATOR_INIT(ldo19, 3200000, 3200000, REGULATOR_CHANGE_STATUS);
1142REGULATOR_INIT(buck2, 1000000, 1650000, REGULATOR_CHANGE_VOLTAGE);
1128 1143
1129struct led_info em_x270_led_info = { 1144struct led_info em_x270_led_info = {
1130 .name = "em-x270:orange", 1145 .name = "em-x270:orange",
@@ -1194,6 +1209,8 @@ struct da903x_subdev_info em_x270_da9030_subdevs[] = {
1194 DA9030_LDO(12), 1209 DA9030_LDO(12),
1195 DA9030_LDO(19), 1210 DA9030_LDO(19),
1196 1211
1212 DA9030_SUBDEV(regulator, BUCK2, &buck2_data),
1213
1197 DA9030_SUBDEV(led, LED_PC, &em_x270_led_info), 1214 DA9030_SUBDEV(led, LED_PC, &em_x270_led_info),
1198 DA9030_SUBDEV(backlight, WLED, &em_x270_led_info), 1215 DA9030_SUBDEV(backlight, WLED, &em_x270_led_info),
1199 DA9030_SUBDEV(battery, BAT, &em_x270_batterty_info), 1216 DA9030_SUBDEV(battery, BAT, &em_x270_batterty_info),
@@ -1245,7 +1262,6 @@ static void __init em_x270_init_i2c(void)
1245 1262
1246static void __init em_x270_module_init(void) 1263static void __init em_x270_module_init(void)
1247{ 1264{
1248 pr_info("%s\n", __func__);
1249 pxa2xx_mfp_config(ARRAY_AND_SIZE(em_x270_pin_config)); 1265 pxa2xx_mfp_config(ARRAY_AND_SIZE(em_x270_pin_config));
1250 1266
1251 mmc_cd = GPIO13_MMC_CD; 1267 mmc_cd = GPIO13_MMC_CD;
@@ -1257,7 +1273,6 @@ static void __init em_x270_module_init(void)
1257 1273
1258static void __init em_x270_exeda_init(void) 1274static void __init em_x270_exeda_init(void)
1259{ 1275{
1260 pr_info("%s\n", __func__);
1261 pxa2xx_mfp_config(ARRAY_AND_SIZE(exeda_pin_config)); 1276 pxa2xx_mfp_config(ARRAY_AND_SIZE(exeda_pin_config));
1262 1277
1263 mmc_cd = GPIO114_MMC_CD; 1278 mmc_cd = GPIO114_MMC_CD;
diff --git a/arch/arm/mach-pxa/eseries.c b/arch/arm/mach-pxa/eseries.c
index c60dadf847a6..91417f035069 100644
--- a/arch/arm/mach-pxa/eseries.c
+++ b/arch/arm/mach-pxa/eseries.c
@@ -47,44 +47,9 @@ struct pxa2xx_udc_mach_info e7xx_udc_mach_info = {
47 .gpio_pullup_inverted = 1 47 .gpio_pullup_inverted = 1
48}; 48};
49 49
50static void e7xx_irda_transceiver_mode(struct device *dev, int mode)
51{
52 if (mode & IR_OFF) {
53 gpio_set_value(GPIO_E7XX_IR_OFF, 1);
54 pxa2xx_transceiver_mode(dev, mode);
55 } else {
56 pxa2xx_transceiver_mode(dev, mode);
57 gpio_set_value(GPIO_E7XX_IR_OFF, 0);
58 }
59}
60
61int e7xx_irda_init(void)
62{
63 int ret;
64
65 ret = gpio_request(GPIO_E7XX_IR_OFF, "IrDA power");
66 if (ret)
67 goto out;
68
69 ret = gpio_direction_output(GPIO_E7XX_IR_OFF, 0);
70 if (ret)
71 goto out;
72
73 e7xx_irda_transceiver_mode(NULL, IR_SIRMODE | IR_OFF);
74out:
75 return ret;
76}
77
78static void e7xx_irda_shutdown(struct device *dev)
79{
80 e7xx_irda_transceiver_mode(dev, IR_SIRMODE | IR_OFF);
81 gpio_free(GPIO_E7XX_IR_OFF);
82}
83
84struct pxaficp_platform_data e7xx_ficp_platform_data = { 50struct pxaficp_platform_data e7xx_ficp_platform_data = {
85 .transceiver_cap = IR_SIRMODE | IR_OFF, 51 .gpio_pwdown = GPIO_E7XX_IR_OFF,
86 .transceiver_mode = e7xx_irda_transceiver_mode, 52 .transceiver_cap = IR_SIRMODE | IR_OFF,
87 .shutdown = e7xx_irda_shutdown,
88}; 53};
89 54
90int eseries_tmio_enable(struct platform_device *dev) 55int eseries_tmio_enable(struct platform_device *dev)
diff --git a/arch/arm/mach-pxa/gumstix.c b/arch/arm/mach-pxa/gumstix.c
index ca9912ea78d9..1708c0109844 100644
--- a/arch/arm/mach-pxa/gumstix.c
+++ b/arch/arm/mach-pxa/gumstix.c
@@ -88,7 +88,10 @@ static struct platform_device *devices[] __initdata = {
88 88
89#ifdef CONFIG_MMC_PXA 89#ifdef CONFIG_MMC_PXA
90static struct pxamci_platform_data gumstix_mci_platform_data = { 90static struct pxamci_platform_data gumstix_mci_platform_data = {
91 .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34, 91 .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34,
92 .gpio_card_detect = -1,
93 .gpio_card_ro = -1,
94 .gpio_power = -1,
92}; 95};
93 96
94static void __init gumstix_mmc_init(void) 97static void __init gumstix_mmc_init(void)
diff --git a/arch/arm/mach-pxa/hx4700.c b/arch/arm/mach-pxa/hx4700.c
index 81359d574f88..abff9e132749 100644
--- a/arch/arm/mach-pxa/hx4700.c
+++ b/arch/arm/mach-pxa/hx4700.c
@@ -45,6 +45,7 @@
45#include <mach/irda.h> 45#include <mach/irda.h>
46#include <mach/pxa2xx_spi.h> 46#include <mach/pxa2xx_spi.h>
47 47
48#include <video/platform_lcd.h>
48#include <video/w100fb.h> 49#include <video/w100fb.h>
49 50
50#include "devices.h" 51#include "devices.h"
@@ -174,14 +175,9 @@ static int hx4700_gpio_request(struct gpio_ress *gpios, int size)
174 * IRDA 175 * IRDA
175 */ 176 */
176 177
177static void irda_transceiver_mode(struct device *dev, int mode)
178{
179 gpio_set_value(GPIO105_HX4700_nIR_ON, mode & IR_OFF);
180}
181
182static struct pxaficp_platform_data ficp_info = { 178static struct pxaficp_platform_data ficp_info = {
183 .transceiver_cap = IR_SIRMODE | IR_OFF, 179 .gpio_pwdown = GPIO105_HX4700_nIR_ON,
184 .transceiver_mode = irda_transceiver_mode, 180 .transceiver_cap = IR_SIRMODE | IR_OFF,
185}; 181};
186 182
187/* 183/*
@@ -368,8 +364,6 @@ static struct platform_device egpio = {
368 * LCD - Sony display connected to ATI Imageon w3220 364 * LCD - Sony display connected to ATI Imageon w3220
369 */ 365 */
370 366
371static int lcd_power;
372
373static void sony_lcd_init(void) 367static void sony_lcd_init(void)
374{ 368{
375 gpio_set_value(GPIO84_HX4700_LCD_SQN, 1); 369 gpio_set_value(GPIO84_HX4700_LCD_SQN, 1);
@@ -410,35 +404,6 @@ static void sony_lcd_off(void)
410 gpio_set_value(GPIO110_HX4700_LCD_LVDD_3V3_ON, 0); 404 gpio_set_value(GPIO110_HX4700_LCD_LVDD_3V3_ON, 0);
411} 405}
412 406
413static int hx4700_lcd_set_power(struct lcd_device *ldev, int level)
414{
415 switch (level) {
416 case FB_BLANK_UNBLANK:
417 sony_lcd_init();
418 break;
419 case FB_BLANK_NORMAL:
420 case FB_BLANK_VSYNC_SUSPEND:
421 case FB_BLANK_HSYNC_SUSPEND:
422 case FB_BLANK_POWERDOWN:
423 sony_lcd_off();
424 break;
425 }
426 lcd_power = level;
427 return 0;
428}
429
430static int hx4700_lcd_get_power(struct lcd_device *lm)
431{
432 return lcd_power;
433}
434
435static struct lcd_ops hx4700_lcd_ops = {
436 .get_power = hx4700_lcd_get_power,
437 .set_power = hx4700_lcd_set_power,
438};
439
440static struct lcd_device *hx4700_lcd_device;
441
442#ifdef CONFIG_PM 407#ifdef CONFIG_PM
443static void w3220_lcd_suspend(struct w100fb_par *wfb) 408static void w3220_lcd_suspend(struct w100fb_par *wfb)
444{ 409{
@@ -573,6 +538,27 @@ static struct platform_device w3220 = {
573 .resource = w3220_resources, 538 .resource = w3220_resources,
574}; 539};
575 540
541static void hx4700_lcd_set_power(struct plat_lcd_data *pd, unsigned int power)
542{
543 if (power)
544 sony_lcd_init();
545 else
546 sony_lcd_off();
547}
548
549static struct plat_lcd_data hx4700_lcd_data = {
550 .set_power = hx4700_lcd_set_power,
551};
552
553static struct platform_device hx4700_lcd = {
554 .name = "platform-lcd",
555 .id = -1,
556 .dev = {
557 .platform_data = &hx4700_lcd_data,
558 .parent = &w3220.dev,
559 },
560};
561
576/* 562/*
577 * Backlight 563 * Backlight
578 */ 564 */
@@ -872,9 +858,6 @@ static void __init hx4700_init(void)
872 pxa2xx_set_spi_info(2, &pxa_ssp2_master_info); 858 pxa2xx_set_spi_info(2, &pxa_ssp2_master_info);
873 spi_register_board_info(ARRAY_AND_SIZE(tsc2046_board_info)); 859 spi_register_board_info(ARRAY_AND_SIZE(tsc2046_board_info));
874 860
875 hx4700_lcd_device = lcd_device_register("w100fb", NULL,
876 (void *)&w3220_info, &hx4700_lcd_ops);
877
878 gpio_set_value(GPIO71_HX4700_ASIC3_nRESET, 0); 861 gpio_set_value(GPIO71_HX4700_ASIC3_nRESET, 0);
879 mdelay(10); 862 mdelay(10);
880 gpio_set_value(GPIO71_HX4700_ASIC3_nRESET, 1); 863 gpio_set_value(GPIO71_HX4700_ASIC3_nRESET, 1);
diff --git a/arch/arm/mach-pxa/idp.c b/arch/arm/mach-pxa/idp.c
index b6243b59d9be..b6486ef20b17 100644
--- a/arch/arm/mach-pxa/idp.c
+++ b/arch/arm/mach-pxa/idp.c
@@ -168,7 +168,10 @@ static struct pxafb_mach_info sharp_lm8v31 = {
168}; 168};
169 169
170static struct pxamci_platform_data idp_mci_platform_data = { 170static struct pxamci_platform_data idp_mci_platform_data = {
171 .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34, 171 .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34,
172 .gpio_card_detect = -1,
173 .gpio_card_ro = -1,
174 .gpio_power = -1,
172}; 175};
173 176
174static void __init idp_init(void) 177static void __init idp_init(void)
diff --git a/arch/arm/mach-pxa/imote2.c b/arch/arm/mach-pxa/imote2.c
index 961807dc6467..2a4945db31c5 100644
--- a/arch/arm/mach-pxa/imote2.c
+++ b/arch/arm/mach-pxa/imote2.c
@@ -389,6 +389,9 @@ static int imote2_mci_get_ro(struct device *dev)
389static struct pxamci_platform_data imote2_mci_platform_data = { 389static struct pxamci_platform_data imote2_mci_platform_data = {
390 .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34, /* default anyway */ 390 .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34, /* default anyway */
391 .get_ro = imote2_mci_get_ro, 391 .get_ro = imote2_mci_get_ro,
392 .gpio_card_detect = -1,
393 .gpio_card_ro = -1,
394 .gpio_power = -1,
392}; 395};
393 396
394static struct mtd_partition imote2flash_partitions[] = { 397static struct mtd_partition imote2flash_partitions[] = {
diff --git a/arch/arm/mach-pxa/include/mach/balloon3.h b/arch/arm/mach-pxa/include/mach/balloon3.h
new file mode 100644
index 000000000000..bfec09b1814b
--- /dev/null
+++ b/arch/arm/mach-pxa/include/mach/balloon3.h
@@ -0,0 +1,134 @@
1/*
2 * linux/include/asm-arm/arch-pxa/balloon3.h
3 *
4 * Authors: Nick Bane and Wookey
5 * Created: Oct, 2005
6 * Copyright: Toby Churchill Ltd
7 * Cribbed from mainstone.c, by Nicholas Pitre
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License version 2 as
11 * published by the Free Software Foundation.
12 */
13
14#ifndef ASM_ARCH_BALLOON3_H
15#define ASM_ARCH_BALLOON3_H
16
17enum balloon3_features {
18 BALLOON3_FEATURE_OHCI,
19 BALLOON3_FEATURE_MMC,
20 BALLOON3_FEATURE_CF,
21 BALLOON3_FEATURE_AUDIO,
22 BALLOON3_FEATURE_TOPPOLY,
23};
24
25#define BALLOON3_FPGA_PHYS PXA_CS4_PHYS
26#define BALLOON3_FPGA_VIRT (0xf1000000) /* as per balloon2 */
27#define BALLOON3_FPGA_LENGTH 0x01000000
28
29/* FPGA/CPLD registers */
30#define BALLOON3_PCMCIA0_REG (BALLOON3_FPGA_VIRT + 0x00e00008)
31/* fixme - same for now */
32#define BALLOON3_PCMCIA1_REG (BALLOON3_FPGA_VIRT + 0x00e00008)
33#define BALLOON3_NANDIO_IO_REG (BALLOON3_FPGA_VIRT + 0x00e00000)
34/* fpga/cpld interrupt control register */
35#define BALLOON3_INT_CONTROL_REG (BALLOON3_FPGA_VIRT + 0x00e0000C)
36#define BALLOON3_NANDIO_CTL2_REG (BALLOON3_FPGA_VIRT + 0x00e00010)
37#define BALLOON3_NANDIO_CTL_REG (BALLOON3_FPGA_VIRT + 0x00e00014)
38#define BALLOON3_VERSION_REG (BALLOON3_FPGA_VIRT + 0x00e0001c)
39
40#define BALLOON3_SAMOSA_ADDR_REG (BALLOON3_FPGA_VIRT + 0x00c00000)
41#define BALLOON3_SAMOSA_DATA_REG (BALLOON3_FPGA_VIRT + 0x00c00004)
42#define BALLOON3_SAMOSA_STATUS_REG (BALLOON3_FPGA_VIRT + 0x00c0001c)
43
44/* GPIOs for irqs */
45#define BALLOON3_GPIO_AUX_NIRQ (94)
46#define BALLOON3_GPIO_CODEC_IRQ (95)
47
48/* Timer and Idle LED locations */
49#define BALLOON3_GPIO_LED_NAND (9)
50#define BALLOON3_GPIO_LED_IDLE (10)
51
52/* backlight control */
53#define BALLOON3_GPIO_RUN_BACKLIGHT (99)
54
55#define BALLOON3_GPIO_S0_CD (105)
56
57/* FPGA Interrupt Mask/Acknowledge Register */
58#define BALLOON3_INT_S0_IRQ (1 << 0) /* PCMCIA 0 IRQ */
59#define BALLOON3_INT_S0_STSCHG (1 << 1) /* PCMCIA 0 status changed */
60
61/* CF Status Register */
62#define BALLOON3_PCMCIA_nIRQ (1 << 0) /* IRQ / ready signal */
63#define BALLOON3_PCMCIA_nSTSCHG_BVD1 (1 << 1)
64 /* VDD sense / card status changed */
65
66/* CF control register (write) */
67#define BALLOON3_PCMCIA_RESET (1 << 0) /* Card reset signal */
68#define BALLOON3_PCMCIA_ENABLE (1 << 1)
69#define BALLOON3_PCMCIA_ADD_ENABLE (1 << 2)
70
71/* CPLD (and FPGA) interface definitions */
72#define CPLD_LCD0_DATA_SET 0x00
73#define CPLD_LCD0_DATA_CLR 0x10
74#define CPLD_LCD0_COMMAND_SET 0x01
75#define CPLD_LCD0_COMMAND_CLR 0x11
76#define CPLD_LCD1_DATA_SET 0x02
77#define CPLD_LCD1_DATA_CLR 0x12
78#define CPLD_LCD1_COMMAND_SET 0x03
79#define CPLD_LCD1_COMMAND_CLR 0x13
80
81#define CPLD_MISC_SET 0x07
82#define CPLD_MISC_CLR 0x17
83#define CPLD_MISC_LOON_NRESET_BIT 0
84#define CPLD_MISC_LOON_UNSUSP_BIT 1
85#define CPLD_MISC_RUN_5V_BIT 2
86#define CPLD_MISC_CHG_D0_BIT 3
87#define CPLD_MISC_CHG_D1_BIT 4
88#define CPLD_MISC_DAC_NCS_BIT 5
89
90#define CPLD_LCD_SET 0x08
91#define CPLD_LCD_CLR 0x18
92#define CPLD_LCD_BACKLIGHT_EN_0_BIT 0
93#define CPLD_LCD_BACKLIGHT_EN_1_BIT 1
94#define CPLD_LCD_LED_RED_BIT 4
95#define CPLD_LCD_LED_GREEN_BIT 5
96#define CPLD_LCD_NRESET_BIT 7
97
98#define CPLD_LCD_RO_SET 0x09
99#define CPLD_LCD_RO_CLR 0x19
100#define CPLD_LCD_RO_LCD0_nWAIT_BIT 0
101#define CPLD_LCD_RO_LCD1_nWAIT_BIT 1
102
103#define CPLD_SERIAL_SET 0x0a
104#define CPLD_SERIAL_CLR 0x1a
105#define CPLD_SERIAL_GSM_RI_BIT 0
106#define CPLD_SERIAL_GSM_CTS_BIT 1
107#define CPLD_SERIAL_GSM_DTR_BIT 2
108#define CPLD_SERIAL_LPR_CTS_BIT 3
109#define CPLD_SERIAL_TC232_CTS_BIT 4
110#define CPLD_SERIAL_TC232_DSR_BIT 5
111
112#define CPLD_SROUTING_SET 0x0b
113#define CPLD_SROUTING_CLR 0x1b
114#define CPLD_SROUTING_MSP430_LPR 0
115#define CPLD_SROUTING_MSP430_TC232 1
116#define CPLD_SROUTING_MSP430_GSM 2
117#define CPLD_SROUTING_LOON_LPR (0 << 4)
118#define CPLD_SROUTING_LOON_TC232 (1 << 4)
119#define CPLD_SROUTING_LOON_GSM (2 << 4)
120
121#define CPLD_AROUTING_SET 0x0c
122#define CPLD_AROUTING_CLR 0x1c
123#define CPLD_AROUTING_MIC2PHONE_BIT 0
124#define CPLD_AROUTING_PHONE2INT_BIT 1
125#define CPLD_AROUTING_PHONE2EXT_BIT 2
126#define CPLD_AROUTING_LOONL2INT_BIT 3
127#define CPLD_AROUTING_LOONL2EXT_BIT 4
128#define CPLD_AROUTING_LOONR2PHONE_BIT 5
129#define CPLD_AROUTING_LOONR2INT_BIT 6
130#define CPLD_AROUTING_LOONR2EXT_BIT 7
131
132extern int balloon3_has(enum balloon3_features feature);
133
134#endif
diff --git a/arch/arm/mach-pxa/include/mach/colibri.h b/arch/arm/mach-pxa/include/mach/colibri.h
index a88d7caff0d1..811743c56147 100644
--- a/arch/arm/mach-pxa/include/mach/colibri.h
+++ b/arch/arm/mach-pxa/include/mach/colibri.h
@@ -23,6 +23,12 @@ static inline void colibri_pxa3xx_init_lcd(int bl_pin) {}
23extern void colibri_pxa3xx_init_eth(struct ax_plat_data *plat_data); 23extern void colibri_pxa3xx_init_eth(struct ax_plat_data *plat_data);
24#endif 24#endif
25 25
26#if defined(CONFIG_MTD_NAND_PXA3xx) || defined(CONFIG_MTD_NAND_PXA3xx_MODULE)
27extern void colibri_pxa3xx_init_nand(void);
28#else
29static inline void colibri_pxa3xx_init_nand(void) {}
30#endif
31
26/* physical memory regions */ 32/* physical memory regions */
27#define COLIBRI_SDRAM_BASE 0xa0000000 /* SDRAM region */ 33#define COLIBRI_SDRAM_BASE 0xa0000000 /* SDRAM region */
28 34
diff --git a/arch/arm/mach-pxa/include/mach/entry-macro.S b/arch/arm/mach-pxa/include/mach/entry-macro.S
index f6b4bf3e73d2..241880608ac6 100644
--- a/arch/arm/mach-pxa/include/mach/entry-macro.S
+++ b/arch/arm/mach-pxa/include/mach/entry-macro.S
@@ -24,34 +24,27 @@
24 mov \tmp, \tmp, lsr #13 24 mov \tmp, \tmp, lsr #13
25 and \tmp, \tmp, #0x7 @ Core G 25 and \tmp, \tmp, #0x7 @ Core G
26 cmp \tmp, #1 26 cmp \tmp, #1
27 bhi 1004f 27 bhi 1002f
28 28
29 @ Core Generation 1 (PXA25x)
29 mov \base, #io_p2v(0x40000000) @ IIR Ctl = 0x40d00000 30 mov \base, #io_p2v(0x40000000) @ IIR Ctl = 0x40d00000
30 add \base, \base, #0x00d00000 31 add \base, \base, #0x00d00000
31 ldr \irqstat, [\base, #0] @ ICIP 32 ldr \irqstat, [\base, #0] @ ICIP
32 ldr \irqnr, [\base, #4] @ ICMR 33 ldr \irqnr, [\base, #4] @ ICMR
33 b 1002f
34 34
351004:
36 mrc p6, 0, \irqstat, c6, c0, 0 @ ICIP2
37 mrc p6, 0, \irqnr, c7, c0, 0 @ ICMR2
38 ands \irqnr, \irqstat, \irqnr 35 ands \irqnr, \irqstat, \irqnr
39 beq 1003f 36 beq 1001f
40 rsb \irqstat, \irqnr, #0 37 rsb \irqstat, \irqnr, #0
41 and \irqstat, \irqstat, \irqnr 38 and \irqstat, \irqstat, \irqnr
42 clz \irqnr, \irqstat 39 clz \irqnr, \irqstat
43 rsb \irqnr, \irqnr, #31 40 rsb \irqnr, \irqnr, #(31 + PXA_IRQ(0))
44 add \irqnr, \irqnr, #(32 + PXA_IRQ(0))
45 b 1001f 41 b 1001f
461003:
47 mrc p6, 0, \irqstat, c0, c0, 0 @ ICIP
48 mrc p6, 0, \irqnr, c1, c0, 0 @ ICMR
491002: 421002:
50 ands \irqnr, \irqstat, \irqnr 43 @ Core Generation 2 (PXA27x) or Core Generation 3 (PXA3xx)
44 mrc p6, 0, \irqstat, c5, c0, 0 @ ICHP
45 tst \irqstat, #0x80000000
51 beq 1001f 46 beq 1001f
52 rsb \irqstat, \irqnr, #0 47 bic \irqstat, \irqstat, #0x80000000
53 and \irqstat, \irqstat, \irqnr 48 mov \irqnr, \irqstat, lsr #16
54 clz \irqnr, \irqstat
55 rsb \irqnr, \irqnr, #(31 + PXA_IRQ(0))
561001: 491001:
57 .endm 50 .endm
diff --git a/arch/arm/mach-pxa/include/mach/hardware.h b/arch/arm/mach-pxa/include/mach/hardware.h
index 16ab79547dae..aa3d9f70a08a 100644
--- a/arch/arm/mach-pxa/include/mach/hardware.h
+++ b/arch/arm/mach-pxa/include/mach/hardware.h
@@ -197,6 +197,16 @@
197#define __cpu_is_pxa935(id) (0) 197#define __cpu_is_pxa935(id) (0)
198#endif 198#endif
199 199
200#ifdef CONFIG_CPU_PXA950
201#define __cpu_is_pxa950(id) \
202 ({ \
203 unsigned int _id = (id) >> 4 & 0xfff; \
204 id == 0x697; \
205 })
206#else
207#define __cpu_is_pxa950(id) (0)
208#endif
209
200#define cpu_is_pxa210() \ 210#define cpu_is_pxa210() \
201 ({ \ 211 ({ \
202 __cpu_is_pxa210(read_cpuid_id()); \ 212 __cpu_is_pxa210(read_cpuid_id()); \
@@ -249,6 +259,13 @@
249 __cpu_is_pxa935(id); \ 259 __cpu_is_pxa935(id); \
250 }) 260 })
251 261
262#define cpu_is_pxa950() \
263 ({ \
264 unsigned int id = read_cpuid(CPUID_ID); \
265 __cpu_is_pxa950(id); \
266 })
267
268
252/* 269/*
253 * CPUID Core Generation Bit 270 * CPUID Core Generation Bit
254 * <= 0x2 for pxa21x/pxa25x/pxa26x/pxa27x 271 * <= 0x2 for pxa21x/pxa25x/pxa26x/pxa27x
diff --git a/arch/arm/mach-pxa/include/mach/irda.h b/arch/arm/mach-pxa/include/mach/irda.h
index 0a50c3c763df..3cd41f77dda4 100644
--- a/arch/arm/mach-pxa/include/mach/irda.h
+++ b/arch/arm/mach-pxa/include/mach/irda.h
@@ -12,6 +12,8 @@ struct pxaficp_platform_data {
12 void (*transceiver_mode)(struct device *dev, int mode); 12 void (*transceiver_mode)(struct device *dev, int mode);
13 int (*startup)(struct device *dev); 13 int (*startup)(struct device *dev);
14 void (*shutdown)(struct device *dev); 14 void (*shutdown)(struct device *dev);
15 int gpio_pwdown; /* powerdown GPIO for the IrDA chip */
16 bool gpio_pwdown_inverted; /* gpio_pwdown is inverted */
15}; 17};
16 18
17extern void pxa_set_ficp_info(struct pxaficp_platform_data *info); 19extern void pxa_set_ficp_info(struct pxaficp_platform_data *info);
diff --git a/arch/arm/mach-pxa/include/mach/irqs.h b/arch/arm/mach-pxa/include/mach/irqs.h
index 6a1d95993342..3677a9af9c87 100644
--- a/arch/arm/mach-pxa/include/mach/irqs.h
+++ b/arch/arm/mach-pxa/include/mach/irqs.h
@@ -68,9 +68,10 @@
68#ifdef CONFIG_PXA3xx 68#ifdef CONFIG_PXA3xx
69#define IRQ_SSP4 PXA_IRQ(13) /* SSP4 service request */ 69#define IRQ_SSP4 PXA_IRQ(13) /* SSP4 service request */
70#define IRQ_CIR PXA_IRQ(34) /* Consumer IR */ 70#define IRQ_CIR PXA_IRQ(34) /* Consumer IR */
71#define IRQ_COMM_WDT PXA_IRQ(35) /* Comm WDT interrupt */
71#define IRQ_TSI PXA_IRQ(36) /* Touch Screen Interface (PXA320) */ 72#define IRQ_TSI PXA_IRQ(36) /* Touch Screen Interface (PXA320) */
72#define IRQ_USIM2 PXA_IRQ(38) /* USIM2 Controller */ 73#define IRQ_USIM2 PXA_IRQ(38) /* USIM2 Controller */
73#define IRQ_GRPHICS PXA_IRQ(39) /* Graphics Controller */ 74#define IRQ_GCU PXA_IRQ(39) /* Graphics Controller */
74#define IRQ_MMC2 PXA_IRQ(41) /* MMC2 Controller */ 75#define IRQ_MMC2 PXA_IRQ(41) /* MMC2 Controller */
75#define IRQ_1WIRE PXA_IRQ(44) /* 1-Wire Controller */ 76#define IRQ_1WIRE PXA_IRQ(44) /* 1-Wire Controller */
76#define IRQ_NAND PXA_IRQ(45) /* NAND Controller */ 77#define IRQ_NAND PXA_IRQ(45) /* NAND Controller */
@@ -81,8 +82,31 @@
81#define IRQ_MMC3 PXA_IRQ(55) /* MMC3 Controller (PXA310) */ 82#define IRQ_MMC3 PXA_IRQ(55) /* MMC3 Controller (PXA310) */
82#endif 83#endif
83 84
84#define PXA_GPIO_IRQ_BASE PXA_IRQ(64) 85#ifdef CONFIG_CPU_PXA935
85#define PXA_GPIO_IRQ_NUM (128) 86#define IRQ_U2O PXA_IRQ(64) /* USB OTG 2.0 Controller (PXA935) */
87#define IRQ_U2H PXA_IRQ(65) /* USB Host 2.0 Controller (PXA935) */
88
89#define IRQ_MMC3_PXA935 PXA_IRQ(72) /* MMC3 Controller (PXA935) */
90#define IRQ_MMC4_PXA935 PXA_IRQ(73) /* MMC4 Controller (PXA935) */
91#define IRQ_MMC5_PXA935 PXA_IRQ(74) /* MMC5 Controller (PXA935) */
92
93#define IRQ_U2P PXA_IRQ(93) /* USB PHY D+/D- Lines (PXA935) */
94#endif
95
96#ifdef CONFIG_CPU_PXA930
97#define IRQ_ENHROT PXA_IRQ(37) /* Enhanced Rotary (PXA930) */
98#define IRQ_ACIPC0 PXA_IRQ(5)
99#define IRQ_ACIPC1 PXA_IRQ(40)
100#define IRQ_ACIPC2 PXA_IRQ(19)
101#define IRQ_TRKBALL PXA_IRQ(43) /* Track Ball */
102#endif
103
104#ifdef CONFIG_CPU_PXA950
105#define IRQ_GC500 PXA_IRQ(70) /* Graphics Controller (PXA950) */
106#endif
107
108#define PXA_GPIO_IRQ_BASE PXA_IRQ(96)
109#define PXA_GPIO_IRQ_NUM (192)
86 110
87#define GPIO_2_x_TO_IRQ(x) (PXA_GPIO_IRQ_BASE + (x)) 111#define GPIO_2_x_TO_IRQ(x) (PXA_GPIO_IRQ_BASE + (x))
88#define IRQ_GPIO(x) (((x) < 2) ? (IRQ_GPIO0 + (x)) : GPIO_2_x_TO_IRQ(x)) 112#define IRQ_GPIO(x) (((x) < 2) ? (IRQ_GPIO0 + (x)) : GPIO_2_x_TO_IRQ(x))
@@ -105,6 +129,8 @@
105#define IRQ_BOARD_END (IRQ_BOARD_START + 70) 129#define IRQ_BOARD_END (IRQ_BOARD_START + 70)
106#elif defined(CONFIG_MACH_ZYLONITE) 130#elif defined(CONFIG_MACH_ZYLONITE)
107#define IRQ_BOARD_END (IRQ_BOARD_START + 32) 131#define IRQ_BOARD_END (IRQ_BOARD_START + 32)
132#elif defined(CONFIG_PXA_EZX)
133#define IRQ_BOARD_END (IRQ_BOARD_START + 23)
108#else 134#else
109#define IRQ_BOARD_END (IRQ_BOARD_START + 16) 135#define IRQ_BOARD_END (IRQ_BOARD_START + 16)
110#endif 136#endif
@@ -237,6 +263,16 @@
237#define MAINSTONE_S1_STSCHG_IRQ MAINSTONE_IRQ(14) 263#define MAINSTONE_S1_STSCHG_IRQ MAINSTONE_IRQ(14)
238#define MAINSTONE_S1_IRQ MAINSTONE_IRQ(15) 264#define MAINSTONE_S1_IRQ MAINSTONE_IRQ(15)
239 265
266/* Balloon3 Interrupts */
267#define BALLOON3_IRQ(x) (IRQ_BOARD_START + (x))
268
269#define BALLOON3_BP_CF_NRDY_IRQ BALLOON3_IRQ(0)
270#define BALLOON3_BP_NSTSCHG_IRQ BALLOON3_IRQ(1)
271
272#define BALLOON3_AUX_NIRQ IRQ_GPIO(BALLOON3_GPIO_AUX_NIRQ)
273#define BALLOON3_CODEC_IRQ IRQ_GPIO(BALLOON3_GPIO_CODEC_IRQ)
274#define BALLOON3_S0_CD_IRQ IRQ_GPIO(BALLOON3_GPIO_S0_CD)
275
240/* LoCoMo Interrupts (CONFIG_SHARP_LOCOMO) */ 276/* LoCoMo Interrupts (CONFIG_SHARP_LOCOMO) */
241#define IRQ_LOCOMO_KEY_BASE (IRQ_BOARD_START + 0) 277#define IRQ_LOCOMO_KEY_BASE (IRQ_BOARD_START + 0)
242#define IRQ_LOCOMO_GPIO_BASE (IRQ_BOARD_START + 1) 278#define IRQ_LOCOMO_GPIO_BASE (IRQ_BOARD_START + 1)
diff --git a/arch/arm/mach-pxa/include/mach/mfp.h b/arch/arm/mach-pxa/include/mach/mfp.h
index 482185053a92..271e249ae34f 100644
--- a/arch/arm/mach-pxa/include/mach/mfp.h
+++ b/arch/arm/mach-pxa/include/mach/mfp.h
@@ -16,305 +16,6 @@
16#ifndef __ASM_ARCH_MFP_H 16#ifndef __ASM_ARCH_MFP_H
17#define __ASM_ARCH_MFP_H 17#define __ASM_ARCH_MFP_H
18 18
19#define mfp_to_gpio(m) ((m) % 128) 19#include <plat/mfp.h>
20
21/* list of all the configurable MFP pins */
22enum {
23 MFP_PIN_INVALID = -1,
24
25 MFP_PIN_GPIO0 = 0,
26 MFP_PIN_GPIO1,
27 MFP_PIN_GPIO2,
28 MFP_PIN_GPIO3,
29 MFP_PIN_GPIO4,
30 MFP_PIN_GPIO5,
31 MFP_PIN_GPIO6,
32 MFP_PIN_GPIO7,
33 MFP_PIN_GPIO8,
34 MFP_PIN_GPIO9,
35 MFP_PIN_GPIO10,
36 MFP_PIN_GPIO11,
37 MFP_PIN_GPIO12,
38 MFP_PIN_GPIO13,
39 MFP_PIN_GPIO14,
40 MFP_PIN_GPIO15,
41 MFP_PIN_GPIO16,
42 MFP_PIN_GPIO17,
43 MFP_PIN_GPIO18,
44 MFP_PIN_GPIO19,
45 MFP_PIN_GPIO20,
46 MFP_PIN_GPIO21,
47 MFP_PIN_GPIO22,
48 MFP_PIN_GPIO23,
49 MFP_PIN_GPIO24,
50 MFP_PIN_GPIO25,
51 MFP_PIN_GPIO26,
52 MFP_PIN_GPIO27,
53 MFP_PIN_GPIO28,
54 MFP_PIN_GPIO29,
55 MFP_PIN_GPIO30,
56 MFP_PIN_GPIO31,
57 MFP_PIN_GPIO32,
58 MFP_PIN_GPIO33,
59 MFP_PIN_GPIO34,
60 MFP_PIN_GPIO35,
61 MFP_PIN_GPIO36,
62 MFP_PIN_GPIO37,
63 MFP_PIN_GPIO38,
64 MFP_PIN_GPIO39,
65 MFP_PIN_GPIO40,
66 MFP_PIN_GPIO41,
67 MFP_PIN_GPIO42,
68 MFP_PIN_GPIO43,
69 MFP_PIN_GPIO44,
70 MFP_PIN_GPIO45,
71 MFP_PIN_GPIO46,
72 MFP_PIN_GPIO47,
73 MFP_PIN_GPIO48,
74 MFP_PIN_GPIO49,
75 MFP_PIN_GPIO50,
76 MFP_PIN_GPIO51,
77 MFP_PIN_GPIO52,
78 MFP_PIN_GPIO53,
79 MFP_PIN_GPIO54,
80 MFP_PIN_GPIO55,
81 MFP_PIN_GPIO56,
82 MFP_PIN_GPIO57,
83 MFP_PIN_GPIO58,
84 MFP_PIN_GPIO59,
85 MFP_PIN_GPIO60,
86 MFP_PIN_GPIO61,
87 MFP_PIN_GPIO62,
88 MFP_PIN_GPIO63,
89 MFP_PIN_GPIO64,
90 MFP_PIN_GPIO65,
91 MFP_PIN_GPIO66,
92 MFP_PIN_GPIO67,
93 MFP_PIN_GPIO68,
94 MFP_PIN_GPIO69,
95 MFP_PIN_GPIO70,
96 MFP_PIN_GPIO71,
97 MFP_PIN_GPIO72,
98 MFP_PIN_GPIO73,
99 MFP_PIN_GPIO74,
100 MFP_PIN_GPIO75,
101 MFP_PIN_GPIO76,
102 MFP_PIN_GPIO77,
103 MFP_PIN_GPIO78,
104 MFP_PIN_GPIO79,
105 MFP_PIN_GPIO80,
106 MFP_PIN_GPIO81,
107 MFP_PIN_GPIO82,
108 MFP_PIN_GPIO83,
109 MFP_PIN_GPIO84,
110 MFP_PIN_GPIO85,
111 MFP_PIN_GPIO86,
112 MFP_PIN_GPIO87,
113 MFP_PIN_GPIO88,
114 MFP_PIN_GPIO89,
115 MFP_PIN_GPIO90,
116 MFP_PIN_GPIO91,
117 MFP_PIN_GPIO92,
118 MFP_PIN_GPIO93,
119 MFP_PIN_GPIO94,
120 MFP_PIN_GPIO95,
121 MFP_PIN_GPIO96,
122 MFP_PIN_GPIO97,
123 MFP_PIN_GPIO98,
124 MFP_PIN_GPIO99,
125 MFP_PIN_GPIO100,
126 MFP_PIN_GPIO101,
127 MFP_PIN_GPIO102,
128 MFP_PIN_GPIO103,
129 MFP_PIN_GPIO104,
130 MFP_PIN_GPIO105,
131 MFP_PIN_GPIO106,
132 MFP_PIN_GPIO107,
133 MFP_PIN_GPIO108,
134 MFP_PIN_GPIO109,
135 MFP_PIN_GPIO110,
136 MFP_PIN_GPIO111,
137 MFP_PIN_GPIO112,
138 MFP_PIN_GPIO113,
139 MFP_PIN_GPIO114,
140 MFP_PIN_GPIO115,
141 MFP_PIN_GPIO116,
142 MFP_PIN_GPIO117,
143 MFP_PIN_GPIO118,
144 MFP_PIN_GPIO119,
145 MFP_PIN_GPIO120,
146 MFP_PIN_GPIO121,
147 MFP_PIN_GPIO122,
148 MFP_PIN_GPIO123,
149 MFP_PIN_GPIO124,
150 MFP_PIN_GPIO125,
151 MFP_PIN_GPIO126,
152 MFP_PIN_GPIO127,
153 MFP_PIN_GPIO0_2,
154 MFP_PIN_GPIO1_2,
155 MFP_PIN_GPIO2_2,
156 MFP_PIN_GPIO3_2,
157 MFP_PIN_GPIO4_2,
158 MFP_PIN_GPIO5_2,
159 MFP_PIN_GPIO6_2,
160 MFP_PIN_GPIO7_2,
161 MFP_PIN_GPIO8_2,
162 MFP_PIN_GPIO9_2,
163 MFP_PIN_GPIO10_2,
164 MFP_PIN_GPIO11_2,
165 MFP_PIN_GPIO12_2,
166 MFP_PIN_GPIO13_2,
167 MFP_PIN_GPIO14_2,
168 MFP_PIN_GPIO15_2,
169 MFP_PIN_GPIO16_2,
170 MFP_PIN_GPIO17_2,
171
172 MFP_PIN_ULPI_STP,
173 MFP_PIN_ULPI_NXT,
174 MFP_PIN_ULPI_DIR,
175
176 MFP_PIN_nXCVREN,
177 MFP_PIN_DF_CLE_nOE,
178 MFP_PIN_DF_nADV1_ALE,
179 MFP_PIN_DF_SCLK_E,
180 MFP_PIN_DF_SCLK_S,
181 MFP_PIN_nBE0,
182 MFP_PIN_nBE1,
183 MFP_PIN_DF_nADV2_ALE,
184 MFP_PIN_DF_INT_RnB,
185 MFP_PIN_DF_nCS0,
186 MFP_PIN_DF_nCS1,
187 MFP_PIN_nLUA,
188 MFP_PIN_nLLA,
189 MFP_PIN_DF_nWE,
190 MFP_PIN_DF_ALE_nWE,
191 MFP_PIN_DF_nRE_nOE,
192 MFP_PIN_DF_ADDR0,
193 MFP_PIN_DF_ADDR1,
194 MFP_PIN_DF_ADDR2,
195 MFP_PIN_DF_ADDR3,
196 MFP_PIN_DF_IO0,
197 MFP_PIN_DF_IO1,
198 MFP_PIN_DF_IO2,
199 MFP_PIN_DF_IO3,
200 MFP_PIN_DF_IO4,
201 MFP_PIN_DF_IO5,
202 MFP_PIN_DF_IO6,
203 MFP_PIN_DF_IO7,
204 MFP_PIN_DF_IO8,
205 MFP_PIN_DF_IO9,
206 MFP_PIN_DF_IO10,
207 MFP_PIN_DF_IO11,
208 MFP_PIN_DF_IO12,
209 MFP_PIN_DF_IO13,
210 MFP_PIN_DF_IO14,
211 MFP_PIN_DF_IO15,
212
213 /* additional pins on PXA930 */
214 MFP_PIN_GSIM_UIO,
215 MFP_PIN_GSIM_UCLK,
216 MFP_PIN_GSIM_UDET,
217 MFP_PIN_GSIM_nURST,
218 MFP_PIN_PMIC_INT,
219 MFP_PIN_RDY,
220
221 MFP_PIN_MAX,
222};
223
224/*
225 * a possible MFP configuration is represented by a 32-bit integer
226 *
227 * bit 0.. 9 - MFP Pin Number (1024 Pins Maximum)
228 * bit 10..12 - Alternate Function Selection
229 * bit 13..15 - Drive Strength
230 * bit 16..18 - Low Power Mode State
231 * bit 19..20 - Low Power Mode Edge Detection
232 * bit 21..22 - Run Mode Pull State
233 *
234 * to facilitate the definition, the following macros are provided
235 *
236 * MFP_CFG_DEFAULT - default MFP configuration value, with
237 * alternate function = 0,
238 * drive strength = fast 3mA (MFP_DS03X)
239 * low power mode = default
240 * edge detection = none
241 *
242 * MFP_CFG - default MFPR value with alternate function
243 * MFP_CFG_DRV - default MFPR value with alternate function and
244 * pin drive strength
245 * MFP_CFG_LPM - default MFPR value with alternate function and
246 * low power mode
247 * MFP_CFG_X - default MFPR value with alternate function,
248 * pin drive strength and low power mode
249 */
250
251typedef unsigned long mfp_cfg_t;
252
253#define MFP_PIN(x) ((x) & 0x3ff)
254
255#define MFP_AF0 (0x0 << 10)
256#define MFP_AF1 (0x1 << 10)
257#define MFP_AF2 (0x2 << 10)
258#define MFP_AF3 (0x3 << 10)
259#define MFP_AF4 (0x4 << 10)
260#define MFP_AF5 (0x5 << 10)
261#define MFP_AF6 (0x6 << 10)
262#define MFP_AF7 (0x7 << 10)
263#define MFP_AF_MASK (0x7 << 10)
264#define MFP_AF(x) (((x) >> 10) & 0x7)
265
266#define MFP_DS01X (0x0 << 13)
267#define MFP_DS02X (0x1 << 13)
268#define MFP_DS03X (0x2 << 13)
269#define MFP_DS04X (0x3 << 13)
270#define MFP_DS06X (0x4 << 13)
271#define MFP_DS08X (0x5 << 13)
272#define MFP_DS10X (0x6 << 13)
273#define MFP_DS13X (0x7 << 13)
274#define MFP_DS_MASK (0x7 << 13)
275#define MFP_DS(x) (((x) >> 13) & 0x7)
276
277#define MFP_LPM_DEFAULT (0x0 << 16)
278#define MFP_LPM_DRIVE_LOW (0x1 << 16)
279#define MFP_LPM_DRIVE_HIGH (0x2 << 16)
280#define MFP_LPM_PULL_LOW (0x3 << 16)
281#define MFP_LPM_PULL_HIGH (0x4 << 16)
282#define MFP_LPM_FLOAT (0x5 << 16)
283#define MFP_LPM_INPUT (0x6 << 16)
284#define MFP_LPM_STATE_MASK (0x7 << 16)
285#define MFP_LPM_STATE(x) (((x) >> 16) & 0x7)
286
287#define MFP_LPM_EDGE_NONE (0x0 << 19)
288#define MFP_LPM_EDGE_RISE (0x1 << 19)
289#define MFP_LPM_EDGE_FALL (0x2 << 19)
290#define MFP_LPM_EDGE_BOTH (0x3 << 19)
291#define MFP_LPM_EDGE_MASK (0x3 << 19)
292#define MFP_LPM_EDGE(x) (((x) >> 19) & 0x3)
293
294#define MFP_PULL_NONE (0x0 << 21)
295#define MFP_PULL_LOW (0x1 << 21)
296#define MFP_PULL_HIGH (0x2 << 21)
297#define MFP_PULL_BOTH (0x3 << 21)
298#define MFP_PULL_MASK (0x3 << 21)
299#define MFP_PULL(x) (((x) >> 21) & 0x3)
300
301#define MFP_CFG_DEFAULT (MFP_AF0 | MFP_DS03X | MFP_LPM_DEFAULT |\
302 MFP_LPM_EDGE_NONE | MFP_PULL_NONE)
303
304#define MFP_CFG(pin, af) \
305 ((MFP_CFG_DEFAULT & ~MFP_AF_MASK) |\
306 (MFP_PIN(MFP_PIN_##pin) | MFP_##af))
307
308#define MFP_CFG_DRV(pin, af, drv) \
309 ((MFP_CFG_DEFAULT & ~(MFP_AF_MASK | MFP_DS_MASK)) |\
310 (MFP_PIN(MFP_PIN_##pin) | MFP_##af | MFP_##drv))
311
312#define MFP_CFG_LPM(pin, af, lpm) \
313 ((MFP_CFG_DEFAULT & ~(MFP_AF_MASK | MFP_LPM_STATE_MASK)) |\
314 (MFP_PIN(MFP_PIN_##pin) | MFP_##af | MFP_LPM_##lpm))
315
316#define MFP_CFG_X(pin, af, drv, lpm) \
317 ((MFP_CFG_DEFAULT & ~(MFP_AF_MASK | MFP_DS_MASK | MFP_LPM_STATE_MASK)) |\
318 (MFP_PIN(MFP_PIN_##pin) | MFP_##af | MFP_##drv | MFP_LPM_##lpm))
319 20
320#endif /* __ASM_ARCH_MFP_H */ 21#endif /* __ASM_ARCH_MFP_H */
diff --git a/arch/arm/mach-pxa/include/mach/mmc.h b/arch/arm/mach-pxa/include/mach/mmc.h
index 6d1304c9270f..02a69dc2ee63 100644
--- a/arch/arm/mach-pxa/include/mach/mmc.h
+++ b/arch/arm/mach-pxa/include/mach/mmc.h
@@ -14,6 +14,11 @@ struct pxamci_platform_data {
14 int (*get_ro)(struct device *); 14 int (*get_ro)(struct device *);
15 void (*setpower)(struct device *, unsigned int); 15 void (*setpower)(struct device *, unsigned int);
16 void (*exit)(struct device *, void *); 16 void (*exit)(struct device *, void *);
17 int gpio_card_detect; /* gpio detecting card insertion */
18 int gpio_card_ro; /* gpio detecting read only toggle */
19 bool gpio_card_ro_invert; /* gpio ro is inverted */
20 int gpio_power; /* gpio powering up MMC bus */
21 bool gpio_power_invert; /* gpio power is inverted */
17}; 22};
18 23
19extern void pxa_set_mci_info(struct pxamci_platform_data *info); 24extern void pxa_set_mci_info(struct pxamci_platform_data *info);
diff --git a/arch/arm/mach-pxa/include/mach/palmtc.h b/arch/arm/mach-pxa/include/mach/palmtc.h
new file mode 100644
index 000000000000..3dc9b074ab46
--- /dev/null
+++ b/arch/arm/mach-pxa/include/mach/palmtc.h
@@ -0,0 +1,86 @@
1/*
2 * linux/include/asm-arm/arch-pxa/palmtc-gpio.h
3 *
4 * GPIOs and interrupts for Palm Tungsten|C Handheld Computer
5 *
6 * Authors: Alex Osborne <bobofdoom@gmail.com>
7 * Marek Vasut <marek.vasut@gmail.com>
8 * Holger Bocklet <bitz.email@gmx.net>
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License version 2 as
12 * published by the Free Software Foundation.
13 *
14 */
15
16#ifndef _INCLUDE_PALMTC_H_
17#define _INCLUDE_PALMTC_H_
18
19/** HERE ARE GPIOs **/
20
21/* GPIOs */
22#define GPIO_NR_PALMTC_EARPHONE_DETECT 2
23#define GPIO_NR_PALMTC_CRADLE_DETECT 5
24#define GPIO_NR_PALMTC_HOTSYNC_BUTTON 7
25
26/* SD/MMC */
27#define GPIO_NR_PALMTC_SD_DETECT_N 12
28#define GPIO_NR_PALMTC_SD_POWER 32
29#define GPIO_NR_PALMTC_SD_READONLY 54
30
31/* WLAN */
32#define GPIO_NR_PALMTC_PCMCIA_READY 13
33#define GPIO_NR_PALMTC_PCMCIA_PWRREADY 14
34#define GPIO_NR_PALMTC_PCMCIA_POWER1 15
35#define GPIO_NR_PALMTC_PCMCIA_POWER2 33
36#define GPIO_NR_PALMTC_PCMCIA_POWER3 55
37#define GPIO_NR_PALMTC_PCMCIA_RESET 78
38
39/* UDC */
40#define GPIO_NR_PALMTC_USB_DETECT_N 4
41#define GPIO_NR_PALMTC_USB_POWER 36
42
43/* LCD/BACKLIGHT */
44#define GPIO_NR_PALMTC_BL_POWER 16
45#define GPIO_NR_PALMTC_LCD_POWER 44
46#define GPIO_NR_PALMTC_LCD_BLANK 38
47
48/* UART */
49#define GPIO_NR_PALMTC_RS232_POWER 37
50
51/* IRDA */
52#define GPIO_NR_PALMTC_IR_DISABLE 45
53
54/* IRQs */
55#define IRQ_GPIO_PALMTC_SD_DETECT_N IRQ_GPIO(GPIO_NR_PALMTC_SD_DETECT_N)
56#define IRQ_GPIO_PALMTC_WLAN_READY IRQ_GPIO(GPIO_NR_PALMTC_WLAN_READY)
57
58/* UCB1400 GPIOs */
59#define GPIO_NR_PALMTC_POWER_DETECT (0x80 | 0x00)
60#define GPIO_NR_PALMTC_HEADPHONE_DETECT (0x80 | 0x01)
61#define GPIO_NR_PALMTC_SPEAKER_ENABLE (0x80 | 0x03)
62#define GPIO_NR_PALMTC_VIBRA_POWER (0x80 | 0x05)
63#define GPIO_NR_PALMTC_LED_POWER (0x80 | 0x07)
64
65/** HERE ARE INIT VALUES **/
66#define PALMTC_UCB1400_GPIO_OFFSET 0x80
67
68/* BATTERY */
69#define PALMTC_BAT_MAX_VOLTAGE 4000 /* 4.00V maximum voltage */
70#define PALMTC_BAT_MIN_VOLTAGE 3550 /* 3.55V critical voltage */
71#define PALMTC_BAT_MAX_CURRENT 0 /* unknokn */
72#define PALMTC_BAT_MIN_CURRENT 0 /* unknown */
73#define PALMTC_BAT_MAX_CHARGE 1 /* unknown */
74#define PALMTC_BAT_MIN_CHARGE 1 /* unknown */
75#define PALMTC_MAX_LIFE_MINS 240 /* on-life in minutes */
76
77#define PALMTC_BAT_MEASURE_DELAY (HZ * 1)
78
79/* BACKLIGHT */
80#define PALMTC_MAX_INTENSITY 0xFE
81#define PALMTC_DEFAULT_INTENSITY 0x7E
82#define PALMTC_LIMIT_MASK 0x7F
83#define PALMTC_PRESCALER 0x3F
84#define PALMTC_PERIOD_NS 3500
85
86#endif
diff --git a/arch/arm/mach-pxa/include/mach/palmtx.h b/arch/arm/mach-pxa/include/mach/palmtx.h
index e74082c872e1..1be0db6ed55e 100644
--- a/arch/arm/mach-pxa/include/mach/palmtx.h
+++ b/arch/arm/mach-pxa/include/mach/palmtx.h
@@ -82,6 +82,11 @@
82#define PALMTX_PHYS_FLASH_START PXA_CS0_PHYS /* ChipSelect 0 */ 82#define PALMTX_PHYS_FLASH_START PXA_CS0_PHYS /* ChipSelect 0 */
83#define PALMTX_PHYS_NAND_START PXA_CS1_PHYS /* ChipSelect 1 */ 83#define PALMTX_PHYS_NAND_START PXA_CS1_PHYS /* ChipSelect 1 */
84 84
85#define PALMTX_NAND_ALE_PHYS (PALMTX_PHYS_NAND_START | (1 << 24))
86#define PALMTX_NAND_CLE_PHYS (PALMTX_PHYS_NAND_START | (1 << 25))
87#define PALMTX_NAND_ALE_VIRT 0xff100000
88#define PALMTX_NAND_CLE_VIRT 0xff200000
89
85/* TOUCHSCREEN */ 90/* TOUCHSCREEN */
86#define AC97_LINK_FRAME 21 91#define AC97_LINK_FRAME 21
87 92
diff --git a/arch/arm/mach-pxa/include/mach/pxa3xx-regs.h b/arch/arm/mach-pxa/include/mach/pxa3xx-regs.h
index 7d1a059b3d43..e91d63cfe811 100644
--- a/arch/arm/mach-pxa/include/mach/pxa3xx-regs.h
+++ b/arch/arm/mach-pxa/include/mach/pxa3xx-regs.h
@@ -208,7 +208,7 @@
208#define CKEN_MVED 43 /* < MVED clock enable */ 208#define CKEN_MVED 43 /* < MVED clock enable */
209 209
210/* Note: GCU clock enable bit differs on PXA300/PXA310 and PXA320 */ 210/* Note: GCU clock enable bit differs on PXA300/PXA310 and PXA320 */
211#define PXA300_CKEN_GRAPHICS 42 /* Graphics controller clock enable */ 211#define CKEN_PXA300_GCU 42 /* Graphics controller clock enable */
212#define PXA320_CKEN_GRAPHICS 7 /* Graphics controller clock enable */ 212#define CKEN_PXA320_GCU 7 /* Graphics controller clock enable */
213 213
214#endif /* __ASM_ARCH_PXA3XX_REGS_H */ 214#endif /* __ASM_ARCH_PXA3XX_REGS_H */
diff --git a/arch/arm/mach-pxa/include/mach/pxafb.h b/arch/arm/mach-pxa/include/mach/pxafb.h
index 6932720ba04e..f73061c90b5e 100644
--- a/arch/arm/mach-pxa/include/mach/pxafb.h
+++ b/arch/arm/mach-pxa/include/mach/pxafb.h
@@ -118,7 +118,8 @@ struct pxafb_mach_info {
118 u_int fixed_modes:1, 118 u_int fixed_modes:1,
119 cmap_inverse:1, 119 cmap_inverse:1,
120 cmap_static:1, 120 cmap_static:1,
121 unused:29; 121 acceleration_enabled:1,
122 unused:28;
122 123
123 /* The following should be defined in LCCR0 124 /* The following should be defined in LCCR0
124 * LCCR0_Act or LCCR0_Pas Active or Passive 125 * LCCR0_Act or LCCR0_Pas Active or Passive
diff --git a/arch/arm/mach-pxa/include/mach/regs-intc.h b/arch/arm/mach-pxa/include/mach/regs-intc.h
index ad23e74b762f..68464ce1c1ea 100644
--- a/arch/arm/mach-pxa/include/mach/regs-intc.h
+++ b/arch/arm/mach-pxa/include/mach/regs-intc.h
@@ -13,6 +13,7 @@
13#define ICFP __REG(0x40D0000C) /* Interrupt Controller FIQ Pending Register */ 13#define ICFP __REG(0x40D0000C) /* Interrupt Controller FIQ Pending Register */
14#define ICPR __REG(0x40D00010) /* Interrupt Controller Pending Register */ 14#define ICPR __REG(0x40D00010) /* Interrupt Controller Pending Register */
15#define ICCR __REG(0x40D00014) /* Interrupt Controller Control Register */ 15#define ICCR __REG(0x40D00014) /* Interrupt Controller Control Register */
16#define ICHP __REG(0x40D00018) /* Interrupt Controller Highest Priority Register */
16 17
17#define ICIP2 __REG(0x40D0009C) /* Interrupt Controller IRQ Pending Register 2 */ 18#define ICIP2 __REG(0x40D0009C) /* Interrupt Controller IRQ Pending Register 2 */
18#define ICMR2 __REG(0x40D000A0) /* Interrupt Controller Mask Register 2 */ 19#define ICMR2 __REG(0x40D000A0) /* Interrupt Controller Mask Register 2 */
@@ -20,4 +21,14 @@
20#define ICFP2 __REG(0x40D000A8) /* Interrupt Controller FIQ Pending Register 2 */ 21#define ICFP2 __REG(0x40D000A8) /* Interrupt Controller FIQ Pending Register 2 */
21#define ICPR2 __REG(0x40D000AC) /* Interrupt Controller Pending Register 2 */ 22#define ICPR2 __REG(0x40D000AC) /* Interrupt Controller Pending Register 2 */
22 23
24#define ICIP3 __REG(0x40D00130) /* Interrupt Controller IRQ Pending Register 3 */
25#define ICMR3 __REG(0x40D00134) /* Interrupt Controller Mask Register 3 */
26#define ICLR3 __REG(0x40D00138) /* Interrupt Controller Level Register 3 */
27#define ICFP3 __REG(0x40D0013C) /* Interrupt Controller FIQ Pending Register 3 */
28#define ICPR3 __REG(0x40D00140) /* Interrupt Controller Pending Register 3 */
29
30#define IPR(x) __REG(0x40D0001C + (x < 32 ? (x << 2) \
31 : (x < 64 ? (0x94 + ((x - 32) << 2)) \
32 : (0x128 + ((x - 64) << 2)))))
33
23#endif /* __ASM_MACH_REGS_INTC_H */ 34#endif /* __ASM_MACH_REGS_INTC_H */
diff --git a/arch/arm/mach-pxa/include/mach/uncompress.h b/arch/arm/mach-pxa/include/mach/uncompress.h
index b54749413e96..237734b5b1be 100644
--- a/arch/arm/mach-pxa/include/mach/uncompress.h
+++ b/arch/arm/mach-pxa/include/mach/uncompress.h
@@ -37,7 +37,7 @@ static inline void arch_decomp_setup(void)
37{ 37{
38 if (machine_is_littleton() || machine_is_intelmote2() 38 if (machine_is_littleton() || machine_is_intelmote2()
39 || machine_is_csb726() || machine_is_stargate2() 39 || machine_is_csb726() || machine_is_stargate2()
40 || machine_is_cm_x300()) 40 || machine_is_cm_x300() || machine_is_balloon3())
41 UART = STUART; 41 UART = STUART;
42} 42}
43 43
diff --git a/arch/arm/mach-pxa/irq.c b/arch/arm/mach-pxa/irq.c
index f6e0300e4f64..d694ce289668 100644
--- a/arch/arm/mach-pxa/irq.c
+++ b/arch/arm/mach-pxa/irq.c
@@ -120,7 +120,7 @@ static void __init pxa_init_low_gpio_irq(set_wake_t fn)
120 120
121void __init pxa_init_irq(int irq_nr, set_wake_t fn) 121void __init pxa_init_irq(int irq_nr, set_wake_t fn)
122{ 122{
123 int irq; 123 int irq, i;
124 124
125 pxa_internal_irq_nr = irq_nr; 125 pxa_internal_irq_nr = irq_nr;
126 126
@@ -129,6 +129,12 @@ void __init pxa_init_irq(int irq_nr, set_wake_t fn)
129 _ICLR(irq) = 0; /* all IRQs are IRQ, not FIQ */ 129 _ICLR(irq) = 0; /* all IRQs are IRQ, not FIQ */
130 } 130 }
131 131
132 /* initialize interrupt priority */
133 if (cpu_is_pxa27x() || cpu_is_pxa3xx()) {
134 for (i = 0; i < irq_nr; i++)
135 IPR(i) = i | (1 << 31);
136 }
137
132 /* only unmasked interrupts kick us out of idle */ 138 /* only unmasked interrupts kick us out of idle */
133 ICCR = 1; 139 ICCR = 1;
134 140
diff --git a/arch/arm/mach-pxa/littleton.c b/arch/arm/mach-pxa/littleton.c
index 55b3788fd1ae..13848955d133 100644
--- a/arch/arm/mach-pxa/littleton.c
+++ b/arch/arm/mach-pxa/littleton.c
@@ -265,45 +265,12 @@ static inline void littleton_init_keypad(void) {}
265#endif 265#endif
266 266
267#if defined(CONFIG_MMC_PXA) || defined(CONFIG_MMC_PXA_MODULE) 267#if defined(CONFIG_MMC_PXA) || defined(CONFIG_MMC_PXA_MODULE)
268static int littleton_mci_init(struct device *dev,
269 irq_handler_t littleton_detect_int, void *data)
270{
271 int err, gpio_cd = GPIO_MMC1_CARD_DETECT;
272
273 err = gpio_request(gpio_cd, "mmc card detect");
274 if (err)
275 goto err_request_cd;
276
277 gpio_direction_input(gpio_cd);
278
279 err = request_irq(gpio_to_irq(gpio_cd), littleton_detect_int,
280 IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
281 "mmc card detect", data);
282 if (err) {
283 dev_err(dev, "failed to request card detect IRQ\n");
284 goto err_request_irq;
285 }
286 return 0;
287
288err_request_irq:
289 gpio_free(gpio_cd);
290err_request_cd:
291 return err;
292}
293
294static void littleton_mci_exit(struct device *dev, void *data)
295{
296 int gpio_cd = GPIO_MMC1_CARD_DETECT;
297
298 free_irq(gpio_to_irq(gpio_cd), data);
299 gpio_free(gpio_cd);
300}
301
302static struct pxamci_platform_data littleton_mci_platform_data = { 268static struct pxamci_platform_data littleton_mci_platform_data = {
303 .detect_delay = 20, 269 .detect_delay = 20,
304 .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34, 270 .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,
305 .init = littleton_mci_init, 271 .gpio_card_detect = GPIO_MMC1_CARD_DETECT,
306 .exit = littleton_mci_exit, 272 .gpio_card_ro = -1,
273 .gpio_power = -1,
307}; 274};
308 275
309static void __init littleton_init_mmc(void) 276static void __init littleton_init_mmc(void)
diff --git a/arch/arm/mach-pxa/lubbock.c b/arch/arm/mach-pxa/lubbock.c
index f04c8333dff7..c6a94d3fdd61 100644
--- a/arch/arm/mach-pxa/lubbock.c
+++ b/arch/arm/mach-pxa/lubbock.c
@@ -482,11 +482,14 @@ static void lubbock_mci_exit(struct device *dev, void *data)
482} 482}
483 483
484static struct pxamci_platform_data lubbock_mci_platform_data = { 484static struct pxamci_platform_data lubbock_mci_platform_data = {
485 .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34, 485 .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34,
486 .detect_delay = 1, 486 .detect_delay = 1,
487 .init = lubbock_mci_init, 487 .init = lubbock_mci_init,
488 .get_ro = lubbock_mci_get_ro, 488 .get_ro = lubbock_mci_get_ro,
489 .exit = lubbock_mci_exit, 489 .exit = lubbock_mci_exit,
490 .gpio_card_detect = -1,
491 .gpio_card_ro = -1,
492 .gpio_power = -1,
490}; 493};
491 494
492static void lubbock_irda_transceiver_mode(struct device *dev, int mode) 495static void lubbock_irda_transceiver_mode(struct device *dev, int mode)
@@ -504,8 +507,9 @@ static void lubbock_irda_transceiver_mode(struct device *dev, int mode)
504} 507}
505 508
506static struct pxaficp_platform_data lubbock_ficp_platform_data = { 509static struct pxaficp_platform_data lubbock_ficp_platform_data = {
507 .transceiver_cap = IR_SIRMODE | IR_FIRMODE, 510 .gpio_pwdown = -1,
508 .transceiver_mode = lubbock_irda_transceiver_mode, 511 .transceiver_cap = IR_SIRMODE | IR_FIRMODE,
512 .transceiver_mode = lubbock_irda_transceiver_mode,
509}; 513};
510 514
511static void __init lubbock_init(void) 515static void __init lubbock_init(void)
diff --git a/arch/arm/mach-pxa/magician.c b/arch/arm/mach-pxa/magician.c
index ca39669cffc5..5360c07f5138 100644
--- a/arch/arm/mach-pxa/magician.c
+++ b/arch/arm/mach-pxa/magician.c
@@ -140,15 +140,9 @@ static unsigned long magician_pin_config[] __initdata = {
140 * IRDA 140 * IRDA
141 */ 141 */
142 142
143static void magician_irda_transceiver_mode(struct device *dev, int mode)
144{
145 gpio_set_value(GPIO83_MAGICIAN_nIR_EN, mode & IR_OFF);
146 pxa2xx_transceiver_mode(dev, mode);
147}
148
149static struct pxaficp_platform_data magician_ficp_info = { 143static struct pxaficp_platform_data magician_ficp_info = {
150 .transceiver_cap = IR_SIRMODE | IR_OFF, 144 .gpio_pwdown = GPIO83_MAGICIAN_nIR_EN,
151 .transceiver_mode = magician_irda_transceiver_mode, 145 .transceiver_cap = IR_SIRMODE | IR_OFF,
152}; 146};
153 147
154/* 148/*
@@ -651,55 +645,24 @@ static struct platform_device bq24022 = {
651static int magician_mci_init(struct device *dev, 645static int magician_mci_init(struct device *dev,
652 irq_handler_t detect_irq, void *data) 646 irq_handler_t detect_irq, void *data)
653{ 647{
654 int err; 648 return request_irq(IRQ_MAGICIAN_SD, detect_irq,
655
656 err = request_irq(IRQ_MAGICIAN_SD, detect_irq,
657 IRQF_DISABLED | IRQF_SAMPLE_RANDOM, 649 IRQF_DISABLED | IRQF_SAMPLE_RANDOM,
658 "MMC card detect", data); 650 "mmc card detect", data);
659 if (err)
660 goto err_request_irq;
661 err = gpio_request(EGPIO_MAGICIAN_SD_POWER, "SD_POWER");
662 if (err)
663 goto err_request_power;
664 err = gpio_request(EGPIO_MAGICIAN_nSD_READONLY, "nSD_READONLY");
665 if (err)
666 goto err_request_readonly;
667
668 return 0;
669
670err_request_readonly:
671 gpio_free(EGPIO_MAGICIAN_SD_POWER);
672err_request_power:
673 free_irq(IRQ_MAGICIAN_SD, data);
674err_request_irq:
675 return err;
676}
677
678static void magician_mci_setpower(struct device *dev, unsigned int vdd)
679{
680 struct pxamci_platform_data *pdata = dev->platform_data;
681
682 gpio_set_value(EGPIO_MAGICIAN_SD_POWER, (1 << vdd) & pdata->ocr_mask);
683}
684
685static int magician_mci_get_ro(struct device *dev)
686{
687 return (!gpio_get_value(EGPIO_MAGICIAN_nSD_READONLY));
688} 651}
689 652
690static void magician_mci_exit(struct device *dev, void *data) 653static void magician_mci_exit(struct device *dev, void *data)
691{ 654{
692 gpio_free(EGPIO_MAGICIAN_nSD_READONLY);
693 gpio_free(EGPIO_MAGICIAN_SD_POWER);
694 free_irq(IRQ_MAGICIAN_SD, data); 655 free_irq(IRQ_MAGICIAN_SD, data);
695} 656}
696 657
697static struct pxamci_platform_data magician_mci_info = { 658static struct pxamci_platform_data magician_mci_info = {
698 .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34, 659 .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34,
699 .init = magician_mci_init, 660 .init = magician_mci_init,
700 .get_ro = magician_mci_get_ro, 661 .exit = magician_mci_exit,
701 .setpower = magician_mci_setpower, 662 .gpio_card_detect = -1,
702 .exit = magician_mci_exit, 663 .gpio_card_ro = EGPIO_MAGICIAN_nSD_READONLY,
664 .gpio_card_ro_invert = 1,
665 .gpio_power = EGPIO_MAGICIAN_SD_POWER,
703}; 666};
704 667
705 668
diff --git a/arch/arm/mach-pxa/mainstone.c b/arch/arm/mach-pxa/mainstone.c
index f4dabf0273ca..a4eeae345e64 100644
--- a/arch/arm/mach-pxa/mainstone.c
+++ b/arch/arm/mach-pxa/mainstone.c
@@ -450,10 +450,13 @@ static void mainstone_mci_exit(struct device *dev, void *data)
450} 450}
451 451
452static struct pxamci_platform_data mainstone_mci_platform_data = { 452static struct pxamci_platform_data mainstone_mci_platform_data = {
453 .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34, 453 .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34,
454 .init = mainstone_mci_init, 454 .init = mainstone_mci_init,
455 .setpower = mainstone_mci_setpower, 455 .setpower = mainstone_mci_setpower,
456 .exit = mainstone_mci_exit, 456 .exit = mainstone_mci_exit,
457 .gpio_card_detect = -1,
458 .gpio_card_ro = -1,
459 .gpio_power = -1,
457}; 460};
458 461
459static void mainstone_irda_transceiver_mode(struct device *dev, int mode) 462static void mainstone_irda_transceiver_mode(struct device *dev, int mode)
@@ -476,8 +479,9 @@ static void mainstone_irda_transceiver_mode(struct device *dev, int mode)
476} 479}
477 480
478static struct pxaficp_platform_data mainstone_ficp_platform_data = { 481static struct pxaficp_platform_data mainstone_ficp_platform_data = {
479 .transceiver_cap = IR_SIRMODE | IR_FIRMODE | IR_OFF, 482 .gpio_pwdown = -1,
480 .transceiver_mode = mainstone_irda_transceiver_mode, 483 .transceiver_cap = IR_SIRMODE | IR_FIRMODE | IR_OFF,
484 .transceiver_mode = mainstone_irda_transceiver_mode,
481}; 485};
482 486
483static struct gpio_keys_button gpio_keys_button[] = { 487static struct gpio_keys_button gpio_keys_button[] = {
diff --git a/arch/arm/mach-pxa/mioa701.c b/arch/arm/mach-pxa/mioa701.c
index 2d28132c725b..3cab452e5567 100644
--- a/arch/arm/mach-pxa/mioa701.c
+++ b/arch/arm/mach-pxa/mioa701.c
@@ -434,72 +434,15 @@ struct gpio_vbus_mach_info gpio_vbus_data = {
434/* 434/*
435 * SDIO/MMC Card controller 435 * SDIO/MMC Card controller
436 */ 436 */
437static void mci_setpower(struct device *dev, unsigned int vdd)
438{
439 struct pxamci_platform_data *p_d = dev->platform_data;
440
441 if ((1 << vdd) & p_d->ocr_mask)
442 gpio_set_value(GPIO91_SDIO_EN, 1); /* enable SDIO power */
443 else
444 gpio_set_value(GPIO91_SDIO_EN, 0); /* disable SDIO power */
445}
446
447static int mci_get_ro(struct device *dev)
448{
449 return gpio_get_value(GPIO78_SDIO_RO);
450}
451
452struct gpio_ress mci_gpios[] = {
453 MIO_GPIO_IN(GPIO78_SDIO_RO, "SDIO readonly detect"),
454 MIO_GPIO_IN(GPIO15_SDIO_INSERT, "SDIO insertion detect"),
455 MIO_GPIO_OUT(GPIO91_SDIO_EN, 0, "SDIO power enable")
456};
457
458static void mci_exit(struct device *dev, void *data)
459{
460 mio_gpio_free(ARRAY_AND_SIZE(mci_gpios));
461 free_irq(gpio_to_irq(GPIO15_SDIO_INSERT), data);
462}
463
464static struct pxamci_platform_data mioa701_mci_info;
465
466/** 437/**
467 * The card detect interrupt isn't debounced so we delay it by 250ms 438 * The card detect interrupt isn't debounced so we delay it by 250ms
468 * to give the card a chance to fully insert/eject. 439 * to give the card a chance to fully insert/eject.
469 */ 440 */
470static int mci_init(struct device *dev, irq_handler_t detect_int, void *data)
471{
472 int rc;
473 int irq = gpio_to_irq(GPIO15_SDIO_INSERT);
474
475 rc = mio_gpio_request(ARRAY_AND_SIZE(mci_gpios));
476 if (rc)
477 goto err_gpio;
478 /* enable RE/FE interrupt on card insertion and removal */
479 rc = request_irq(irq, detect_int,
480 IRQF_DISABLED | IRQF_TRIGGER_RISING |
481 IRQF_TRIGGER_FALLING,
482 "MMC card detect", data);
483 if (rc)
484 goto err_irq;
485
486 mioa701_mci_info.detect_delay = msecs_to_jiffies(250);
487 return 0;
488
489err_irq:
490 dev_err(dev, "mioa701_mci_init: MMC/SD:"
491 " can't request MMC card detect IRQ\n");
492 mio_gpio_free(ARRAY_AND_SIZE(mci_gpios));
493err_gpio:
494 return rc;
495}
496
497static struct pxamci_platform_data mioa701_mci_info = { 441static struct pxamci_platform_data mioa701_mci_info = {
498 .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34, 442 .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,
499 .init = mci_init, 443 .gpio_card_detect = GPIO15_SDIO_INSERT,
500 .get_ro = mci_get_ro, 444 .gpio_card_ro = GPIO78_SDIO_RO,
501 .setpower = mci_setpower, 445 .gpio_power = GPIO91_SDIO_EN,
502 .exit = mci_exit,
503}; 446};
504 447
505/* FlashRAM */ 448/* FlashRAM */
@@ -765,19 +708,20 @@ static struct i2c_board_info __initdata mioa701_pi2c_devices[] = {
765 }, 708 },
766}; 709};
767 710
768static struct soc_camera_link iclink = {
769 .bus_id = 0, /* Must match id in pxa27x_device_camera in device.c */
770};
771
772/* Board I2C devices. */ 711/* Board I2C devices. */
773static struct i2c_board_info __initdata mioa701_i2c_devices[] = { 712static struct i2c_board_info __initdata mioa701_i2c_devices[] = {
774 { 713 {
775 /* Must initialize before the camera(s) */
776 I2C_BOARD_INFO("mt9m111", 0x5d), 714 I2C_BOARD_INFO("mt9m111", 0x5d),
777 .platform_data = &iclink,
778 }, 715 },
779}; 716};
780 717
718static struct soc_camera_link iclink = {
719 .bus_id = 0, /* Match id in pxa27x_device_camera in device.c */
720 .board_info = &mioa701_i2c_devices[0],
721 .i2c_adapter_id = 0,
722 .module_name = "mt9m111",
723};
724
781struct i2c_pxa_platform_data i2c_pdata = { 725struct i2c_pxa_platform_data i2c_pdata = {
782 .fast_mode = 1, 726 .fast_mode = 1,
783}; 727};
@@ -811,6 +755,7 @@ MIO_SIMPLE_DEV(pxa2xx_pcm, "pxa2xx-pcm", NULL)
811MIO_SIMPLE_DEV(mioa701_sound, "mioa701-wm9713", NULL) 755MIO_SIMPLE_DEV(mioa701_sound, "mioa701-wm9713", NULL)
812MIO_SIMPLE_DEV(mioa701_board, "mioa701-board", NULL) 756MIO_SIMPLE_DEV(mioa701_board, "mioa701-board", NULL)
813MIO_SIMPLE_DEV(gpio_vbus, "gpio-vbus", &gpio_vbus_data); 757MIO_SIMPLE_DEV(gpio_vbus, "gpio-vbus", &gpio_vbus_data);
758MIO_SIMPLE_DEV(mioa701_camera, "soc-camera-pdrv",&iclink);
814 759
815static struct platform_device *devices[] __initdata = { 760static struct platform_device *devices[] __initdata = {
816 &mioa701_gpio_keys, 761 &mioa701_gpio_keys,
@@ -821,6 +766,7 @@ static struct platform_device *devices[] __initdata = {
821 &power_dev, 766 &power_dev,
822 &strataflash, 767 &strataflash,
823 &gpio_vbus, 768 &gpio_vbus,
769 &mioa701_camera,
824 &mioa701_board, 770 &mioa701_board,
825}; 771};
826 772
@@ -841,7 +787,7 @@ static void mioa701_restart(char c, const char *cmd)
841static struct gpio_ress global_gpios[] = { 787static struct gpio_ress global_gpios[] = {
842 MIO_GPIO_OUT(GPIO9_CHARGE_EN, 1, "Charger enable"), 788 MIO_GPIO_OUT(GPIO9_CHARGE_EN, 1, "Charger enable"),
843 MIO_GPIO_OUT(GPIO18_POWEROFF, 0, "Power Off"), 789 MIO_GPIO_OUT(GPIO18_POWEROFF, 0, "Power Off"),
844 MIO_GPIO_OUT(GPIO87_LCD_POWER, 0, "LCD Power") 790 MIO_GPIO_OUT(GPIO87_LCD_POWER, 0, "LCD Power"),
845}; 791};
846 792
847static void __init mioa701_machine_init(void) 793static void __init mioa701_machine_init(void)
@@ -855,6 +801,7 @@ static void __init mioa701_machine_init(void)
855 mio_gpio_request(ARRAY_AND_SIZE(global_gpios)); 801 mio_gpio_request(ARRAY_AND_SIZE(global_gpios));
856 bootstrap_init(); 802 bootstrap_init();
857 set_pxa_fb_info(&mioa701_pxafb_info); 803 set_pxa_fb_info(&mioa701_pxafb_info);
804 mioa701_mci_info.detect_delay = msecs_to_jiffies(250);
858 pxa_set_mci_info(&mioa701_mci_info); 805 pxa_set_mci_info(&mioa701_mci_info);
859 pxa_set_keypad_info(&mioa701_keypad_info); 806 pxa_set_keypad_info(&mioa701_keypad_info);
860 wm97xx_bat_set_pdata(&mioa701_battery_data); 807 wm97xx_bat_set_pdata(&mioa701_battery_data);
@@ -869,7 +816,6 @@ static void __init mioa701_machine_init(void)
869 pxa_set_i2c_info(&i2c_pdata); 816 pxa_set_i2c_info(&i2c_pdata);
870 pxa27x_set_i2c_power_info(NULL); 817 pxa27x_set_i2c_power_info(NULL);
871 pxa_set_camera_info(&mioa701_pxacamera_platform_data); 818 pxa_set_camera_info(&mioa701_pxacamera_platform_data);
872 i2c_register_board_info(0, ARRAY_AND_SIZE(mioa701_i2c_devices));
873} 819}
874 820
875static void mioa701_machine_exit(void) 821static void mioa701_machine_exit(void)
diff --git a/arch/arm/mach-pxa/palmld.c b/arch/arm/mach-pxa/palmld.c
index 169fcc18154e..1ad029dd4438 100644
--- a/arch/arm/mach-pxa/palmld.c
+++ b/arch/arm/mach-pxa/palmld.c
@@ -25,6 +25,9 @@
25#include <linux/wm97xx_batt.h> 25#include <linux/wm97xx_batt.h>
26#include <linux/power_supply.h> 26#include <linux/power_supply.h>
27#include <linux/sysdev.h> 27#include <linux/sysdev.h>
28#include <linux/mtd/mtd.h>
29#include <linux/mtd/partitions.h>
30#include <linux/mtd/physmap.h>
28 31
29#include <asm/mach-types.h> 32#include <asm/mach-types.h>
30#include <asm/mach/arch.h> 33#include <asm/mach/arch.h>
@@ -141,85 +144,50 @@ static unsigned long palmld_pin_config[] __initdata = {
141}; 144};
142 145
143/****************************************************************************** 146/******************************************************************************
144 * SD/MMC card controller 147 * NOR Flash
145 ******************************************************************************/ 148 ******************************************************************************/
146static int palmld_mci_init(struct device *dev, irq_handler_t palmld_detect_int, 149static struct mtd_partition palmld_partitions[] = {
147 void *data) 150 {
148{ 151 .name = "Flash",
149 int err = 0; 152 .offset = 0x00000000,
150 153 .size = MTDPART_SIZ_FULL,
151 /* Setup an interrupt for detecting card insert/remove events */ 154 .mask_flags = 0
152 err = gpio_request(GPIO_NR_PALMLD_SD_DETECT_N, "SD IRQ");
153 if (err)
154 goto err;
155 err = gpio_direction_input(GPIO_NR_PALMLD_SD_DETECT_N);
156 if (err)
157 goto err2;
158 err = request_irq(gpio_to_irq(GPIO_NR_PALMLD_SD_DETECT_N),
159 palmld_detect_int, IRQF_DISABLED | IRQF_SAMPLE_RANDOM |
160 IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING,
161 "SD/MMC card detect", data);
162 if (err) {
163 printk(KERN_ERR "%s: cannot request SD/MMC card detect IRQ\n",
164 __func__);
165 goto err2;
166 } 155 }
156};
167 157
168 err = gpio_request(GPIO_NR_PALMLD_SD_POWER, "SD_POWER"); 158static struct physmap_flash_data palmld_flash_data[] = {
169 if (err) 159 {
170 goto err3; 160 .width = 2, /* bankwidth in bytes */
171 err = gpio_direction_output(GPIO_NR_PALMLD_SD_POWER, 0); 161 .parts = palmld_partitions,
172 if (err) 162 .nr_parts = ARRAY_SIZE(palmld_partitions)
173 goto err4; 163 }
174 164};
175 err = gpio_request(GPIO_NR_PALMLD_SD_READONLY, "SD_READONLY");
176 if (err)
177 goto err4;
178 err = gpio_direction_input(GPIO_NR_PALMLD_SD_READONLY);
179 if (err)
180 goto err5;
181
182 printk(KERN_DEBUG "%s: irq registered\n", __func__);
183
184 return 0;
185
186err5:
187 gpio_free(GPIO_NR_PALMLD_SD_READONLY);
188err4:
189 gpio_free(GPIO_NR_PALMLD_SD_POWER);
190err3:
191 free_irq(gpio_to_irq(GPIO_NR_PALMLD_SD_DETECT_N), data);
192err2:
193 gpio_free(GPIO_NR_PALMLD_SD_DETECT_N);
194err:
195 return err;
196}
197
198static void palmld_mci_exit(struct device *dev, void *data)
199{
200 gpio_free(GPIO_NR_PALMLD_SD_READONLY);
201 gpio_free(GPIO_NR_PALMLD_SD_POWER);
202 free_irq(gpio_to_irq(GPIO_NR_PALMLD_SD_DETECT_N), data);
203 gpio_free(GPIO_NR_PALMLD_SD_DETECT_N);
204}
205 165
206static void palmld_mci_power(struct device *dev, unsigned int vdd) 166static struct resource palmld_flash_resource = {
207{ 167 .start = PXA_CS0_PHYS,
208 struct pxamci_platform_data *p_d = dev->platform_data; 168 .end = PXA_CS0_PHYS + SZ_4M - 1,
209 gpio_set_value(GPIO_NR_PALMLD_SD_POWER, p_d->ocr_mask & (1 << vdd)); 169 .flags = IORESOURCE_MEM,
210} 170};
211 171
212static int palmld_mci_get_ro(struct device *dev) 172static struct platform_device palmld_flash = {
213{ 173 .name = "physmap-flash",
214 return gpio_get_value(GPIO_NR_PALMLD_SD_READONLY); 174 .id = 0,
215} 175 .resource = &palmld_flash_resource,
176 .num_resources = 1,
177 .dev = {
178 .platform_data = palmld_flash_data,
179 },
180};
216 181
182/******************************************************************************
183 * SD/MMC card controller
184 ******************************************************************************/
217static struct pxamci_platform_data palmld_mci_platform_data = { 185static struct pxamci_platform_data palmld_mci_platform_data = {
218 .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34, 186 .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,
219 .setpower = palmld_mci_power, 187 .gpio_card_detect = GPIO_NR_PALMLD_SD_DETECT_N,
220 .get_ro = palmld_mci_get_ro, 188 .gpio_card_ro = GPIO_NR_PALMLD_SD_READONLY,
221 .init = palmld_mci_init, 189 .gpio_power = GPIO_NR_PALMLD_SD_POWER,
222 .exit = palmld_mci_exit, 190 .detect_delay = 20,
223}; 191};
224 192
225/****************************************************************************** 193/******************************************************************************
@@ -336,35 +304,9 @@ static struct platform_device palmld_backlight = {
336/****************************************************************************** 304/******************************************************************************
337 * IrDA 305 * IrDA
338 ******************************************************************************/ 306 ******************************************************************************/
339static int palmld_irda_startup(struct device *dev)
340{
341 int err;
342 err = gpio_request(GPIO_NR_PALMLD_IR_DISABLE, "IR DISABLE");
343 if (err)
344 goto err;
345 err = gpio_direction_output(GPIO_NR_PALMLD_IR_DISABLE, 1);
346 if (err)
347 gpio_free(GPIO_NR_PALMLD_IR_DISABLE);
348err:
349 return err;
350}
351
352static void palmld_irda_shutdown(struct device *dev)
353{
354 gpio_free(GPIO_NR_PALMLD_IR_DISABLE);
355}
356
357static void palmld_irda_transceiver_mode(struct device *dev, int mode)
358{
359 gpio_set_value(GPIO_NR_PALMLD_IR_DISABLE, mode & IR_OFF);
360 pxa2xx_transceiver_mode(dev, mode);
361}
362
363static struct pxaficp_platform_data palmld_ficp_platform_data = { 307static struct pxaficp_platform_data palmld_ficp_platform_data = {
364 .startup = palmld_irda_startup, 308 .gpio_pwdown = GPIO_NR_PALMLD_IR_DISABLE,
365 .shutdown = palmld_irda_shutdown, 309 .transceiver_cap = IR_SIRMODE | IR_OFF,
366 .transceiver_cap = IR_SIRMODE | IR_FIRMODE | IR_OFF,
367 .transceiver_mode = palmld_irda_transceiver_mode,
368}; 310};
369 311
370/****************************************************************************** 312/******************************************************************************
@@ -560,6 +502,7 @@ static struct platform_device *devices[] __initdata = {
560 &power_supply, 502 &power_supply,
561 &palmld_asoc, 503 &palmld_asoc,
562 &palmld_hdd, 504 &palmld_hdd,
505 &palmld_flash,
563}; 506};
564 507
565static struct map_desc palmld_io_desc[] __initdata = { 508static struct map_desc palmld_io_desc[] __initdata = {
diff --git a/arch/arm/mach-pxa/palmt5.c b/arch/arm/mach-pxa/palmt5.c
index 33f726ff55e5..2dd7ce28556b 100644
--- a/arch/arm/mach-pxa/palmt5.c
+++ b/arch/arm/mach-pxa/palmt5.c
@@ -124,83 +124,12 @@ static unsigned long palmt5_pin_config[] __initdata = {
124/****************************************************************************** 124/******************************************************************************
125 * SD/MMC card controller 125 * SD/MMC card controller
126 ******************************************************************************/ 126 ******************************************************************************/
127static int palmt5_mci_init(struct device *dev, irq_handler_t palmt5_detect_int,
128 void *data)
129{
130 int err = 0;
131
132 /* Setup an interrupt for detecting card insert/remove events */
133 err = gpio_request(GPIO_NR_PALMT5_SD_DETECT_N, "SD IRQ");
134 if (err)
135 goto err;
136 err = gpio_direction_input(GPIO_NR_PALMT5_SD_DETECT_N);
137 if (err)
138 goto err2;
139 err = request_irq(gpio_to_irq(GPIO_NR_PALMT5_SD_DETECT_N),
140 palmt5_detect_int, IRQF_DISABLED | IRQF_SAMPLE_RANDOM |
141 IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING,
142 "SD/MMC card detect", data);
143 if (err) {
144 printk(KERN_ERR "%s: cannot request SD/MMC card detect IRQ\n",
145 __func__);
146 goto err2;
147 }
148
149 err = gpio_request(GPIO_NR_PALMT5_SD_POWER, "SD_POWER");
150 if (err)
151 goto err3;
152 err = gpio_direction_output(GPIO_NR_PALMT5_SD_POWER, 0);
153 if (err)
154 goto err4;
155
156 err = gpio_request(GPIO_NR_PALMT5_SD_READONLY, "SD_READONLY");
157 if (err)
158 goto err4;
159 err = gpio_direction_input(GPIO_NR_PALMT5_SD_READONLY);
160 if (err)
161 goto err5;
162
163 printk(KERN_DEBUG "%s: irq registered\n", __func__);
164
165 return 0;
166
167err5:
168 gpio_free(GPIO_NR_PALMT5_SD_READONLY);
169err4:
170 gpio_free(GPIO_NR_PALMT5_SD_POWER);
171err3:
172 free_irq(gpio_to_irq(GPIO_NR_PALMT5_SD_DETECT_N), data);
173err2:
174 gpio_free(GPIO_NR_PALMT5_SD_DETECT_N);
175err:
176 return err;
177}
178
179static void palmt5_mci_exit(struct device *dev, void *data)
180{
181 gpio_free(GPIO_NR_PALMT5_SD_READONLY);
182 gpio_free(GPIO_NR_PALMT5_SD_POWER);
183 free_irq(IRQ_GPIO_PALMT5_SD_DETECT_N, data);
184 gpio_free(GPIO_NR_PALMT5_SD_DETECT_N);
185}
186
187static void palmt5_mci_power(struct device *dev, unsigned int vdd)
188{
189 struct pxamci_platform_data *p_d = dev->platform_data;
190 gpio_set_value(GPIO_NR_PALMT5_SD_POWER, p_d->ocr_mask & (1 << vdd));
191}
192
193static int palmt5_mci_get_ro(struct device *dev)
194{
195 return gpio_get_value(GPIO_NR_PALMT5_SD_READONLY);
196}
197
198static struct pxamci_platform_data palmt5_mci_platform_data = { 127static struct pxamci_platform_data palmt5_mci_platform_data = {
199 .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34, 128 .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,
200 .setpower = palmt5_mci_power, 129 .gpio_card_detect = GPIO_NR_PALMT5_SD_DETECT_N,
201 .get_ro = palmt5_mci_get_ro, 130 .gpio_card_ro = GPIO_NR_PALMT5_SD_READONLY,
202 .init = palmt5_mci_init, 131 .gpio_power = GPIO_NR_PALMT5_SD_POWER,
203 .exit = palmt5_mci_exit, 132 .detect_delay = 20,
204}; 133};
205 134
206/****************************************************************************** 135/******************************************************************************
@@ -314,35 +243,9 @@ static struct platform_device palmt5_backlight = {
314/****************************************************************************** 243/******************************************************************************
315 * IrDA 244 * IrDA
316 ******************************************************************************/ 245 ******************************************************************************/
317static int palmt5_irda_startup(struct device *dev)
318{
319 int err;
320 err = gpio_request(GPIO_NR_PALMT5_IR_DISABLE, "IR DISABLE");
321 if (err)
322 goto err;
323 err = gpio_direction_output(GPIO_NR_PALMT5_IR_DISABLE, 1);
324 if (err)
325 gpio_free(GPIO_NR_PALMT5_IR_DISABLE);
326err:
327 return err;
328}
329
330static void palmt5_irda_shutdown(struct device *dev)
331{
332 gpio_free(GPIO_NR_PALMT5_IR_DISABLE);
333}
334
335static void palmt5_irda_transceiver_mode(struct device *dev, int mode)
336{
337 gpio_set_value(GPIO_NR_PALMT5_IR_DISABLE, mode & IR_OFF);
338 pxa2xx_transceiver_mode(dev, mode);
339}
340
341static struct pxaficp_platform_data palmt5_ficp_platform_data = { 246static struct pxaficp_platform_data palmt5_ficp_platform_data = {
342 .startup = palmt5_irda_startup, 247 .gpio_pwdown = GPIO_NR_PALMT5_IR_DISABLE,
343 .shutdown = palmt5_irda_shutdown, 248 .transceiver_cap = IR_SIRMODE | IR_OFF,
344 .transceiver_cap = IR_SIRMODE | IR_FIRMODE | IR_OFF,
345 .transceiver_mode = palmt5_irda_transceiver_mode,
346}; 249};
347 250
348/****************************************************************************** 251/******************************************************************************
diff --git a/arch/arm/mach-pxa/palmtc.c b/arch/arm/mach-pxa/palmtc.c
new file mode 100644
index 000000000000..bb2cc0dd44ec
--- /dev/null
+++ b/arch/arm/mach-pxa/palmtc.c
@@ -0,0 +1,436 @@
1/*
2 * linux/arch/arm/mach-pxa/palmtc.c
3 *
4 * Support for the Palm Tungsten|C
5 *
6 * Author: Marek Vasut <marek.vasut@gmail.com>
7 *
8 * Based on work of:
9 * Petr Blaha <p3t3@centrum.cz>
10 * Chetan S. Kumar <shivakumar.chetan@gmail.com>
11 *
12 * This program is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License version 2 as
14 * published by the Free Software Foundation.
15 */
16
17#include <linux/platform_device.h>
18#include <linux/delay.h>
19#include <linux/irq.h>
20#include <linux/input.h>
21#include <linux/pwm_backlight.h>
22#include <linux/gpio.h>
23#include <linux/input/matrix_keypad.h>
24#include <linux/ucb1400.h>
25#include <linux/power_supply.h>
26#include <linux/gpio_keys.h>
27#include <linux/mtd/physmap.h>
28
29#include <asm/mach-types.h>
30#include <asm/mach/arch.h>
31#include <asm/mach/map.h>
32
33#include <mach/audio.h>
34#include <mach/palmtc.h>
35#include <mach/mmc.h>
36#include <mach/pxafb.h>
37#include <mach/mfp-pxa25x.h>
38#include <mach/irda.h>
39#include <mach/udc.h>
40#include <mach/pxa2xx-regs.h>
41
42#include "generic.h"
43#include "devices.h"
44
45/******************************************************************************
46 * Pin configuration
47 ******************************************************************************/
48static unsigned long palmtc_pin_config[] __initdata = {
49 /* MMC */
50 GPIO6_MMC_CLK,
51 GPIO8_MMC_CS0,
52 GPIO12_GPIO, /* detect */
53 GPIO32_GPIO, /* power */
54 GPIO54_GPIO, /* r/o switch */
55
56 /* PCMCIA */
57 GPIO52_nPCE_1,
58 GPIO53_nPCE_2,
59 GPIO50_nPIOR,
60 GPIO51_nPIOW,
61 GPIO49_nPWE,
62 GPIO48_nPOE,
63 GPIO52_nPCE_1,
64 GPIO53_nPCE_2,
65 GPIO57_nIOIS16,
66 GPIO56_nPWAIT,
67
68 /* AC97 */
69 GPIO28_AC97_BITCLK,
70 GPIO29_AC97_SDATA_IN_0,
71 GPIO30_AC97_SDATA_OUT,
72 GPIO31_AC97_SYNC,
73
74 /* IrDA */
75 GPIO45_GPIO, /* ir disable */
76 GPIO46_FICP_RXD,
77 GPIO47_FICP_TXD,
78
79 /* PWM */
80 GPIO17_PWM1_OUT,
81
82 /* USB */
83 GPIO4_GPIO, /* detect */
84 GPIO36_GPIO, /* pullup */
85
86 /* LCD */
87 GPIO58_LCD_LDD_0,
88 GPIO59_LCD_LDD_1,
89 GPIO60_LCD_LDD_2,
90 GPIO61_LCD_LDD_3,
91 GPIO62_LCD_LDD_4,
92 GPIO63_LCD_LDD_5,
93 GPIO64_LCD_LDD_6,
94 GPIO65_LCD_LDD_7,
95 GPIO66_LCD_LDD_8,
96 GPIO67_LCD_LDD_9,
97 GPIO68_LCD_LDD_10,
98 GPIO69_LCD_LDD_11,
99 GPIO70_LCD_LDD_12,
100 GPIO71_LCD_LDD_13,
101 GPIO72_LCD_LDD_14,
102 GPIO73_LCD_LDD_15,
103 GPIO74_LCD_FCLK,
104 GPIO75_LCD_LCLK,
105 GPIO76_LCD_PCLK,
106 GPIO77_LCD_BIAS,
107
108 /* MATRIX KEYPAD */
109 GPIO0_GPIO | WAKEUP_ON_EDGE_BOTH, /* in 0 */
110 GPIO9_GPIO | WAKEUP_ON_EDGE_BOTH, /* in 1 */
111 GPIO10_GPIO | WAKEUP_ON_EDGE_BOTH, /* in 2 */
112 GPIO11_GPIO | WAKEUP_ON_EDGE_BOTH, /* in 3 */
113 GPIO18_GPIO | MFP_LPM_DRIVE_LOW, /* out 0 */
114 GPIO19_GPIO | MFP_LPM_DRIVE_LOW, /* out 1 */
115 GPIO20_GPIO | MFP_LPM_DRIVE_LOW, /* out 2 */
116 GPIO21_GPIO | MFP_LPM_DRIVE_LOW, /* out 3 */
117 GPIO22_GPIO | MFP_LPM_DRIVE_LOW, /* out 4 */
118 GPIO23_GPIO | MFP_LPM_DRIVE_LOW, /* out 5 */
119 GPIO24_GPIO | MFP_LPM_DRIVE_LOW, /* out 6 */
120 GPIO25_GPIO | MFP_LPM_DRIVE_LOW, /* out 7 */
121 GPIO26_GPIO | MFP_LPM_DRIVE_LOW, /* out 8 */
122 GPIO27_GPIO | MFP_LPM_DRIVE_LOW, /* out 9 */
123 GPIO79_GPIO | MFP_LPM_DRIVE_LOW, /* out 10 */
124 GPIO80_GPIO | MFP_LPM_DRIVE_LOW, /* out 11 */
125
126 /* PXA GPIO KEYS */
127 GPIO7_GPIO | WAKEUP_ON_EDGE_BOTH, /* hotsync button on cradle */
128
129 /* MISC */
130 GPIO1_RST, /* reset */
131 GPIO2_GPIO, /* earphone detect */
132 GPIO16_GPIO, /* backlight switch */
133};
134
135/******************************************************************************
136 * SD/MMC card controller
137 ******************************************************************************/
138static struct pxamci_platform_data palmtc_mci_platform_data = {
139 .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,
140 .gpio_power = GPIO_NR_PALMTC_SD_POWER,
141 .gpio_card_ro = GPIO_NR_PALMTC_SD_READONLY,
142 .gpio_card_detect = GPIO_NR_PALMTC_SD_DETECT_N,
143 .detect_delay = 20,
144};
145
146/******************************************************************************
147 * GPIO keys
148 ******************************************************************************/
149static struct gpio_keys_button palmtc_pxa_buttons[] = {
150 {KEY_F8, GPIO_NR_PALMTC_HOTSYNC_BUTTON, 1, "HotSync Button", EV_KEY, 1},
151};
152
153static struct gpio_keys_platform_data palmtc_pxa_keys_data = {
154 .buttons = palmtc_pxa_buttons,
155 .nbuttons = ARRAY_SIZE(palmtc_pxa_buttons),
156};
157
158static struct platform_device palmtc_pxa_keys = {
159 .name = "gpio-keys",
160 .id = -1,
161 .dev = {
162 .platform_data = &palmtc_pxa_keys_data,
163 },
164};
165
166/******************************************************************************
167 * Backlight
168 ******************************************************************************/
169static int palmtc_backlight_init(struct device *dev)
170{
171 int ret;
172
173 ret = gpio_request(GPIO_NR_PALMTC_BL_POWER, "BL POWER");
174 if (ret)
175 goto err;
176 ret = gpio_direction_output(GPIO_NR_PALMTC_BL_POWER, 1);
177 if (ret)
178 goto err2;
179
180 return 0;
181
182err2:
183 gpio_free(GPIO_NR_PALMTC_BL_POWER);
184err:
185 return ret;
186}
187
188static int palmtc_backlight_notify(int brightness)
189{
190 /* backlight is on when GPIO16 AF0 is high */
191 gpio_set_value(GPIO_NR_PALMTC_BL_POWER, brightness);
192 return brightness;
193}
194
195static void palmtc_backlight_exit(struct device *dev)
196{
197 gpio_free(GPIO_NR_PALMTC_BL_POWER);
198}
199
200static struct platform_pwm_backlight_data palmtc_backlight_data = {
201 .pwm_id = 1,
202 .max_brightness = PALMTC_MAX_INTENSITY,
203 .dft_brightness = PALMTC_MAX_INTENSITY,
204 .pwm_period_ns = PALMTC_PERIOD_NS,
205 .init = palmtc_backlight_init,
206 .notify = palmtc_backlight_notify,
207 .exit = palmtc_backlight_exit,
208};
209
210static struct platform_device palmtc_backlight = {
211 .name = "pwm-backlight",
212 .dev = {
213 .parent = &pxa25x_device_pwm1.dev,
214 .platform_data = &palmtc_backlight_data,
215 },
216};
217
218/******************************************************************************
219 * IrDA
220 ******************************************************************************/
221static struct pxaficp_platform_data palmtc_ficp_platform_data = {
222 .gpio_pwdown = GPIO_NR_PALMTC_IR_DISABLE,
223 .transceiver_cap = IR_SIRMODE | IR_OFF,
224};
225
226/******************************************************************************
227 * Keyboard
228 ******************************************************************************/
229static const uint32_t palmtc_matrix_keys[] = {
230 KEY(0, 0, KEY_F1),
231 KEY(0, 1, KEY_X),
232 KEY(0, 2, KEY_POWER),
233 KEY(0, 3, KEY_TAB),
234 KEY(0, 4, KEY_A),
235 KEY(0, 5, KEY_Q),
236 KEY(0, 6, KEY_LEFTSHIFT),
237 KEY(0, 7, KEY_Z),
238 KEY(0, 8, KEY_S),
239 KEY(0, 9, KEY_W),
240 KEY(0, 10, KEY_E),
241 KEY(0, 11, KEY_UP),
242
243 KEY(1, 0, KEY_F2),
244 KEY(1, 1, KEY_DOWN),
245 KEY(1, 3, KEY_D),
246 KEY(1, 4, KEY_C),
247 KEY(1, 5, KEY_F),
248 KEY(1, 6, KEY_R),
249 KEY(1, 7, KEY_SPACE),
250 KEY(1, 8, KEY_V),
251 KEY(1, 9, KEY_G),
252 KEY(1, 10, KEY_T),
253 KEY(1, 11, KEY_LEFT),
254
255 KEY(2, 0, KEY_F3),
256 KEY(2, 1, KEY_LEFTCTRL),
257 KEY(2, 3, KEY_H),
258 KEY(2, 4, KEY_Y),
259 KEY(2, 5, KEY_N),
260 KEY(2, 6, KEY_J),
261 KEY(2, 7, KEY_U),
262 KEY(2, 8, KEY_M),
263 KEY(2, 9, KEY_K),
264 KEY(2, 10, KEY_I),
265 KEY(2, 11, KEY_RIGHT),
266
267 KEY(3, 0, KEY_F4),
268 KEY(3, 1, KEY_ENTER),
269 KEY(3, 3, KEY_DOT),
270 KEY(3, 4, KEY_L),
271 KEY(3, 5, KEY_O),
272 KEY(3, 6, KEY_LEFTALT),
273 KEY(3, 7, KEY_ENTER),
274 KEY(3, 8, KEY_BACKSPACE),
275 KEY(3, 9, KEY_P),
276 KEY(3, 10, KEY_B),
277 KEY(3, 11, KEY_FN),
278};
279
280const struct matrix_keymap_data palmtc_keymap_data = {
281 .keymap = palmtc_matrix_keys,
282 .keymap_size = ARRAY_SIZE(palmtc_matrix_keys),
283};
284
285const static unsigned int palmtc_keypad_row_gpios[] = {
286 0, 9, 10, 11
287};
288
289const static unsigned int palmtc_keypad_col_gpios[] = {
290 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 79, 80
291};
292
293static struct matrix_keypad_platform_data palmtc_keypad_platform_data = {
294 .keymap_data = &palmtc_keymap_data,
295 .col_gpios = palmtc_keypad_row_gpios,
296 .num_col_gpios = 12,
297 .row_gpios = palmtc_keypad_col_gpios,
298 .num_row_gpios = 4,
299 .active_low = 1,
300
301 .debounce_ms = 20,
302 .col_scan_delay_us = 5,
303};
304
305static struct platform_device palmtc_keyboard = {
306 .name = "matrix-keypad",
307 .id = -1,
308 .dev = {
309 .platform_data = &palmtc_keypad_platform_data,
310 },
311};
312
313/******************************************************************************
314 * UDC
315 ******************************************************************************/
316static struct pxa2xx_udc_mach_info palmtc_udc_info __initdata = {
317 .gpio_vbus = GPIO_NR_PALMTC_USB_DETECT_N,
318 .gpio_vbus_inverted = 1,
319 .gpio_pullup = GPIO_NR_PALMTC_USB_POWER,
320};
321
322/******************************************************************************
323 * Touchscreen / Battery / GPIO-extender
324 ******************************************************************************/
325static struct platform_device palmtc_ucb1400_core = {
326 .name = "ucb1400_core",
327 .id = -1,
328};
329
330/******************************************************************************
331 * NOR Flash
332 ******************************************************************************/
333static struct resource palmtc_flash_resource = {
334 .start = PXA_CS0_PHYS,
335 .end = PXA_CS0_PHYS + SZ_16M - 1,
336 .flags = IORESOURCE_MEM,
337};
338
339static struct mtd_partition palmtc_flash_parts[] = {
340 {
341 .name = "U-Boot Bootloader",
342 .offset = 0x0,
343 .size = 0x40000,
344 },
345 {
346 .name = "Linux Kernel",
347 .offset = 0x40000,
348 .size = 0x2c0000,
349 },
350 {
351 .name = "Filesystem",
352 .offset = 0x300000,
353 .size = 0xcc0000,
354 },
355 {
356 .name = "U-Boot Environment",
357 .offset = 0xfc0000,
358 .size = MTDPART_SIZ_FULL,
359 },
360};
361
362static struct physmap_flash_data palmtc_flash_data = {
363 .width = 4,
364 .parts = palmtc_flash_parts,
365 .nr_parts = ARRAY_SIZE(palmtc_flash_parts),
366};
367
368static struct platform_device palmtc_flash = {
369 .name = "physmap-flash",
370 .id = -1,
371 .resource = &palmtc_flash_resource,
372 .num_resources = 1,
373 .dev = {
374 .platform_data = &palmtc_flash_data,
375 },
376};
377
378/******************************************************************************
379 * Framebuffer
380 ******************************************************************************/
381static struct pxafb_mode_info palmtc_lcd_modes[] = {
382{
383 .pixclock = 115384,
384 .xres = 320,
385 .yres = 320,
386 .bpp = 16,
387
388 .left_margin = 27,
389 .right_margin = 7,
390 .upper_margin = 7,
391 .lower_margin = 8,
392
393 .hsync_len = 6,
394 .vsync_len = 1,
395},
396};
397
398static struct pxafb_mach_info palmtc_lcd_screen = {
399 .modes = palmtc_lcd_modes,
400 .num_modes = ARRAY_SIZE(palmtc_lcd_modes),
401 .lcd_conn = LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL,
402};
403
404/******************************************************************************
405 * Machine init
406 ******************************************************************************/
407static struct platform_device *devices[] __initdata = {
408 &palmtc_backlight,
409 &palmtc_ucb1400_core,
410 &palmtc_keyboard,
411 &palmtc_pxa_keys,
412 &palmtc_flash,
413};
414
415static void __init palmtc_init(void)
416{
417 pxa2xx_mfp_config(ARRAY_AND_SIZE(palmtc_pin_config));
418
419 set_pxa_fb_info(&palmtc_lcd_screen);
420 pxa_set_mci_info(&palmtc_mci_platform_data);
421 pxa_set_udc_info(&palmtc_udc_info);
422 pxa_set_ac97_info(NULL);
423 pxa_set_ficp_info(&palmtc_ficp_platform_data);
424
425 platform_add_devices(devices, ARRAY_SIZE(devices));
426};
427
428MACHINE_START(PALMTC, "Palm Tungsten|C")
429 .phys_io = 0x40000000,
430 .boot_params = 0xa0000100,
431 .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
432 .map_io = pxa_map_io,
433 .init_irq = pxa25x_init_irq,
434 .timer = &pxa_timer,
435 .init_machine = palmtc_init
436MACHINE_END
diff --git a/arch/arm/mach-pxa/palmte2.c b/arch/arm/mach-pxa/palmte2.c
index d823b09801df..277c4062e3c6 100644
--- a/arch/arm/mach-pxa/palmte2.c
+++ b/arch/arm/mach-pxa/palmte2.c
@@ -117,83 +117,11 @@ static unsigned long palmte2_pin_config[] __initdata = {
117/****************************************************************************** 117/******************************************************************************
118 * SD/MMC card controller 118 * SD/MMC card controller
119 ******************************************************************************/ 119 ******************************************************************************/
120static int palmte2_mci_init(struct device *dev,
121 irq_handler_t palmte2_detect_int, void *data)
122{
123 int err = 0;
124
125 /* Setup an interrupt for detecting card insert/remove events */
126 err = gpio_request(GPIO_NR_PALMTE2_SD_DETECT_N, "SD IRQ");
127 if (err)
128 goto err;
129 err = gpio_direction_input(GPIO_NR_PALMTE2_SD_DETECT_N);
130 if (err)
131 goto err2;
132 err = request_irq(gpio_to_irq(GPIO_NR_PALMTE2_SD_DETECT_N),
133 palmte2_detect_int, IRQF_DISABLED | IRQF_SAMPLE_RANDOM |
134 IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING,
135 "SD/MMC card detect", data);
136 if (err) {
137 printk(KERN_ERR "%s: cannot request SD/MMC card detect IRQ\n",
138 __func__);
139 goto err2;
140 }
141
142 err = gpio_request(GPIO_NR_PALMTE2_SD_POWER, "SD_POWER");
143 if (err)
144 goto err3;
145 err = gpio_direction_output(GPIO_NR_PALMTE2_SD_POWER, 0);
146 if (err)
147 goto err4;
148
149 err = gpio_request(GPIO_NR_PALMTE2_SD_READONLY, "SD_READONLY");
150 if (err)
151 goto err4;
152 err = gpio_direction_input(GPIO_NR_PALMTE2_SD_READONLY);
153 if (err)
154 goto err5;
155
156 printk(KERN_DEBUG "%s: irq registered\n", __func__);
157
158 return 0;
159
160err5:
161 gpio_free(GPIO_NR_PALMTE2_SD_READONLY);
162err4:
163 gpio_free(GPIO_NR_PALMTE2_SD_POWER);
164err3:
165 free_irq(gpio_to_irq(GPIO_NR_PALMTE2_SD_DETECT_N), data);
166err2:
167 gpio_free(GPIO_NR_PALMTE2_SD_DETECT_N);
168err:
169 return err;
170}
171
172static void palmte2_mci_exit(struct device *dev, void *data)
173{
174 gpio_free(GPIO_NR_PALMTE2_SD_READONLY);
175 gpio_free(GPIO_NR_PALMTE2_SD_POWER);
176 free_irq(gpio_to_irq(GPIO_NR_PALMTE2_SD_DETECT_N), data);
177 gpio_free(GPIO_NR_PALMTE2_SD_DETECT_N);
178}
179
180static void palmte2_mci_power(struct device *dev, unsigned int vdd)
181{
182 struct pxamci_platform_data *p_d = dev->platform_data;
183 gpio_set_value(GPIO_NR_PALMTE2_SD_POWER, p_d->ocr_mask & (1 << vdd));
184}
185
186static int palmte2_mci_get_ro(struct device *dev)
187{
188 return gpio_get_value(GPIO_NR_PALMTE2_SD_READONLY);
189}
190
191static struct pxamci_platform_data palmte2_mci_platform_data = { 120static struct pxamci_platform_data palmte2_mci_platform_data = {
192 .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34, 121 .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,
193 .setpower = palmte2_mci_power, 122 .gpio_card_detect = GPIO_NR_PALMTE2_SD_DETECT_N,
194 .get_ro = palmte2_mci_get_ro, 123 .gpio_card_ro = GPIO_NR_PALMTE2_SD_READONLY,
195 .init = palmte2_mci_init, 124 .gpio_power = GPIO_NR_PALMTE2_SD_POWER,
196 .exit = palmte2_mci_exit,
197}; 125};
198 126
199/****************************************************************************** 127/******************************************************************************
@@ -287,35 +215,9 @@ static struct platform_device palmte2_backlight = {
287/****************************************************************************** 215/******************************************************************************
288 * IrDA 216 * IrDA
289 ******************************************************************************/ 217 ******************************************************************************/
290static int palmte2_irda_startup(struct device *dev)
291{
292 int err;
293 err = gpio_request(GPIO_NR_PALMTE2_IR_DISABLE, "IR DISABLE");
294 if (err)
295 goto err;
296 err = gpio_direction_output(GPIO_NR_PALMTE2_IR_DISABLE, 1);
297 if (err)
298 gpio_free(GPIO_NR_PALMTE2_IR_DISABLE);
299err:
300 return err;
301}
302
303static void palmte2_irda_shutdown(struct device *dev)
304{
305 gpio_free(GPIO_NR_PALMTE2_IR_DISABLE);
306}
307
308static void palmte2_irda_transceiver_mode(struct device *dev, int mode)
309{
310 gpio_set_value(GPIO_NR_PALMTE2_IR_DISABLE, mode & IR_OFF);
311 pxa2xx_transceiver_mode(dev, mode);
312}
313
314static struct pxaficp_platform_data palmte2_ficp_platform_data = { 218static struct pxaficp_platform_data palmte2_ficp_platform_data = {
315 .startup = palmte2_irda_startup, 219 .gpio_pwdown = GPIO_NR_PALMTE2_IR_DISABLE,
316 .shutdown = palmte2_irda_shutdown, 220 .transceiver_cap = IR_SIRMODE | IR_OFF,
317 .transceiver_cap = IR_SIRMODE | IR_FIRMODE | IR_OFF,
318 .transceiver_mode = palmte2_irda_transceiver_mode,
319}; 221};
320 222
321/****************************************************************************** 223/******************************************************************************
diff --git a/arch/arm/mach-pxa/palmtx.c b/arch/arm/mach-pxa/palmtx.c
index 83d020879581..76a2b37eaf30 100644
--- a/arch/arm/mach-pxa/palmtx.c
+++ b/arch/arm/mach-pxa/palmtx.c
@@ -28,6 +28,10 @@
28#include <linux/wm97xx_batt.h> 28#include <linux/wm97xx_batt.h>
29#include <linux/power_supply.h> 29#include <linux/power_supply.h>
30#include <linux/usb/gpio_vbus.h> 30#include <linux/usb/gpio_vbus.h>
31#include <linux/mtd/nand.h>
32#include <linux/mtd/partitions.h>
33#include <linux/mtd/mtd.h>
34#include <linux/mtd/physmap.h>
31 35
32#include <asm/mach-types.h> 36#include <asm/mach-types.h>
33#include <asm/mach/arch.h> 37#include <asm/mach/arch.h>
@@ -131,6 +135,10 @@ static unsigned long palmtx_pin_config[] __initdata = {
131 GPIO34_FFUART_RXD, 135 GPIO34_FFUART_RXD,
132 GPIO39_FFUART_TXD, 136 GPIO39_FFUART_TXD,
133 137
138 /* NAND */
139 GPIO15_nCS_1,
140 GPIO18_RDY,
141
134 /* MISC. */ 142 /* MISC. */
135 GPIO10_GPIO, /* hotsync button */ 143 GPIO10_GPIO, /* hotsync button */
136 GPIO12_GPIO, /* power detect */ 144 GPIO12_GPIO, /* power detect */
@@ -138,85 +146,50 @@ static unsigned long palmtx_pin_config[] __initdata = {
138}; 146};
139 147
140/****************************************************************************** 148/******************************************************************************
141 * SD/MMC card controller 149 * NOR Flash
142 ******************************************************************************/ 150 ******************************************************************************/
143static int palmtx_mci_init(struct device *dev, irq_handler_t palmtx_detect_int, 151static struct mtd_partition palmtx_partitions[] = {
144 void *data) 152 {
145{ 153 .name = "Flash",
146 int err = 0; 154 .offset = 0x00000000,
147 155 .size = MTDPART_SIZ_FULL,
148 /* Setup an interrupt for detecting card insert/remove events */ 156 .mask_flags = 0
149 err = gpio_request(GPIO_NR_PALMTX_SD_DETECT_N, "SD IRQ");
150 if (err)
151 goto err;
152 err = gpio_direction_input(GPIO_NR_PALMTX_SD_DETECT_N);
153 if (err)
154 goto err2;
155 err = request_irq(gpio_to_irq(GPIO_NR_PALMTX_SD_DETECT_N),
156 palmtx_detect_int, IRQF_DISABLED | IRQF_SAMPLE_RANDOM |
157 IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING,
158 "SD/MMC card detect", data);
159 if (err) {
160 printk(KERN_ERR "%s: cannot request SD/MMC card detect IRQ\n",
161 __func__);
162 goto err2;
163 } 157 }
158};
164 159
165 err = gpio_request(GPIO_NR_PALMTX_SD_POWER, "SD_POWER"); 160static struct physmap_flash_data palmtx_flash_data[] = {
166 if (err) 161 {
167 goto err3; 162 .width = 2, /* bankwidth in bytes */
168 err = gpio_direction_output(GPIO_NR_PALMTX_SD_POWER, 0); 163 .parts = palmtx_partitions,
169 if (err) 164 .nr_parts = ARRAY_SIZE(palmtx_partitions)
170 goto err4; 165 }
171 166};
172 err = gpio_request(GPIO_NR_PALMTX_SD_READONLY, "SD_READONLY");
173 if (err)
174 goto err4;
175 err = gpio_direction_input(GPIO_NR_PALMTX_SD_READONLY);
176 if (err)
177 goto err5;
178
179 printk(KERN_DEBUG "%s: irq registered\n", __func__);
180
181 return 0;
182
183err5:
184 gpio_free(GPIO_NR_PALMTX_SD_READONLY);
185err4:
186 gpio_free(GPIO_NR_PALMTX_SD_POWER);
187err3:
188 free_irq(gpio_to_irq(GPIO_NR_PALMTX_SD_DETECT_N), data);
189err2:
190 gpio_free(GPIO_NR_PALMTX_SD_DETECT_N);
191err:
192 return err;
193}
194
195static void palmtx_mci_exit(struct device *dev, void *data)
196{
197 gpio_free(GPIO_NR_PALMTX_SD_READONLY);
198 gpio_free(GPIO_NR_PALMTX_SD_POWER);
199 free_irq(gpio_to_irq(GPIO_NR_PALMTX_SD_DETECT_N), data);
200 gpio_free(GPIO_NR_PALMTX_SD_DETECT_N);
201}
202 167
203static void palmtx_mci_power(struct device *dev, unsigned int vdd) 168static struct resource palmtx_flash_resource = {
204{ 169 .start = PXA_CS0_PHYS,
205 struct pxamci_platform_data *p_d = dev->platform_data; 170 .end = PXA_CS0_PHYS + SZ_8M - 1,
206 gpio_set_value(GPIO_NR_PALMTX_SD_POWER, p_d->ocr_mask & (1 << vdd)); 171 .flags = IORESOURCE_MEM,
207} 172};
208 173
209static int palmtx_mci_get_ro(struct device *dev) 174static struct platform_device palmtx_flash = {
210{ 175 .name = "physmap-flash",
211 return gpio_get_value(GPIO_NR_PALMTX_SD_READONLY); 176 .id = 0,
212} 177 .resource = &palmtx_flash_resource,
178 .num_resources = 1,
179 .dev = {
180 .platform_data = palmtx_flash_data,
181 },
182};
213 183
184/******************************************************************************
185 * SD/MMC card controller
186 ******************************************************************************/
214static struct pxamci_platform_data palmtx_mci_platform_data = { 187static struct pxamci_platform_data palmtx_mci_platform_data = {
215 .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34, 188 .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,
216 .setpower = palmtx_mci_power, 189 .gpio_card_detect = GPIO_NR_PALMTX_SD_DETECT_N,
217 .get_ro = palmtx_mci_get_ro, 190 .gpio_card_ro = GPIO_NR_PALMTX_SD_READONLY,
218 .init = palmtx_mci_init, 191 .gpio_power = GPIO_NR_PALMTX_SD_POWER,
219 .exit = palmtx_mci_exit, 192 .detect_delay = 20,
220}; 193};
221 194
222/****************************************************************************** 195/******************************************************************************
@@ -330,35 +303,9 @@ static struct platform_device palmtx_backlight = {
330/****************************************************************************** 303/******************************************************************************
331 * IrDA 304 * IrDA
332 ******************************************************************************/ 305 ******************************************************************************/
333static int palmtx_irda_startup(struct device *dev)
334{
335 int err;
336 err = gpio_request(GPIO_NR_PALMTX_IR_DISABLE, "IR DISABLE");
337 if (err)
338 goto err;
339 err = gpio_direction_output(GPIO_NR_PALMTX_IR_DISABLE, 1);
340 if (err)
341 gpio_free(GPIO_NR_PALMTX_IR_DISABLE);
342err:
343 return err;
344}
345
346static void palmtx_irda_shutdown(struct device *dev)
347{
348 gpio_free(GPIO_NR_PALMTX_IR_DISABLE);
349}
350
351static void palmtx_irda_transceiver_mode(struct device *dev, int mode)
352{
353 gpio_set_value(GPIO_NR_PALMTX_IR_DISABLE, mode & IR_OFF);
354 pxa2xx_transceiver_mode(dev, mode);
355}
356
357static struct pxaficp_platform_data palmtx_ficp_platform_data = { 306static struct pxaficp_platform_data palmtx_ficp_platform_data = {
358 .startup = palmtx_irda_startup, 307 .gpio_pwdown = GPIO_NR_PALMTX_IR_DISABLE,
359 .shutdown = palmtx_irda_shutdown, 308 .transceiver_cap = IR_SIRMODE | IR_OFF,
360 .transceiver_cap = IR_SIRMODE | IR_FIRMODE | IR_OFF,
361 .transceiver_mode = palmtx_irda_transceiver_mode,
362}; 309};
363 310
364/****************************************************************************** 311/******************************************************************************
@@ -493,6 +440,68 @@ static struct pxafb_mach_info palmtx_lcd_screen = {
493}; 440};
494 441
495/****************************************************************************** 442/******************************************************************************
443 * NAND Flash
444 ******************************************************************************/
445static void palmtx_nand_cmd_ctl(struct mtd_info *mtd, int cmd,
446 unsigned int ctrl)
447{
448 struct nand_chip *this = mtd->priv;
449 unsigned long nandaddr = (unsigned long)this->IO_ADDR_W;
450
451 if (cmd == NAND_CMD_NONE)
452 return;
453
454 if (ctrl & NAND_CLE)
455 writeb(cmd, PALMTX_NAND_CLE_VIRT);
456 else if (ctrl & NAND_ALE)
457 writeb(cmd, PALMTX_NAND_ALE_VIRT);
458 else
459 writeb(cmd, nandaddr);
460}
461
462static struct mtd_partition palmtx_partition_info[] = {
463 [0] = {
464 .name = "palmtx-0",
465 .offset = 0,
466 .size = MTDPART_SIZ_FULL
467 },
468};
469
470static const char *palmtx_part_probes[] = { "cmdlinepart", NULL };
471
472struct platform_nand_data palmtx_nand_platdata = {
473 .chip = {
474 .nr_chips = 1,
475 .chip_offset = 0,
476 .nr_partitions = ARRAY_SIZE(palmtx_partition_info),
477 .partitions = palmtx_partition_info,
478 .chip_delay = 20,
479 .part_probe_types = palmtx_part_probes,
480 },
481 .ctrl = {
482 .cmd_ctrl = palmtx_nand_cmd_ctl,
483 },
484};
485
486static struct resource palmtx_nand_resource[] = {
487 [0] = {
488 .start = PXA_CS1_PHYS,
489 .end = PXA_CS1_PHYS + SZ_1M - 1,
490 .flags = IORESOURCE_MEM,
491 },
492};
493
494static struct platform_device palmtx_nand = {
495 .name = "gen_nand",
496 .num_resources = ARRAY_SIZE(palmtx_nand_resource),
497 .resource = palmtx_nand_resource,
498 .id = -1,
499 .dev = {
500 .platform_data = &palmtx_nand_platdata,
501 }
502};
503
504/******************************************************************************
496 * Power management - standby 505 * Power management - standby
497 ******************************************************************************/ 506 ******************************************************************************/
498static void __init palmtx_pm_init(void) 507static void __init palmtx_pm_init(void)
@@ -518,6 +527,8 @@ static struct platform_device *devices[] __initdata = {
518 &power_supply, 527 &power_supply,
519 &palmtx_asoc, 528 &palmtx_asoc,
520 &palmtx_gpio_vbus, 529 &palmtx_gpio_vbus,
530 &palmtx_flash,
531 &palmtx_nand,
521}; 532};
522 533
523static struct map_desc palmtx_io_desc[] __initdata = { 534static struct map_desc palmtx_io_desc[] __initdata = {
@@ -525,8 +536,18 @@ static struct map_desc palmtx_io_desc[] __initdata = {
525 .virtual = PALMTX_PCMCIA_VIRT, 536 .virtual = PALMTX_PCMCIA_VIRT,
526 .pfn = __phys_to_pfn(PALMTX_PCMCIA_PHYS), 537 .pfn = __phys_to_pfn(PALMTX_PCMCIA_PHYS),
527 .length = PALMTX_PCMCIA_SIZE, 538 .length = PALMTX_PCMCIA_SIZE,
528 .type = MT_DEVICE 539 .type = MT_DEVICE,
529}, 540}, {
541 .virtual = PALMTX_NAND_ALE_VIRT,
542 .pfn = __phys_to_pfn(PALMTX_NAND_ALE_PHYS),
543 .length = SZ_1M,
544 .type = MT_DEVICE,
545}, {
546 .virtual = PALMTX_NAND_CLE_VIRT,
547 .pfn = __phys_to_pfn(PALMTX_NAND_CLE_PHYS),
548 .length = SZ_1M,
549 .type = MT_DEVICE,
550}
530}; 551};
531 552
532static void __init palmtx_map_io(void) 553static void __init palmtx_map_io(void)
diff --git a/arch/arm/mach-pxa/palmz72.c b/arch/arm/mach-pxa/palmz72.c
index c3645aa3fa3d..c2bf493c5f53 100644
--- a/arch/arm/mach-pxa/palmz72.c
+++ b/arch/arm/mach-pxa/palmz72.c
@@ -129,88 +129,14 @@ static unsigned long palmz72_pin_config[] __initdata = {
129/****************************************************************************** 129/******************************************************************************
130 * SD/MMC card controller 130 * SD/MMC card controller
131 ******************************************************************************/ 131 ******************************************************************************/
132static int palmz72_mci_init(struct device *dev, 132/* SD_POWER is not actually power, but it is more like chip
133 irq_handler_t palmz72_detect_int, void *data) 133 * select, i.e. it is inverted */
134{
135 int err = 0;
136
137 /* Setup an interrupt for detecting card insert/remove events */
138 err = gpio_request(GPIO_NR_PALMZ72_SD_DETECT_N, "SD IRQ");
139 if (err)
140 goto err;
141 err = gpio_direction_input(GPIO_NR_PALMZ72_SD_DETECT_N);
142 if (err)
143 goto err2;
144 err = request_irq(gpio_to_irq(GPIO_NR_PALMZ72_SD_DETECT_N),
145 palmz72_detect_int, IRQF_DISABLED | IRQF_SAMPLE_RANDOM |
146 IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING,
147 "SD/MMC card detect", data);
148 if (err) {
149 printk(KERN_ERR "%s: cannot request SD/MMC card detect IRQ\n",
150 __func__);
151 goto err2;
152 }
153
154 /* SD_POWER is not actually power, but it is more like chip
155 * select, i.e. it is inverted */
156
157 err = gpio_request(GPIO_NR_PALMZ72_SD_POWER_N, "SD_POWER");
158 if (err)
159 goto err3;
160 err = gpio_direction_output(GPIO_NR_PALMZ72_SD_POWER_N, 0);
161 if (err)
162 goto err4;
163 err = gpio_request(GPIO_NR_PALMZ72_SD_RO, "SD_RO");
164 if (err)
165 goto err4;
166 err = gpio_direction_input(GPIO_NR_PALMZ72_SD_RO);
167 if (err)
168 goto err5;
169
170 printk(KERN_DEBUG "%s: irq registered\n", __func__);
171
172 return 0;
173
174err5:
175 gpio_free(GPIO_NR_PALMZ72_SD_RO);
176err4:
177 gpio_free(GPIO_NR_PALMZ72_SD_POWER_N);
178err3:
179 free_irq(gpio_to_irq(GPIO_NR_PALMZ72_SD_DETECT_N), data);
180err2:
181 gpio_free(GPIO_NR_PALMZ72_SD_DETECT_N);
182err:
183 return err;
184}
185
186static void palmz72_mci_exit(struct device *dev, void *data)
187{
188 gpio_free(GPIO_NR_PALMZ72_SD_POWER_N);
189 free_irq(gpio_to_irq(GPIO_NR_PALMZ72_SD_DETECT_N), data);
190 gpio_free(GPIO_NR_PALMZ72_SD_DETECT_N);
191 gpio_free(GPIO_NR_PALMZ72_SD_RO);
192}
193
194static void palmz72_mci_power(struct device *dev, unsigned int vdd)
195{
196 struct pxamci_platform_data *p_d = dev->platform_data;
197 if (p_d->ocr_mask & (1 << vdd))
198 gpio_set_value(GPIO_NR_PALMZ72_SD_POWER_N, 0);
199 else
200 gpio_set_value(GPIO_NR_PALMZ72_SD_POWER_N, 1);
201}
202
203static int palmz72_mci_ro(struct device *dev)
204{
205 return gpio_get_value(GPIO_NR_PALMZ72_SD_RO);
206}
207
208static struct pxamci_platform_data palmz72_mci_platform_data = { 134static struct pxamci_platform_data palmz72_mci_platform_data = {
209 .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34, 135 .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,
210 .setpower = palmz72_mci_power, 136 .gpio_card_detect = GPIO_NR_PALMZ72_SD_DETECT_N,
211 .get_ro = palmz72_mci_ro, 137 .gpio_card_ro = GPIO_NR_PALMZ72_SD_RO,
212 .init = palmz72_mci_init, 138 .gpio_power = GPIO_NR_PALMZ72_SD_POWER_N,
213 .exit = palmz72_mci_exit, 139 .gpio_power_invert = 1,
214}; 140};
215 141
216/****************************************************************************** 142/******************************************************************************
@@ -304,35 +230,9 @@ static struct platform_device palmz72_backlight = {
304/****************************************************************************** 230/******************************************************************************
305 * IrDA 231 * IrDA
306 ******************************************************************************/ 232 ******************************************************************************/
307static int palmz72_irda_startup(struct device *dev)
308{
309 int err;
310 err = gpio_request(GPIO_NR_PALMZ72_IR_DISABLE, "IR DISABLE");
311 if (err)
312 goto err;
313 err = gpio_direction_output(GPIO_NR_PALMZ72_IR_DISABLE, 1);
314 if (err)
315 gpio_free(GPIO_NR_PALMZ72_IR_DISABLE);
316err:
317 return err;
318}
319
320static void palmz72_irda_shutdown(struct device *dev)
321{
322 gpio_free(GPIO_NR_PALMZ72_IR_DISABLE);
323}
324
325static void palmz72_irda_transceiver_mode(struct device *dev, int mode)
326{
327 gpio_set_value(GPIO_NR_PALMZ72_IR_DISABLE, mode & IR_OFF);
328 pxa2xx_transceiver_mode(dev, mode);
329}
330
331static struct pxaficp_platform_data palmz72_ficp_platform_data = { 233static struct pxaficp_platform_data palmz72_ficp_platform_data = {
332 .startup = palmz72_irda_startup, 234 .gpio_pwdown = GPIO_NR_PALMZ72_IR_DISABLE,
333 .shutdown = palmz72_irda_shutdown,
334 .transceiver_cap = IR_SIRMODE | IR_OFF, 235 .transceiver_cap = IR_SIRMODE | IR_OFF,
335 .transceiver_mode = palmz72_irda_transceiver_mode,
336}; 236};
337 237
338/****************************************************************************** 238/******************************************************************************
diff --git a/arch/arm/mach-pxa/pcm990-baseboard.c b/arch/arm/mach-pxa/pcm990-baseboard.c
index 01791d74e08e..bbda57078e0f 100644
--- a/arch/arm/mach-pxa/pcm990-baseboard.c
+++ b/arch/arm/mach-pxa/pcm990-baseboard.c
@@ -321,11 +321,14 @@ static void pcm990_mci_exit(struct device *dev, void *data)
321#define MSECS_PER_JIFFY (1000/HZ) 321#define MSECS_PER_JIFFY (1000/HZ)
322 322
323static struct pxamci_platform_data pcm990_mci_platform_data = { 323static struct pxamci_platform_data pcm990_mci_platform_data = {
324 .detect_delay = 250 / MSECS_PER_JIFFY, 324 .detect_delay = 250 / MSECS_PER_JIFFY,
325 .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34, 325 .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,
326 .init = pcm990_mci_init, 326 .init = pcm990_mci_init,
327 .setpower = pcm990_mci_setpower, 327 .setpower = pcm990_mci_setpower,
328 .exit = pcm990_mci_exit, 328 .exit = pcm990_mci_exit,
329 .gpio_card_detect = -1,
330 .gpio_card_ro = -1,
331 .gpio_power = -1,
329}; 332};
330 333
331static struct pxaohci_platform_data pcm990_ohci_platform_data = { 334static struct pxaohci_platform_data pcm990_ohci_platform_data = {
@@ -427,25 +430,56 @@ static void pcm990_camera_free_bus(struct soc_camera_link *link)
427 gpio_bus_switch = -EINVAL; 430 gpio_bus_switch = -EINVAL;
428} 431}
429 432
430static struct soc_camera_link iclink = {
431 .bus_id = 0, /* Must match with the camera ID above */
432 .query_bus_param = pcm990_camera_query_bus_param,
433 .set_bus_param = pcm990_camera_set_bus_param,
434 .free_bus = pcm990_camera_free_bus,
435};
436
437/* Board I2C devices. */ 433/* Board I2C devices. */
438static struct i2c_board_info __initdata pcm990_i2c_devices[] = { 434static struct i2c_board_info __initdata pcm990_i2c_devices[] = {
439 { 435 {
440 /* Must initialize before the camera(s) */ 436 /* Must initialize before the camera(s) */
441 I2C_BOARD_INFO("pca9536", 0x41), 437 I2C_BOARD_INFO("pca9536", 0x41),
442 .platform_data = &pca9536_data, 438 .platform_data = &pca9536_data,
443 }, { 439 },
440};
441
442static struct i2c_board_info pcm990_camera_i2c[] = {
443 {
444 I2C_BOARD_INFO("mt9v022", 0x48), 444 I2C_BOARD_INFO("mt9v022", 0x48),
445 .platform_data = &iclink, /* With extender */
446 }, { 445 }, {
447 I2C_BOARD_INFO("mt9m001", 0x5d), 446 I2C_BOARD_INFO("mt9m001", 0x5d),
448 .platform_data = &iclink, /* With extender */ 447 },
448};
449
450static struct soc_camera_link iclink[] = {
451 {
452 .bus_id = 0, /* Must match with the camera ID */
453 .board_info = &pcm990_camera_i2c[0],
454 .i2c_adapter_id = 0,
455 .query_bus_param = pcm990_camera_query_bus_param,
456 .set_bus_param = pcm990_camera_set_bus_param,
457 .free_bus = pcm990_camera_free_bus,
458 .module_name = "mt9v022",
459 }, {
460 .bus_id = 0, /* Must match with the camera ID */
461 .board_info = &pcm990_camera_i2c[1],
462 .i2c_adapter_id = 0,
463 .query_bus_param = pcm990_camera_query_bus_param,
464 .set_bus_param = pcm990_camera_set_bus_param,
465 .free_bus = pcm990_camera_free_bus,
466 .module_name = "mt9m001",
467 },
468};
469
470static struct platform_device pcm990_camera[] = {
471 {
472 .name = "soc-camera-pdrv",
473 .id = 0,
474 .dev = {
475 .platform_data = &iclink[0],
476 },
477 }, {
478 .name = "soc-camera-pdrv",
479 .id = 1,
480 .dev = {
481 .platform_data = &iclink[1],
482 },
449 }, 483 },
450}; 484};
451#endif /* CONFIG_VIDEO_PXA27x ||CONFIG_VIDEO_PXA27x_MODULE */ 485#endif /* CONFIG_VIDEO_PXA27x ||CONFIG_VIDEO_PXA27x_MODULE */
@@ -501,6 +535,9 @@ void __init pcm990_baseboard_init(void)
501 pxa_set_camera_info(&pcm990_pxacamera_platform_data); 535 pxa_set_camera_info(&pcm990_pxacamera_platform_data);
502 536
503 i2c_register_board_info(0, ARRAY_AND_SIZE(pcm990_i2c_devices)); 537 i2c_register_board_info(0, ARRAY_AND_SIZE(pcm990_i2c_devices));
538
539 platform_device_register(&pcm990_camera[0]);
540 platform_device_register(&pcm990_camera[1]);
504#endif 541#endif
505 542
506 printk(KERN_INFO "PCM-990 Evaluation baseboard initialized\n"); 543 printk(KERN_INFO "PCM-990 Evaluation baseboard initialized\n");
diff --git a/arch/arm/mach-pxa/poodle.c b/arch/arm/mach-pxa/poodle.c
index 9352d4a34837..a186994f77fb 100644
--- a/arch/arm/mach-pxa/poodle.c
+++ b/arch/arm/mach-pxa/poodle.c
@@ -245,20 +245,10 @@ static inline void poodle_init_spi(void) {}
245 * The card detect interrupt isn't debounced so we delay it by 250ms 245 * The card detect interrupt isn't debounced so we delay it by 250ms
246 * to give the card a chance to fully insert/eject. 246 * to give the card a chance to fully insert/eject.
247 */ 247 */
248static struct pxamci_platform_data poodle_mci_platform_data;
249
250static int poodle_mci_init(struct device *dev, irq_handler_t poodle_detect_int, void *data) 248static int poodle_mci_init(struct device *dev, irq_handler_t poodle_detect_int, void *data)
251{ 249{
252 int err; 250 int err;
253 251
254 err = gpio_request(POODLE_GPIO_nSD_DETECT, "nSD_DETECT");
255 if (err)
256 goto err_out;
257
258 err = gpio_request(POODLE_GPIO_nSD_WP, "nSD_WP");
259 if (err)
260 goto err_free_1;
261
262 err = gpio_request(POODLE_GPIO_SD_PWR, "SD_PWR"); 252 err = gpio_request(POODLE_GPIO_SD_PWR, "SD_PWR");
263 if (err) 253 if (err)
264 goto err_free_2; 254 goto err_free_2;
@@ -267,34 +257,14 @@ static int poodle_mci_init(struct device *dev, irq_handler_t poodle_detect_int,
267 if (err) 257 if (err)
268 goto err_free_3; 258 goto err_free_3;
269 259
270 gpio_direction_input(POODLE_GPIO_nSD_DETECT);
271 gpio_direction_input(POODLE_GPIO_nSD_WP);
272
273 gpio_direction_output(POODLE_GPIO_SD_PWR, 0); 260 gpio_direction_output(POODLE_GPIO_SD_PWR, 0);
274 gpio_direction_output(POODLE_GPIO_SD_PWR1, 0); 261 gpio_direction_output(POODLE_GPIO_SD_PWR1, 0);
275 262
276 poodle_mci_platform_data.detect_delay = msecs_to_jiffies(250);
277
278 err = request_irq(POODLE_IRQ_GPIO_nSD_DETECT, poodle_detect_int,
279 IRQF_DISABLED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
280 "MMC card detect", data);
281 if (err) {
282 pr_err("%s: MMC/SD: can't request MMC card detect IRQ\n",
283 __func__);
284 goto err_free_4;
285 }
286
287 return 0; 263 return 0;
288 264
289err_free_4:
290 gpio_free(POODLE_GPIO_SD_PWR1);
291err_free_3: 265err_free_3:
292 gpio_free(POODLE_GPIO_SD_PWR); 266 gpio_free(POODLE_GPIO_SD_PWR);
293err_free_2: 267err_free_2:
294 gpio_free(POODLE_GPIO_nSD_WP);
295err_free_1:
296 gpio_free(POODLE_GPIO_nSD_DETECT);
297err_out:
298 return err; 268 return err;
299} 269}
300 270
@@ -312,62 +282,29 @@ static void poodle_mci_setpower(struct device *dev, unsigned int vdd)
312 } 282 }
313} 283}
314 284
315static int poodle_mci_get_ro(struct device *dev)
316{
317 return !!gpio_get_value(POODLE_GPIO_nSD_WP);
318 return GPLR(POODLE_GPIO_nSD_WP) & GPIO_bit(POODLE_GPIO_nSD_WP);
319}
320
321
322static void poodle_mci_exit(struct device *dev, void *data) 285static void poodle_mci_exit(struct device *dev, void *data)
323{ 286{
324 free_irq(POODLE_IRQ_GPIO_nSD_DETECT, data);
325 gpio_free(POODLE_GPIO_SD_PWR1); 287 gpio_free(POODLE_GPIO_SD_PWR1);
326 gpio_free(POODLE_GPIO_SD_PWR); 288 gpio_free(POODLE_GPIO_SD_PWR);
327 gpio_free(POODLE_GPIO_nSD_WP);
328 gpio_free(POODLE_GPIO_nSD_DETECT);
329} 289}
330 290
331static struct pxamci_platform_data poodle_mci_platform_data = { 291static struct pxamci_platform_data poodle_mci_platform_data = {
332 .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34, 292 .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34,
333 .init = poodle_mci_init, 293 .init = poodle_mci_init,
334 .get_ro = poodle_mci_get_ro, 294 .setpower = poodle_mci_setpower,
335 .setpower = poodle_mci_setpower, 295 .exit = poodle_mci_exit,
336 .exit = poodle_mci_exit, 296 .gpio_card_detect = POODLE_IRQ_GPIO_nSD_DETECT,
297 .gpio_card_ro = POODLE_GPIO_nSD_WP,
298 .gpio_power = -1,
337}; 299};
338 300
339 301
340/* 302/*
341 * Irda 303 * Irda
342 */ 304 */
343static void poodle_irda_transceiver_mode(struct device *dev, int mode)
344{
345 gpio_set_value(POODLE_GPIO_IR_ON, mode & IR_OFF);
346 pxa2xx_transceiver_mode(dev, mode);
347}
348
349static int poodle_irda_startup(struct device *dev)
350{
351 int err;
352
353 err = gpio_request(POODLE_GPIO_IR_ON, "IR_ON");
354 if (err)
355 return err;
356
357 gpio_direction_output(POODLE_GPIO_IR_ON, 1);
358 return 0;
359}
360
361static void poodle_irda_shutdown(struct device *dev)
362{
363 gpio_free(POODLE_GPIO_IR_ON);
364}
365
366static struct pxaficp_platform_data poodle_ficp_platform_data = { 305static struct pxaficp_platform_data poodle_ficp_platform_data = {
306 .gpio_pwdown = POODLE_GPIO_IR_ON,
367 .transceiver_cap = IR_SIRMODE | IR_OFF, 307 .transceiver_cap = IR_SIRMODE | IR_OFF,
368 .transceiver_mode = poodle_irda_transceiver_mode,
369 .startup = poodle_irda_startup,
370 .shutdown = poodle_irda_shutdown,
371}; 308};
372 309
373 310
@@ -521,6 +458,7 @@ static void __init poodle_init(void)
521 set_pxa_fb_parent(&poodle_locomo_device.dev); 458 set_pxa_fb_parent(&poodle_locomo_device.dev);
522 set_pxa_fb_info(&poodle_fb_info); 459 set_pxa_fb_info(&poodle_fb_info);
523 pxa_set_udc_info(&udc_info); 460 pxa_set_udc_info(&udc_info);
461 poodle_mci_platform_data.detect_delay = msecs_to_jiffies(250);
524 pxa_set_mci_info(&poodle_mci_platform_data); 462 pxa_set_mci_info(&poodle_mci_platform_data);
525 pxa_set_ficp_info(&poodle_ficp_platform_data); 463 pxa_set_ficp_info(&poodle_ficp_platform_data);
526 pxa_set_i2c_info(NULL); 464 pxa_set_i2c_info(NULL);
diff --git a/arch/arm/mach-pxa/pxa2xx.c b/arch/arm/mach-pxa/pxa2xx.c
index 2f3394f85917..868270421b8c 100644
--- a/arch/arm/mach-pxa/pxa2xx.c
+++ b/arch/arm/mach-pxa/pxa2xx.c
@@ -52,3 +52,4 @@ void pxa2xx_transceiver_mode(struct device *dev, int mode)
52 } else 52 } else
53 BUG(); 53 BUG();
54} 54}
55EXPORT_SYMBOL_GPL(pxa2xx_transceiver_mode);
diff --git a/arch/arm/mach-pxa/pxa300.c b/arch/arm/mach-pxa/pxa300.c
index 4ba6d21f851c..f4af6e2bef89 100644
--- a/arch/arm/mach-pxa/pxa300.c
+++ b/arch/arm/mach-pxa/pxa300.c
@@ -84,9 +84,11 @@ static struct mfp_addr_map pxa310_mfp_addr_map[] __initdata = {
84}; 84};
85 85
86static DEFINE_PXA3_CKEN(common_nand, NAND, 156000000, 0); 86static DEFINE_PXA3_CKEN(common_nand, NAND, 156000000, 0);
87static DEFINE_PXA3_CKEN(gcu, PXA300_GCU, 0, 0);
87 88
88static struct clk_lookup common_clkregs[] = { 89static struct clk_lookup common_clkregs[] = {
89 INIT_CLKREG(&clk_common_nand, "pxa3xx-nand", NULL), 90 INIT_CLKREG(&clk_common_nand, "pxa3xx-nand", NULL),
91 INIT_CLKREG(&clk_gcu, "pxa3xx-gcu", NULL),
90}; 92};
91 93
92static DEFINE_PXA3_CKEN(pxa310_mmc3, MMC3, 19500000, 0); 94static DEFINE_PXA3_CKEN(pxa310_mmc3, MMC3, 19500000, 0);
diff --git a/arch/arm/mach-pxa/pxa320.c b/arch/arm/mach-pxa/pxa320.c
index 8b3d97efadab..c7373e74a109 100644
--- a/arch/arm/mach-pxa/pxa320.c
+++ b/arch/arm/mach-pxa/pxa320.c
@@ -78,9 +78,11 @@ static struct mfp_addr_map pxa320_mfp_addr_map[] __initdata = {
78}; 78};
79 79
80static DEFINE_PXA3_CKEN(pxa320_nand, NAND, 104000000, 0); 80static DEFINE_PXA3_CKEN(pxa320_nand, NAND, 104000000, 0);
81static DEFINE_PXA3_CKEN(gcu, PXA320_GCU, 0, 0);
81 82
82static struct clk_lookup pxa320_clkregs[] = { 83static struct clk_lookup pxa320_clkregs[] = {
83 INIT_CLKREG(&clk_pxa320_nand, "pxa3xx-nand", NULL), 84 INIT_CLKREG(&clk_pxa320_nand, "pxa3xx-nand", NULL),
85 INIT_CLKREG(&clk_gcu, "pxa3xx-gcu", NULL),
84}; 86};
85 87
86static int __init pxa320_init(void) 88static int __init pxa320_init(void)
diff --git a/arch/arm/mach-pxa/pxa930.c b/arch/arm/mach-pxa/pxa930.c
index 71131742fffd..064292008288 100644
--- a/arch/arm/mach-pxa/pxa930.c
+++ b/arch/arm/mach-pxa/pxa930.c
@@ -176,13 +176,30 @@ static struct mfp_addr_map pxa930_mfp_addr_map[] __initdata = {
176 MFP_ADDR_END, 176 MFP_ADDR_END,
177}; 177};
178 178
179static struct mfp_addr_map pxa935_mfp_addr_map[] __initdata = {
180 MFP_ADDR(GPIO159, 0x0524),
181 MFP_ADDR(GPIO163, 0x0534),
182 MFP_ADDR(GPIO167, 0x0544),
183 MFP_ADDR(GPIO168, 0x0548),
184 MFP_ADDR(GPIO169, 0x054c),
185 MFP_ADDR(GPIO170, 0x0550),
186 MFP_ADDR(GPIO171, 0x0554),
187 MFP_ADDR(GPIO172, 0x0558),
188 MFP_ADDR(GPIO173, 0x055c),
189
190 MFP_ADDR_END,
191};
192
179static int __init pxa930_init(void) 193static int __init pxa930_init(void)
180{ 194{
181 if (cpu_is_pxa930()) { 195 if (cpu_is_pxa930() || cpu_is_pxa935()) {
182 mfp_init_base(io_p2v(MFPR_BASE)); 196 mfp_init_base(io_p2v(MFPR_BASE));
183 mfp_init_addr(pxa930_mfp_addr_map); 197 mfp_init_addr(pxa930_mfp_addr_map);
184 } 198 }
185 199
200 if (cpu_is_pxa935())
201 mfp_init_addr(pxa935_mfp_addr_map);
202
186 return 0; 203 return 0;
187} 204}
188 205
diff --git a/arch/arm/mach-pxa/spitz.c b/arch/arm/mach-pxa/spitz.c
index dda310fe71c8..ee8d6038ce82 100644
--- a/arch/arm/mach-pxa/spitz.c
+++ b/arch/arm/mach-pxa/spitz.c
@@ -24,6 +24,7 @@
24#include <linux/spi/ads7846.h> 24#include <linux/spi/ads7846.h>
25#include <linux/spi/corgi_lcd.h> 25#include <linux/spi/corgi_lcd.h>
26#include <linux/mtd/sharpsl.h> 26#include <linux/mtd/sharpsl.h>
27#include <linux/input/matrix_keypad.h>
27 28
28#include <asm/setup.h> 29#include <asm/setup.h>
29#include <asm/mach-types.h> 30#include <asm/mach-types.h>
@@ -111,6 +112,26 @@ static unsigned long spitz_pin_config[] __initdata = {
111 GPIO105_GPIO, /* SPITZ_GPIO_CF_IRQ */ 112 GPIO105_GPIO, /* SPITZ_GPIO_CF_IRQ */
112 GPIO106_GPIO, /* SPITZ_GPIO_CF2_IRQ */ 113 GPIO106_GPIO, /* SPITZ_GPIO_CF2_IRQ */
113 114
115 /* GPIO matrix keypad */
116 GPIO88_GPIO, /* column 0 */
117 GPIO23_GPIO, /* column 1 */
118 GPIO24_GPIO, /* column 2 */
119 GPIO25_GPIO, /* column 3 */
120 GPIO26_GPIO, /* column 4 */
121 GPIO27_GPIO, /* column 5 */
122 GPIO52_GPIO, /* column 6 */
123 GPIO103_GPIO, /* column 7 */
124 GPIO107_GPIO, /* column 8 */
125 GPIO108_GPIO, /* column 9 */
126 GPIO114_GPIO, /* column 10 */
127 GPIO12_GPIO, /* row 0 */
128 GPIO17_GPIO, /* row 1 */
129 GPIO91_GPIO, /* row 2 */
130 GPIO34_GPIO, /* row 3 */
131 GPIO36_GPIO, /* row 4 */
132 GPIO38_GPIO, /* row 5 */
133 GPIO39_GPIO, /* row 6 */
134
114 /* I2C */ 135 /* I2C */
115 GPIO117_I2C_SCL, 136 GPIO117_I2C_SCL,
116 GPIO118_I2C_SDA, 137 GPIO118_I2C_SDA,
@@ -242,9 +263,115 @@ EXPORT_SYMBOL(spitzscoop2_device);
242/* 263/*
243 * Spitz Keyboard Device 264 * Spitz Keyboard Device
244 */ 265 */
266#define SPITZ_KEY_CALENDAR KEY_F1
267#define SPITZ_KEY_ADDRESS KEY_F2
268#define SPITZ_KEY_FN KEY_F3
269#define SPITZ_KEY_CANCEL KEY_F4
270#define SPITZ_KEY_EXOK KEY_F5
271#define SPITZ_KEY_EXCANCEL KEY_F6
272#define SPITZ_KEY_EXJOGDOWN KEY_F7
273#define SPITZ_KEY_EXJOGUP KEY_F8
274#define SPITZ_KEY_JAP1 KEY_LEFTALT
275#define SPITZ_KEY_JAP2 KEY_RIGHTCTRL
276#define SPITZ_KEY_SYNC KEY_F9
277#define SPITZ_KEY_MAIL KEY_F10
278#define SPITZ_KEY_OK KEY_F11
279#define SPITZ_KEY_MENU KEY_F12
280
281static const uint32_t spitzkbd_keymap[] = {
282 KEY(0, 0, KEY_LEFTCTRL),
283 KEY(0, 1, KEY_1),
284 KEY(0, 2, KEY_3),
285 KEY(0, 3, KEY_5),
286 KEY(0, 4, KEY_6),
287 KEY(0, 5, KEY_7),
288 KEY(0, 6, KEY_9),
289 KEY(0, 7, KEY_0),
290 KEY(0, 8, KEY_BACKSPACE),
291 KEY(0, 9, SPITZ_KEY_EXOK), /* EXOK */
292 KEY(0, 10, SPITZ_KEY_EXCANCEL), /* EXCANCEL */
293 KEY(1, 1, KEY_2),
294 KEY(1, 2, KEY_4),
295 KEY(1, 3, KEY_R),
296 KEY(1, 4, KEY_Y),
297 KEY(1, 5, KEY_8),
298 KEY(1, 6, KEY_I),
299 KEY(1, 7, KEY_O),
300 KEY(1, 8, KEY_P),
301 KEY(1, 9, SPITZ_KEY_EXJOGDOWN), /* EXJOGDOWN */
302 KEY(1, 10, SPITZ_KEY_EXJOGUP), /* EXJOGUP */
303 KEY(2, 0, KEY_TAB),
304 KEY(2, 1, KEY_Q),
305 KEY(2, 2, KEY_E),
306 KEY(2, 3, KEY_T),
307 KEY(2, 4, KEY_G),
308 KEY(2, 5, KEY_U),
309 KEY(2, 6, KEY_J),
310 KEY(2, 7, KEY_K),
311 KEY(3, 0, SPITZ_KEY_ADDRESS), /* ADDRESS */
312 KEY(3, 1, KEY_W),
313 KEY(3, 2, KEY_S),
314 KEY(3, 3, KEY_F),
315 KEY(3, 4, KEY_V),
316 KEY(3, 5, KEY_H),
317 KEY(3, 6, KEY_M),
318 KEY(3, 7, KEY_L),
319 KEY(3, 9, KEY_RIGHTSHIFT),
320 KEY(4, 0, SPITZ_KEY_CALENDAR), /* CALENDAR */
321 KEY(4, 1, KEY_A),
322 KEY(4, 2, KEY_D),
323 KEY(4, 3, KEY_C),
324 KEY(4, 4, KEY_B),
325 KEY(4, 5, KEY_N),
326 KEY(4, 6, KEY_DOT),
327 KEY(4, 8, KEY_ENTER),
328 KEY(4, 9, KEY_LEFTSHIFT),
329 KEY(5, 0, SPITZ_KEY_MAIL), /* MAIL */
330 KEY(5, 1, KEY_Z),
331 KEY(5, 2, KEY_X),
332 KEY(5, 3, KEY_MINUS),
333 KEY(5, 4, KEY_SPACE),
334 KEY(5, 5, KEY_COMMA),
335 KEY(5, 7, KEY_UP),
336 KEY(5, 10, SPITZ_KEY_FN), /* FN */
337 KEY(6, 0, KEY_SYSRQ),
338 KEY(6, 1, SPITZ_KEY_JAP1), /* JAP1 */
339 KEY(6, 2, SPITZ_KEY_JAP2), /* JAP2 */
340 KEY(6, 3, SPITZ_KEY_CANCEL), /* CANCEL */
341 KEY(6, 4, SPITZ_KEY_OK), /* OK */
342 KEY(6, 5, SPITZ_KEY_MENU), /* MENU */
343 KEY(6, 6, KEY_LEFT),
344 KEY(6, 7, KEY_DOWN),
345 KEY(6, 8, KEY_RIGHT),
346};
347
348static const struct matrix_keymap_data spitzkbd_keymap_data = {
349 .keymap = spitzkbd_keymap,
350 .keymap_size = ARRAY_SIZE(spitzkbd_keymap),
351};
352
353static const uint32_t spitzkbd_row_gpios[] =
354 { 12, 17, 91, 34, 36, 38, 39 };
355static const uint32_t spitzkbd_col_gpios[] =
356 { 88, 23, 24, 25, 26, 27, 52, 103, 107, 108, 114 };
357
358static struct matrix_keypad_platform_data spitzkbd_pdata = {
359 .keymap_data = &spitzkbd_keymap_data,
360 .row_gpios = spitzkbd_row_gpios,
361 .col_gpios = spitzkbd_col_gpios,
362 .num_row_gpios = ARRAY_SIZE(spitzkbd_row_gpios),
363 .num_col_gpios = ARRAY_SIZE(spitzkbd_col_gpios),
364 .col_scan_delay_us = 10,
365 .debounce_ms = 10,
366 .wakeup = 1,
367};
368
245static struct platform_device spitzkbd_device = { 369static struct platform_device spitzkbd_device = {
246 .name = "spitz-keyboard", 370 .name = "matrix-keypad",
247 .id = -1, 371 .id = -1,
372 .dev = {
373 .platform_data = &spitzkbd_pdata,
374 },
248}; 375};
249 376
250 377
@@ -296,6 +423,7 @@ static struct ads7846_platform_data spitz_ads7846_info = {
296 .vref_delay_usecs = 100, 423 .vref_delay_usecs = 100,
297 .x_plate_ohms = 419, 424 .x_plate_ohms = 419,
298 .y_plate_ohms = 486, 425 .y_plate_ohms = 486,
426 .pressure_max = 1024,
299 .gpio_pendown = SPITZ_GPIO_TP_INT, 427 .gpio_pendown = SPITZ_GPIO_TP_INT,
300 .wait_for_sync = spitz_wait_for_hsync, 428 .wait_for_sync = spitz_wait_for_hsync,
301}; 429};
@@ -378,45 +506,6 @@ static inline void spitz_init_spi(void) {}
378 * The card detect interrupt isn't debounced so we delay it by 250ms 506 * The card detect interrupt isn't debounced so we delay it by 250ms
379 * to give the card a chance to fully insert/eject. 507 * to give the card a chance to fully insert/eject.
380 */ 508 */
381
382static struct pxamci_platform_data spitz_mci_platform_data;
383
384static int spitz_mci_init(struct device *dev, irq_handler_t spitz_detect_int, void *data)
385{
386 int err;
387
388 err = gpio_request(SPITZ_GPIO_nSD_DETECT, "nSD_DETECT");
389 if (err)
390 goto err_out;
391
392 err = gpio_request(SPITZ_GPIO_nSD_WP, "nSD_WP");
393 if (err)
394 goto err_free_1;
395
396 gpio_direction_input(SPITZ_GPIO_nSD_DETECT);
397 gpio_direction_input(SPITZ_GPIO_nSD_WP);
398
399 spitz_mci_platform_data.detect_delay = msecs_to_jiffies(250);
400
401 err = request_irq(SPITZ_IRQ_GPIO_nSD_DETECT, spitz_detect_int,
402 IRQF_DISABLED | IRQF_TRIGGER_RISING |
403 IRQF_TRIGGER_FALLING,
404 "MMC card detect", data);
405 if (err) {
406 pr_err("%s: MMC/SD: can't request MMC card detect IRQ\n",
407 __func__);
408 goto err_free_2;
409 }
410 return 0;
411
412err_free_2:
413 gpio_free(SPITZ_GPIO_nSD_WP);
414err_free_1:
415 gpio_free(SPITZ_GPIO_nSD_DETECT);
416err_out:
417 return err;
418}
419
420static void spitz_mci_setpower(struct device *dev, unsigned int vdd) 509static void spitz_mci_setpower(struct device *dev, unsigned int vdd)
421{ 510{
422 struct pxamci_platform_data* p_d = dev->platform_data; 511 struct pxamci_platform_data* p_d = dev->platform_data;
@@ -427,24 +516,12 @@ static void spitz_mci_setpower(struct device *dev, unsigned int vdd)
427 spitz_card_pwr_ctrl(SPITZ_PWR_SD, 0x0000); 516 spitz_card_pwr_ctrl(SPITZ_PWR_SD, 0x0000);
428} 517}
429 518
430static int spitz_mci_get_ro(struct device *dev)
431{
432 return gpio_get_value(SPITZ_GPIO_nSD_WP);
433}
434
435static void spitz_mci_exit(struct device *dev, void *data)
436{
437 free_irq(SPITZ_IRQ_GPIO_nSD_DETECT, data);
438 gpio_free(SPITZ_GPIO_nSD_WP);
439 gpio_free(SPITZ_GPIO_nSD_DETECT);
440}
441
442static struct pxamci_platform_data spitz_mci_platform_data = { 519static struct pxamci_platform_data spitz_mci_platform_data = {
443 .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34, 520 .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34,
444 .init = spitz_mci_init, 521 .setpower = spitz_mci_setpower,
445 .get_ro = spitz_mci_get_ro, 522 .gpio_card_detect = SPITZ_GPIO_nSD_DETECT,
446 .setpower = spitz_mci_setpower, 523 .gpio_card_ro = SPITZ_GPIO_nSD_WP,
447 .exit = spitz_mci_exit, 524 .gpio_power = -1,
448}; 525};
449 526
450 527
@@ -484,50 +561,10 @@ static struct pxaohci_platform_data spitz_ohci_platform_data = {
484/* 561/*
485 * Irda 562 * Irda
486 */ 563 */
487static int spitz_irda_startup(struct device *dev)
488{
489 int rc;
490
491 rc = gpio_request(SPITZ_GPIO_IR_ON, "IrDA on");
492 if (rc)
493 goto err;
494
495 rc = gpio_direction_output(SPITZ_GPIO_IR_ON, 1);
496 if (rc)
497 goto err_dir;
498
499 return 0;
500
501err_dir:
502 gpio_free(SPITZ_GPIO_IR_ON);
503err:
504 return rc;
505}
506
507static void spitz_irda_shutdown(struct device *dev)
508{
509 gpio_free(SPITZ_GPIO_IR_ON);
510}
511
512static void spitz_irda_transceiver_mode(struct device *dev, int mode)
513{
514 gpio_set_value(SPITZ_GPIO_IR_ON, mode & IR_OFF);
515 pxa2xx_transceiver_mode(dev, mode);
516}
517
518#ifdef CONFIG_MACH_AKITA
519static void akita_irda_transceiver_mode(struct device *dev, int mode)
520{
521 gpio_set_value(AKITA_GPIO_IR_ON, mode & IR_OFF);
522 pxa2xx_transceiver_mode(dev, mode);
523}
524#endif
525 564
526static struct pxaficp_platform_data spitz_ficp_platform_data = { 565static struct pxaficp_platform_data spitz_ficp_platform_data = {
566/* .gpio_pwdown is set in spitz_init() and akita_init() accordingly */
527 .transceiver_cap = IR_SIRMODE | IR_OFF, 567 .transceiver_cap = IR_SIRMODE | IR_OFF,
528 .transceiver_mode = spitz_irda_transceiver_mode,
529 .startup = spitz_irda_startup,
530 .shutdown = spitz_irda_shutdown,
531}; 568};
532 569
533 570
@@ -695,6 +732,7 @@ static void __init common_init(void)
695 spitz_init_spi(); 732 spitz_init_spi();
696 733
697 platform_add_devices(devices, ARRAY_SIZE(devices)); 734 platform_add_devices(devices, ARRAY_SIZE(devices));
735 spitz_mci_platform_data.detect_delay = msecs_to_jiffies(250);
698 pxa_set_mci_info(&spitz_mci_platform_data); 736 pxa_set_mci_info(&spitz_mci_platform_data);
699 pxa_set_ohci_info(&spitz_ohci_platform_data); 737 pxa_set_ohci_info(&spitz_ohci_platform_data);
700 pxa_set_ficp_info(&spitz_ficp_platform_data); 738 pxa_set_ficp_info(&spitz_ficp_platform_data);
@@ -705,6 +743,8 @@ static void __init common_init(void)
705#if defined(CONFIG_MACH_SPITZ) || defined(CONFIG_MACH_BORZOI) 743#if defined(CONFIG_MACH_SPITZ) || defined(CONFIG_MACH_BORZOI)
706static void __init spitz_init(void) 744static void __init spitz_init(void)
707{ 745{
746 spitz_ficp_platform_data.gpio_pwdown = SPITZ_GPIO_IR_ON;
747
708 platform_scoop_config = &spitz_pcmcia_config; 748 platform_scoop_config = &spitz_pcmcia_config;
709 749
710 common_init(); 750 common_init();
@@ -747,7 +787,7 @@ static struct nand_ecclayout akita_oobinfo = {
747 787
748static void __init akita_init(void) 788static void __init akita_init(void)
749{ 789{
750 spitz_ficp_platform_data.transceiver_mode = akita_irda_transceiver_mode; 790 spitz_ficp_platform_data.gpio_pwdown = AKITA_GPIO_IR_ON;
751 791
752 sharpsl_nand_platform_data.badblock_pattern = &sharpsl_akita_bbt; 792 sharpsl_nand_platform_data.badblock_pattern = &sharpsl_akita_bbt;
753 sharpsl_nand_platform_data.ecc_layout = &akita_oobinfo; 793 sharpsl_nand_platform_data.ecc_layout = &akita_oobinfo;
diff --git a/arch/arm/mach-pxa/tosa.c b/arch/arm/mach-pxa/tosa.c
index 117ad5920e53..e81a52673d49 100644
--- a/arch/arm/mach-pxa/tosa.c
+++ b/arch/arm/mach-pxa/tosa.c
@@ -247,49 +247,10 @@ static struct pxa2xx_udc_mach_info udc_info __initdata = {
247/* 247/*
248 * MMC/SD Device 248 * MMC/SD Device
249 */ 249 */
250static struct pxamci_platform_data tosa_mci_platform_data;
251
252static int tosa_mci_init(struct device *dev, irq_handler_t tosa_detect_int, void *data) 250static int tosa_mci_init(struct device *dev, irq_handler_t tosa_detect_int, void *data)
253{ 251{
254 int err; 252 int err;
255 253
256 tosa_mci_platform_data.detect_delay = msecs_to_jiffies(250);
257
258 err = gpio_request(TOSA_GPIO_nSD_DETECT, "MMC/SD card detect");
259 if (err) {
260 printk(KERN_ERR "tosa_mci_init: can't request nSD_DETECT gpio\n");
261 goto err_gpio_detect;
262 }
263 err = gpio_direction_input(TOSA_GPIO_nSD_DETECT);
264 if (err)
265 goto err_gpio_detect_dir;
266
267 err = request_irq(TOSA_IRQ_GPIO_nSD_DETECT, tosa_detect_int,
268 IRQF_DISABLED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
269 "MMC/SD card detect", data);
270 if (err) {
271 printk(KERN_ERR "tosa_mci_init: MMC/SD: can't request MMC card detect IRQ\n");
272 goto err_irq;
273 }
274
275 err = gpio_request(TOSA_GPIO_SD_WP, "SD Write Protect");
276 if (err) {
277 printk(KERN_ERR "tosa_mci_init: can't request SD_WP gpio\n");
278 goto err_gpio_wp;
279 }
280 err = gpio_direction_input(TOSA_GPIO_SD_WP);
281 if (err)
282 goto err_gpio_wp_dir;
283
284 err = gpio_request(TOSA_GPIO_PWR_ON, "SD Power");
285 if (err) {
286 printk(KERN_ERR "tosa_mci_init: can't request SD_PWR gpio\n");
287 goto err_gpio_pwr;
288 }
289 err = gpio_direction_output(TOSA_GPIO_PWR_ON, 0);
290 if (err)
291 goto err_gpio_pwr_dir;
292
293 err = gpio_request(TOSA_GPIO_nSD_INT, "SD Int"); 254 err = gpio_request(TOSA_GPIO_nSD_INT, "SD Int");
294 if (err) { 255 if (err) {
295 printk(KERN_ERR "tosa_mci_init: can't request SD_PWR gpio\n"); 256 printk(KERN_ERR "tosa_mci_init: can't request SD_PWR gpio\n");
@@ -304,51 +265,21 @@ static int tosa_mci_init(struct device *dev, irq_handler_t tosa_detect_int, void
304err_gpio_int_dir: 265err_gpio_int_dir:
305 gpio_free(TOSA_GPIO_nSD_INT); 266 gpio_free(TOSA_GPIO_nSD_INT);
306err_gpio_int: 267err_gpio_int:
307err_gpio_pwr_dir:
308 gpio_free(TOSA_GPIO_PWR_ON);
309err_gpio_pwr:
310err_gpio_wp_dir:
311 gpio_free(TOSA_GPIO_SD_WP);
312err_gpio_wp:
313 free_irq(TOSA_IRQ_GPIO_nSD_DETECT, data);
314err_irq:
315err_gpio_detect_dir:
316 gpio_free(TOSA_GPIO_nSD_DETECT);
317err_gpio_detect:
318 return err; 268 return err;
319} 269}
320 270
321static void tosa_mci_setpower(struct device *dev, unsigned int vdd)
322{
323 struct pxamci_platform_data* p_d = dev->platform_data;
324
325 if (( 1 << vdd) & p_d->ocr_mask) {
326 gpio_set_value(TOSA_GPIO_PWR_ON, 1);
327 } else {
328 gpio_set_value(TOSA_GPIO_PWR_ON, 0);
329 }
330}
331
332static int tosa_mci_get_ro(struct device *dev)
333{
334 return gpio_get_value(TOSA_GPIO_SD_WP);
335}
336
337static void tosa_mci_exit(struct device *dev, void *data) 271static void tosa_mci_exit(struct device *dev, void *data)
338{ 272{
339 gpio_free(TOSA_GPIO_nSD_INT); 273 gpio_free(TOSA_GPIO_nSD_INT);
340 gpio_free(TOSA_GPIO_PWR_ON);
341 gpio_free(TOSA_GPIO_SD_WP);
342 free_irq(TOSA_IRQ_GPIO_nSD_DETECT, data);
343 gpio_free(TOSA_GPIO_nSD_DETECT);
344} 274}
345 275
346static struct pxamci_platform_data tosa_mci_platform_data = { 276static struct pxamci_platform_data tosa_mci_platform_data = {
347 .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34, 277 .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34,
348 .init = tosa_mci_init, 278 .init = tosa_mci_init,
349 .get_ro = tosa_mci_get_ro, 279 .exit = tosa_mci_exit,
350 .setpower = tosa_mci_setpower, 280 .gpio_card_detect = TOSA_GPIO_nSD_DETECT,
351 .exit = tosa_mci_exit, 281 .gpio_card_ro = TOSA_GPIO_SD_WP,
282 .gpio_power = TOSA_GPIO_PWR_ON,
352}; 283};
353 284
354/* 285/*
@@ -406,10 +337,11 @@ static void tosa_irda_shutdown(struct device *dev)
406} 337}
407 338
408static struct pxaficp_platform_data tosa_ficp_platform_data = { 339static struct pxaficp_platform_data tosa_ficp_platform_data = {
409 .transceiver_cap = IR_SIRMODE | IR_OFF, 340 .gpio_pwdown = -1,
410 .transceiver_mode = tosa_irda_transceiver_mode, 341 .transceiver_cap = IR_SIRMODE | IR_OFF,
411 .startup = tosa_irda_startup, 342 .transceiver_mode = tosa_irda_transceiver_mode,
412 .shutdown = tosa_irda_shutdown, 343 .startup = tosa_irda_startup,
344 .shutdown = tosa_irda_shutdown,
413}; 345};
414 346
415/* 347/*
@@ -910,6 +842,7 @@ static void __init tosa_init(void)
910 dummy = gpiochip_reserve(TOSA_SCOOP_JC_GPIO_BASE, 12); 842 dummy = gpiochip_reserve(TOSA_SCOOP_JC_GPIO_BASE, 12);
911 dummy = gpiochip_reserve(TOSA_TC6393XB_GPIO_BASE, 16); 843 dummy = gpiochip_reserve(TOSA_TC6393XB_GPIO_BASE, 16);
912 844
845 tosa_mci_platform_data.detect_delay = msecs_to_jiffies(250);
913 pxa_set_mci_info(&tosa_mci_platform_data); 846 pxa_set_mci_info(&tosa_mci_platform_data);
914 pxa_set_udc_info(&udc_info); 847 pxa_set_udc_info(&udc_info);
915 pxa_set_ficp_info(&tosa_ficp_platform_data); 848 pxa_set_ficp_info(&tosa_ficp_platform_data);
diff --git a/arch/arm/mach-pxa/treo680.c b/arch/arm/mach-pxa/treo680.c
index 753ec4df17b9..fe085076fbf2 100644
--- a/arch/arm/mach-pxa/treo680.c
+++ b/arch/arm/mach-pxa/treo680.c
@@ -153,87 +153,11 @@ static unsigned long treo680_pin_config[] __initdata = {
153/****************************************************************************** 153/******************************************************************************
154 * SD/MMC card controller 154 * SD/MMC card controller
155 ******************************************************************************/ 155 ******************************************************************************/
156static int treo680_mci_init(struct device *dev,
157 irq_handler_t treo680_detect_int, void *data)
158{
159 int err = 0;
160
161 /* Setup an interrupt for detecting card insert/remove events */
162 err = gpio_request(GPIO_NR_TREO680_SD_DETECT_N, "SD IRQ");
163
164 if (err)
165 goto err;
166
167 err = gpio_direction_input(GPIO_NR_TREO680_SD_DETECT_N);
168 if (err)
169 goto err2;
170
171 err = request_irq(gpio_to_irq(GPIO_NR_TREO680_SD_DETECT_N),
172 treo680_detect_int, IRQF_DISABLED | IRQF_SAMPLE_RANDOM |
173 IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING,
174 "SD/MMC card detect", data);
175
176 if (err) {
177 dev_err(dev, "%s: cannot request SD/MMC card detect IRQ\n",
178 __func__);
179 goto err2;
180 }
181
182 err = gpio_request(GPIO_NR_TREO680_SD_POWER, "SD_POWER");
183 if (err)
184 goto err3;
185
186 err = gpio_direction_output(GPIO_NR_TREO680_SD_POWER, 1);
187 if (err)
188 goto err4;
189
190 err = gpio_request(GPIO_NR_TREO680_SD_READONLY, "SD_READONLY");
191 if (err)
192 goto err4;
193
194 err = gpio_direction_input(GPIO_NR_TREO680_SD_READONLY);
195 if (err)
196 goto err5;
197
198 return 0;
199
200err5:
201 gpio_free(GPIO_NR_TREO680_SD_READONLY);
202err4:
203 gpio_free(GPIO_NR_TREO680_SD_POWER);
204err3:
205 free_irq(gpio_to_irq(GPIO_NR_TREO680_SD_DETECT_N), data);
206err2:
207 gpio_free(GPIO_NR_TREO680_SD_DETECT_N);
208err:
209 return err;
210}
211
212static void treo680_mci_exit(struct device *dev, void *data)
213{
214 gpio_free(GPIO_NR_TREO680_SD_READONLY);
215 gpio_free(GPIO_NR_TREO680_SD_POWER);
216 free_irq(gpio_to_irq(GPIO_NR_TREO680_SD_DETECT_N), data);
217 gpio_free(GPIO_NR_TREO680_SD_DETECT_N);
218}
219
220static void treo680_mci_power(struct device *dev, unsigned int vdd)
221{
222 struct pxamci_platform_data *p_d = dev->platform_data;
223 gpio_set_value(GPIO_NR_TREO680_SD_POWER, p_d->ocr_mask & (1 << vdd));
224}
225
226static int treo680_mci_get_ro(struct device *dev)
227{
228 return gpio_get_value(GPIO_NR_TREO680_SD_READONLY);
229}
230
231static struct pxamci_platform_data treo680_mci_platform_data = { 156static struct pxamci_platform_data treo680_mci_platform_data = {
232 .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34, 157 .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,
233 .setpower = treo680_mci_power, 158 .gpio_card_detect = GPIO_NR_TREO680_SD_DETECT_N,
234 .get_ro = treo680_mci_get_ro, 159 .gpio_card_ro = GPIO_NR_TREO680_SD_READONLY,
235 .init = treo680_mci_init, 160 .gpio_power = GPIO_NR_TREO680_SD_POWER,
236 .exit = treo680_mci_exit,
237}; 161};
238 162
239/****************************************************************************** 163/******************************************************************************
@@ -330,16 +254,9 @@ static int treo680_backlight_init(struct device *dev)
330 ret = gpio_direction_output(GPIO_NR_TREO680_BL_POWER, 0); 254 ret = gpio_direction_output(GPIO_NR_TREO680_BL_POWER, 0);
331 if (ret) 255 if (ret)
332 goto err2; 256 goto err2;
333 ret = gpio_request(GPIO_NR_TREO680_LCD_POWER, "LCD POWER");
334 if (ret)
335 goto err2;
336 ret = gpio_direction_output(GPIO_NR_TREO680_LCD_POWER, 0);
337 if (ret)
338 goto err3;
339 257
340 return 0; 258 return 0;
341err3: 259
342 gpio_free(GPIO_NR_TREO680_LCD_POWER);
343err2: 260err2:
344 gpio_free(GPIO_NR_TREO680_BL_POWER); 261 gpio_free(GPIO_NR_TREO680_BL_POWER);
345err: 262err:
@@ -355,7 +272,6 @@ static int treo680_backlight_notify(int brightness)
355static void treo680_backlight_exit(struct device *dev) 272static void treo680_backlight_exit(struct device *dev)
356{ 273{
357 gpio_free(GPIO_NR_TREO680_BL_POWER); 274 gpio_free(GPIO_NR_TREO680_BL_POWER);
358 gpio_free(GPIO_NR_TREO680_LCD_POWER);
359} 275}
360 276
361static struct platform_pwm_backlight_data treo680_backlight_data = { 277static struct platform_pwm_backlight_data treo680_backlight_data = {
@@ -379,44 +295,9 @@ static struct platform_device treo680_backlight = {
379/****************************************************************************** 295/******************************************************************************
380 * IrDA 296 * IrDA
381 ******************************************************************************/ 297 ******************************************************************************/
382static void treo680_transceiver_mode(struct device *dev, int mode)
383{
384 gpio_set_value(GPIO_NR_TREO680_IR_EN, mode & IR_OFF);
385 pxa2xx_transceiver_mode(dev, mode);
386}
387
388static int treo680_irda_startup(struct device *dev)
389{
390 int err;
391
392 err = gpio_request(GPIO_NR_TREO680_IR_EN, "Ir port disable");
393 if (err)
394 goto err1;
395
396 err = gpio_direction_output(GPIO_NR_TREO680_IR_EN, 1);
397 if (err)
398 goto err2;
399
400 return 0;
401
402err2:
403 dev_err(dev, "treo680_irda: cannot change IR gpio direction\n");
404 gpio_free(GPIO_NR_TREO680_IR_EN);
405err1:
406 dev_err(dev, "treo680_irda: cannot allocate IR gpio\n");
407 return err;
408}
409
410static void treo680_irda_shutdown(struct device *dev)
411{
412 gpio_free(GPIO_NR_TREO680_IR_EN);
413}
414
415static struct pxaficp_platform_data treo680_ficp_info = { 298static struct pxaficp_platform_data treo680_ficp_info = {
416 .transceiver_cap = IR_FIRMODE | IR_SIRMODE | IR_OFF, 299 .gpio_pwdown = GPIO_NR_TREO680_IR_EN,
417 .startup = treo680_irda_startup, 300 .transceiver_cap = IR_SIRMODE | IR_OFF,
418 .shutdown = treo680_irda_shutdown,
419 .transceiver_mode = treo680_transceiver_mode,
420}; 301};
421 302
422/****************************************************************************** 303/******************************************************************************
@@ -546,6 +427,11 @@ static struct pxafb_mode_info treo680_lcd_modes[] = {
546}, 427},
547}; 428};
548 429
430static void treo680_lcd_power(int on, struct fb_var_screeninfo *info)
431{
432 gpio_set_value(GPIO_NR_TREO680_BL_POWER, on);
433}
434
549static struct pxafb_mach_info treo680_lcd_screen = { 435static struct pxafb_mach_info treo680_lcd_screen = {
550 .modes = treo680_lcd_modes, 436 .modes = treo680_lcd_modes,
551 .num_modes = ARRAY_SIZE(treo680_lcd_modes), 437 .num_modes = ARRAY_SIZE(treo680_lcd_modes),
@@ -585,11 +471,32 @@ static void __init treo680_udc_init(void)
585 } 471 }
586} 472}
587 473
474static void __init treo680_lcd_power_init(void)
475{
476 int ret;
477
478 ret = gpio_request(GPIO_NR_TREO680_LCD_POWER, "LCD POWER");
479 if (ret) {
480 pr_err("Treo680: LCD power GPIO request failed!\n");
481 return;
482 }
483
484 ret = gpio_direction_output(GPIO_NR_TREO680_LCD_POWER, 0);
485 if (ret) {
486 pr_err("Treo680: setting LCD power GPIO direction failed!\n");
487 gpio_free(GPIO_NR_TREO680_LCD_POWER);
488 return;
489 }
490
491 treo680_lcd_screen.pxafb_lcd_power = treo680_lcd_power;
492}
493
588static void __init treo680_init(void) 494static void __init treo680_init(void)
589{ 495{
590 treo680_pm_init(); 496 treo680_pm_init();
591 pxa2xx_mfp_config(ARRAY_AND_SIZE(treo680_pin_config)); 497 pxa2xx_mfp_config(ARRAY_AND_SIZE(treo680_pin_config));
592 pxa_set_keypad_info(&treo680_keypad_platform_data); 498 pxa_set_keypad_info(&treo680_keypad_platform_data);
499 treo680_lcd_power_init();
593 set_pxa_fb_info(&treo680_lcd_screen); 500 set_pxa_fb_info(&treo680_lcd_screen);
594 pxa_set_mci_info(&treo680_mci_platform_data); 501 pxa_set_mci_info(&treo680_mci_platform_data);
595 treo680_udc_init(); 502 treo680_udc_init();
diff --git a/arch/arm/mach-pxa/trizeps4.c b/arch/arm/mach-pxa/trizeps4.c
index 825f540176d2..3981e0356d12 100644
--- a/arch/arm/mach-pxa/trizeps4.c
+++ b/arch/arm/mach-pxa/trizeps4.c
@@ -367,6 +367,9 @@ static struct pxamci_platform_data trizeps4_mci_platform_data = {
367 .exit = trizeps4_mci_exit, 367 .exit = trizeps4_mci_exit,
368 .get_ro = NULL, /* write-protection not supported */ 368 .get_ro = NULL, /* write-protection not supported */
369 .setpower = NULL, /* power-switching not supported */ 369 .setpower = NULL, /* power-switching not supported */
370 .gpio_card_detect = -1,
371 .gpio_card_ro = -1,
372 .gpio_power = -1,
370}; 373};
371 374
372/**************************************************************************** 375/****************************************************************************
@@ -412,6 +415,7 @@ static void trizeps4_irda_transceiver_mode(struct device *dev, int mode)
412} 415}
413 416
414static struct pxaficp_platform_data trizeps4_ficp_platform_data = { 417static struct pxaficp_platform_data trizeps4_ficp_platform_data = {
418 .gpio_pwdown = -1,
415 .transceiver_cap = IR_SIRMODE | IR_FIRMODE | IR_OFF, 419 .transceiver_cap = IR_SIRMODE | IR_FIRMODE | IR_OFF,
416 .transceiver_mode = trizeps4_irda_transceiver_mode, 420 .transceiver_mode = trizeps4_irda_transceiver_mode,
417 .startup = trizeps4_irda_startup, 421 .startup = trizeps4_irda_startup,
diff --git a/arch/arm/mach-pxa/xcep.c b/arch/arm/mach-pxa/xcep.c
new file mode 100644
index 000000000000..3fd79cbb36c8
--- /dev/null
+++ b/arch/arm/mach-pxa/xcep.c
@@ -0,0 +1,187 @@
1/* linux/arch/arm/mach-pxa/xcep.c
2 *
3 * Support for the Iskratel Electronics XCEP platform as used in
4 * the Libera instruments from Instrumentation Technologies.
5 *
6 * Author: Ales Bardorfer <ales@i-tech.si>
7 * Contributions by: Abbott, MG (Michael) <michael.abbott@diamond.ac.uk>
8 * Contributions by: Matej Kenda <matej.kenda@i-tech.si>
9 * Created: June 2006
10 * Copyright: (C) 2006-2009 Instrumentation Technologies
11 *
12 * This program is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License version 2 as
14 * published by the Free Software Foundation.
15 */
16
17#include <linux/platform_device.h>
18#include <linux/i2c.h>
19#include <linux/smc91x.h>
20#include <linux/mtd/mtd.h>
21#include <linux/mtd/partitions.h>
22#include <linux/mtd/physmap.h>
23
24#include <asm/mach-types.h>
25#include <asm/mach/arch.h>
26#include <asm/mach/irq.h>
27#include <asm/mach/map.h>
28
29#include <plat/i2c.h>
30
31#include <mach/hardware.h>
32#include <mach/pxa2xx-regs.h>
33#include <mach/mfp-pxa25x.h>
34
35#include "generic.h"
36
37#define XCEP_ETH_PHYS (PXA_CS3_PHYS + 0x00000300)
38#define XCEP_ETH_PHYS_END (PXA_CS3_PHYS + 0x000fffff)
39#define XCEP_ETH_ATTR (PXA_CS3_PHYS + 0x02000000)
40#define XCEP_ETH_ATTR_END (PXA_CS3_PHYS + 0x020fffff)
41#define XCEP_ETH_IRQ IRQ_GPIO0
42
43/* XCEP CPLD base */
44#define XCEP_CPLD_BASE 0xf0000000
45
46
47/* Flash partitions. */
48
49static struct mtd_partition xcep_partitions[] = {
50 {
51 .name = "Bootloader",
52 .size = 0x00040000,
53 .offset = 0,
54 .mask_flags = MTD_WRITEABLE
55 }, {
56 .name = "Bootloader ENV",
57 .size = 0x00040000,
58 .offset = 0x00040000,
59 .mask_flags = MTD_WRITEABLE
60 }, {
61 .name = "Kernel",
62 .size = 0x00100000,
63 .offset = 0x00080000,
64 }, {
65 .name = "Rescue fs",
66 .size = 0x00280000,
67 .offset = 0x00180000,
68 }, {
69 .name = "Filesystem",
70 .size = MTDPART_SIZ_FULL,
71 .offset = 0x00400000
72 }
73};
74
75static struct physmap_flash_data xcep_flash_data[] = {
76 {
77 .width = 4, /* bankwidth in bytes */
78 .parts = xcep_partitions,
79 .nr_parts = ARRAY_SIZE(xcep_partitions)
80 }
81};
82
83static struct resource flash_resource = {
84 .start = PXA_CS0_PHYS,
85 .end = PXA_CS0_PHYS + SZ_32M - 1,
86 .flags = IORESOURCE_MEM,
87};
88
89static struct platform_device flash_device = {
90 .name = "physmap-flash",
91 .id = 0,
92 .dev = {
93 .platform_data = xcep_flash_data,
94 },
95 .resource = &flash_resource,
96 .num_resources = 1,
97};
98
99
100
101/* SMC LAN91C111 network controller. */
102
103static struct resource smc91x_resources[] = {
104 [0] = {
105 .name = "smc91x-regs",
106 .start = XCEP_ETH_PHYS,
107 .end = XCEP_ETH_PHYS_END,
108 .flags = IORESOURCE_MEM,
109 },
110 [1] = {
111 .start = XCEP_ETH_IRQ,
112 .end = XCEP_ETH_IRQ,
113 .flags = IORESOURCE_IRQ,
114 },
115 [2] = {
116 .name = "smc91x-attrib",
117 .start = XCEP_ETH_ATTR,
118 .end = XCEP_ETH_ATTR_END,
119 .flags = IORESOURCE_MEM,
120 },
121};
122
123static struct smc91x_platdata xcep_smc91x_info = {
124 .flags = SMC91X_USE_32BIT | SMC91X_NOWAIT | SMC91X_USE_DMA,
125};
126
127static struct platform_device smc91x_device = {
128 .name = "smc91x",
129 .id = -1,
130 .num_resources = ARRAY_SIZE(smc91x_resources),
131 .resource = smc91x_resources,
132 .dev = {
133 .platform_data = &xcep_smc91x_info,
134 },
135};
136
137
138static struct platform_device *devices[] __initdata = {
139 &flash_device,
140 &smc91x_device,
141};
142
143
144/* We have to state that there are HWMON devices on the I2C bus on XCEP.
145 * Drivers for HWMON verify capabilities of the adapter when loading and
146 * refuse to attach if the adapter doesn't support HWMON class of devices.
147 * See also Documentation/i2c/porting-clients. */
148static struct i2c_pxa_platform_data xcep_i2c_platform_data = {
149 .class = I2C_CLASS_HWMON
150};
151
152
153static mfp_cfg_t xcep_pin_config[] __initdata = {
154 GPIO79_nCS_3, /* SMC 91C111 chip select. */
155 GPIO80_nCS_4, /* CPLD chip select. */
156 /* SSP communication to MSP430 */
157 GPIO23_SSP1_SCLK,
158 GPIO24_SSP1_SFRM,
159 GPIO25_SSP1_TXD,
160 GPIO26_SSP1_RXD,
161 GPIO27_SSP1_EXTCLK
162};
163
164static void __init xcep_init(void)
165{
166 pxa2xx_mfp_config(ARRAY_AND_SIZE(xcep_pin_config));
167
168 /* See Intel XScale Developer's Guide for details */
169 /* Set RDF and RDN to appropriate values (chip select 3 (smc91x)) */
170 MSC1 = (MSC1 & 0xffff) | 0xD5540000;
171 /* Set RDF and RDN to appropriate values (chip select 5 (fpga)) */
172 MSC2 = (MSC2 & 0xffff) | 0x72A00000;
173
174 platform_add_devices(ARRAY_AND_SIZE(devices));
175 pxa_set_i2c_info(&xcep_i2c_platform_data);
176}
177
178MACHINE_START(XCEP, "Iskratel XCEP")
179 .phys_io = 0x40000000,
180 .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
181 .boot_params = 0xa0000100,
182 .init_machine = xcep_init,
183 .map_io = pxa_map_io,
184 .init_irq = pxa25x_init_irq,
185 .timer = &pxa_timer,
186MACHINE_END
187
diff --git a/arch/arm/mach-pxa/zylonite.c b/arch/arm/mach-pxa/zylonite.c
index 218d2001f1df..09784d3954e4 100644
--- a/arch/arm/mach-pxa/zylonite.c
+++ b/arch/arm/mach-pxa/zylonite.c
@@ -290,6 +290,9 @@ static struct pxamci_platform_data zylonite_mci_platform_data = {
290 .init = zylonite_mci_init, 290 .init = zylonite_mci_init,
291 .exit = zylonite_mci_exit, 291 .exit = zylonite_mci_exit,
292 .get_ro = zylonite_mci_ro, 292 .get_ro = zylonite_mci_ro,
293 .gpio_card_detect = -1,
294 .gpio_card_ro = -1,
295 .gpio_power = -1,
293}; 296};
294 297
295static struct pxamci_platform_data zylonite_mci2_platform_data = { 298static struct pxamci_platform_data zylonite_mci2_platform_data = {
diff --git a/arch/arm/mach-realview/core.c b/arch/arm/mach-realview/core.c
index dc3519c50ab2..a2083b60e3fb 100644
--- a/arch/arm/mach-realview/core.c
+++ b/arch/arm/mach-realview/core.c
@@ -30,6 +30,7 @@
30#include <linux/io.h> 30#include <linux/io.h>
31#include <linux/smsc911x.h> 31#include <linux/smsc911x.h>
32#include <linux/ata_platform.h> 32#include <linux/ata_platform.h>
33#include <linux/amba/mmci.h>
33 34
34#include <asm/clkdev.h> 35#include <asm/clkdev.h>
35#include <asm/system.h> 36#include <asm/system.h>
@@ -44,7 +45,6 @@
44#include <asm/mach/flash.h> 45#include <asm/mach/flash.h>
45#include <asm/mach/irq.h> 46#include <asm/mach/irq.h>
46#include <asm/mach/map.h> 47#include <asm/mach/map.h>
47#include <asm/mach/mmc.h>
48 48
49#include <asm/hardware/gic.h> 49#include <asm/hardware/gic.h>
50 50
@@ -237,14 +237,14 @@ static unsigned int realview_mmc_status(struct device *dev)
237 return readl(REALVIEW_SYSMCI) & mask; 237 return readl(REALVIEW_SYSMCI) & mask;
238} 238}
239 239
240struct mmc_platform_data realview_mmc0_plat_data = { 240struct mmci_platform_data realview_mmc0_plat_data = {
241 .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34, 241 .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34,
242 .status = realview_mmc_status, 242 .status = realview_mmc_status,
243 .gpio_wp = 17, 243 .gpio_wp = 17,
244 .gpio_cd = 16, 244 .gpio_cd = 16,
245}; 245};
246 246
247struct mmc_platform_data realview_mmc1_plat_data = { 247struct mmci_platform_data realview_mmc1_plat_data = {
248 .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34, 248 .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34,
249 .status = realview_mmc_status, 249 .status = realview_mmc_status,
250 .gpio_wp = 19, 250 .gpio_wp = 19,
@@ -296,31 +296,31 @@ static struct clk ref24_clk = {
296 296
297static struct clk_lookup lookups[] = { 297static struct clk_lookup lookups[] = {
298 { /* UART0 */ 298 { /* UART0 */
299 .dev_id = "dev:f1", 299 .dev_id = "dev:uart0",
300 .clk = &ref24_clk, 300 .clk = &ref24_clk,
301 }, { /* UART1 */ 301 }, { /* UART1 */
302 .dev_id = "dev:f2", 302 .dev_id = "dev:uart1",
303 .clk = &ref24_clk, 303 .clk = &ref24_clk,
304 }, { /* UART2 */ 304 }, { /* UART2 */
305 .dev_id = "dev:f3", 305 .dev_id = "dev:uart2",
306 .clk = &ref24_clk, 306 .clk = &ref24_clk,
307 }, { /* UART3 */ 307 }, { /* UART3 */
308 .dev_id = "fpga:09", 308 .dev_id = "fpga:uart3",
309 .clk = &ref24_clk, 309 .clk = &ref24_clk,
310 }, { /* KMI0 */ 310 }, { /* KMI0 */
311 .dev_id = "fpga:06", 311 .dev_id = "fpga:kmi0",
312 .clk = &ref24_clk, 312 .clk = &ref24_clk,
313 }, { /* KMI1 */ 313 }, { /* KMI1 */
314 .dev_id = "fpga:07", 314 .dev_id = "fpga:kmi1",
315 .clk = &ref24_clk, 315 .clk = &ref24_clk,
316 }, { /* MMC0 */ 316 }, { /* MMC0 */
317 .dev_id = "fpga:05", 317 .dev_id = "fpga:mmc0",
318 .clk = &ref24_clk, 318 .clk = &ref24_clk,
319 }, { /* EB:CLCD */ 319 }, { /* EB:CLCD */
320 .dev_id = "dev:20", 320 .dev_id = "dev:clcd",
321 .clk = &oscvco_clk, 321 .clk = &oscvco_clk,
322 }, { /* PB:CLCD */ 322 }, { /* PB:CLCD */
323 .dev_id = "issp:20", 323 .dev_id = "issp:clcd",
324 .clk = &oscvco_clk, 324 .clk = &oscvco_clk,
325 } 325 }
326}; 326};
diff --git a/arch/arm/mach-realview/core.h b/arch/arm/mach-realview/core.h
index 59a337ba4be7..46cd6acb4d40 100644
--- a/arch/arm/mach-realview/core.h
+++ b/arch/arm/mach-realview/core.h
@@ -47,8 +47,8 @@ static struct amba_device name##_device = { \
47extern struct platform_device realview_flash_device; 47extern struct platform_device realview_flash_device;
48extern struct platform_device realview_cf_device; 48extern struct platform_device realview_cf_device;
49extern struct platform_device realview_i2c_device; 49extern struct platform_device realview_i2c_device;
50extern struct mmc_platform_data realview_mmc0_plat_data; 50extern struct mmci_platform_data realview_mmc0_plat_data;
51extern struct mmc_platform_data realview_mmc1_plat_data; 51extern struct mmci_platform_data realview_mmc1_plat_data;
52extern struct clcd_board clcd_plat_data; 52extern struct clcd_board clcd_plat_data;
53extern void __iomem *gic_cpu_base_addr; 53extern void __iomem *gic_cpu_base_addr;
54extern void __iomem *timer0_va_base; 54extern void __iomem *timer0_va_base;
diff --git a/arch/arm/mach-realview/realview_eb.c b/arch/arm/mach-realview/realview_eb.c
index abd13b448671..1d65e64ae571 100644
--- a/arch/arm/mach-realview/realview_eb.c
+++ b/arch/arm/mach-realview/realview_eb.c
@@ -24,6 +24,7 @@
24#include <linux/sysdev.h> 24#include <linux/sysdev.h>
25#include <linux/amba/bus.h> 25#include <linux/amba/bus.h>
26#include <linux/amba/pl061.h> 26#include <linux/amba/pl061.h>
27#include <linux/amba/mmci.h>
27#include <linux/io.h> 28#include <linux/io.h>
28 29
29#include <mach/hardware.h> 30#include <mach/hardware.h>
@@ -37,7 +38,6 @@
37 38
38#include <asm/mach/arch.h> 39#include <asm/mach/arch.h>
39#include <asm/mach/map.h> 40#include <asm/mach/map.h>
40#include <asm/mach/mmc.h>
41#include <asm/mach/time.h> 41#include <asm/mach/time.h>
42 42
43#include <mach/board-eb.h> 43#include <mach/board-eb.h>
@@ -193,27 +193,27 @@ static struct pl061_platform_data gpio2_plat_data = {
193#define EB_SSP_DMA { 9, 8 } 193#define EB_SSP_DMA { 9, 8 }
194 194
195/* FPGA Primecells */ 195/* FPGA Primecells */
196AMBA_DEVICE(aaci, "fpga:04", AACI, NULL); 196AMBA_DEVICE(aaci, "fpga:aaci", AACI, NULL);
197AMBA_DEVICE(mmc0, "fpga:05", MMCI0, &realview_mmc0_plat_data); 197AMBA_DEVICE(mmc0, "fpga:mmc0", MMCI0, &realview_mmc0_plat_data);
198AMBA_DEVICE(kmi0, "fpga:06", KMI0, NULL); 198AMBA_DEVICE(kmi0, "fpga:kmi0", KMI0, NULL);
199AMBA_DEVICE(kmi1, "fpga:07", KMI1, NULL); 199AMBA_DEVICE(kmi1, "fpga:kmi1", KMI1, NULL);
200AMBA_DEVICE(uart3, "fpga:09", EB_UART3, NULL); 200AMBA_DEVICE(uart3, "fpga:uart3", EB_UART3, NULL);
201 201
202/* DevChip Primecells */ 202/* DevChip Primecells */
203AMBA_DEVICE(smc, "dev:00", EB_SMC, NULL); 203AMBA_DEVICE(smc, "dev:smc", EB_SMC, NULL);
204AMBA_DEVICE(clcd, "dev:20", EB_CLCD, &clcd_plat_data); 204AMBA_DEVICE(clcd, "dev:clcd", EB_CLCD, &clcd_plat_data);
205AMBA_DEVICE(dmac, "dev:30", DMAC, NULL); 205AMBA_DEVICE(dmac, "dev:dmac", DMAC, NULL);
206AMBA_DEVICE(sctl, "dev:e0", SCTL, NULL); 206AMBA_DEVICE(sctl, "dev:sctl", SCTL, NULL);
207AMBA_DEVICE(wdog, "dev:e1", EB_WATCHDOG, NULL); 207AMBA_DEVICE(wdog, "dev:wdog", EB_WATCHDOG, NULL);
208AMBA_DEVICE(gpio0, "dev:e4", EB_GPIO0, &gpio0_plat_data); 208AMBA_DEVICE(gpio0, "dev:gpio0", EB_GPIO0, &gpio0_plat_data);
209AMBA_DEVICE(gpio1, "dev:e5", GPIO1, &gpio1_plat_data); 209AMBA_DEVICE(gpio1, "dev:gpio1", GPIO1, &gpio1_plat_data);
210AMBA_DEVICE(gpio2, "dev:e6", GPIO2, &gpio2_plat_data); 210AMBA_DEVICE(gpio2, "dev:gpio2", GPIO2, &gpio2_plat_data);
211AMBA_DEVICE(rtc, "dev:e8", EB_RTC, NULL); 211AMBA_DEVICE(rtc, "dev:rtc", EB_RTC, NULL);
212AMBA_DEVICE(sci0, "dev:f0", SCI, NULL); 212AMBA_DEVICE(sci0, "dev:sci0", SCI, NULL);
213AMBA_DEVICE(uart0, "dev:f1", EB_UART0, NULL); 213AMBA_DEVICE(uart0, "dev:uart0", EB_UART0, NULL);
214AMBA_DEVICE(uart1, "dev:f2", EB_UART1, NULL); 214AMBA_DEVICE(uart1, "dev:uart1", EB_UART1, NULL);
215AMBA_DEVICE(uart2, "dev:f3", EB_UART2, NULL); 215AMBA_DEVICE(uart2, "dev:uart2", EB_UART2, NULL);
216AMBA_DEVICE(ssp0, "dev:f4", EB_SSP, NULL); 216AMBA_DEVICE(ssp0, "dev:ssp0", EB_SSP, NULL);
217 217
218static struct amba_device *amba_devs[] __initdata = { 218static struct amba_device *amba_devs[] __initdata = {
219 &dmac_device, 219 &dmac_device,
diff --git a/arch/arm/mach-realview/realview_pb1176.c b/arch/arm/mach-realview/realview_pb1176.c
index 17fbb0e889b6..2817fe099319 100644
--- a/arch/arm/mach-realview/realview_pb1176.c
+++ b/arch/arm/mach-realview/realview_pb1176.c
@@ -24,6 +24,7 @@
24#include <linux/sysdev.h> 24#include <linux/sysdev.h>
25#include <linux/amba/bus.h> 25#include <linux/amba/bus.h>
26#include <linux/amba/pl061.h> 26#include <linux/amba/pl061.h>
27#include <linux/amba/mmci.h>
27#include <linux/io.h> 28#include <linux/io.h>
28 29
29#include <mach/hardware.h> 30#include <mach/hardware.h>
@@ -37,7 +38,6 @@
37#include <asm/mach/arch.h> 38#include <asm/mach/arch.h>
38#include <asm/mach/flash.h> 39#include <asm/mach/flash.h>
39#include <asm/mach/map.h> 40#include <asm/mach/map.h>
40#include <asm/mach/mmc.h>
41#include <asm/mach/time.h> 41#include <asm/mach/time.h>
42 42
43#include <mach/board-pb1176.h> 43#include <mach/board-pb1176.h>
@@ -170,29 +170,29 @@ static struct pl061_platform_data gpio2_plat_data = {
170#define PB1176_SSP_DMA { 9, 8 } 170#define PB1176_SSP_DMA { 9, 8 }
171 171
172/* FPGA Primecells */ 172/* FPGA Primecells */
173AMBA_DEVICE(aaci, "fpga:04", AACI, NULL); 173AMBA_DEVICE(aaci, "fpga:aaci", AACI, NULL);
174AMBA_DEVICE(mmc0, "fpga:05", MMCI0, &realview_mmc0_plat_data); 174AMBA_DEVICE(mmc0, "fpga:mmc0", MMCI0, &realview_mmc0_plat_data);
175AMBA_DEVICE(kmi0, "fpga:06", KMI0, NULL); 175AMBA_DEVICE(kmi0, "fpga:kmi0", KMI0, NULL);
176AMBA_DEVICE(kmi1, "fpga:07", KMI1, NULL); 176AMBA_DEVICE(kmi1, "fpga:kmi1", KMI1, NULL);
177AMBA_DEVICE(uart3, "fpga:09", PB1176_UART3, NULL); 177AMBA_DEVICE(uart3, "fpga:uart3", PB1176_UART3, NULL);
178 178
179/* DevChip Primecells */ 179/* DevChip Primecells */
180AMBA_DEVICE(smc, "dev:00", PB1176_SMC, NULL); 180AMBA_DEVICE(smc, "dev:smc", PB1176_SMC, NULL);
181AMBA_DEVICE(sctl, "dev:e0", SCTL, NULL); 181AMBA_DEVICE(sctl, "dev:sctl", SCTL, NULL);
182AMBA_DEVICE(wdog, "dev:e1", PB1176_WATCHDOG, NULL); 182AMBA_DEVICE(wdog, "dev:wdog", PB1176_WATCHDOG, NULL);
183AMBA_DEVICE(gpio0, "dev:e4", PB1176_GPIO0, &gpio0_plat_data); 183AMBA_DEVICE(gpio0, "dev:gpio0", PB1176_GPIO0, &gpio0_plat_data);
184AMBA_DEVICE(gpio1, "dev:e5", GPIO1, &gpio1_plat_data); 184AMBA_DEVICE(gpio1, "dev:gpio1", GPIO1, &gpio1_plat_data);
185AMBA_DEVICE(gpio2, "dev:e6", GPIO2, &gpio2_plat_data); 185AMBA_DEVICE(gpio2, "dev:gpio2", GPIO2, &gpio2_plat_data);
186AMBA_DEVICE(rtc, "dev:e8", PB1176_RTC, NULL); 186AMBA_DEVICE(rtc, "dev:rtc", PB1176_RTC, NULL);
187AMBA_DEVICE(sci0, "dev:f0", SCI, NULL); 187AMBA_DEVICE(sci0, "dev:sci0", SCI, NULL);
188AMBA_DEVICE(uart0, "dev:f1", PB1176_UART0, NULL); 188AMBA_DEVICE(uart0, "dev:uart0", PB1176_UART0, NULL);
189AMBA_DEVICE(uart1, "dev:f2", PB1176_UART1, NULL); 189AMBA_DEVICE(uart1, "dev:uart1", PB1176_UART1, NULL);
190AMBA_DEVICE(uart2, "dev:f3", PB1176_UART2, NULL); 190AMBA_DEVICE(uart2, "dev:uart2", PB1176_UART2, NULL);
191AMBA_DEVICE(ssp0, "dev:f4", PB1176_SSP, NULL); 191AMBA_DEVICE(ssp0, "dev:ssp0", PB1176_SSP, NULL);
192 192
193/* Primecells on the NEC ISSP chip */ 193/* Primecells on the NEC ISSP chip */
194AMBA_DEVICE(clcd, "issp:20", PB1176_CLCD, &clcd_plat_data); 194AMBA_DEVICE(clcd, "issp:clcd", PB1176_CLCD, &clcd_plat_data);
195//AMBA_DEVICE(dmac, "issp:30", PB1176_DMAC, NULL); 195//AMBA_DEVICE(dmac, "issp:dmac", PB1176_DMAC, NULL);
196 196
197static struct amba_device *amba_devs[] __initdata = { 197static struct amba_device *amba_devs[] __initdata = {
198// &dmac_device, 198// &dmac_device,
diff --git a/arch/arm/mach-realview/realview_pb11mp.c b/arch/arm/mach-realview/realview_pb11mp.c
index fdd042b85f40..94680fcf726d 100644
--- a/arch/arm/mach-realview/realview_pb11mp.c
+++ b/arch/arm/mach-realview/realview_pb11mp.c
@@ -24,6 +24,7 @@
24#include <linux/sysdev.h> 24#include <linux/sysdev.h>
25#include <linux/amba/bus.h> 25#include <linux/amba/bus.h>
26#include <linux/amba/pl061.h> 26#include <linux/amba/pl061.h>
27#include <linux/amba/mmci.h>
27#include <linux/io.h> 28#include <linux/io.h>
28 29
29#include <mach/hardware.h> 30#include <mach/hardware.h>
@@ -38,7 +39,6 @@
38#include <asm/mach/arch.h> 39#include <asm/mach/arch.h>
39#include <asm/mach/flash.h> 40#include <asm/mach/flash.h>
40#include <asm/mach/map.h> 41#include <asm/mach/map.h>
41#include <asm/mach/mmc.h>
42#include <asm/mach/time.h> 42#include <asm/mach/time.h>
43 43
44#include <mach/board-pb11mp.h> 44#include <mach/board-pb11mp.h>
@@ -172,29 +172,29 @@ static struct pl061_platform_data gpio2_plat_data = {
172#define PB11MP_SSP_DMA { 9, 8 } 172#define PB11MP_SSP_DMA { 9, 8 }
173 173
174/* FPGA Primecells */ 174/* FPGA Primecells */
175AMBA_DEVICE(aaci, "fpga:04", AACI, NULL); 175AMBA_DEVICE(aaci, "fpga:aaci", AACI, NULL);
176AMBA_DEVICE(mmc0, "fpga:05", MMCI0, &realview_mmc0_plat_data); 176AMBA_DEVICE(mmc0, "fpga:mmc0", MMCI0, &realview_mmc0_plat_data);
177AMBA_DEVICE(kmi0, "fpga:06", KMI0, NULL); 177AMBA_DEVICE(kmi0, "fpga:kmi0", KMI0, NULL);
178AMBA_DEVICE(kmi1, "fpga:07", KMI1, NULL); 178AMBA_DEVICE(kmi1, "fpga:kmi1", KMI1, NULL);
179AMBA_DEVICE(uart3, "fpga:09", PB11MP_UART3, NULL); 179AMBA_DEVICE(uart3, "fpga:uart3", PB11MP_UART3, NULL);
180 180
181/* DevChip Primecells */ 181/* DevChip Primecells */
182AMBA_DEVICE(smc, "dev:00", PB11MP_SMC, NULL); 182AMBA_DEVICE(smc, "dev:smc", PB11MP_SMC, NULL);
183AMBA_DEVICE(sctl, "dev:e0", SCTL, NULL); 183AMBA_DEVICE(sctl, "dev:sctl", SCTL, NULL);
184AMBA_DEVICE(wdog, "dev:e1", PB11MP_WATCHDOG, NULL); 184AMBA_DEVICE(wdog, "dev:wdog", PB11MP_WATCHDOG, NULL);
185AMBA_DEVICE(gpio0, "dev:e4", PB11MP_GPIO0, &gpio0_plat_data); 185AMBA_DEVICE(gpio0, "dev:gpio0", PB11MP_GPIO0, &gpio0_plat_data);
186AMBA_DEVICE(gpio1, "dev:e5", GPIO1, &gpio1_plat_data); 186AMBA_DEVICE(gpio1, "dev:gpio1", GPIO1, &gpio1_plat_data);
187AMBA_DEVICE(gpio2, "dev:e6", GPIO2, &gpio2_plat_data); 187AMBA_DEVICE(gpio2, "dev:gpio2", GPIO2, &gpio2_plat_data);
188AMBA_DEVICE(rtc, "dev:e8", PB11MP_RTC, NULL); 188AMBA_DEVICE(rtc, "dev:rtc", PB11MP_RTC, NULL);
189AMBA_DEVICE(sci0, "dev:f0", SCI, NULL); 189AMBA_DEVICE(sci0, "dev:sci0", SCI, NULL);
190AMBA_DEVICE(uart0, "dev:f1", PB11MP_UART0, NULL); 190AMBA_DEVICE(uart0, "dev:uart0", PB11MP_UART0, NULL);
191AMBA_DEVICE(uart1, "dev:f2", PB11MP_UART1, NULL); 191AMBA_DEVICE(uart1, "dev:uart1", PB11MP_UART1, NULL);
192AMBA_DEVICE(uart2, "dev:f3", PB11MP_UART2, NULL); 192AMBA_DEVICE(uart2, "dev:uart2", PB11MP_UART2, NULL);
193AMBA_DEVICE(ssp0, "dev:f4", PB11MP_SSP, NULL); 193AMBA_DEVICE(ssp0, "dev:ssp0", PB11MP_SSP, NULL);
194 194
195/* Primecells on the NEC ISSP chip */ 195/* Primecells on the NEC ISSP chip */
196AMBA_DEVICE(clcd, "issp:20", PB11MP_CLCD, &clcd_plat_data); 196AMBA_DEVICE(clcd, "issp:clcd", PB11MP_CLCD, &clcd_plat_data);
197AMBA_DEVICE(dmac, "issp:30", DMAC, NULL); 197AMBA_DEVICE(dmac, "issp:dmac", DMAC, NULL);
198 198
199static struct amba_device *amba_devs[] __initdata = { 199static struct amba_device *amba_devs[] __initdata = {
200 &dmac_device, 200 &dmac_device,
diff --git a/arch/arm/mach-realview/realview_pba8.c b/arch/arm/mach-realview/realview_pba8.c
index 70bba9900d97..941beb2b9709 100644
--- a/arch/arm/mach-realview/realview_pba8.c
+++ b/arch/arm/mach-realview/realview_pba8.c
@@ -24,6 +24,7 @@
24#include <linux/sysdev.h> 24#include <linux/sysdev.h>
25#include <linux/amba/bus.h> 25#include <linux/amba/bus.h>
26#include <linux/amba/pl061.h> 26#include <linux/amba/pl061.h>
27#include <linux/amba/mmci.h>
27#include <linux/io.h> 28#include <linux/io.h>
28 29
29#include <asm/irq.h> 30#include <asm/irq.h>
@@ -34,7 +35,6 @@
34 35
35#include <asm/mach/arch.h> 36#include <asm/mach/arch.h>
36#include <asm/mach/map.h> 37#include <asm/mach/map.h>
37#include <asm/mach/mmc.h>
38#include <asm/mach/time.h> 38#include <asm/mach/time.h>
39 39
40#include <mach/hardware.h> 40#include <mach/hardware.h>
@@ -162,29 +162,29 @@ static struct pl061_platform_data gpio2_plat_data = {
162#define PBA8_SSP_DMA { 9, 8 } 162#define PBA8_SSP_DMA { 9, 8 }
163 163
164/* FPGA Primecells */ 164/* FPGA Primecells */
165AMBA_DEVICE(aaci, "fpga:04", AACI, NULL); 165AMBA_DEVICE(aaci, "fpga:aaci", AACI, NULL);
166AMBA_DEVICE(mmc0, "fpga:05", MMCI0, &realview_mmc0_plat_data); 166AMBA_DEVICE(mmc0, "fpga:mmc0", MMCI0, &realview_mmc0_plat_data);
167AMBA_DEVICE(kmi0, "fpga:06", KMI0, NULL); 167AMBA_DEVICE(kmi0, "fpga:kmi0", KMI0, NULL);
168AMBA_DEVICE(kmi1, "fpga:07", KMI1, NULL); 168AMBA_DEVICE(kmi1, "fpga:kmi1", KMI1, NULL);
169AMBA_DEVICE(uart3, "fpga:09", PBA8_UART3, NULL); 169AMBA_DEVICE(uart3, "fpga:uart3", PBA8_UART3, NULL);
170 170
171/* DevChip Primecells */ 171/* DevChip Primecells */
172AMBA_DEVICE(smc, "dev:00", PBA8_SMC, NULL); 172AMBA_DEVICE(smc, "dev:smc", PBA8_SMC, NULL);
173AMBA_DEVICE(sctl, "dev:e0", SCTL, NULL); 173AMBA_DEVICE(sctl, "dev:sctl", SCTL, NULL);
174AMBA_DEVICE(wdog, "dev:e1", PBA8_WATCHDOG, NULL); 174AMBA_DEVICE(wdog, "dev:wdog", PBA8_WATCHDOG, NULL);
175AMBA_DEVICE(gpio0, "dev:e4", PBA8_GPIO0, &gpio0_plat_data); 175AMBA_DEVICE(gpio0, "dev:gpio0", PBA8_GPIO0, &gpio0_plat_data);
176AMBA_DEVICE(gpio1, "dev:e5", GPIO1, &gpio1_plat_data); 176AMBA_DEVICE(gpio1, "dev:gpio1", GPIO1, &gpio1_plat_data);
177AMBA_DEVICE(gpio2, "dev:e6", GPIO2, &gpio2_plat_data); 177AMBA_DEVICE(gpio2, "dev:gpio2", GPIO2, &gpio2_plat_data);
178AMBA_DEVICE(rtc, "dev:e8", PBA8_RTC, NULL); 178AMBA_DEVICE(rtc, "dev:rtc", PBA8_RTC, NULL);
179AMBA_DEVICE(sci0, "dev:f0", SCI, NULL); 179AMBA_DEVICE(sci0, "dev:sci0", SCI, NULL);
180AMBA_DEVICE(uart0, "dev:f1", PBA8_UART0, NULL); 180AMBA_DEVICE(uart0, "dev:uart0", PBA8_UART0, NULL);
181AMBA_DEVICE(uart1, "dev:f2", PBA8_UART1, NULL); 181AMBA_DEVICE(uart1, "dev:uart1", PBA8_UART1, NULL);
182AMBA_DEVICE(uart2, "dev:f3", PBA8_UART2, NULL); 182AMBA_DEVICE(uart2, "dev:uart2", PBA8_UART2, NULL);
183AMBA_DEVICE(ssp0, "dev:f4", PBA8_SSP, NULL); 183AMBA_DEVICE(ssp0, "dev:ssp0", PBA8_SSP, NULL);
184 184
185/* Primecells on the NEC ISSP chip */ 185/* Primecells on the NEC ISSP chip */
186AMBA_DEVICE(clcd, "issp:20", PBA8_CLCD, &clcd_plat_data); 186AMBA_DEVICE(clcd, "issp:clcd", PBA8_CLCD, &clcd_plat_data);
187AMBA_DEVICE(dmac, "issp:30", DMAC, NULL); 187AMBA_DEVICE(dmac, "issp:dmac", DMAC, NULL);
188 188
189static struct amba_device *amba_devs[] __initdata = { 189static struct amba_device *amba_devs[] __initdata = {
190 &dmac_device, 190 &dmac_device,
diff --git a/arch/arm/mach-realview/realview_pbx.c b/arch/arm/mach-realview/realview_pbx.c
index ce6c5d25fbef..7e4bc6cdca52 100644
--- a/arch/arm/mach-realview/realview_pbx.c
+++ b/arch/arm/mach-realview/realview_pbx.c
@@ -23,6 +23,7 @@
23#include <linux/sysdev.h> 23#include <linux/sysdev.h>
24#include <linux/amba/bus.h> 24#include <linux/amba/bus.h>
25#include <linux/amba/pl061.h> 25#include <linux/amba/pl061.h>
26#include <linux/amba/mmci.h>
26#include <linux/io.h> 27#include <linux/io.h>
27 28
28#include <asm/irq.h> 29#include <asm/irq.h>
@@ -34,7 +35,6 @@
34 35
35#include <asm/mach/arch.h> 36#include <asm/mach/arch.h>
36#include <asm/mach/map.h> 37#include <asm/mach/map.h>
37#include <asm/mach/mmc.h>
38#include <asm/mach/time.h> 38#include <asm/mach/time.h>
39 39
40#include <mach/hardware.h> 40#include <mach/hardware.h>
@@ -182,29 +182,29 @@ static struct pl061_platform_data gpio2_plat_data = {
182#define PBX_SSP_DMA { 9, 8 } 182#define PBX_SSP_DMA { 9, 8 }
183 183
184/* FPGA Primecells */ 184/* FPGA Primecells */
185AMBA_DEVICE(aaci, "fpga:04", AACI, NULL); 185AMBA_DEVICE(aaci, "fpga:aaci", AACI, NULL);
186AMBA_DEVICE(mmc0, "fpga:05", MMCI0, &realview_mmc0_plat_data); 186AMBA_DEVICE(mmc0, "fpga:mmc0", MMCI0, &realview_mmc0_plat_data);
187AMBA_DEVICE(kmi0, "fpga:06", KMI0, NULL); 187AMBA_DEVICE(kmi0, "fpga:kmi0", KMI0, NULL);
188AMBA_DEVICE(kmi1, "fpga:07", KMI1, NULL); 188AMBA_DEVICE(kmi1, "fpga:kmi1", KMI1, NULL);
189AMBA_DEVICE(uart3, "fpga:09", PBX_UART3, NULL); 189AMBA_DEVICE(uart3, "fpga:uart3", PBX_UART3, NULL);
190 190
191/* DevChip Primecells */ 191/* DevChip Primecells */
192AMBA_DEVICE(smc, "dev:00", PBX_SMC, NULL); 192AMBA_DEVICE(smc, "dev:smc", PBX_SMC, NULL);
193AMBA_DEVICE(sctl, "dev:e0", SCTL, NULL); 193AMBA_DEVICE(sctl, "dev:sctl", SCTL, NULL);
194AMBA_DEVICE(wdog, "dev:e1", PBX_WATCHDOG, NULL); 194AMBA_DEVICE(wdog, "dev:wdog", PBX_WATCHDOG, NULL);
195AMBA_DEVICE(gpio0, "dev:e4", PBX_GPIO0, &gpio0_plat_data); 195AMBA_DEVICE(gpio0, "dev:gpio0", PBX_GPIO0, &gpio0_plat_data);
196AMBA_DEVICE(gpio1, "dev:e5", GPIO1, &gpio1_plat_data); 196AMBA_DEVICE(gpio1, "dev:gpio1", GPIO1, &gpio1_plat_data);
197AMBA_DEVICE(gpio2, "dev:e6", GPIO2, &gpio2_plat_data); 197AMBA_DEVICE(gpio2, "dev:gpio2", GPIO2, &gpio2_plat_data);
198AMBA_DEVICE(rtc, "dev:e8", PBX_RTC, NULL); 198AMBA_DEVICE(rtc, "dev:rtc", PBX_RTC, NULL);
199AMBA_DEVICE(sci0, "dev:f0", SCI, NULL); 199AMBA_DEVICE(sci0, "dev:sci0", SCI, NULL);
200AMBA_DEVICE(uart0, "dev:f1", PBX_UART0, NULL); 200AMBA_DEVICE(uart0, "dev:uart0", PBX_UART0, NULL);
201AMBA_DEVICE(uart1, "dev:f2", PBX_UART1, NULL); 201AMBA_DEVICE(uart1, "dev:uart1", PBX_UART1, NULL);
202AMBA_DEVICE(uart2, "dev:f3", PBX_UART2, NULL); 202AMBA_DEVICE(uart2, "dev:uart2", PBX_UART2, NULL);
203AMBA_DEVICE(ssp0, "dev:f4", PBX_SSP, NULL); 203AMBA_DEVICE(ssp0, "dev:ssp0", PBX_SSP, NULL);
204 204
205/* Primecells on the NEC ISSP chip */ 205/* Primecells on the NEC ISSP chip */
206AMBA_DEVICE(clcd, "issp:20", PBX_CLCD, &clcd_plat_data); 206AMBA_DEVICE(clcd, "issp:clcd", PBX_CLCD, &clcd_plat_data);
207AMBA_DEVICE(dmac, "issp:30", DMAC, NULL); 207AMBA_DEVICE(dmac, "issp:dmac", DMAC, NULL);
208 208
209static struct amba_device *amba_devs[] __initdata = { 209static struct amba_device *amba_devs[] __initdata = {
210 &dmac_device, 210 &dmac_device,
diff --git a/arch/arm/mach-s3c2410/Kconfig b/arch/arm/mach-s3c2410/Kconfig
index d8c023d4df30..3d4e9da3fa52 100644
--- a/arch/arm/mach-s3c2410/Kconfig
+++ b/arch/arm/mach-s3c2410/Kconfig
@@ -77,6 +77,7 @@ config ARCH_H1940
77 select CPU_S3C2410 77 select CPU_S3C2410
78 select PM_H1940 if PM 78 select PM_H1940 if PM
79 select S3C_DEV_USB_HOST 79 select S3C_DEV_USB_HOST
80 select S3C_DEV_NAND
80 help 81 help
81 Say Y here if you are using the HP IPAQ H1940 82 Say Y here if you are using the HP IPAQ H1940
82 83
@@ -89,6 +90,7 @@ config MACH_N30
89 bool "Acer N30 family" 90 bool "Acer N30 family"
90 select CPU_S3C2410 91 select CPU_S3C2410
91 select S3C_DEV_USB_HOST 92 select S3C_DEV_USB_HOST
93 select S3C_DEV_NAND
92 help 94 help
93 Say Y here if you want suppt for the Acer N30, Acer N35, 95 Say Y here if you want suppt for the Acer N30, Acer N35,
94 Navman PiN570, Yakumo AlphaX or Airis NC05 PDAs. 96 Navman PiN570, Yakumo AlphaX or Airis NC05 PDAs.
@@ -103,6 +105,7 @@ config ARCH_BAST
103 select S3C24XX_DCLK 105 select S3C24XX_DCLK
104 select ISA 106 select ISA
105 select S3C_DEV_USB_HOST 107 select S3C_DEV_USB_HOST
108 select S3C_DEV_NAND
106 help 109 help
107 Say Y here if you are using the Simtec Electronics EB2410ITX 110 Say Y here if you are using the Simtec Electronics EB2410ITX
108 development board (also known as BAST) 111 development board (also known as BAST)
@@ -111,6 +114,7 @@ config MACH_OTOM
111 bool "NexVision OTOM Board" 114 bool "NexVision OTOM Board"
112 select CPU_S3C2410 115 select CPU_S3C2410
113 select S3C_DEV_USB_HOST 116 select S3C_DEV_USB_HOST
117 select S3C_DEV_NAND
114 help 118 help
115 Say Y here if you are using the Nex Vision OTOM board 119 Say Y here if you are using the Nex Vision OTOM board
116 120
@@ -154,6 +158,7 @@ config MACH_QT2410
154 bool "QT2410" 158 bool "QT2410"
155 select CPU_S3C2410 159 select CPU_S3C2410
156 select S3C_DEV_USB_HOST 160 select S3C_DEV_USB_HOST
161 select S3C_DEV_NAND
157 help 162 help
158 Say Y here if you are using the Armzone QT2410 163 Say Y here if you are using the Armzone QT2410
159 164
diff --git a/arch/arm/mach-s3c2412/Kconfig b/arch/arm/mach-s3c2412/Kconfig
index 35c1bde89cf2..c2bdc4635d12 100644
--- a/arch/arm/mach-s3c2412/Kconfig
+++ b/arch/arm/mach-s3c2412/Kconfig
@@ -48,6 +48,7 @@ config MACH_JIVE
48 bool "Logitech Jive" 48 bool "Logitech Jive"
49 select CPU_S3C2412 49 select CPU_S3C2412
50 select S3C_DEV_USB_HOST 50 select S3C_DEV_USB_HOST
51 select S3C_DEV_NAND
51 help 52 help
52 Say Y here if you are using the Logitech Jive. 53 Say Y here if you are using the Logitech Jive.
53 54
@@ -61,6 +62,7 @@ config MACH_SMDK2413
61 select MACH_S3C2413 62 select MACH_S3C2413
62 select MACH_SMDK 63 select MACH_SMDK
63 select S3C_DEV_USB_HOST 64 select S3C_DEV_USB_HOST
65 select S3C_DEV_NAND
64 help 66 help
65 Say Y here if you are using an SMDK2413 67 Say Y here if you are using an SMDK2413
66 68
@@ -84,6 +86,7 @@ config MACH_VSTMS
84 bool "VMSTMS" 86 bool "VMSTMS"
85 select CPU_S3C2412 87 select CPU_S3C2412
86 select S3C_DEV_USB_HOST 88 select S3C_DEV_USB_HOST
89 select S3C_DEV_NAND
87 help 90 help
88 Say Y here if you are using an VSTMS board 91 Say Y here if you are using an VSTMS board
89 92
diff --git a/arch/arm/mach-s3c2440/Kconfig b/arch/arm/mach-s3c2440/Kconfig
index 8ae1b288f7fa..d7bba919a77e 100644
--- a/arch/arm/mach-s3c2440/Kconfig
+++ b/arch/arm/mach-s3c2440/Kconfig
@@ -48,6 +48,7 @@ config MACH_OSIRIS
48 select S3C2440_XTAL_12000000 48 select S3C2440_XTAL_12000000
49 select S3C2410_IOTIMING if S3C2440_CPUFREQ 49 select S3C2410_IOTIMING if S3C2440_CPUFREQ
50 select S3C_DEV_USB_HOST 50 select S3C_DEV_USB_HOST
51 select S3C_DEV_NAND
51 help 52 help
52 Say Y here if you are using the Simtec IM2440D20 module, also 53 Say Y here if you are using the Simtec IM2440D20 module, also
53 known as the Osiris. 54 known as the Osiris.
@@ -57,6 +58,7 @@ config MACH_RX3715
57 select CPU_S3C2440 58 select CPU_S3C2440
58 select S3C2440_XTAL_16934400 59 select S3C2440_XTAL_16934400
59 select PM_H1940 if PM 60 select PM_H1940 if PM
61 select S3C_DEV_NAND
60 help 62 help
61 Say Y here if you are using the HP iPAQ rx3715. 63 Say Y here if you are using the HP iPAQ rx3715.
62 64
@@ -66,6 +68,7 @@ config ARCH_S3C2440
66 select S3C2440_XTAL_16934400 68 select S3C2440_XTAL_16934400
67 select MACH_SMDK 69 select MACH_SMDK
68 select S3C_DEV_USB_HOST 70 select S3C_DEV_USB_HOST
71 select S3C_DEV_NAND
69 help 72 help
70 Say Y here if you are using the SMDK2440. 73 Say Y here if you are using the SMDK2440.
71 74
@@ -74,6 +77,7 @@ config MACH_NEXCODER_2440
74 select CPU_S3C2440 77 select CPU_S3C2440
75 select S3C2440_XTAL_12000000 78 select S3C2440_XTAL_12000000
76 select S3C_DEV_USB_HOST 79 select S3C_DEV_USB_HOST
80 select S3C_DEV_NAND
77 help 81 help
78 Say Y here if you are using the Nex Vision NEXCODER 2440 Light Board 82 Say Y here if you are using the Nex Vision NEXCODER 2440 Light Board
79 83
@@ -88,6 +92,7 @@ config MACH_AT2440EVB
88 bool "Avantech AT2440EVB development board" 92 bool "Avantech AT2440EVB development board"
89 select CPU_S3C2440 93 select CPU_S3C2440
90 select S3C_DEV_USB_HOST 94 select S3C_DEV_USB_HOST
95 select S3C_DEV_NAND
91 help 96 help
92 Say Y here if you are using the AT2440EVB development board 97 Say Y here if you are using the AT2440EVB development board
93 98
@@ -97,6 +102,7 @@ config MACH_MINI2440
97 select EEPROM_AT24 102 select EEPROM_AT24
98 select LEDS_TRIGGER_BACKLIGHT 103 select LEDS_TRIGGER_BACKLIGHT
99 select SND_S3C24XX_SOC_S3C24XX_UDA134X 104 select SND_S3C24XX_SOC_S3C24XX_UDA134X
105 select S3C_DEV_NAND
100 help 106 help
101 Say Y here to select support for the MINI2440. Is a 10cm x 10cm board 107 Say Y here to select support for the MINI2440. Is a 10cm x 10cm board
102 available via various sources. It can come with a 3.5" or 7" touch LCD. 108 available via various sources. It can come with a 3.5" or 7" touch LCD.
diff --git a/arch/arm/mach-s3c6400/Kconfig b/arch/arm/mach-s3c6400/Kconfig
index f5af212066c3..770b72067e3d 100644
--- a/arch/arm/mach-s3c6400/Kconfig
+++ b/arch/arm/mach-s3c6400/Kconfig
@@ -26,6 +26,7 @@ config MACH_SMDK6400
26 bool "SMDK6400" 26 bool "SMDK6400"
27 select CPU_S3C6400 27 select CPU_S3C6400
28 select S3C_DEV_HSMMC 28 select S3C_DEV_HSMMC
29 select S3C_DEV_NAND
29 select S3C6400_SETUP_SDHCI 30 select S3C6400_SETUP_SDHCI
30 help 31 help
31 Machine support for the Samsung SMDK6400 32 Machine support for the Samsung SMDK6400
diff --git a/arch/arm/mach-s3c6410/Kconfig b/arch/arm/mach-s3c6410/Kconfig
index f9d0f09f9761..53fc3ff657f7 100644
--- a/arch/arm/mach-s3c6410/Kconfig
+++ b/arch/arm/mach-s3c6410/Kconfig
@@ -102,6 +102,7 @@ config MACH_HMT
102 bool "Airgoo HMT" 102 bool "Airgoo HMT"
103 select CPU_S3C6410 103 select CPU_S3C6410
104 select S3C_DEV_FB 104 select S3C_DEV_FB
105 select S3C_DEV_NAND
105 select S3C_DEV_USB_HOST 106 select S3C_DEV_USB_HOST
106 select S3C64XX_SETUP_FB_24BPP 107 select S3C64XX_SETUP_FB_24BPP
107 select HAVE_PWM 108 select HAVE_PWM
diff --git a/arch/arm/mach-sa1100/dma.c b/arch/arm/mach-sa1100/dma.c
index 95f9c5a6d6d5..cb4521a6f42d 100644
--- a/arch/arm/mach-sa1100/dma.c
+++ b/arch/arm/mach-sa1100/dma.c
@@ -39,7 +39,7 @@ typedef struct {
39 39
40static sa1100_dma_t dma_chan[SA1100_DMA_CHANNELS]; 40static sa1100_dma_t dma_chan[SA1100_DMA_CHANNELS];
41 41
42static spinlock_t dma_list_lock; 42static DEFINE_SPINLOCK(dma_list_lock);
43 43
44 44
45static irqreturn_t dma_irq_handler(int irq, void *dev_id) 45static irqreturn_t dma_irq_handler(int irq, void *dev_id)
diff --git a/arch/arm/mach-u300/Kconfig b/arch/arm/mach-u300/Kconfig
index 337b9aabce49..801b21e7f677 100644
--- a/arch/arm/mach-u300/Kconfig
+++ b/arch/arm/mach-u300/Kconfig
@@ -81,6 +81,18 @@ config MACH_U300_SEMI_IS_SHARED
81 Memory Interface) from both from access and application 81 Memory Interface) from both from access and application
82 side. 82 side.
83 83
84config MACH_U300_SPIDUMMY
85 bool "SSP/SPI dummy chip"
86 select SPI
87 select SPI_MASTER
88 select SPI_PL022
89 help
90 This creates a small kernel module that creates a dummy
91 SPI device to be used for loopback tests. Regularly used
92 to test reference designs. If you're not testing SPI,
93 you don't need it. Selecting this will activate the
94 SPI framework and ARM PL022 support.
95
84comment "All the settings below must match the bootloader's settings" 96comment "All the settings below must match the bootloader's settings"
85 97
86config MACH_U300_ACCESS_MEM_SIZE 98config MACH_U300_ACCESS_MEM_SIZE
diff --git a/arch/arm/mach-u300/Makefile b/arch/arm/mach-u300/Makefile
index 24950e0df4b4..885b5c027c1e 100644
--- a/arch/arm/mach-u300/Makefile
+++ b/arch/arm/mach-u300/Makefile
@@ -9,3 +9,6 @@ obj- :=
9 9
10obj-$(CONFIG_ARCH_U300) += u300.o 10obj-$(CONFIG_ARCH_U300) += u300.o
11obj-$(CONFIG_MMC) += mmc.o 11obj-$(CONFIG_MMC) += mmc.o
12obj-$(CONFIG_SPI_PL022) += spi.o
13obj-$(CONFIG_MACH_U300_SPIDUMMY) += dummyspichip.o
14obj-$(CONFIG_I2C_STU300) += i2c.o
diff --git a/arch/arm/mach-u300/core.c b/arch/arm/mach-u300/core.c
index 2e9b8ccd8ec2..be60d6deee8b 100644
--- a/arch/arm/mach-u300/core.c
+++ b/arch/arm/mach-u300/core.c
@@ -32,6 +32,8 @@
32 32
33#include "clock.h" 33#include "clock.h"
34#include "mmc.h" 34#include "mmc.h"
35#include "spi.h"
36#include "i2c.h"
35 37
36/* 38/*
37 * Static I/O mappings that are needed for booting the U300 platforms. The 39 * Static I/O mappings that are needed for booting the U300 platforms. The
@@ -378,14 +380,14 @@ static struct platform_device wdog_device = {
378}; 380};
379 381
380static struct platform_device i2c0_device = { 382static struct platform_device i2c0_device = {
381 .name = "stddci2c", 383 .name = "stu300",
382 .id = 0, 384 .id = 0,
383 .num_resources = ARRAY_SIZE(i2c0_resources), 385 .num_resources = ARRAY_SIZE(i2c0_resources),
384 .resource = i2c0_resources, 386 .resource = i2c0_resources,
385}; 387};
386 388
387static struct platform_device i2c1_device = { 389static struct platform_device i2c1_device = {
388 .name = "stddci2c", 390 .name = "stu300",
389 .id = 1, 391 .id = 1,
390 .num_resources = ARRAY_SIZE(i2c1_resources), 392 .num_resources = ARRAY_SIZE(i2c1_resources),
391 .resource = i2c1_resources, 393 .resource = i2c1_resources,
@@ -611,6 +613,8 @@ void __init u300_init_devices(void)
611 /* Wait for the PLL208 to lock if not locked in yet */ 613 /* Wait for the PLL208 to lock if not locked in yet */
612 while (!(readw(U300_SYSCON_VBASE + U300_SYSCON_CSR) & 614 while (!(readw(U300_SYSCON_VBASE + U300_SYSCON_CSR) &
613 U300_SYSCON_CSR_PLL208_LOCK_IND)); 615 U300_SYSCON_CSR_PLL208_LOCK_IND));
616 /* Initialize SPI device with some board specifics */
617 u300_spi_init(&pl022_device);
614 618
615 /* Register the AMBA devices in the AMBA bus abstraction layer */ 619 /* Register the AMBA devices in the AMBA bus abstraction layer */
616 u300_clock_primecells(); 620 u300_clock_primecells();
@@ -622,6 +626,12 @@ void __init u300_init_devices(void)
622 626
623 u300_assign_physmem(); 627 u300_assign_physmem();
624 628
629 /* Register subdevices on the I2C buses */
630 u300_i2c_register_board_devices();
631
632 /* Register subdevices on the SPI bus */
633 u300_spi_register_board_devices();
634
625 /* Register the platform devices */ 635 /* Register the platform devices */
626 platform_add_devices(platform_devs, ARRAY_SIZE(platform_devs)); 636 platform_add_devices(platform_devs, ARRAY_SIZE(platform_devs));
627 637
diff --git a/arch/arm/mach-u300/dummyspichip.c b/arch/arm/mach-u300/dummyspichip.c
new file mode 100644
index 000000000000..962f9de454de
--- /dev/null
+++ b/arch/arm/mach-u300/dummyspichip.c
@@ -0,0 +1,290 @@
1/*
2 * arch/arm/mach-u300/dummyspichip.c
3 *
4 * Copyright (C) 2007-2009 ST-Ericsson AB
5 * License terms: GNU General Public License (GPL) version 2
6 * This is a dummy loopback SPI "chip" used for testing SPI.
7 * Author: Linus Walleij <linus.walleij@stericsson.com>
8 */
9#include <linux/init.h>
10#include <linux/module.h>
11#include <linux/kernel.h>
12#include <linux/device.h>
13#include <linux/err.h>
14#include <linux/sysfs.h>
15#include <linux/mutex.h>
16#include <linux/spi/spi.h>
17#include <linux/dma-mapping.h>
18/*
19 * WARNING! Do not include this pl022-specific controller header
20 * for any generic driver. It is only done in this dummy chip
21 * because we alter the chip configuration in order to test some
22 * different settings on the loopback device. Normal chip configs
23 * shall be STATIC and not altered by the driver!
24 */
25#include <linux/amba/pl022.h>
26
27struct dummy {
28 struct device *dev;
29 struct mutex lock;
30};
31
32#define DMA_TEST_SIZE 2048
33
34/* When we cat /sys/bus/spi/devices/spi0.0/looptest this will be triggered */
35static ssize_t dummy_looptest(struct device *dev,
36 struct device_attribute *attr, char *buf)
37{
38 struct spi_device *spi = to_spi_device(dev);
39 struct dummy *p_dummy = dev_get_drvdata(&spi->dev);
40
41 /*
42 * WARNING! Do not dereference the chip-specific data in any normal
43 * driver for a chip. It is usually STATIC and shall not be read
44 * or written to. Your chip driver should NOT depend on fields in this
45 * struct, this is just used here to alter the behaviour of the chip
46 * in order to perform tests.
47 */
48 struct pl022_config_chip *chip_info = spi->controller_data;
49 int status;
50 u8 txbuf[14] = {0xDE, 0xAD, 0xBE, 0xEF, 0x2B, 0xAD,
51 0xCA, 0xFE, 0xBA, 0xBE, 0xB1, 0x05,
52 0xF0, 0x0D};
53 u8 rxbuf[14];
54 u8 *bigtxbuf_virtual;
55 u8 *bigrxbuf_virtual;
56
57 if (mutex_lock_interruptible(&p_dummy->lock))
58 return -ERESTARTSYS;
59
60 bigtxbuf_virtual = kmalloc(DMA_TEST_SIZE, GFP_KERNEL);
61 if (bigtxbuf_virtual == NULL) {
62 status = -ENOMEM;
63 goto out;
64 }
65 bigrxbuf_virtual = kmalloc(DMA_TEST_SIZE, GFP_KERNEL);
66
67 /* Fill TXBUF with some happy pattern */
68 memset(bigtxbuf_virtual, 0xAA, DMA_TEST_SIZE);
69
70 /*
71 * Force chip to 8 bit mode
72 * WARNING: NEVER DO THIS IN REAL DRIVER CODE, THIS SHOULD BE STATIC!
73 */
74 chip_info->data_size = SSP_DATA_BITS_8;
75 /* You should NOT DO THIS EITHER */
76 spi->master->setup(spi);
77
78 /* Now run the tests for 8bit mode */
79 pr_info("Simple test 1: write 0xAA byte, read back garbage byte "
80 "in 8bit mode\n");
81 status = spi_w8r8(spi, 0xAA);
82 if (status < 0)
83 pr_warning("Siple test 1: FAILURE: spi_write_then_read "
84 "failed with status %d\n", status);
85 else
86 pr_info("Simple test 1: SUCCESS!\n");
87
88 pr_info("Simple test 2: write 8 bytes, read back 8 bytes garbage "
89 "in 8bit mode (full FIFO)\n");
90 status = spi_write_then_read(spi, &txbuf[0], 8, &rxbuf[0], 8);
91 if (status < 0)
92 pr_warning("Simple test 2: FAILURE: spi_write_then_read() "
93 "failed with status %d\n", status);
94 else
95 pr_info("Simple test 2: SUCCESS!\n");
96
97 pr_info("Simple test 3: write 14 bytes, read back 14 bytes garbage "
98 "in 8bit mode (see if we overflow FIFO)\n");
99 status = spi_write_then_read(spi, &txbuf[0], 14, &rxbuf[0], 14);
100 if (status < 0)
101 pr_warning("Simple test 3: FAILURE: failed with status %d "
102 "(probably FIFO overrun)\n", status);
103 else
104 pr_info("Simple test 3: SUCCESS!\n");
105
106 pr_info("Simple test 4: write 8 bytes with spi_write(), read 8 "
107 "bytes garbage with spi_read() in 8bit mode\n");
108 status = spi_write(spi, &txbuf[0], 8);
109 if (status < 0)
110 pr_warning("Simple test 4 step 1: FAILURE: spi_write() "
111 "failed with status %d\n", status);
112 else
113 pr_info("Simple test 4 step 1: SUCCESS!\n");
114 status = spi_read(spi, &rxbuf[0], 8);
115 if (status < 0)
116 pr_warning("Simple test 4 step 2: FAILURE: spi_read() "
117 "failed with status %d\n", status);
118 else
119 pr_info("Simple test 4 step 2: SUCCESS!\n");
120
121 pr_info("Simple test 5: write 14 bytes with spi_write(), read "
122 "14 bytes garbage with spi_read() in 8bit mode\n");
123 status = spi_write(spi, &txbuf[0], 14);
124 if (status < 0)
125 pr_warning("Simple test 5 step 1: FAILURE: spi_write() "
126 "failed with status %d (probably FIFO overrun)\n",
127 status);
128 else
129 pr_info("Simple test 5 step 1: SUCCESS!\n");
130 status = spi_read(spi, &rxbuf[0], 14);
131 if (status < 0)
132 pr_warning("Simple test 5 step 2: FAILURE: spi_read() "
133 "failed with status %d (probably FIFO overrun)\n",
134 status);
135 else
136 pr_info("Simple test 5: SUCCESS!\n");
137
138 pr_info("Simple test 6: write %d bytes with spi_write(), "
139 "read %d bytes garbage with spi_read() in 8bit mode\n",
140 DMA_TEST_SIZE, DMA_TEST_SIZE);
141 status = spi_write(spi, &bigtxbuf_virtual[0], DMA_TEST_SIZE);
142 if (status < 0)
143 pr_warning("Simple test 6 step 1: FAILURE: spi_write() "
144 "failed with status %d (probably FIFO overrun)\n",
145 status);
146 else
147 pr_info("Simple test 6 step 1: SUCCESS!\n");
148 status = spi_read(spi, &bigrxbuf_virtual[0], DMA_TEST_SIZE);
149 if (status < 0)
150 pr_warning("Simple test 6 step 2: FAILURE: spi_read() "
151 "failed with status %d (probably FIFO overrun)\n",
152 status);
153 else
154 pr_info("Simple test 6: SUCCESS!\n");
155
156
157 /*
158 * Force chip to 16 bit mode
159 * WARNING: NEVER DO THIS IN REAL DRIVER CODE, THIS SHOULD BE STATIC!
160 */
161 chip_info->data_size = SSP_DATA_BITS_16;
162 /* You should NOT DO THIS EITHER */
163 spi->master->setup(spi);
164
165 pr_info("Simple test 7: write 0xAA byte, read back garbage byte "
166 "in 16bit bus mode\n");
167 status = spi_w8r8(spi, 0xAA);
168 if (status == -EIO)
169 pr_info("Simple test 7: SUCCESS! (expected failure with "
170 "status EIO)\n");
171 else if (status < 0)
172 pr_warning("Siple test 7: FAILURE: spi_write_then_read "
173 "failed with status %d\n", status);
174 else
175 pr_warning("Siple test 7: FAILURE: spi_write_then_read "
176 "succeeded but it was expected to fail!\n");
177
178 pr_info("Simple test 8: write 8 bytes, read back 8 bytes garbage "
179 "in 16bit mode (full FIFO)\n");
180 status = spi_write_then_read(spi, &txbuf[0], 8, &rxbuf[0], 8);
181 if (status < 0)
182 pr_warning("Simple test 8: FAILURE: spi_write_then_read() "
183 "failed with status %d\n", status);
184 else
185 pr_info("Simple test 8: SUCCESS!\n");
186
187 pr_info("Simple test 9: write 14 bytes, read back 14 bytes garbage "
188 "in 16bit mode (see if we overflow FIFO)\n");
189 status = spi_write_then_read(spi, &txbuf[0], 14, &rxbuf[0], 14);
190 if (status < 0)
191 pr_warning("Simple test 9: FAILURE: failed with status %d "
192 "(probably FIFO overrun)\n", status);
193 else
194 pr_info("Simple test 9: SUCCESS!\n");
195
196 pr_info("Simple test 10: write %d bytes with spi_write(), "
197 "read %d bytes garbage with spi_read() in 16bit mode\n",
198 DMA_TEST_SIZE, DMA_TEST_SIZE);
199 status = spi_write(spi, &bigtxbuf_virtual[0], DMA_TEST_SIZE);
200 if (status < 0)
201 pr_warning("Simple test 10 step 1: FAILURE: spi_write() "
202 "failed with status %d (probably FIFO overrun)\n",
203 status);
204 else
205 pr_info("Simple test 10 step 1: SUCCESS!\n");
206
207 status = spi_read(spi, &bigrxbuf_virtual[0], DMA_TEST_SIZE);
208 if (status < 0)
209 pr_warning("Simple test 10 step 2: FAILURE: spi_read() "
210 "failed with status %d (probably FIFO overrun)\n",
211 status);
212 else
213 pr_info("Simple test 10: SUCCESS!\n");
214
215 status = sprintf(buf, "loop test complete\n");
216 kfree(bigrxbuf_virtual);
217 kfree(bigtxbuf_virtual);
218 out:
219 mutex_unlock(&p_dummy->lock);
220 return status;
221}
222
223static DEVICE_ATTR(looptest, S_IRUGO, dummy_looptest, NULL);
224
225static int __devinit pl022_dummy_probe(struct spi_device *spi)
226{
227 struct dummy *p_dummy;
228 int status;
229
230 dev_info(&spi->dev, "probing dummy SPI device\n");
231
232 p_dummy = kzalloc(sizeof *p_dummy, GFP_KERNEL);
233 if (!p_dummy)
234 return -ENOMEM;
235
236 dev_set_drvdata(&spi->dev, p_dummy);
237 mutex_init(&p_dummy->lock);
238
239 /* sysfs hook */
240 status = device_create_file(&spi->dev, &dev_attr_looptest);
241 if (status) {
242 dev_dbg(&spi->dev, "device_create_file looptest failure.\n");
243 goto out_dev_create_looptest_failed;
244 }
245
246 return 0;
247
248out_dev_create_looptest_failed:
249 dev_set_drvdata(&spi->dev, NULL);
250 kfree(p_dummy);
251 return status;
252}
253
254static int __devexit pl022_dummy_remove(struct spi_device *spi)
255{
256 struct dummy *p_dummy = dev_get_drvdata(&spi->dev);
257
258 dev_info(&spi->dev, "removing dummy SPI device\n");
259 device_remove_file(&spi->dev, &dev_attr_looptest);
260 dev_set_drvdata(&spi->dev, NULL);
261 kfree(p_dummy);
262
263 return 0;
264}
265
266static struct spi_driver pl022_dummy_driver = {
267 .driver = {
268 .name = "spi-dummy",
269 .owner = THIS_MODULE,
270 },
271 .probe = pl022_dummy_probe,
272 .remove = __devexit_p(pl022_dummy_remove),
273};
274
275static int __init pl022_init_dummy(void)
276{
277 return spi_register_driver(&pl022_dummy_driver);
278}
279
280static void __exit pl022_exit_dummy(void)
281{
282 spi_unregister_driver(&pl022_dummy_driver);
283}
284
285module_init(pl022_init_dummy);
286module_exit(pl022_exit_dummy);
287
288MODULE_AUTHOR("Linus Walleij <linus.walleij@stericsson.com>");
289MODULE_DESCRIPTION("PL022 SSP/SPI DUMMY Linux driver");
290MODULE_LICENSE("GPL");
diff --git a/arch/arm/mach-u300/gpio.c b/arch/arm/mach-u300/gpio.c
index 308cdb197a92..63c8f27fb15a 100644
--- a/arch/arm/mach-u300/gpio.c
+++ b/arch/arm/mach-u300/gpio.c
@@ -25,11 +25,6 @@
25#include <linux/platform_device.h> 25#include <linux/platform_device.h>
26#include <linux/gpio.h> 26#include <linux/gpio.h>
27 27
28/* Need access to SYSCON registers for PADmuxing */
29#include <mach/syscon.h>
30
31#include "padmux.h"
32
33/* Reference to GPIO block clock */ 28/* Reference to GPIO block clock */
34static struct clk *clk; 29static struct clk *clk;
35 30
@@ -606,14 +601,6 @@ static int __init gpio_probe(struct platform_device *pdev)
606 writel(U300_GPIO_CR_BLOCK_CLKRQ_ENABLE, virtbase + U300_GPIO_CR); 601 writel(U300_GPIO_CR_BLOCK_CLKRQ_ENABLE, virtbase + U300_GPIO_CR);
607#endif 602#endif
608 603
609 /* Set up some padmuxing here */
610#ifdef CONFIG_MMC
611 pmx_set_mission_mode_mmc();
612#endif
613#ifdef CONFIG_SPI_PL022
614 pmx_set_mission_mode_spi();
615#endif
616
617 gpio_set_initial_values(); 604 gpio_set_initial_values();
618 605
619 for (num_irqs = 0 ; num_irqs < U300_GPIO_NUM_PORTS; num_irqs++) { 606 for (num_irqs = 0 ; num_irqs < U300_GPIO_NUM_PORTS; num_irqs++) {
diff --git a/arch/arm/mach-u300/i2c.c b/arch/arm/mach-u300/i2c.c
new file mode 100644
index 000000000000..10be1f888b27
--- /dev/null
+++ b/arch/arm/mach-u300/i2c.c
@@ -0,0 +1,43 @@
1/*
2 * arch/arm/mach-u300/i2c.c
3 *
4 * Copyright (C) 2009 ST-Ericsson AB
5 * License terms: GNU General Public License (GPL) version 2
6 *
7 * Register board i2c devices
8 * Author: Linus Walleij <linus.walleij@stericsson.com>
9 */
10#include <linux/kernel.h>
11#include <linux/i2c.h>
12#include <mach/irqs.h>
13
14static struct i2c_board_info __initdata bus0_i2c_board_info[] = {
15 {
16 .type = "ab3100",
17 .addr = 0x48,
18 .irq = IRQ_U300_IRQ0_EXT,
19 },
20};
21
22static struct i2c_board_info __initdata bus1_i2c_board_info[] = {
23#ifdef CONFIG_MACH_U300_BS335
24 {
25 .type = "fwcam",
26 .addr = 0x10,
27 },
28 {
29 .type = "fwcam",
30 .addr = 0x5d,
31 },
32#else
33 { },
34#endif
35};
36
37void __init u300_i2c_register_board_devices(void)
38{
39 i2c_register_board_info(0, bus0_i2c_board_info,
40 ARRAY_SIZE(bus0_i2c_board_info));
41 i2c_register_board_info(1, bus1_i2c_board_info,
42 ARRAY_SIZE(bus1_i2c_board_info));
43}
diff --git a/arch/arm/mach-u300/i2c.h b/arch/arm/mach-u300/i2c.h
new file mode 100644
index 000000000000..485c02e5c06d
--- /dev/null
+++ b/arch/arm/mach-u300/i2c.h
@@ -0,0 +1,23 @@
1/*
2 * arch/arm/mach-u300/i2c.h
3 *
4 * Copyright (C) 2009 ST-Ericsson AB
5 * License terms: GNU General Public License (GPL) version 2
6 *
7 * Register board i2c devices
8 * Author: Linus Walleij <linus.walleij@stericsson.com>
9 */
10
11#ifndef MACH_U300_I2C_H
12#define MACH_U300_I2C_H
13
14#ifdef CONFIG_I2C_STU300
15void __init u300_i2c_register_board_devices(void);
16#else
17/* Compile out this stuff if no I2C adapter is available */
18static inline void __init u300_i2c_register_board_devices(void)
19{
20}
21#endif
22
23#endif
diff --git a/arch/arm/mach-u300/include/mach/memory.h b/arch/arm/mach-u300/include/mach/memory.h
index bf134bcc129d..ab000df7fc03 100644
--- a/arch/arm/mach-u300/include/mach/memory.h
+++ b/arch/arm/mach-u300/include/mach/memory.h
@@ -35,6 +35,14 @@
35#endif 35#endif
36 36
37/* 37/*
38 * TCM memory whereabouts
39 */
40#define ITCM_OFFSET 0xffff2000
41#define ITCM_END 0xffff3fff
42#define DTCM_OFFSET 0xffff4000
43#define DTCM_END 0xffff5fff
44
45/*
38 * We enable a real big DMA buffer if need be. 46 * We enable a real big DMA buffer if need be.
39 */ 47 */
40#define CONSISTENT_DMA_SIZE SZ_4M 48#define CONSISTENT_DMA_SIZE SZ_4M
diff --git a/arch/arm/mach-u300/include/mach/syscon.h b/arch/arm/mach-u300/include/mach/syscon.h
index 1c90d1b1ccb6..7444f5c7da97 100644
--- a/arch/arm/mach-u300/include/mach/syscon.h
+++ b/arch/arm/mach-u300/include/mach/syscon.h
@@ -240,8 +240,13 @@
240#define U300_SYSCON_PMC1LR_CDI_MASK (0xC000) 240#define U300_SYSCON_PMC1LR_CDI_MASK (0xC000)
241#define U300_SYSCON_PMC1LR_CDI_CDI (0x0000) 241#define U300_SYSCON_PMC1LR_CDI_CDI (0x0000)
242#define U300_SYSCON_PMC1LR_CDI_EMIF (0x4000) 242#define U300_SYSCON_PMC1LR_CDI_EMIF (0x4000)
243#ifdef CONFIG_MACH_U300_BS335
244#define U300_SYSCON_PMC1LR_CDI_CDI2 (0x8000)
245#define U300_SYSCON_PMC1LR_CDI_WCDMA_APP_GPIO (0xC000)
246#elif CONFIG_MACH_U300_BS365
243#define U300_SYSCON_PMC1LR_CDI_GPIO (0x8000) 247#define U300_SYSCON_PMC1LR_CDI_GPIO (0x8000)
244#define U300_SYSCON_PMC1LR_CDI_WCDMA (0xC000) 248#define U300_SYSCON_PMC1LR_CDI_WCDMA (0xC000)
249#endif
245#define U300_SYSCON_PMC1LR_PDI_MASK (0x3000) 250#define U300_SYSCON_PMC1LR_PDI_MASK (0x3000)
246#define U300_SYSCON_PMC1LR_PDI_PDI (0x0000) 251#define U300_SYSCON_PMC1LR_PDI_PDI (0x0000)
247#define U300_SYSCON_PMC1LR_PDI_EGG (0x1000) 252#define U300_SYSCON_PMC1LR_PDI_EGG (0x1000)
@@ -345,19 +350,69 @@
345#define U300_SYSCON_MMCR_MASK (0x0003) 350#define U300_SYSCON_MMCR_MASK (0x0003)
346#define U300_SYSCON_MMCR_MMC_FB_CLK_SEL_ENABLE (0x0002) 351#define U300_SYSCON_MMCR_MMC_FB_CLK_SEL_ENABLE (0x0002)
347#define U300_SYSCON_MMCR_MSPRO_FREQSEL_ENABLE (0x0001) 352#define U300_SYSCON_MMCR_MSPRO_FREQSEL_ENABLE (0x0001)
348 353/* Pull up/down control (R/W) */
354#define U300_SYSCON_PUCR (0x104)
355#define U300_SYSCON_PUCR_EMIF_1_WAIT_N_PU_ENABLE (0x0200)
356#define U300_SYSCON_PUCR_EMIF_1_NFIF_READY_PU_ENABLE (0x0100)
357#define U300_SYSCON_PUCR_EMIF_1_16BIT_PU_ENABLE (0x0080)
358#define U300_SYSCON_PUCR_EMIF_1_8BIT_PU_ENABLE (0x0040)
359#define U300_SYSCON_PUCR_KEY_IN_PU_EN_MASK (0x003F)
360/* Padmux 2 control */
361#define U300_SYSCON_PMC2R (0x100)
362#define U300_SYSCON_PMC2R_APP_MISC_0_MASK (0x00C0)
363#define U300_SYSCON_PMC2R_APP_MISC_0_APP_GPIO (0x0000)
364#define U300_SYSCON_PMC2R_APP_MISC_0_EMIF_SDRAM (0x0040)
365#define U300_SYSCON_PMC2R_APP_MISC_0_MMC (0x0080)
366#define U300_SYSCON_PMC2R_APP_MISC_0_CDI2 (0x00C0)
367#define U300_SYSCON_PMC2R_APP_MISC_1_MASK (0x0300)
368#define U300_SYSCON_PMC2R_APP_MISC_1_APP_GPIO (0x0000)
369#define U300_SYSCON_PMC2R_APP_MISC_1_EMIF_SDRAM (0x0100)
370#define U300_SYSCON_PMC2R_APP_MISC_1_MMC (0x0200)
371#define U300_SYSCON_PMC2R_APP_MISC_1_CDI2 (0x0300)
372#define U300_SYSCON_PMC2R_APP_MISC_2_MASK (0x0C00)
373#define U300_SYSCON_PMC2R_APP_MISC_2_APP_GPIO (0x0000)
374#define U300_SYSCON_PMC2R_APP_MISC_2_EMIF_SDRAM (0x0400)
375#define U300_SYSCON_PMC2R_APP_MISC_2_MMC (0x0800)
376#define U300_SYSCON_PMC2R_APP_MISC_2_CDI2 (0x0C00)
377#define U300_SYSCON_PMC2R_APP_MISC_3_MASK (0x3000)
378#define U300_SYSCON_PMC2R_APP_MISC_3_APP_GPIO (0x0000)
379#define U300_SYSCON_PMC2R_APP_MISC_3_EMIF_SDRAM (0x1000)
380#define U300_SYSCON_PMC2R_APP_MISC_3_MMC (0x2000)
381#define U300_SYSCON_PMC2R_APP_MISC_3_CDI2 (0x3000)
382#define U300_SYSCON_PMC2R_APP_MISC_4_MASK (0xC000)
383#define U300_SYSCON_PMC2R_APP_MISC_4_APP_GPIO (0x0000)
384#define U300_SYSCON_PMC2R_APP_MISC_4_EMIF_SDRAM (0x4000)
385#define U300_SYSCON_PMC2R_APP_MISC_4_MMC (0x8000)
386#define U300_SYSCON_PMC2R_APP_MISC_4_ACC_GPIO (0xC000)
349/* TODO: More SYSCON registers missing */ 387/* TODO: More SYSCON registers missing */
350#define U300_SYSCON_PMC3R (0x10c) 388#define U300_SYSCON_PMC3R (0x10c)
351#define U300_SYSCON_PMC3R_APP_MISC_11_MASK (0xc000) 389#define U300_SYSCON_PMC3R_APP_MISC_11_MASK (0xc000)
352#define U300_SYSCON_PMC3R_APP_MISC_11_SPI (0x4000) 390#define U300_SYSCON_PMC3R_APP_MISC_11_SPI (0x4000)
353#define U300_SYSCON_PMC3R_APP_MISC_10_MASK (0x3000) 391#define U300_SYSCON_PMC3R_APP_MISC_10_MASK (0x3000)
354#define U300_SYSCON_PMC3R_APP_MISC_10_SPI (0x1000) 392#define U300_SYSCON_PMC3R_APP_MISC_10_SPI (0x1000)
355/* TODO: Missing other configs, I just added the SPI stuff */ 393/* TODO: Missing other configs */
356 394#define U300_SYSCON_PMC4R (0x168)
395#define U300_SYSCON_PMC4R_APP_MISC_12_MASK (0x0003)
396#define U300_SYSCON_PMC4R_APP_MISC_12_APP_GPIO (0x0000)
397#define U300_SYSCON_PMC4R_APP_MISC_13_MASK (0x000C)
398#define U300_SYSCON_PMC4R_APP_MISC_13_CDI (0x0000)
399#define U300_SYSCON_PMC4R_APP_MISC_13_SMIA (0x0004)
400#define U300_SYSCON_PMC4R_APP_MISC_13_SMIA2 (0x0008)
401#define U300_SYSCON_PMC4R_APP_MISC_13_APP_GPIO (0x000C)
402#define U300_SYSCON_PMC4R_APP_MISC_14_MASK (0x0030)
403#define U300_SYSCON_PMC4R_APP_MISC_14_CDI (0x0000)
404#define U300_SYSCON_PMC4R_APP_MISC_14_SMIA (0x0010)
405#define U300_SYSCON_PMC4R_APP_MISC_14_CDI2 (0x0020)
406#define U300_SYSCON_PMC4R_APP_MISC_14_APP_GPIO (0x0030)
407#define U300_SYSCON_PMC4R_APP_MISC_16_MASK (0x0300)
408#define U300_SYSCON_PMC4R_APP_MISC_16_APP_GPIO_13 (0x0000)
409#define U300_SYSCON_PMC4R_APP_MISC_16_APP_UART1_CTS (0x0100)
410#define U300_SYSCON_PMC4R_APP_MISC_16_EMIF_1_STATIC_CS5_N (0x0200)
357/* SYS_0_CLK_CONTROL first clock control 16bit (R/W) */ 411/* SYS_0_CLK_CONTROL first clock control 16bit (R/W) */
358#define U300_SYSCON_S0CCR (0x120) 412#define U300_SYSCON_S0CCR (0x120)
359#define U300_SYSCON_S0CCR_FIELD_MASK (0x43FF) 413#define U300_SYSCON_S0CCR_FIELD_MASK (0x43FF)
360#define U300_SYSCON_S0CCR_CLOCK_REQ (0x4000) 414#define U300_SYSCON_S0CCR_CLOCK_REQ (0x4000)
415#define U300_SYSCON_S0CCR_CLOCK_REQ_MONITOR (0x2000)
361#define U300_SYSCON_S0CCR_CLOCK_INV (0x0200) 416#define U300_SYSCON_S0CCR_CLOCK_INV (0x0200)
362#define U300_SYSCON_S0CCR_CLOCK_FREQ_MASK (0x01E0) 417#define U300_SYSCON_S0CCR_CLOCK_FREQ_MASK (0x01E0)
363#define U300_SYSCON_S0CCR_CLOCK_SELECT_MASK (0x001E) 418#define U300_SYSCON_S0CCR_CLOCK_SELECT_MASK (0x001E)
@@ -375,6 +430,7 @@
375#define U300_SYSCON_S1CCR (0x124) 430#define U300_SYSCON_S1CCR (0x124)
376#define U300_SYSCON_S1CCR_FIELD_MASK (0x43FF) 431#define U300_SYSCON_S1CCR_FIELD_MASK (0x43FF)
377#define U300_SYSCON_S1CCR_CLOCK_REQ (0x4000) 432#define U300_SYSCON_S1CCR_CLOCK_REQ (0x4000)
433#define U300_SYSCON_S1CCR_CLOCK_REQ_MONITOR (0x2000)
378#define U300_SYSCON_S1CCR_CLOCK_INV (0x0200) 434#define U300_SYSCON_S1CCR_CLOCK_INV (0x0200)
379#define U300_SYSCON_S1CCR_CLOCK_FREQ_MASK (0x01E0) 435#define U300_SYSCON_S1CCR_CLOCK_FREQ_MASK (0x01E0)
380#define U300_SYSCON_S1CCR_CLOCK_SELECT_MASK (0x001E) 436#define U300_SYSCON_S1CCR_CLOCK_SELECT_MASK (0x001E)
@@ -393,6 +449,7 @@
393#define U300_SYSCON_S2CCR_FIELD_MASK (0xC3FF) 449#define U300_SYSCON_S2CCR_FIELD_MASK (0xC3FF)
394#define U300_SYSCON_S2CCR_CLK_STEAL (0x8000) 450#define U300_SYSCON_S2CCR_CLK_STEAL (0x8000)
395#define U300_SYSCON_S2CCR_CLOCK_REQ (0x4000) 451#define U300_SYSCON_S2CCR_CLOCK_REQ (0x4000)
452#define U300_SYSCON_S2CCR_CLOCK_REQ_MONITOR (0x2000)
396#define U300_SYSCON_S2CCR_CLOCK_INV (0x0200) 453#define U300_SYSCON_S2CCR_CLOCK_INV (0x0200)
397#define U300_SYSCON_S2CCR_CLOCK_FREQ_MASK (0x01E0) 454#define U300_SYSCON_S2CCR_CLOCK_FREQ_MASK (0x01E0)
398#define U300_SYSCON_S2CCR_CLOCK_SELECT_MASK (0x001E) 455#define U300_SYSCON_S2CCR_CLOCK_SELECT_MASK (0x001E)
@@ -425,6 +482,44 @@
425#define U300_SYSCON_MCR_PMGEN_CR_0_EMIF_0_SDRAM (0x000C) 482#define U300_SYSCON_MCR_PMGEN_CR_0_EMIF_0_SDRAM (0x000C)
426#define U300_SYSCON_MCR_PM1G_MODE_ENABLE (0x0002) 483#define U300_SYSCON_MCR_PM1G_MODE_ENABLE (0x0002)
427#define U300_SYSCON_MCR_PMTG5_MODE_ENABLE (0x0001) 484#define U300_SYSCON_MCR_PMTG5_MODE_ENABLE (0x0001)
485/* SC_PLL_IRQ_CONTROL 16bit (R/W) */
486#define U300_SYSCON_PICR (0x0130)
487#define U300_SYSCON_PICR_MASK (0x00FF)
488#define U300_SYSCON_PICR_FORCE_PLL208_LOCK_LOW_ENABLE (0x0080)
489#define U300_SYSCON_PICR_FORCE_PLL208_LOCK_HIGH_ENABLE (0x0040)
490#define U300_SYSCON_PICR_FORCE_PLL13_LOCK_LOW_ENABLE (0x0020)
491#define U300_SYSCON_PICR_FORCE_PLL13_LOCK_HIGH_ENABLE (0x0010)
492#define U300_SYSCON_PICR_IRQMASK_PLL13_UNLOCK_ENABLE (0x0008)
493#define U300_SYSCON_PICR_IRQMASK_PLL13_LOCK_ENABLE (0x0004)
494#define U300_SYSCON_PICR_IRQMASK_PLL208_UNLOCK_ENABLE (0x0002)
495#define U300_SYSCON_PICR_IRQMASK_PLL208_LOCK_ENABLE (0x0001)
496/* SC_PLL_IRQ_STATUS 16 bit (R/-) */
497#define U300_SYSCON_PISR (0x0134)
498#define U300_SYSCON_PISR_MASK (0x000F)
499#define U300_SYSCON_PISR_PLL13_UNLOCK_IND (0x0008)
500#define U300_SYSCON_PISR_PLL13_LOCK_IND (0x0004)
501#define U300_SYSCON_PISR_PLL208_UNLOCK_IND (0x0002)
502#define U300_SYSCON_PISR_PLL208_LOCK_IND (0x0001)
503/* SC_PLL_IRQ_CLEAR 16 bit (-/W) */
504#define U300_SYSCON_PICLR (0x0138)
505#define U300_SYSCON_PICLR_MASK (0x000F)
506#define U300_SYSCON_PICLR_RWMASK (0x0000)
507#define U300_SYSCON_PICLR_PLL13_UNLOCK_SC (0x0008)
508#define U300_SYSCON_PICLR_PLL13_LOCK_SC (0x0004)
509#define U300_SYSCON_PICLR_PLL208_UNLOCK_SC (0x0002)
510#define U300_SYSCON_PICLR_PLL208_LOCK_SC (0x0001)
511/* CAMIF_CONTROL 16 bit (-/W) */
512#define U300_SYSCON_CICR (0x013C)
513#define U300_SYSCON_CICR_MASK (0x0FFF)
514#define U300_SYSCON_CICR_APP_SUBLVDS_TESTMODE_MASK (0x0F00)
515#define U300_SYSCON_CICR_APP_SUBLVDS_TESTMODE_PORT1 (0x0C00)
516#define U300_SYSCON_CICR_APP_SUBLVDS_TESTMODE_PORT0 (0x0300)
517#define U300_SYSCON_CICR_APP_SUBLVDS_RESCON_MASK (0x00F0)
518#define U300_SYSCON_CICR_APP_SUBLVDS_RESCON_PORT1 (0x00C0)
519#define U300_SYSCON_CICR_APP_SUBLVDS_RESCON_PORT0 (0x0030)
520#define U300_SYSCON_CICR_APP_SUBLVDS_PWR_DWN_N_MASK (0x000F)
521#define U300_SYSCON_CICR_APP_SUBLVDS_PWR_DWN_N_PORT1 (0x000C)
522#define U300_SYSCON_CICR_APP_SUBLVDS_PWR_DWN_N_PORT0 (0x0003)
428/* Clock activity observability register 0 */ 523/* Clock activity observability register 0 */
429#define U300_SYSCON_C0OAR (0x140) 524#define U300_SYSCON_C0OAR (0x140)
430#define U300_SYSCON_C0OAR_MASK (0xFFFF) 525#define U300_SYSCON_C0OAR_MASK (0xFFFF)
@@ -513,7 +608,7 @@
513/** 608/**
514 * CPU medium frequency in MHz 609 * CPU medium frequency in MHz
515 */ 610 */
516#define SYSCON_CPU_CLOCK_MEDIUM 104 611#define SYSCON_CPU_CLOCK_MEDIUM 52
517/** 612/**
518 * CPU low frequency in MHz 613 * CPU low frequency in MHz
519 */ 614 */
@@ -527,7 +622,7 @@
527/** 622/**
528 * EMIF medium frequency in MHz 623 * EMIF medium frequency in MHz
529 */ 624 */
530#define SYSCON_EMIF_CLOCK_MEDIUM 104 625#define SYSCON_EMIF_CLOCK_MEDIUM 52
531/** 626/**
532 * EMIF low frequency in MHz 627 * EMIF low frequency in MHz
533 */ 628 */
@@ -541,7 +636,7 @@
541/** 636/**
542 * AHB medium frequency in MHz 637 * AHB medium frequency in MHz
543 */ 638 */
544#define SYSCON_AHB_CLOCK_MEDIUM 52 639#define SYSCON_AHB_CLOCK_MEDIUM 26
545/** 640/**
546 * AHB low frequency in MHz 641 * AHB low frequency in MHz
547 */ 642 */
@@ -553,6 +648,15 @@ enum syscon_busmaster {
553 SYSCON_BM_VIDEO_ENC 648 SYSCON_BM_VIDEO_ENC
554}; 649};
555 650
651/* Selectr a resistor or a set of resistors */
652enum syscon_pull_up_down {
653 SYSCON_PU_KEY_IN_EN,
654 SYSCON_PU_EMIF_1_8_BIT_EN,
655 SYSCON_PU_EMIF_1_16_BIT_EN,
656 SYSCON_PU_EMIF_1_NFIF_READY_EN,
657 SYSCON_PU_EMIF_1_NFIF_WAIT_N_EN,
658};
659
556/* 660/*
557 * Note that this array must match the order of the array "clk_reg" 661 * Note that this array must match the order of the array "clk_reg"
558 * in syscon.c 662 * in syscon.c
@@ -575,6 +679,7 @@ enum syscon_clk {
575 SYSCON_CLKCONTROL_SPI, 679 SYSCON_CLKCONTROL_SPI,
576 SYSCON_CLKCONTROL_I2S0_CORE, 680 SYSCON_CLKCONTROL_I2S0_CORE,
577 SYSCON_CLKCONTROL_I2S1_CORE, 681 SYSCON_CLKCONTROL_I2S1_CORE,
682 SYSCON_CLKCONTROL_UART1,
578 SYSCON_CLKCONTROL_AAIF, 683 SYSCON_CLKCONTROL_AAIF,
579 SYSCON_CLKCONTROL_AHB, 684 SYSCON_CLKCONTROL_AHB,
580 SYSCON_CLKCONTROL_APEX, 685 SYSCON_CLKCONTROL_APEX,
@@ -604,7 +709,8 @@ enum syscon_sysclk_mode {
604 709
605enum syscon_sysclk_req { 710enum syscon_sysclk_req {
606 SYSCON_SYSCLKREQ_DISABLED, 711 SYSCON_SYSCLKREQ_DISABLED,
607 SYSCON_SYSCLKREQ_ACTIVE_LOW 712 SYSCON_SYSCLKREQ_ACTIVE_LOW,
713 SYSCON_SYSCLKREQ_MONITOR
608}; 714};
609 715
610enum syscon_clk_mode { 716enum syscon_clk_mode {
diff --git a/arch/arm/mach-u300/mmc.c b/arch/arm/mach-u300/mmc.c
index 585cc013639d..7b6b016786bb 100644
--- a/arch/arm/mach-u300/mmc.c
+++ b/arch/arm/mach-u300/mmc.c
@@ -19,15 +19,16 @@
19#include <linux/regulator/consumer.h> 19#include <linux/regulator/consumer.h>
20#include <linux/regulator/machine.h> 20#include <linux/regulator/machine.h>
21#include <linux/gpio.h> 21#include <linux/gpio.h>
22#include <linux/amba/mmci.h>
22 23
23#include <asm/mach/mmc.h>
24#include "mmc.h" 24#include "mmc.h"
25#include "padmux.h"
25 26
26struct mmci_card_event { 27struct mmci_card_event {
27 struct input_dev *mmc_input; 28 struct input_dev *mmc_input;
28 int mmc_inserted; 29 int mmc_inserted;
29 struct work_struct workq; 30 struct work_struct workq;
30 struct mmc_platform_data mmc0_plat_data; 31 struct mmci_platform_data mmc0_plat_data;
31}; 32};
32 33
33static unsigned int mmc_status(struct device *dev) 34static unsigned int mmc_status(struct device *dev)
@@ -146,6 +147,7 @@ int __devinit mmc_init(struct amba_device *adev)
146{ 147{
147 struct mmci_card_event *mmci_card; 148 struct mmci_card_event *mmci_card;
148 struct device *mmcsd_device = &adev->dev; 149 struct device *mmcsd_device = &adev->dev;
150 struct pmx *pmx;
149 int ret = 0; 151 int ret = 0;
150 152
151 mmci_card = kzalloc(sizeof(struct mmci_card_event), GFP_KERNEL); 153 mmci_card = kzalloc(sizeof(struct mmci_card_event), GFP_KERNEL);
@@ -158,6 +160,8 @@ int __devinit mmc_init(struct amba_device *adev)
158 mmci_card->mmc0_plat_data.status = mmc_status; 160 mmci_card->mmc0_plat_data.status = mmc_status;
159 mmci_card->mmc0_plat_data.gpio_wp = -1; 161 mmci_card->mmc0_plat_data.gpio_wp = -1;
160 mmci_card->mmc0_plat_data.gpio_cd = -1; 162 mmci_card->mmc0_plat_data.gpio_cd = -1;
163 mmci_card->mmc0_plat_data.capabilities = MMC_CAP_MMC_HIGHSPEED |
164 MMC_CAP_SD_HIGHSPEED | MMC_CAP_4_BIT_DATA;
161 165
162 mmcsd_device->platform_data = (void *) &mmci_card->mmc0_plat_data; 166 mmcsd_device->platform_data = (void *) &mmci_card->mmc0_plat_data;
163 167
@@ -207,6 +211,20 @@ int __devinit mmc_init(struct amba_device *adev)
207 211
208 input_set_drvdata(mmci_card->mmc_input, mmci_card); 212 input_set_drvdata(mmci_card->mmc_input, mmci_card);
209 213
214 /*
215 * Setup padmuxing for MMC. Since this must always be
216 * compiled into the kernel, pmx is never released.
217 */
218 pmx = pmx_get(mmcsd_device, U300_APP_PMX_MMC_SETTING);
219
220 if (IS_ERR(pmx))
221 pr_warning("Could not get padmux handle\n");
222 else {
223 ret = pmx_activate(mmcsd_device, pmx);
224 if (IS_ERR_VALUE(ret))
225 pr_warning("Could not activate padmuxing\n");
226 }
227
210 ret = gpio_register_callback(U300_GPIO_PIN_MMC_CD, mmci_callback, 228 ret = gpio_register_callback(U300_GPIO_PIN_MMC_CD, mmci_callback,
211 mmci_card); 229 mmci_card);
212 230
diff --git a/arch/arm/mach-u300/padmux.c b/arch/arm/mach-u300/padmux.c
index f3664564f086..4c93c6cefd37 100644
--- a/arch/arm/mach-u300/padmux.c
+++ b/arch/arm/mach-u300/padmux.c
@@ -6,53 +6,362 @@
6 * Copyright (C) 2009 ST-Ericsson AB 6 * Copyright (C) 2009 ST-Ericsson AB
7 * License terms: GNU General Public License (GPL) version 2 7 * License terms: GNU General Public License (GPL) version 2
8 * U300 PADMUX functions 8 * U300 PADMUX functions
9 * Author: Linus Walleij <linus.walleij@stericsson.com> 9 * Author: Martin Persson <martin.persson@stericsson.com>
10 *
11 */ 10 */
12#include <linux/io.h> 11
12#include <linux/module.h>
13#include <linux/kernel.h>
14#include <linux/device.h>
13#include <linux/err.h> 15#include <linux/err.h>
16#include <linux/errno.h>
17#include <linux/io.h>
18#include <linux/mutex.h>
19#include <linux/string.h>
20#include <linux/bug.h>
21#include <linux/debugfs.h>
22#include <linux/seq_file.h>
14#include <mach/u300-regs.h> 23#include <mach/u300-regs.h>
15#include <mach/syscon.h> 24#include <mach/syscon.h>
16
17#include "padmux.h" 25#include "padmux.h"
18 26
19/* Set the PAD MUX to route the MMC reader correctly to GPIO0. */ 27static DEFINE_MUTEX(pmx_mutex);
20void pmx_set_mission_mode_mmc(void) 28
21{ 29const u32 pmx_registers[] = {
22 u16 val; 30 (U300_SYSCON_VBASE + U300_SYSCON_PMC1LR),
23 31 (U300_SYSCON_VBASE + U300_SYSCON_PMC1HR),
24 val = readw(U300_SYSCON_VBASE + U300_SYSCON_PMC1LR); 32 (U300_SYSCON_VBASE + U300_SYSCON_PMC2R),
25 val &= ~U300_SYSCON_PMC1LR_MMCSD_MASK; 33 (U300_SYSCON_VBASE + U300_SYSCON_PMC3R),
26 writew(val, U300_SYSCON_VBASE + U300_SYSCON_PMC1LR); 34 (U300_SYSCON_VBASE + U300_SYSCON_PMC4R)
27 val = readw(U300_SYSCON_VBASE + U300_SYSCON_PMC1HR); 35};
28 val &= ~U300_SYSCON_PMC1HR_APP_GPIO_1_MASK; 36
29 val |= U300_SYSCON_PMC1HR_APP_GPIO_1_MMC; 37/* High level functionality */
30 writew(val, U300_SYSCON_VBASE + U300_SYSCON_PMC1HR); 38
31} 39/* Lazy dog:
32 40 * onmask = {
33void pmx_set_mission_mode_spi(void) 41 * {"PMC1LR" mask, "PMC1LR" value},
34{ 42 * {"PMC1HR" mask, "PMC1HR" value},
35 u16 val; 43 * {"PMC2R" mask, "PMC2R" value},
36 44 * {"PMC3R" mask, "PMC3R" value},
37 /* Set up padmuxing so the SPI port and its chipselects are active */ 45 * {"PMC4R" mask, "PMC4R" value}
38 val = readw(U300_SYSCON_VBASE + U300_SYSCON_PMC1HR); 46 * }
39 /* 47 */
40 * Activate the SPI port (disable the use of these pins for generic 48static struct pmx mmc_setting = {
41 * GPIO, DSP, AAIF 49 .setting = U300_APP_PMX_MMC_SETTING,
42 */ 50 .default_on = false,
43 val &= ~U300_SYSCON_PMC1HR_APP_SPI_2_MASK; 51 .activated = false,
44 val |= U300_SYSCON_PMC1HR_APP_SPI_2_SPI; 52 .name = "MMC",
45 /* 53 .onmask = {
46 * Use GPIO pin SPI CS1 for CS1 actually (it can be used for other 54 {U300_SYSCON_PMC1LR_MMCSD_MASK,
47 * things also) 55 U300_SYSCON_PMC1LR_MMCSD_MMCSD},
48 */ 56 {0, 0},
49 val &= ~U300_SYSCON_PMC1HR_APP_SPI_CS_1_MASK; 57 {0, 0},
50 val |= U300_SYSCON_PMC1HR_APP_SPI_CS_1_SPI; 58 {0, 0},
51 /* 59 {U300_SYSCON_PMC4R_APP_MISC_12_MASK,
52 * Use GPIO pin SPI CS2 for CS2 actually (it can be used for other 60 U300_SYSCON_PMC4R_APP_MISC_12_APP_GPIO}
53 * things also) 61 },
54 */ 62};
55 val &= ~U300_SYSCON_PMC1HR_APP_SPI_CS_2_MASK; 63
56 val |= U300_SYSCON_PMC1HR_APP_SPI_CS_2_SPI; 64static struct pmx spi_setting = {
57 writew(val, U300_SYSCON_VBASE + U300_SYSCON_PMC1HR); 65 .setting = U300_APP_PMX_SPI_SETTING,
66 .default_on = false,
67 .activated = false,
68 .name = "SPI",
69 .onmask = {{0, 0},
70 {U300_SYSCON_PMC1HR_APP_SPI_2_MASK |
71 U300_SYSCON_PMC1HR_APP_SPI_CS_1_MASK |
72 U300_SYSCON_PMC1HR_APP_SPI_CS_2_MASK,
73 U300_SYSCON_PMC1HR_APP_SPI_2_SPI |
74 U300_SYSCON_PMC1HR_APP_SPI_CS_1_SPI |
75 U300_SYSCON_PMC1HR_APP_SPI_CS_2_SPI},
76 {0, 0},
77 {0, 0},
78 {0, 0}
79 },
80};
81
82/* Available padmux settings */
83static struct pmx *pmx_settings[] = {
84 &mmc_setting,
85 &spi_setting,
86};
87
88static void update_registers(struct pmx *pmx, bool activate)
89{
90 u16 regval, val, mask;
91 int i;
92
93 for (i = 0; i < ARRAY_SIZE(pmx_registers); i++) {
94 if (activate)
95 val = pmx->onmask[i].val;
96 else
97 val = 0;
98
99 mask = pmx->onmask[i].mask;
100 if (mask != 0) {
101 regval = readw(pmx_registers[i]);
102 regval &= ~mask;
103 regval |= val;
104 writew(regval, pmx_registers[i]);
105 }
106 }
107}
108
109struct pmx *pmx_get(struct device *dev, enum pmx_settings setting)
110{
111 int i;
112 struct pmx *pmx = ERR_PTR(-ENOENT);
113
114 if (dev == NULL)
115 return ERR_PTR(-EINVAL);
116
117 mutex_lock(&pmx_mutex);
118 for (i = 0; i < ARRAY_SIZE(pmx_settings); i++) {
119
120 if (setting == pmx_settings[i]->setting) {
121
122 if (pmx_settings[i]->dev != NULL) {
123 WARN(1, "padmux: required setting "
124 "in use by another consumer\n");
125 } else {
126 pmx = pmx_settings[i];
127 pmx->dev = dev;
128 dev_dbg(dev, "padmux: setting nr %d is now "
129 "bound to %s and ready to use\n",
130 setting, dev_name(dev));
131 break;
132 }
133 }
134 }
135 mutex_unlock(&pmx_mutex);
136
137 return pmx;
138}
139EXPORT_SYMBOL(pmx_get);
140
141int pmx_put(struct device *dev, struct pmx *pmx)
142{
143 int i;
144 int ret = -ENOENT;
145
146 if (pmx == NULL || dev == NULL)
147 return -EINVAL;
148
149 mutex_lock(&pmx_mutex);
150 for (i = 0; i < ARRAY_SIZE(pmx_settings); i++) {
151
152 if (pmx->setting == pmx_settings[i]->setting) {
153
154 if (dev != pmx->dev) {
155 WARN(1, "padmux: cannot release handle as "
156 "it is bound to another consumer\n");
157 ret = -EINVAL;
158 break;
159 } else {
160 pmx_settings[i]->dev = NULL;
161 ret = 0;
162 break;
163 }
164 }
165 }
166 mutex_unlock(&pmx_mutex);
167
168 return ret;
169}
170EXPORT_SYMBOL(pmx_put);
171
172int pmx_activate(struct device *dev, struct pmx *pmx)
173{
174 int i, j, ret;
175 ret = 0;
176
177 if (pmx == NULL || dev == NULL)
178 return -EINVAL;
179
180 mutex_lock(&pmx_mutex);
181
182 /* Make sure the required bits are not used */
183 for (i = 0; i < ARRAY_SIZE(pmx_settings); i++) {
184
185 if (pmx_settings[i]->dev == NULL || pmx_settings[i] == pmx)
186 continue;
187
188 for (j = 0; j < ARRAY_SIZE(pmx_registers); j++) {
189
190 if (pmx_settings[i]->onmask[j].mask & pmx->
191 onmask[j].mask) {
192 /* More than one entry on the same bits */
193 WARN(1, "padmux: cannot activate "
194 "setting. Bit conflict with "
195 "an active setting\n");
196
197 ret = -EUSERS;
198 goto exit;
199 }
200 }
201 }
202 update_registers(pmx, true);
203 pmx->activated = true;
204 dev_dbg(dev, "padmux: setting nr %d is activated\n",
205 pmx->setting);
206
207exit:
208 mutex_unlock(&pmx_mutex);
209 return ret;
210}
211EXPORT_SYMBOL(pmx_activate);
212
213int pmx_deactivate(struct device *dev, struct pmx *pmx)
214{
215 int i;
216 int ret = -ENOENT;
217
218 if (pmx == NULL || dev == NULL)
219 return -EINVAL;
220
221 mutex_lock(&pmx_mutex);
222 for (i = 0; i < ARRAY_SIZE(pmx_settings); i++) {
223
224 if (pmx_settings[i]->dev == NULL)
225 continue;
226
227 if (pmx->setting == pmx_settings[i]->setting) {
228
229 if (dev != pmx->dev) {
230 WARN(1, "padmux: cannot deactivate "
231 "pmx setting as it was activated "
232 "by another consumer\n");
233
234 ret = -EBUSY;
235 continue;
236 } else {
237 update_registers(pmx, false);
238 pmx_settings[i]->dev = NULL;
239 pmx->activated = false;
240 ret = 0;
241 dev_dbg(dev, "padmux: setting nr %d is deactivated",
242 pmx->setting);
243 break;
244 }
245 }
246 }
247 mutex_unlock(&pmx_mutex);
248
249 return ret;
250}
251EXPORT_SYMBOL(pmx_deactivate);
252
253/*
254 * For internal use only. If it is to be exported,
255 * it should be reentrant. Notice that pmx_activate
256 * (i.e. runtime settings) always override default settings.
257 */
258static int pmx_set_default(void)
259{
260 /* Used to identify several entries on the same bits */
261 u16 modbits[ARRAY_SIZE(pmx_registers)];
262
263 int i, j;
264
265 memset(modbits, 0, ARRAY_SIZE(pmx_registers) * sizeof(u16));
266
267 for (i = 0; i < ARRAY_SIZE(pmx_settings); i++) {
268
269 if (!pmx_settings[i]->default_on)
270 continue;
271
272 for (j = 0; j < ARRAY_SIZE(pmx_registers); j++) {
273
274 /* Make sure there is only one entry on the same bits */
275 if (modbits[j] & pmx_settings[i]->onmask[j].mask) {
276 BUG();
277 return -EUSERS;
278 }
279 modbits[j] |= pmx_settings[i]->onmask[j].mask;
280 }
281 update_registers(pmx_settings[i], true);
282 }
283 return 0;
58} 284}
285
286#if (defined(CONFIG_DEBUG_FS) && defined(CONFIG_U300_DEBUG))
287static int pmx_show(struct seq_file *s, void *data)
288{
289 int i;
290 seq_printf(s, "-------------------------------------------------\n");
291 seq_printf(s, "SETTING BOUND TO DEVICE STATE\n");
292 seq_printf(s, "-------------------------------------------------\n");
293 mutex_lock(&pmx_mutex);
294 for (i = 0; i < ARRAY_SIZE(pmx_settings); i++) {
295 /* Format pmx and device name nicely */
296 char cdp[33];
297 int chars;
298
299 chars = snprintf(&cdp[0], 17, "%s", pmx_settings[i]->name);
300 while (chars < 16) {
301 cdp[chars] = ' ';
302 chars++;
303 }
304 chars = snprintf(&cdp[16], 17, "%s", pmx_settings[i]->dev ?
305 dev_name(pmx_settings[i]->dev) : "N/A");
306 while (chars < 16) {
307 cdp[chars+16] = ' ';
308 chars++;
309 }
310 cdp[32] = '\0';
311
312 seq_printf(s,
313 "%s\t%s\n",
314 &cdp[0],
315 pmx_settings[i]->activated ?
316 "ACTIVATED" : "DEACTIVATED"
317 );
318
319 }
320 mutex_unlock(&pmx_mutex);
321 return 0;
322}
323
324static int pmx_open(struct inode *inode, struct file *file)
325{
326 return single_open(file, pmx_show, NULL);
327}
328
329static const struct file_operations pmx_operations = {
330 .owner = THIS_MODULE,
331 .open = pmx_open,
332 .read = seq_read,
333 .llseek = seq_lseek,
334 .release = single_release,
335};
336
337static int __init init_pmx_read_debugfs(void)
338{
339 /* Expose a simple debugfs interface to view pmx settings */
340 (void) debugfs_create_file("padmux", S_IFREG | S_IRUGO,
341 NULL, NULL,
342 &pmx_operations);
343 return 0;
344}
345
346/*
347 * This needs to come in after the core_initcall(),
348 * because debugfs is not available until
349 * the subsystems come up.
350 */
351module_init(init_pmx_read_debugfs);
352#endif
353
354static int __init pmx_init(void)
355{
356 int ret;
357
358 ret = pmx_set_default();
359
360 if (IS_ERR_VALUE(ret))
361 pr_crit("padmux: default settings could not be set\n");
362
363 return 0;
364}
365
366/* Should be initialized before consumers */
367core_initcall(pmx_init);
diff --git a/arch/arm/mach-u300/padmux.h b/arch/arm/mach-u300/padmux.h
index 8c2099ac5046..6e8b86064097 100644
--- a/arch/arm/mach-u300/padmux.h
+++ b/arch/arm/mach-u300/padmux.h
@@ -6,14 +6,34 @@
6 * Copyright (C) 2009 ST-Ericsson AB 6 * Copyright (C) 2009 ST-Ericsson AB
7 * License terms: GNU General Public License (GPL) version 2 7 * License terms: GNU General Public License (GPL) version 2
8 * U300 PADMUX API 8 * U300 PADMUX API
9 * Author: Linus Walleij <linus.walleij@stericsson.com> 9 * Author: Martin Persson <martin.persson@stericsson.com>
10 *
11 */ 10 */
12 11
13#ifndef __MACH_U300_PADMUX_H 12#ifndef __MACH_U300_PADMUX_H
14#define __MACH_U300_PADMUX_H 13#define __MACH_U300_PADMUX_H
15 14
16void pmx_set_mission_mode_mmc(void); 15enum pmx_settings {
17void pmx_set_mission_mode_spi(void); 16 U300_APP_PMX_MMC_SETTING,
17 U300_APP_PMX_SPI_SETTING
18};
19
20struct pmx_onmask {
21 u16 mask; /* Mask bits */
22 u16 val; /* Value when active */
23};
24
25struct pmx {
26 struct device *dev;
27 enum pmx_settings setting;
28 char *name;
29 bool activated;
30 bool default_on;
31 struct pmx_onmask onmask[];
32};
33
34struct pmx *pmx_get(struct device *dev, enum pmx_settings setting);
35int pmx_put(struct device *dev, struct pmx *pmx);
36int pmx_activate(struct device *dev, struct pmx *pmx);
37int pmx_deactivate(struct device *dev, struct pmx *pmx);
18 38
19#endif 39#endif
diff --git a/arch/arm/mach-u300/spi.c b/arch/arm/mach-u300/spi.c
new file mode 100644
index 000000000000..f0e887bea30e
--- /dev/null
+++ b/arch/arm/mach-u300/spi.c
@@ -0,0 +1,124 @@
1/*
2 * arch/arm/mach-u300/spi.c
3 *
4 * Copyright (C) 2009 ST-Ericsson AB
5 * License terms: GNU General Public License (GPL) version 2
6 *
7 * Author: Linus Walleij <linus.walleij@stericsson.com>
8 */
9#include <linux/device.h>
10#include <linux/amba/bus.h>
11#include <linux/spi/spi.h>
12#include <linux/amba/pl022.h>
13#include <linux/err.h>
14#include "padmux.h"
15
16/*
17 * The following is for the actual devices on the SSP/SPI bus
18 */
19#ifdef CONFIG_MACH_U300_SPIDUMMY
20static void select_dummy_chip(u32 chipselect)
21{
22 pr_debug("CORE: %s called with CS=0x%x (%s)\n",
23 __func__,
24 chipselect,
25 chipselect ? "unselect chip" : "select chip");
26 /*
27 * Here you would write the chip select value to the GPIO pins if
28 * this was a real chip (but this is a loopback dummy).
29 */
30}
31
32struct pl022_config_chip dummy_chip_info = {
33 /* Nominally this is LOOPBACK_DISABLED, but this is our dummy chip! */
34 .lbm = LOOPBACK_ENABLED,
35 /*
36 * available POLLING_TRANSFER and INTERRUPT_TRANSFER,
37 * DMA_TRANSFER does not work
38 */
39 .com_mode = INTERRUPT_TRANSFER,
40 .iface = SSP_INTERFACE_MOTOROLA_SPI,
41 /* We can only act as master but SSP_SLAVE is possible in theory */
42 .hierarchy = SSP_MASTER,
43 /* 0 = drive TX even as slave, 1 = do not drive TX as slave */
44 .slave_tx_disable = 0,
45 /* LSB first */
46 .endian_tx = SSP_TX_LSB,
47 .endian_rx = SSP_RX_LSB,
48 .data_size = SSP_DATA_BITS_8, /* used to be 12 in some default */
49 .rx_lev_trig = SSP_RX_1_OR_MORE_ELEM,
50 .tx_lev_trig = SSP_TX_1_OR_MORE_EMPTY_LOC,
51 .clk_phase = SSP_CLK_SECOND_EDGE,
52 .clk_pol = SSP_CLK_POL_IDLE_LOW,
53 .ctrl_len = SSP_BITS_12,
54 .wait_state = SSP_MWIRE_WAIT_ZERO,
55 .duplex = SSP_MICROWIRE_CHANNEL_FULL_DUPLEX,
56 /*
57 * This is where you insert a call to a function to enable CS
58 * (usually GPIO) for a certain chip.
59 */
60 .cs_control = select_dummy_chip,
61};
62#endif
63
64static struct spi_board_info u300_spi_devices[] = {
65#ifdef CONFIG_MACH_U300_SPIDUMMY
66 {
67 /* A dummy chip used for loopback tests */
68 .modalias = "spi-dummy",
69 /* Really dummy, pass in additional chip config here */
70 .platform_data = NULL,
71 /* This defines how the controller shall handle the device */
72 .controller_data = &dummy_chip_info,
73 /* .irq - no external IRQ routed from this device */
74 .max_speed_hz = 1000000,
75 .bus_num = 0, /* Only one bus on this chip */
76 .chip_select = 0,
77 /* Means SPI_CS_HIGH, change if e.g low CS */
78 .mode = 0,
79 },
80#endif
81};
82
83static struct pl022_ssp_controller ssp_platform_data = {
84 /* If you have several SPI buses this varies, we have only bus 0 */
85 .bus_id = 0,
86 /* Set this to 1 when we think we got DMA working */
87 .enable_dma = 0,
88 /*
89 * On the APP CPU GPIO 4, 5 and 6 are connected as generic
90 * chip selects for SPI. (Same on U330, U335 and U365.)
91 * TODO: make sure the GPIO driver can select these properly
92 * and do padmuxing accordingly too.
93 */
94 .num_chipselect = 3,
95};
96
97
98void __init u300_spi_init(struct amba_device *adev)
99{
100 struct pmx *pmx;
101
102 adev->dev.platform_data = &ssp_platform_data;
103 /*
104 * Setup padmuxing for SPI. Since this must always be
105 * compiled into the kernel, pmx is never released.
106 */
107 pmx = pmx_get(&adev->dev, U300_APP_PMX_SPI_SETTING);
108
109 if (IS_ERR(pmx))
110 dev_warn(&adev->dev, "Could not get padmux handle\n");
111 else {
112 int ret;
113
114 ret = pmx_activate(&adev->dev, pmx);
115 if (IS_ERR_VALUE(ret))
116 dev_warn(&adev->dev, "Could not activate padmuxing\n");
117 }
118
119}
120void __init u300_spi_register_board_devices(void)
121{
122 /* Register any SPI devices */
123 spi_register_board_info(u300_spi_devices, ARRAY_SIZE(u300_spi_devices));
124}
diff --git a/arch/arm/mach-u300/spi.h b/arch/arm/mach-u300/spi.h
new file mode 100644
index 000000000000..bd3d867e240f
--- /dev/null
+++ b/arch/arm/mach-u300/spi.h
@@ -0,0 +1,26 @@
1/*
2 * arch/arm/mach-u300/spi.h
3 *
4 * Copyright (C) 2009 ST-Ericsson AB
5 * License terms: GNU General Public License (GPL) version 2
6 *
7 * Author: Linus Walleij <linus.walleij@stericsson.com>
8 */
9#ifndef SPI_H
10#define SPI_H
11#include <linux/amba/bus.h>
12
13#ifdef CONFIG_SPI_PL022
14void __init u300_spi_init(struct amba_device *adev);
15void __init u300_spi_register_board_devices(void);
16#else
17/* Compile out SPI support if PL022 is not selected */
18static inline void __init u300_spi_init(struct amba_device *adev)
19{
20}
21static inline void __init u300_spi_register_board_devices(void)
22{
23}
24#endif
25
26#endif
diff --git a/arch/arm/mach-u300/timer.c b/arch/arm/mach-u300/timer.c
index cce53204880e..26d26f5100fe 100644
--- a/arch/arm/mach-u300/timer.c
+++ b/arch/arm/mach-u300/timer.c
@@ -346,6 +346,21 @@ static struct clocksource clocksource_u300_1mhz = {
346 .flags = CLOCK_SOURCE_IS_CONTINUOUS, 346 .flags = CLOCK_SOURCE_IS_CONTINUOUS,
347}; 347};
348 348
349/*
350 * Override the global weak sched_clock symbol with this
351 * local implementation which uses the clocksource to get some
352 * better resolution when scheduling the kernel. We accept that
353 * this wraps around for now, since it is just a relative time
354 * stamp. (Inspired by OMAP implementation.)
355 */
356unsigned long long notrace sched_clock(void)
357{
358 return clocksource_cyc2ns(clocksource_u300_1mhz.read(
359 &clocksource_u300_1mhz),
360 clocksource_u300_1mhz.mult,
361 clocksource_u300_1mhz.shift);
362}
363
349 364
350/* 365/*
351 * This sets up the system timers, clock source and clock event. 366 * This sets up the system timers, clock source and clock event.
diff --git a/arch/arm/mach-versatile/core.c b/arch/arm/mach-versatile/core.c
index 975eae41ee66..e13be7c444ca 100644
--- a/arch/arm/mach-versatile/core.c
+++ b/arch/arm/mach-versatile/core.c
@@ -27,6 +27,7 @@
27#include <linux/amba/bus.h> 27#include <linux/amba/bus.h>
28#include <linux/amba/clcd.h> 28#include <linux/amba/clcd.h>
29#include <linux/amba/pl061.h> 29#include <linux/amba/pl061.h>
30#include <linux/amba/mmci.h>
30#include <linux/clocksource.h> 31#include <linux/clocksource.h>
31#include <linux/clockchips.h> 32#include <linux/clockchips.h>
32#include <linux/cnt32_to_63.h> 33#include <linux/cnt32_to_63.h>
@@ -47,7 +48,6 @@
47#include <asm/mach/irq.h> 48#include <asm/mach/irq.h>
48#include <asm/mach/time.h> 49#include <asm/mach/time.h>
49#include <asm/mach/map.h> 50#include <asm/mach/map.h>
50#include <asm/mach/mmc.h>
51 51
52#include "core.h" 52#include "core.h"
53#include "clock.h" 53#include "clock.h"
@@ -369,7 +369,7 @@ unsigned int mmc_status(struct device *dev)
369 return readl(VERSATILE_SYSMCI) & mask; 369 return readl(VERSATILE_SYSMCI) & mask;
370} 370}
371 371
372static struct mmc_platform_data mmc0_plat_data = { 372static struct mmci_platform_data mmc0_plat_data = {
373 .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34, 373 .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34,
374 .status = mmc_status, 374 .status = mmc_status,
375 .gpio_wp = -1, 375 .gpio_wp = -1,
diff --git a/arch/arm/mach-versatile/versatile_pb.c b/arch/arm/mach-versatile/versatile_pb.c
index 9af8d8154df5..239cd30fc4f5 100644
--- a/arch/arm/mach-versatile/versatile_pb.c
+++ b/arch/arm/mach-versatile/versatile_pb.c
@@ -24,6 +24,7 @@
24#include <linux/sysdev.h> 24#include <linux/sysdev.h>
25#include <linux/amba/bus.h> 25#include <linux/amba/bus.h>
26#include <linux/amba/pl061.h> 26#include <linux/amba/pl061.h>
27#include <linux/amba/mmci.h>
27#include <linux/io.h> 28#include <linux/io.h>
28 29
29#include <mach/hardware.h> 30#include <mach/hardware.h>
@@ -31,7 +32,6 @@
31#include <asm/mach-types.h> 32#include <asm/mach-types.h>
32 33
33#include <asm/mach/arch.h> 34#include <asm/mach/arch.h>
34#include <asm/mach/mmc.h>
35 35
36#include "core.h" 36#include "core.h"
37 37
@@ -41,7 +41,7 @@
41#define IRQ_MMCI1A IRQ_SIC_MMCI1A 41#define IRQ_MMCI1A IRQ_SIC_MMCI1A
42#endif 42#endif
43 43
44static struct mmc_platform_data mmc1_plat_data = { 44static struct mmci_platform_data mmc1_plat_data = {
45 .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34, 45 .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34,
46 .status = mmc_status, 46 .status = mmc_status,
47 .gpio_wp = -1, 47 .gpio_wp = -1,
diff --git a/arch/arm/mm/Kconfig b/arch/arm/mm/Kconfig
index 5fe595aeba69..8d43e58f9244 100644
--- a/arch/arm/mm/Kconfig
+++ b/arch/arm/mm/Kconfig
@@ -771,3 +771,8 @@ config CACHE_XSC3L2
771 select OUTER_CACHE 771 select OUTER_CACHE
772 help 772 help
773 This option enables the L2 cache on XScale3. 773 This option enables the L2 cache on XScale3.
774
775config ARM_L1_CACHE_SHIFT
776 int
777 default 6 if ARCH_OMAP3
778 default 5
diff --git a/arch/arm/mm/fault.c b/arch/arm/mm/fault.c
index cc8829d7e116..379f78556055 100644
--- a/arch/arm/mm/fault.c
+++ b/arch/arm/mm/fault.c
@@ -25,6 +25,19 @@
25 25
26#include "fault.h" 26#include "fault.h"
27 27
28/*
29 * Fault status register encodings. We steal bit 31 for our own purposes.
30 */
31#define FSR_LNX_PF (1 << 31)
32#define FSR_WRITE (1 << 11)
33#define FSR_FS4 (1 << 10)
34#define FSR_FS3_0 (15)
35
36static inline int fsr_fs(unsigned int fsr)
37{
38 return (fsr & FSR_FS3_0) | (fsr & FSR_FS4) >> 6;
39}
40
28#ifdef CONFIG_MMU 41#ifdef CONFIG_MMU
29 42
30#ifdef CONFIG_KPROBES 43#ifdef CONFIG_KPROBES
@@ -182,18 +195,35 @@ void do_bad_area(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
182#define VM_FAULT_BADMAP 0x010000 195#define VM_FAULT_BADMAP 0x010000
183#define VM_FAULT_BADACCESS 0x020000 196#define VM_FAULT_BADACCESS 0x020000
184 197
185static int 198/*
199 * Check that the permissions on the VMA allow for the fault which occurred.
200 * If we encountered a write fault, we must have write permission, otherwise
201 * we allow any permission.
202 */
203static inline bool access_error(unsigned int fsr, struct vm_area_struct *vma)
204{
205 unsigned int mask = VM_READ | VM_WRITE | VM_EXEC;
206
207 if (fsr & FSR_WRITE)
208 mask = VM_WRITE;
209 if (fsr & FSR_LNX_PF)
210 mask = VM_EXEC;
211
212 return vma->vm_flags & mask ? false : true;
213}
214
215static int __kprobes
186__do_page_fault(struct mm_struct *mm, unsigned long addr, unsigned int fsr, 216__do_page_fault(struct mm_struct *mm, unsigned long addr, unsigned int fsr,
187 struct task_struct *tsk) 217 struct task_struct *tsk)
188{ 218{
189 struct vm_area_struct *vma; 219 struct vm_area_struct *vma;
190 int fault, mask; 220 int fault;
191 221
192 vma = find_vma(mm, addr); 222 vma = find_vma(mm, addr);
193 fault = VM_FAULT_BADMAP; 223 fault = VM_FAULT_BADMAP;
194 if (!vma) 224 if (unlikely(!vma))
195 goto out; 225 goto out;
196 if (vma->vm_start > addr) 226 if (unlikely(vma->vm_start > addr))
197 goto check_stack; 227 goto check_stack;
198 228
199 /* 229 /*
@@ -201,47 +231,24 @@ __do_page_fault(struct mm_struct *mm, unsigned long addr, unsigned int fsr,
201 * memory access, so we can handle it. 231 * memory access, so we can handle it.
202 */ 232 */
203good_area: 233good_area:
204 if (fsr & (1 << 11)) /* write? */ 234 if (access_error(fsr, vma)) {
205 mask = VM_WRITE; 235 fault = VM_FAULT_BADACCESS;
206 else
207 mask = VM_READ|VM_EXEC|VM_WRITE;
208
209 fault = VM_FAULT_BADACCESS;
210 if (!(vma->vm_flags & mask))
211 goto out; 236 goto out;
237 }
212 238
213 /* 239 /*
214 * If for any reason at all we couldn't handle 240 * If for any reason at all we couldn't handle the fault, make
215 * the fault, make sure we exit gracefully rather 241 * sure we exit gracefully rather than endlessly redo the fault.
216 * than endlessly redo the fault.
217 */ 242 */
218survive: 243 fault = handle_mm_fault(mm, vma, addr & PAGE_MASK, (fsr & FSR_WRITE) ? FAULT_FLAG_WRITE : 0);
219 fault = handle_mm_fault(mm, vma, addr & PAGE_MASK, (fsr & (1 << 11)) ? FAULT_FLAG_WRITE : 0); 244 if (unlikely(fault & VM_FAULT_ERROR))
220 if (unlikely(fault & VM_FAULT_ERROR)) { 245 return fault;
221 if (fault & VM_FAULT_OOM)
222 goto out_of_memory;
223 else if (fault & VM_FAULT_SIGBUS)
224 return fault;
225 BUG();
226 }
227 if (fault & VM_FAULT_MAJOR) 246 if (fault & VM_FAULT_MAJOR)
228 tsk->maj_flt++; 247 tsk->maj_flt++;
229 else 248 else
230 tsk->min_flt++; 249 tsk->min_flt++;
231 return fault; 250 return fault;
232 251
233out_of_memory:
234 if (!is_global_init(tsk))
235 goto out;
236
237 /*
238 * If we are out of memory for pid1, sleep for a while and retry
239 */
240 up_read(&mm->mmap_sem);
241 yield();
242 down_read(&mm->mmap_sem);
243 goto survive;
244
245check_stack: 252check_stack:
246 if (vma->vm_flags & VM_GROWSDOWN && !expand_stack(vma, addr)) 253 if (vma->vm_flags & VM_GROWSDOWN && !expand_stack(vma, addr))
247 goto good_area; 254 goto good_area;
@@ -278,6 +285,13 @@ do_page_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
278 if (!user_mode(regs) && !search_exception_tables(regs->ARM_pc)) 285 if (!user_mode(regs) && !search_exception_tables(regs->ARM_pc))
279 goto no_context; 286 goto no_context;
280 down_read(&mm->mmap_sem); 287 down_read(&mm->mmap_sem);
288 } else {
289 /*
290 * The above down_read_trylock() might have succeeded in
291 * which case, we'll have missed the might_sleep() from
292 * down_read()
293 */
294 might_sleep();
281 } 295 }
282 296
283 fault = __do_page_fault(mm, addr, fsr, tsk); 297 fault = __do_page_fault(mm, addr, fsr, tsk);
@@ -289,6 +303,16 @@ do_page_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
289 if (likely(!(fault & (VM_FAULT_ERROR | VM_FAULT_BADMAP | VM_FAULT_BADACCESS)))) 303 if (likely(!(fault & (VM_FAULT_ERROR | VM_FAULT_BADMAP | VM_FAULT_BADACCESS))))
290 return 0; 304 return 0;
291 305
306 if (fault & VM_FAULT_OOM) {
307 /*
308 * We ran out of memory, call the OOM killer, and return to
309 * userspace (which will retry the fault, or kill us if we
310 * got oom-killed)
311 */
312 pagefault_out_of_memory();
313 return 0;
314 }
315
292 /* 316 /*
293 * If we are in kernel mode at this point, we 317 * If we are in kernel mode at this point, we
294 * have no context to handle this fault with. 318 * have no context to handle this fault with.
@@ -296,16 +320,6 @@ do_page_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
296 if (!user_mode(regs)) 320 if (!user_mode(regs))
297 goto no_context; 321 goto no_context;
298 322
299 if (fault & VM_FAULT_OOM) {
300 /*
301 * We ran out of memory, or some other thing
302 * happened to us that made us unable to handle
303 * the page fault gracefully.
304 */
305 printk("VM: killing process %s\n", tsk->comm);
306 do_group_exit(SIGKILL);
307 return 0;
308 }
309 if (fault & VM_FAULT_SIGBUS) { 323 if (fault & VM_FAULT_SIGBUS) {
310 /* 324 /*
311 * We had some memory, but were unable to 325 * We had some memory, but were unable to
@@ -489,10 +503,10 @@ hook_fault_code(int nr, int (*fn)(unsigned long, unsigned int, struct pt_regs *)
489asmlinkage void __exception 503asmlinkage void __exception
490do_DataAbort(unsigned long addr, unsigned int fsr, struct pt_regs *regs) 504do_DataAbort(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
491{ 505{
492 const struct fsr_info *inf = fsr_info + (fsr & 15) + ((fsr & (1 << 10)) >> 6); 506 const struct fsr_info *inf = fsr_info + fsr_fs(fsr);
493 struct siginfo info; 507 struct siginfo info;
494 508
495 if (!inf->fn(addr, fsr, regs)) 509 if (!inf->fn(addr, fsr & ~FSR_LNX_PF, regs))
496 return; 510 return;
497 511
498 printk(KERN_ALERT "Unhandled fault: %s (0x%03x) at 0x%08lx\n", 512 printk(KERN_ALERT "Unhandled fault: %s (0x%03x) at 0x%08lx\n",
@@ -508,6 +522,6 @@ do_DataAbort(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
508asmlinkage void __exception 522asmlinkage void __exception
509do_PrefetchAbort(unsigned long addr, struct pt_regs *regs) 523do_PrefetchAbort(unsigned long addr, struct pt_regs *regs)
510{ 524{
511 do_translation_fault(addr, 0, regs); 525 do_translation_fault(addr, FSR_LNX_PF, regs);
512} 526}
513 527
diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c
index f982606d7bf9..877c492f8e10 100644
--- a/arch/arm/mm/init.c
+++ b/arch/arm/mm/init.c
@@ -613,6 +613,14 @@ void __init mem_init(void)
613 613
614void free_initmem(void) 614void free_initmem(void)
615{ 615{
616#ifdef CONFIG_HAVE_TCM
617 extern char *__tcm_start, *__tcm_end;
618
619 totalram_pages += free_area(__phys_to_pfn(__pa(__tcm_start)),
620 __phys_to_pfn(__pa(__tcm_end)),
621 "TCM link");
622#endif
623
616 if (!machine_is_integrator() && !machine_is_cintegrator()) 624 if (!machine_is_integrator() && !machine_is_cintegrator())
617 totalram_pages += free_area(__phys_to_pfn(__pa(__init_begin)), 625 totalram_pages += free_area(__phys_to_pfn(__pa(__init_begin)),
618 __phys_to_pfn(__pa(__init_end)), 626 __phys_to_pfn(__pa(__init_end)),
diff --git a/arch/arm/plat-iop/adma.c b/arch/arm/plat-iop/adma.c
index 3c127aabe214..1ff6a37e893c 100644
--- a/arch/arm/plat-iop/adma.c
+++ b/arch/arm/plat-iop/adma.c
@@ -179,7 +179,6 @@ static int __init iop3xx_adma_cap_init(void)
179 dma_cap_set(DMA_INTERRUPT, iop3xx_dma_0_data.cap_mask); 179 dma_cap_set(DMA_INTERRUPT, iop3xx_dma_0_data.cap_mask);
180 #else 180 #else
181 dma_cap_set(DMA_MEMCPY, iop3xx_dma_0_data.cap_mask); 181 dma_cap_set(DMA_MEMCPY, iop3xx_dma_0_data.cap_mask);
182 dma_cap_set(DMA_MEMCPY_CRC32C, iop3xx_dma_0_data.cap_mask);
183 dma_cap_set(DMA_INTERRUPT, iop3xx_dma_0_data.cap_mask); 182 dma_cap_set(DMA_INTERRUPT, iop3xx_dma_0_data.cap_mask);
184 #endif 183 #endif
185 184
@@ -188,7 +187,6 @@ static int __init iop3xx_adma_cap_init(void)
188 dma_cap_set(DMA_INTERRUPT, iop3xx_dma_1_data.cap_mask); 187 dma_cap_set(DMA_INTERRUPT, iop3xx_dma_1_data.cap_mask);
189 #else 188 #else
190 dma_cap_set(DMA_MEMCPY, iop3xx_dma_1_data.cap_mask); 189 dma_cap_set(DMA_MEMCPY, iop3xx_dma_1_data.cap_mask);
191 dma_cap_set(DMA_MEMCPY_CRC32C, iop3xx_dma_1_data.cap_mask);
192 dma_cap_set(DMA_INTERRUPT, iop3xx_dma_1_data.cap_mask); 190 dma_cap_set(DMA_INTERRUPT, iop3xx_dma_1_data.cap_mask);
193 #endif 191 #endif
194 192
@@ -198,7 +196,7 @@ static int __init iop3xx_adma_cap_init(void)
198 dma_cap_set(DMA_INTERRUPT, iop3xx_aau_data.cap_mask); 196 dma_cap_set(DMA_INTERRUPT, iop3xx_aau_data.cap_mask);
199 #else 197 #else
200 dma_cap_set(DMA_XOR, iop3xx_aau_data.cap_mask); 198 dma_cap_set(DMA_XOR, iop3xx_aau_data.cap_mask);
201 dma_cap_set(DMA_ZERO_SUM, iop3xx_aau_data.cap_mask); 199 dma_cap_set(DMA_XOR_VAL, iop3xx_aau_data.cap_mask);
202 dma_cap_set(DMA_MEMSET, iop3xx_aau_data.cap_mask); 200 dma_cap_set(DMA_MEMSET, iop3xx_aau_data.cap_mask);
203 dma_cap_set(DMA_INTERRUPT, iop3xx_aau_data.cap_mask); 201 dma_cap_set(DMA_INTERRUPT, iop3xx_aau_data.cap_mask);
204 #endif 202 #endif
diff --git a/arch/arm/plat-pxa/dma.c b/arch/arm/plat-pxa/dma.c
index 70aeee407f7d..2975798d411f 100644
--- a/arch/arm/plat-pxa/dma.c
+++ b/arch/arm/plat-pxa/dma.c
@@ -17,22 +17,266 @@
17#include <linux/kernel.h> 17#include <linux/kernel.h>
18#include <linux/interrupt.h> 18#include <linux/interrupt.h>
19#include <linux/errno.h> 19#include <linux/errno.h>
20#include <linux/dma-mapping.h>
20 21
21#include <asm/system.h> 22#include <asm/system.h>
22#include <asm/irq.h> 23#include <asm/irq.h>
24#include <asm/memory.h>
23#include <mach/hardware.h> 25#include <mach/hardware.h>
24#include <mach/dma.h> 26#include <mach/dma.h>
25 27
28#define DMA_DEBUG_NAME "pxa_dma"
29#define DMA_MAX_REQUESTERS 64
30
26struct dma_channel { 31struct dma_channel {
27 char *name; 32 char *name;
28 pxa_dma_prio prio; 33 pxa_dma_prio prio;
29 void (*irq_handler)(int, void *); 34 void (*irq_handler)(int, void *);
30 void *data; 35 void *data;
36 spinlock_t lock;
31}; 37};
32 38
33static struct dma_channel *dma_channels; 39static struct dma_channel *dma_channels;
34static int num_dma_channels; 40static int num_dma_channels;
35 41
42/*
43 * Debug fs
44 */
45#ifdef CONFIG_DEBUG_FS
46#include <linux/debugfs.h>
47#include <linux/uaccess.h>
48#include <linux/seq_file.h>
49
50static struct dentry *dbgfs_root, *dbgfs_state, **dbgfs_chan;
51
52static int dbg_show_requester_chan(struct seq_file *s, void *p)
53{
54 int pos = 0;
55 int chan = (int)s->private;
56 int i;
57 u32 drcmr;
58
59 pos += seq_printf(s, "DMA channel %d requesters list :\n", chan);
60 for (i = 0; i < DMA_MAX_REQUESTERS; i++) {
61 drcmr = DRCMR(i);
62 if ((drcmr & DRCMR_CHLNUM) == chan)
63 pos += seq_printf(s, "\tRequester %d (MAPVLD=%d)\n", i,
64 !!(drcmr & DRCMR_MAPVLD));
65 }
66 return pos;
67}
68
69static inline int dbg_burst_from_dcmd(u32 dcmd)
70{
71 int burst = (dcmd >> 16) & 0x3;
72
73 return burst ? 4 << burst : 0;
74}
75
76static int is_phys_valid(unsigned long addr)
77{
78 return pfn_valid(__phys_to_pfn(addr));
79}
80
81#define DCSR_STR(flag) (dcsr & DCSR_##flag ? #flag" " : "")
82#define DCMD_STR(flag) (dcmd & DCMD_##flag ? #flag" " : "")
83
84static int dbg_show_descriptors(struct seq_file *s, void *p)
85{
86 int pos = 0;
87 int chan = (int)s->private;
88 int i, max_show = 20, burst, width;
89 u32 dcmd;
90 unsigned long phys_desc;
91 struct pxa_dma_desc *desc;
92 unsigned long flags;
93
94 spin_lock_irqsave(&dma_channels[chan].lock, flags);
95 phys_desc = DDADR(chan);
96
97 pos += seq_printf(s, "DMA channel %d descriptors :\n", chan);
98 pos += seq_printf(s, "[%03d] First descriptor unknown\n", 0);
99 for (i = 1; i < max_show && is_phys_valid(phys_desc); i++) {
100 desc = phys_to_virt(phys_desc);
101 dcmd = desc->dcmd;
102 burst = dbg_burst_from_dcmd(dcmd);
103 width = (1 << ((dcmd >> 14) & 0x3)) >> 1;
104
105 pos += seq_printf(s, "[%03d] Desc at %08lx(virt %p)\n",
106 i, phys_desc, desc);
107 pos += seq_printf(s, "\tDDADR = %08x\n", desc->ddadr);
108 pos += seq_printf(s, "\tDSADR = %08x\n", desc->dsadr);
109 pos += seq_printf(s, "\tDTADR = %08x\n", desc->dtadr);
110 pos += seq_printf(s, "\tDCMD = %08x (%s%s%s%s%s%s%sburst=%d"
111 " width=%d len=%d)\n",
112 dcmd,
113 DCMD_STR(INCSRCADDR), DCMD_STR(INCTRGADDR),
114 DCMD_STR(FLOWSRC), DCMD_STR(FLOWTRG),
115 DCMD_STR(STARTIRQEN), DCMD_STR(ENDIRQEN),
116 DCMD_STR(ENDIAN), burst, width,
117 dcmd & DCMD_LENGTH);
118 phys_desc = desc->ddadr;
119 }
120 if (i == max_show)
121 pos += seq_printf(s, "[%03d] Desc at %08lx ... max display reached\n",
122 i, phys_desc);
123 else
124 pos += seq_printf(s, "[%03d] Desc at %08lx is %s\n",
125 i, phys_desc, phys_desc == DDADR_STOP ?
126 "DDADR_STOP" : "invalid");
127
128 spin_unlock_irqrestore(&dma_channels[chan].lock, flags);
129 return pos;
130}
131
132static int dbg_show_chan_state(struct seq_file *s, void *p)
133{
134 int pos = 0;
135 int chan = (int)s->private;
136 u32 dcsr, dcmd;
137 int burst, width;
138 static char *str_prio[] = { "high", "normal", "low" };
139
140 dcsr = DCSR(chan);
141 dcmd = DCMD(chan);
142 burst = dbg_burst_from_dcmd(dcmd);
143 width = (1 << ((dcmd >> 14) & 0x3)) >> 1;
144
145 pos += seq_printf(s, "DMA channel %d\n", chan);
146 pos += seq_printf(s, "\tPriority : %s\n",
147 str_prio[dma_channels[chan].prio]);
148 pos += seq_printf(s, "\tUnaligned transfer bit: %s\n",
149 DALGN & (1 << chan) ? "yes" : "no");
150 pos += seq_printf(s, "\tDCSR = %08x (%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s)\n",
151 dcsr, DCSR_STR(RUN), DCSR_STR(NODESC),
152 DCSR_STR(STOPIRQEN), DCSR_STR(EORIRQEN),
153 DCSR_STR(EORJMPEN), DCSR_STR(EORSTOPEN),
154 DCSR_STR(SETCMPST), DCSR_STR(CLRCMPST),
155 DCSR_STR(CMPST), DCSR_STR(EORINTR), DCSR_STR(REQPEND),
156 DCSR_STR(STOPSTATE), DCSR_STR(ENDINTR),
157 DCSR_STR(STARTINTR), DCSR_STR(BUSERR));
158
159 pos += seq_printf(s, "\tDCMD = %08x (%s%s%s%s%s%s%sburst=%d width=%d"
160 " len=%d)\n",
161 dcmd,
162 DCMD_STR(INCSRCADDR), DCMD_STR(INCTRGADDR),
163 DCMD_STR(FLOWSRC), DCMD_STR(FLOWTRG),
164 DCMD_STR(STARTIRQEN), DCMD_STR(ENDIRQEN),
165 DCMD_STR(ENDIAN), burst, width, dcmd & DCMD_LENGTH);
166 pos += seq_printf(s, "\tDSADR = %08x\n", DSADR(chan));
167 pos += seq_printf(s, "\tDTADR = %08x\n", DTADR(chan));
168 pos += seq_printf(s, "\tDDADR = %08x\n", DDADR(chan));
169 return pos;
170}
171
172static int dbg_show_state(struct seq_file *s, void *p)
173{
174 int pos = 0;
175
176 /* basic device status */
177 pos += seq_printf(s, "DMA engine status\n");
178 pos += seq_printf(s, "\tChannel number: %d\n", num_dma_channels);
179
180 return pos;
181}
182
183#define DBGFS_FUNC_DECL(name) \
184static int dbg_open_##name(struct inode *inode, struct file *file) \
185{ \
186 return single_open(file, dbg_show_##name, inode->i_private); \
187} \
188static const struct file_operations dbg_fops_##name = { \
189 .owner = THIS_MODULE, \
190 .open = dbg_open_##name, \
191 .llseek = seq_lseek, \
192 .read = seq_read, \
193 .release = single_release, \
194}
195
196DBGFS_FUNC_DECL(state);
197DBGFS_FUNC_DECL(chan_state);
198DBGFS_FUNC_DECL(descriptors);
199DBGFS_FUNC_DECL(requester_chan);
200
201static struct dentry *pxa_dma_dbg_alloc_chan(int ch, struct dentry *chandir)
202{
203 char chan_name[11];
204 struct dentry *chan, *chan_state = NULL, *chan_descr = NULL;
205 struct dentry *chan_reqs = NULL;
206 void *dt;
207
208 scnprintf(chan_name, sizeof(chan_name), "%d", ch);
209 chan = debugfs_create_dir(chan_name, chandir);
210 dt = (void *)ch;
211
212 if (chan)
213 chan_state = debugfs_create_file("state", 0400, chan, dt,
214 &dbg_fops_chan_state);
215 if (chan_state)
216 chan_descr = debugfs_create_file("descriptors", 0400, chan, dt,
217 &dbg_fops_descriptors);
218 if (chan_descr)
219 chan_reqs = debugfs_create_file("requesters", 0400, chan, dt,
220 &dbg_fops_requester_chan);
221 if (!chan_reqs)
222 goto err_state;
223
224 return chan;
225
226err_state:
227 debugfs_remove_recursive(chan);
228 return NULL;
229}
230
231static void pxa_dma_init_debugfs(void)
232{
233 int i;
234 struct dentry *chandir;
235
236 dbgfs_root = debugfs_create_dir(DMA_DEBUG_NAME, NULL);
237 if (IS_ERR(dbgfs_root) || !dbgfs_root)
238 goto err_root;
239
240 dbgfs_state = debugfs_create_file("state", 0400, dbgfs_root, NULL,
241 &dbg_fops_state);
242 if (!dbgfs_state)
243 goto err_state;
244
245 dbgfs_chan = kmalloc(sizeof(*dbgfs_state) * num_dma_channels,
246 GFP_KERNEL);
247 if (!dbgfs_state)
248 goto err_alloc;
249
250 chandir = debugfs_create_dir("channels", dbgfs_root);
251 if (!chandir)
252 goto err_chandir;
253
254 for (i = 0; i < num_dma_channels; i++) {
255 dbgfs_chan[i] = pxa_dma_dbg_alloc_chan(i, chandir);
256 if (!dbgfs_chan[i])
257 goto err_chans;
258 }
259
260 return;
261err_chans:
262err_chandir:
263 kfree(dbgfs_chan);
264err_alloc:
265err_state:
266 debugfs_remove_recursive(dbgfs_root);
267err_root:
268 pr_err("pxa_dma: debugfs is not available\n");
269}
270
271static void __exit pxa_dma_cleanup_debugfs(void)
272{
273 debugfs_remove_recursive(dbgfs_root);
274}
275#else
276static inline void pxa_dma_init_debugfs(void) {}
277static inline void pxa_dma_cleanup_debugfs(void) {}
278#endif
279
36int pxa_request_dma (char *name, pxa_dma_prio prio, 280int pxa_request_dma (char *name, pxa_dma_prio prio,
37 void (*irq_handler)(int, void *), 281 void (*irq_handler)(int, void *),
38 void *data) 282 void *data)
@@ -71,6 +315,7 @@ int pxa_request_dma (char *name, pxa_dma_prio prio,
71 local_irq_restore(flags); 315 local_irq_restore(flags);
72 return i; 316 return i;
73} 317}
318EXPORT_SYMBOL(pxa_request_dma);
74 319
75void pxa_free_dma (int dma_ch) 320void pxa_free_dma (int dma_ch)
76{ 321{
@@ -88,24 +333,26 @@ void pxa_free_dma (int dma_ch)
88 dma_channels[dma_ch].name = NULL; 333 dma_channels[dma_ch].name = NULL;
89 local_irq_restore(flags); 334 local_irq_restore(flags);
90} 335}
336EXPORT_SYMBOL(pxa_free_dma);
91 337
92static irqreturn_t dma_irq_handler(int irq, void *dev_id) 338static irqreturn_t dma_irq_handler(int irq, void *dev_id)
93{ 339{
94 int i, dint = DINT; 340 int i, dint = DINT;
341 struct dma_channel *channel;
95 342
96 for (i = 0; i < num_dma_channels; i++) { 343 while (dint) {
97 if (dint & (1 << i)) { 344 i = __ffs(dint);
98 struct dma_channel *channel = &dma_channels[i]; 345 dint &= (dint - 1);
99 if (channel->name && channel->irq_handler) { 346 channel = &dma_channels[i];
100 channel->irq_handler(i, channel->data); 347 if (channel->name && channel->irq_handler) {
101 } else { 348 channel->irq_handler(i, channel->data);
102 /* 349 } else {
103 * IRQ for an unregistered DMA channel: 350 /*
104 * let's clear the interrupts and disable it. 351 * IRQ for an unregistered DMA channel:
105 */ 352 * let's clear the interrupts and disable it.
106 printk (KERN_WARNING "spurious IRQ for DMA channel %d\n", i); 353 */
107 DCSR(i) = DCSR_STARTINTR|DCSR_ENDINTR|DCSR_BUSERR; 354 printk (KERN_WARNING "spurious IRQ for DMA channel %d\n", i);
108 } 355 DCSR(i) = DCSR_STARTINTR|DCSR_ENDINTR|DCSR_BUSERR;
109 } 356 }
110 } 357 }
111 return IRQ_HANDLED; 358 return IRQ_HANDLED;
@@ -127,6 +374,7 @@ int __init pxa_init_dma(int irq, int num_ch)
127 for (i = 0; i < num_ch; i++) { 374 for (i = 0; i < num_ch; i++) {
128 DCSR(i) = 0; 375 DCSR(i) = 0;
129 dma_channels[i].prio = min((i & 0xf) >> 2, DMA_PRIO_LOW); 376 dma_channels[i].prio = min((i & 0xf) >> 2, DMA_PRIO_LOW);
377 spin_lock_init(&dma_channels[i].lock);
130 } 378 }
131 379
132 ret = request_irq(irq, dma_irq_handler, IRQF_DISABLED, "DMA", NULL); 380 ret = request_irq(irq, dma_irq_handler, IRQF_DISABLED, "DMA", NULL);
@@ -135,10 +383,9 @@ int __init pxa_init_dma(int irq, int num_ch)
135 kfree(dma_channels); 383 kfree(dma_channels);
136 return ret; 384 return ret;
137 } 385 }
138
139 num_dma_channels = num_ch; 386 num_dma_channels = num_ch;
387
388 pxa_dma_init_debugfs();
389
140 return 0; 390 return 0;
141} 391}
142
143EXPORT_SYMBOL(pxa_request_dma);
144EXPORT_SYMBOL(pxa_free_dma);
diff --git a/arch/arm/plat-pxa/include/plat/mfp.h b/arch/arm/plat-pxa/include/plat/mfp.h
index 64019464c8db..22086e696e8e 100644
--- a/arch/arm/plat-pxa/include/plat/mfp.h
+++ b/arch/arm/plat-pxa/include/plat/mfp.h
@@ -150,6 +150,74 @@ enum {
150 MFP_PIN_GPIO125, 150 MFP_PIN_GPIO125,
151 MFP_PIN_GPIO126, 151 MFP_PIN_GPIO126,
152 MFP_PIN_GPIO127, 152 MFP_PIN_GPIO127,
153
154 MFP_PIN_GPIO128,
155 MFP_PIN_GPIO129,
156 MFP_PIN_GPIO130,
157 MFP_PIN_GPIO131,
158 MFP_PIN_GPIO132,
159 MFP_PIN_GPIO133,
160 MFP_PIN_GPIO134,
161 MFP_PIN_GPIO135,
162 MFP_PIN_GPIO136,
163 MFP_PIN_GPIO137,
164 MFP_PIN_GPIO138,
165 MFP_PIN_GPIO139,
166 MFP_PIN_GPIO140,
167 MFP_PIN_GPIO141,
168 MFP_PIN_GPIO142,
169 MFP_PIN_GPIO143,
170 MFP_PIN_GPIO144,
171 MFP_PIN_GPIO145,
172 MFP_PIN_GPIO146,
173 MFP_PIN_GPIO147,
174 MFP_PIN_GPIO148,
175 MFP_PIN_GPIO149,
176 MFP_PIN_GPIO150,
177 MFP_PIN_GPIO151,
178 MFP_PIN_GPIO152,
179 MFP_PIN_GPIO153,
180 MFP_PIN_GPIO154,
181 MFP_PIN_GPIO155,
182 MFP_PIN_GPIO156,
183 MFP_PIN_GPIO157,
184 MFP_PIN_GPIO158,
185 MFP_PIN_GPIO159,
186 MFP_PIN_GPIO160,
187 MFP_PIN_GPIO161,
188 MFP_PIN_GPIO162,
189 MFP_PIN_GPIO163,
190 MFP_PIN_GPIO164,
191 MFP_PIN_GPIO165,
192 MFP_PIN_GPIO166,
193 MFP_PIN_GPIO167,
194 MFP_PIN_GPIO168,
195 MFP_PIN_GPIO169,
196 MFP_PIN_GPIO170,
197 MFP_PIN_GPIO171,
198 MFP_PIN_GPIO172,
199 MFP_PIN_GPIO173,
200 MFP_PIN_GPIO174,
201 MFP_PIN_GPIO175,
202 MFP_PIN_GPIO176,
203 MFP_PIN_GPIO177,
204 MFP_PIN_GPIO178,
205 MFP_PIN_GPIO179,
206 MFP_PIN_GPIO180,
207 MFP_PIN_GPIO181,
208 MFP_PIN_GPIO182,
209 MFP_PIN_GPIO183,
210 MFP_PIN_GPIO184,
211 MFP_PIN_GPIO185,
212 MFP_PIN_GPIO186,
213 MFP_PIN_GPIO187,
214 MFP_PIN_GPIO188,
215 MFP_PIN_GPIO189,
216 MFP_PIN_GPIO190,
217 MFP_PIN_GPIO191,
218
219 MFP_PIN_GPIO255 = 255,
220
153 MFP_PIN_GPIO0_2, 221 MFP_PIN_GPIO0_2,
154 MFP_PIN_GPIO1_2, 222 MFP_PIN_GPIO1_2,
155 MFP_PIN_GPIO2_2, 223 MFP_PIN_GPIO2_2,
@@ -325,8 +393,9 @@ typedef unsigned long mfp_cfg_t;
325#define MFP_PULL_LOW (0x1 << 21) 393#define MFP_PULL_LOW (0x1 << 21)
326#define MFP_PULL_HIGH (0x2 << 21) 394#define MFP_PULL_HIGH (0x2 << 21)
327#define MFP_PULL_BOTH (0x3 << 21) 395#define MFP_PULL_BOTH (0x3 << 21)
328#define MFP_PULL_MASK (0x3 << 21) 396#define MFP_PULL_FLOAT (0x4 << 21)
329#define MFP_PULL(x) (((x) >> 21) & 0x3) 397#define MFP_PULL_MASK (0x7 << 21)
398#define MFP_PULL(x) (((x) >> 21) & 0x7)
330 399
331#define MFP_CFG_DEFAULT (MFP_AF0 | MFP_DS03X | MFP_LPM_DEFAULT |\ 400#define MFP_CFG_DEFAULT (MFP_AF0 | MFP_DS03X | MFP_LPM_DEFAULT |\
332 MFP_LPM_EDGE_NONE | MFP_PULL_NONE) 401 MFP_LPM_EDGE_NONE | MFP_PULL_NONE)
diff --git a/arch/arm/plat-pxa/mfp.c b/arch/arm/plat-pxa/mfp.c
index e716c622a17c..9405d0379c85 100644
--- a/arch/arm/plat-pxa/mfp.c
+++ b/arch/arm/plat-pxa/mfp.c
@@ -77,11 +77,13 @@
77 * MFPR_PULL_LOW 1 0 1 77 * MFPR_PULL_LOW 1 0 1
78 * MFPR_PULL_HIGH 1 1 0 78 * MFPR_PULL_HIGH 1 1 0
79 * MFPR_PULL_BOTH 1 1 1 79 * MFPR_PULL_BOTH 1 1 1
80 * MFPR_PULL_FLOAT 1 0 0
80 */ 81 */
81#define MFPR_PULL_NONE (0) 82#define MFPR_PULL_NONE (0)
82#define MFPR_PULL_LOW (MFPR_PULL_SEL | MFPR_PULLDOWN_EN) 83#define MFPR_PULL_LOW (MFPR_PULL_SEL | MFPR_PULLDOWN_EN)
83#define MFPR_PULL_BOTH (MFPR_PULL_LOW | MFPR_PULLUP_EN) 84#define MFPR_PULL_BOTH (MFPR_PULL_LOW | MFPR_PULLUP_EN)
84#define MFPR_PULL_HIGH (MFPR_PULL_SEL | MFPR_PULLUP_EN) 85#define MFPR_PULL_HIGH (MFPR_PULL_SEL | MFPR_PULLUP_EN)
86#define MFPR_PULL_FLOAT (MFPR_PULL_SEL)
85 87
86/* mfp_spin_lock is used to ensure that MFP register configuration 88/* mfp_spin_lock is used to ensure that MFP register configuration
87 * (most likely a read-modify-write operation) is atomic, and that 89 * (most likely a read-modify-write operation) is atomic, and that
@@ -116,6 +118,7 @@ static const unsigned long mfpr_pull[] = {
116 MFPR_PULL_LOW, 118 MFPR_PULL_LOW,
117 MFPR_PULL_HIGH, 119 MFPR_PULL_HIGH,
118 MFPR_PULL_BOTH, 120 MFPR_PULL_BOTH,
121 MFPR_PULL_FLOAT,
119}; 122};
120 123
121/* mapping of MFP_LPM_EDGE_* definitions to MFPR_EDGE_* register bits */ 124/* mapping of MFP_LPM_EDGE_* definitions to MFPR_EDGE_* register bits */
diff --git a/arch/arm/plat-s3c/gpio.c b/arch/arm/plat-s3c/gpio.c
index 260fdc6ad685..5ff24e0f9f89 100644
--- a/arch/arm/plat-s3c/gpio.c
+++ b/arch/arm/plat-s3c/gpio.c
@@ -28,7 +28,7 @@ static __init void s3c_gpiolib_track(struct s3c_gpio_chip *chip)
28 28
29 gpn = chip->chip.base; 29 gpn = chip->chip.base;
30 for (i = 0; i < chip->chip.ngpio; i++, gpn++) { 30 for (i = 0; i < chip->chip.ngpio; i++, gpn++) {
31 BUG_ON(gpn > ARRAY_SIZE(s3c_gpios)); 31 BUG_ON(gpn >= ARRAY_SIZE(s3c_gpios));
32 s3c_gpios[gpn] = chip; 32 s3c_gpios[gpn] = chip;
33 } 33 }
34} 34}
diff --git a/arch/arm/plat-s3c64xx/dma.c b/arch/arm/plat-s3c64xx/dma.c
index 67aa93dbb69e..266a10745a85 100644
--- a/arch/arm/plat-s3c64xx/dma.c
+++ b/arch/arm/plat-s3c64xx/dma.c
@@ -345,13 +345,13 @@ int s3c2410_dma_enqueue(unsigned int channel, void *id,
345 if (!chan) 345 if (!chan)
346 return -EINVAL; 346 return -EINVAL;
347 347
348 buff = kzalloc(sizeof(struct s3c64xx_dma_buff), GFP_KERNEL); 348 buff = kzalloc(sizeof(struct s3c64xx_dma_buff), GFP_ATOMIC);
349 if (!buff) { 349 if (!buff) {
350 printk(KERN_ERR "%s: no memory for buffer\n", __func__); 350 printk(KERN_ERR "%s: no memory for buffer\n", __func__);
351 return -ENOMEM; 351 return -ENOMEM;
352 } 352 }
353 353
354 lli = dma_pool_alloc(dma_pool, GFP_KERNEL, &buff->lli_dma); 354 lli = dma_pool_alloc(dma_pool, GFP_ATOMIC, &buff->lli_dma);
355 if (!lli) { 355 if (!lli) {
356 printk(KERN_ERR "%s: no memory for lli\n", __func__); 356 printk(KERN_ERR "%s: no memory for lli\n", __func__);
357 ret = -ENOMEM; 357 ret = -ENOMEM;
@@ -697,7 +697,7 @@ static int __init s3c64xx_dma_init(void)
697 697
698 printk(KERN_INFO "%s: Registering DMA channels\n", __func__); 698 printk(KERN_INFO "%s: Registering DMA channels\n", __func__);
699 699
700 dma_pool = dma_pool_create("DMA-LLI", NULL, 32, 16, 0); 700 dma_pool = dma_pool_create("DMA-LLI", NULL, sizeof(struct pl080s_lli), 16, 0);
701 if (!dma_pool) { 701 if (!dma_pool) {
702 printk(KERN_ERR "%s: failed to create pool\n", __func__); 702 printk(KERN_ERR "%s: failed to create pool\n", __func__);
703 return -ENOMEM; 703 return -ENOMEM;
diff --git a/arch/arm/plat-s3c64xx/include/plat/dma-plat.h b/arch/arm/plat-s3c64xx/include/plat/dma-plat.h
index 0c30dd986725..8f76a1e474d6 100644
--- a/arch/arm/plat-s3c64xx/include/plat/dma-plat.h
+++ b/arch/arm/plat-s3c64xx/include/plat/dma-plat.h
@@ -26,7 +26,7 @@ struct s3c64xx_dma_buff {
26 struct s3c64xx_dma_buff *next; 26 struct s3c64xx_dma_buff *next;
27 27
28 void *pw; 28 void *pw;
29 struct pl080_lli *lli; 29 struct pl080s_lli *lli;
30 dma_addr_t lli_dma; 30 dma_addr_t lli_dma;
31}; 31};
32 32
diff --git a/arch/arm/plat-s3c64xx/include/plat/irqs.h b/arch/arm/plat-s3c64xx/include/plat/irqs.h
index 743a70094d04..7956fd3bb194 100644
--- a/arch/arm/plat-s3c64xx/include/plat/irqs.h
+++ b/arch/arm/plat-s3c64xx/include/plat/irqs.h
@@ -194,9 +194,17 @@
194 194
195#define IRQ_EINT_GROUP(group, no) (IRQ_EINT_GROUP##group##_BASE + (no)) 195#define IRQ_EINT_GROUP(group, no) (IRQ_EINT_GROUP##group##_BASE + (no))
196 196
197/* Define a group of interrupts for board-specific use (eg, for MFD
198 * interrupt controllers). */
199#define IRQ_BOARD_START (IRQ_EINT_GROUP9_BASE + IRQ_EINT_GROUP9_NR + 1)
200
201#define IRQ_BOARD_NR 16
202
203#define IRQ_BOARD_END (IRQ_BOARD_START + IRQ_BOARD_NR)
204
197/* Set the default NR_IRQS */ 205/* Set the default NR_IRQS */
198 206
199#define NR_IRQS (IRQ_EINT_GROUP9_BASE + IRQ_EINT_GROUP9_NR + 1) 207#define NR_IRQS (IRQ_BOARD_END + 1)
200 208
201#endif /* __ASM_PLAT_S3C64XX_IRQS_H */ 209#endif /* __ASM_PLAT_S3C64XX_IRQS_H */
202 210
diff --git a/arch/arm/plat-s3c64xx/s3c6400-clock.c b/arch/arm/plat-s3c64xx/s3c6400-clock.c
index febac1950d8e..9745852261e0 100644
--- a/arch/arm/plat-s3c64xx/s3c6400-clock.c
+++ b/arch/arm/plat-s3c64xx/s3c6400-clock.c
@@ -302,8 +302,8 @@ static int s3c64xx_setrate_clksrc(struct clk *clk, unsigned long rate)
302 return -EINVAL; 302 return -EINVAL;
303 303
304 val = __raw_readl(reg); 304 val = __raw_readl(reg);
305 val &= ~(0xf << sclk->shift); 305 val &= ~(0xf << sclk->divider_shift);
306 val |= (div - 1) << sclk->shift; 306 val |= (div - 1) << sclk->divider_shift;
307 __raw_writel(val, reg); 307 __raw_writel(val, reg);
308 308
309 return 0; 309 return 0;
@@ -328,6 +328,8 @@ static int s3c64xx_setparent_clksrc(struct clk *clk, struct clk *parent)
328 clksrc |= src_nr << sclk->shift; 328 clksrc |= src_nr << sclk->shift;
329 329
330 __raw_writel(clksrc, S3C_CLK_SRC); 330 __raw_writel(clksrc, S3C_CLK_SRC);
331
332 clk->parent = parent;
331 return 0; 333 return 0;
332 } 334 }
333 335
@@ -343,7 +345,7 @@ static unsigned long s3c64xx_roundrate_clksrc(struct clk *clk,
343 if (rate > parent_rate) 345 if (rate > parent_rate)
344 rate = parent_rate; 346 rate = parent_rate;
345 else { 347 else {
346 div = rate / parent_rate; 348 div = parent_rate / rate;
347 349
348 if (div == 0) 350 if (div == 0)
349 div = 1; 351 div = 1;
diff --git a/arch/arm/plat-stmp3xxx/dma.c b/arch/arm/plat-stmp3xxx/dma.c
index d2f497764dce..ef88f25fb870 100644
--- a/arch/arm/plat-stmp3xxx/dma.c
+++ b/arch/arm/plat-stmp3xxx/dma.c
@@ -264,7 +264,7 @@ int stmp3xxx_dma_make_chain(int ch, struct stmp37xx_circ_dma_chain *chain,
264 stmp3xxx_dma_free_command(ch, 264 stmp3xxx_dma_free_command(ch,
265 &descriptors 265 &descriptors
266 [i]); 266 [i]);
267 } while (i-- >= 0); 267 } while (i-- > 0);
268 } 268 }
269 return err; 269 return err;
270 } 270 }
diff --git a/arch/arm/tools/mach-types b/arch/arm/tools/mach-types
index c8c55b469342..94be7bb6cb9a 100644
--- a/arch/arm/tools/mach-types
+++ b/arch/arm/tools/mach-types
@@ -12,7 +12,7 @@
12# 12#
13# http://www.arm.linux.org.uk/developer/machines/?action=new 13# http://www.arm.linux.org.uk/developer/machines/?action=new
14# 14#
15# Last update: Sat Sep 12 12:00:16 2009 15# Last update: Fri Sep 18 21:42:00 2009
16# 16#
17# machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number 17# machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number
18# 18#
@@ -1638,7 +1638,7 @@ mx35evb MACH_MX35EVB MX35EVB 1643
1638aml_m8050 MACH_AML_M8050 AML_M8050 1644 1638aml_m8050 MACH_AML_M8050 AML_M8050 1644
1639mx35_3ds MACH_MX35_3DS MX35_3DS 1645 1639mx35_3ds MACH_MX35_3DS MX35_3DS 1645
1640mars MACH_MARS MARS 1646 1640mars MACH_MARS MARS 1646
1641ntosd_644xa MACH_NTOSD_644XA NTOSD_644XA 1647 1641neuros_osd2 MACH_NEUROS_OSD2 NEUROS_OSD2 1647
1642badger MACH_BADGER BADGER 1648 1642badger MACH_BADGER BADGER 1648
1643trizeps4wl MACH_TRIZEPS4WL TRIZEPS4WL 1649 1643trizeps4wl MACH_TRIZEPS4WL TRIZEPS4WL 1649
1644trizeps5 MACH_TRIZEPS5 TRIZEPS5 1650 1644trizeps5 MACH_TRIZEPS5 TRIZEPS5 1650
@@ -1654,7 +1654,7 @@ vf10xx MACH_VF10XX VF10XX 1659
1654zoran43xx MACH_ZORAN43XX ZORAN43XX 1660 1654zoran43xx MACH_ZORAN43XX ZORAN43XX 1660
1655sonix926 MACH_SONIX926 SONIX926 1661 1655sonix926 MACH_SONIX926 SONIX926 1661
1656celestialsemi MACH_CELESTIALSEMI CELESTIALSEMI 1662 1656celestialsemi MACH_CELESTIALSEMI CELESTIALSEMI 1662
1657cc9m2443 MACH_CC9M2443 CC9M2443 1663 1657cc9m2443js MACH_CC9M2443JS CC9M2443JS 1663
1658tw5334 MACH_TW5334 TW5334 1664 1658tw5334 MACH_TW5334 TW5334 1664
1659omap_htcartemis MACH_HTCARTEMIS HTCARTEMIS 1665 1659omap_htcartemis MACH_HTCARTEMIS HTCARTEMIS 1665
1660nal_hlite MACH_NAL_HLITE NAL_HLITE 1666 1660nal_hlite MACH_NAL_HLITE NAL_HLITE 1666
@@ -1802,7 +1802,7 @@ ccw9p9215js MACH_CCW9P9215JS CCW9P9215JS 1811
1802rd88f5181l_ge MACH_RD88F5181L_GE RD88F5181L_GE 1812 1802rd88f5181l_ge MACH_RD88F5181L_GE RD88F5181L_GE 1812
1803sifmain MACH_SIFMAIN SIFMAIN 1813 1803sifmain MACH_SIFMAIN SIFMAIN 1813
1804sam9_l9261 MACH_SAM9_L9261 SAM9_L9261 1814 1804sam9_l9261 MACH_SAM9_L9261 SAM9_L9261 1814
1805cc9m2443js MACH_CC9M2443JS CC9M2443JS 1815 1805cc9m2443 MACH_CC9M2443 CC9M2443 1815
1806xaria300 MACH_XARIA300 XARIA300 1816 1806xaria300 MACH_XARIA300 XARIA300 1816
1807it9200 MACH_IT9200 IT9200 1817 1807it9200 MACH_IT9200 IT9200 1817
1808rd88f5181l_fxo MACH_RD88F5181L_FXO RD88F5181L_FXO 1818 1808rd88f5181l_fxo MACH_RD88F5181L_FXO RD88F5181L_FXO 1818
@@ -2409,3 +2409,15 @@ platypus MACH_PLATYPUS PLATYPUS 2422
2409pss2 MACH_PSS2 PSS2 2423 2409pss2 MACH_PSS2 PSS2 2423
2410davinci_apm150 MACH_DAVINCI_APM150 DAVINCI_APM150 2424 2410davinci_apm150 MACH_DAVINCI_APM150 DAVINCI_APM150 2424
2411str9100 MACH_STR9100 STR9100 2425 2411str9100 MACH_STR9100 STR9100 2425
2412net5big MACH_NET5BIG NET5BIG 2426
2413seabed9263 MACH_SEABED9263 SEABED9263 2427
2414mx51_m2id MACH_MX51_M2ID MX51_M2ID 2428
2415octvocplus_eb MACH_OCTVOCPLUS_EB OCTVOCPLUS_EB 2429
2416klk_firefox MACH_KLK_FIREFOX KLK_FIREFOX 2430
2417klk_wirma_module MACH_KLK_WIRMA_MODULE KLK_WIRMA_MODULE 2431
2418klk_wirma_mmi MACH_KLK_WIRMA_MMI KLK_WIRMA_MMI 2432
2419supersonic MACH_SUPERSONIC SUPERSONIC 2433
2420liberty MACH_LIBERTY LIBERTY 2434
2421mh355 MACH_MH355 MH355 2435
2422pc7802 MACH_PC7802 PC7802 2436
2423gnet_sgc MACH_GNET_SGC GNET_SGC 2437
diff --git a/arch/blackfin/kernel/vmlinux.lds.S b/arch/blackfin/kernel/vmlinux.lds.S
index 21ac7c26079e..ffd90fbbc8f9 100644
--- a/arch/blackfin/kernel/vmlinux.lds.S
+++ b/arch/blackfin/kernel/vmlinux.lds.S
@@ -96,8 +96,7 @@ SECTIONS
96 { 96 {
97 __sdata = .; 97 __sdata = .;
98 /* This gets done first, so the glob doesn't suck it in */ 98 /* This gets done first, so the glob doesn't suck it in */
99 . = ALIGN(32); 99 CACHELINE_ALIGNED_DATA(32)
100 *(.data.cacheline_aligned)
101 100
102#if !L1_DATA_A_LENGTH 101#if !L1_DATA_A_LENGTH
103 . = ALIGN(32); 102 . = ALIGN(32);
@@ -116,12 +115,7 @@ SECTIONS
116 DATA_DATA 115 DATA_DATA
117 CONSTRUCTORS 116 CONSTRUCTORS
118 117
119 /* make sure the init_task is aligned to the 118 INIT_TASK_DATA(THREAD_SIZE)
120 * kernel thread size so we can locate the kernel
121 * stack properly and quickly.
122 */
123 . = ALIGN(THREAD_SIZE);
124 *(.init_task.data)
125 119
126 __edata = .; 120 __edata = .;
127 } 121 }
@@ -134,39 +128,10 @@ SECTIONS
134 . = ALIGN(PAGE_SIZE); 128 . = ALIGN(PAGE_SIZE);
135 ___init_begin = .; 129 ___init_begin = .;
136 130
137 .init.text : 131 INIT_TEXT_SECTION(PAGE_SIZE)
138 { 132 . = ALIGN(16);
139 . = ALIGN(PAGE_SIZE); 133 INIT_DATA_SECTION(16)
140 __sinittext = .;
141 INIT_TEXT
142 __einittext = .;
143 }
144 .init.data :
145 {
146 . = ALIGN(16);
147 INIT_DATA
148 }
149 .init.setup :
150 {
151 . = ALIGN(16);
152 ___setup_start = .;
153 *(.init.setup)
154 ___setup_end = .;
155 }
156 .initcall.init :
157 {
158 ___initcall_start = .;
159 INITCALLS
160 ___initcall_end = .;
161 }
162 .con_initcall.init :
163 {
164 ___con_initcall_start = .;
165 *(.con_initcall.init)
166 ___con_initcall_end = .;
167 }
168 PERCPU(4) 134 PERCPU(4)
169 SECURITY_INIT
170 135
171 /* we have to discard exit text and such at runtime, not link time, to 136 /* we have to discard exit text and such at runtime, not link time, to
172 * handle embedded cross-section references (alt instructions, bug 137 * handle embedded cross-section references (alt instructions, bug
@@ -181,18 +146,9 @@ SECTIONS
181 EXIT_DATA 146 EXIT_DATA
182 } 147 }
183 148
184 .init.ramfs :
185 {
186 . = ALIGN(4);
187 ___initramfs_start = .;
188 *(.init.ramfs)
189 . = ALIGN(4);
190 ___initramfs_end = .;
191 }
192
193 __l1_lma_start = .; 149 __l1_lma_start = .;
194 150
195 .text_l1 L1_CODE_START : AT(LOADADDR(.init.ramfs) + SIZEOF(.init.ramfs)) 151 .text_l1 L1_CODE_START : AT(LOADADDR(.exit.data) + SIZEOF(.exit.data))
196 { 152 {
197 . = ALIGN(4); 153 . = ALIGN(4);
198 __stext_l1 = .; 154 __stext_l1 = .;
diff --git a/arch/cris/arch-v10/kernel/time.c b/arch/cris/arch-v10/kernel/time.c
index 2b73c7a5b649..31ca1418d5a7 100644
--- a/arch/cris/arch-v10/kernel/time.c
+++ b/arch/cris/arch-v10/kernel/time.c
@@ -28,7 +28,6 @@
28 28
29extern void update_xtime_from_cmos(void); 29extern void update_xtime_from_cmos(void);
30extern int set_rtc_mmss(unsigned long nowtime); 30extern int set_rtc_mmss(unsigned long nowtime);
31extern int setup_irq(int, struct irqaction *);
32extern int have_rtc; 31extern int have_rtc;
33 32
34unsigned long get_ns_in_jiffie(void) 33unsigned long get_ns_in_jiffie(void)
diff --git a/arch/cris/arch-v32/kernel/smp.c b/arch/cris/arch-v32/kernel/smp.c
index d2a3ff8c4d37..058adddf4e4b 100644
--- a/arch/cris/arch-v32/kernel/smp.c
+++ b/arch/cris/arch-v32/kernel/smp.c
@@ -52,8 +52,6 @@ static struct mm_struct* flush_mm;
52static struct vm_area_struct* flush_vma; 52static struct vm_area_struct* flush_vma;
53static unsigned long flush_addr; 53static unsigned long flush_addr;
54 54
55extern int setup_irq(int, struct irqaction *);
56
57/* Mode registers */ 55/* Mode registers */
58static unsigned long irq_regs[NR_CPUS] = { 56static unsigned long irq_regs[NR_CPUS] = {
59 regi_irq, 57 regi_irq,
diff --git a/arch/cris/arch-v32/kernel/time.c b/arch/cris/arch-v32/kernel/time.c
index 65633d0dab86..b1920d8de403 100644
--- a/arch/cris/arch-v32/kernel/time.c
+++ b/arch/cris/arch-v32/kernel/time.c
@@ -46,7 +46,6 @@ unsigned long timer_regs[NR_CPUS] =
46 46
47extern void update_xtime_from_cmos(void); 47extern void update_xtime_from_cmos(void);
48extern int set_rtc_mmss(unsigned long nowtime); 48extern int set_rtc_mmss(unsigned long nowtime);
49extern int setup_irq(int, struct irqaction *);
50extern int have_rtc; 49extern int have_rtc;
51 50
52#ifdef CONFIG_CPU_FREQ 51#ifdef CONFIG_CPU_FREQ
diff --git a/arch/cris/arch-v32/mach-a3/io.c b/arch/cris/arch-v32/mach-a3/io.c
index c22f67ecd9f3..090ceb99ef0b 100644
--- a/arch/cris/arch-v32/mach-a3/io.c
+++ b/arch/cris/arch-v32/mach-a3/io.c
@@ -36,7 +36,7 @@ struct crisv32_ioport crisv32_ioports[] = {
36 }, 36 },
37}; 37};
38 38
39#define NBR_OF_PORTS sizeof(crisv32_ioports)/sizeof(struct crisv32_ioport) 39#define NBR_OF_PORTS ARRAY_SIZE(crisv32_ioports)
40 40
41struct crisv32_iopin crisv32_led_net0_green; 41struct crisv32_iopin crisv32_led_net0_green;
42struct crisv32_iopin crisv32_led_net0_red; 42struct crisv32_iopin crisv32_led_net0_red;
diff --git a/arch/cris/arch-v32/mach-fs/io.c b/arch/cris/arch-v32/mach-fs/io.c
index cb6327b1f8f8..a6958661fa8e 100644
--- a/arch/cris/arch-v32/mach-fs/io.c
+++ b/arch/cris/arch-v32/mach-fs/io.c
@@ -52,7 +52,7 @@ struct crisv32_ioport crisv32_ioports[] = {
52 } 52 }
53}; 53};
54 54
55#define NBR_OF_PORTS sizeof(crisv32_ioports)/sizeof(struct crisv32_ioport) 55#define NBR_OF_PORTS ARRAY_SIZE(crisv32_ioports)
56 56
57struct crisv32_iopin crisv32_led_net0_green; 57struct crisv32_iopin crisv32_led_net0_green;
58struct crisv32_iopin crisv32_led_net0_red; 58struct crisv32_iopin crisv32_led_net0_red;
diff --git a/arch/cris/include/arch-v10/arch/mmu.h b/arch/cris/include/arch-v10/arch/mmu.h
index df84f1716e6b..e829e5a37bbe 100644
--- a/arch/cris/include/arch-v10/arch/mmu.h
+++ b/arch/cris/include/arch-v10/arch/mmu.h
@@ -33,10 +33,10 @@ typedef struct
33 33
34/* CRIS PTE bits (see R_TLB_LO in the register description) 34/* CRIS PTE bits (see R_TLB_LO in the register description)
35 * 35 *
36 * Bit: 31-13 12-------4 3 2 1 0 36 * Bit: 31 30-13 12-------4 3 2 1 0
37 * ________________________________________________ 37 * _______________________________________________________
38 * | pfn | reserved | global | valid | kernel | we | 38 * | cache |pfn | reserved | global | valid | kernel | we |
39 * |_____|__________|________|_______|________|_____| 39 * |_______|____|__________|________|_______|________|_____|
40 * 40 *
41 * (pfn = physical frame number) 41 * (pfn = physical frame number)
42 */ 42 */
@@ -53,6 +53,7 @@ typedef struct
53#define _PAGE_VALID (1<<2) /* page is valid */ 53#define _PAGE_VALID (1<<2) /* page is valid */
54#define _PAGE_SILENT_READ (1<<2) /* synonym */ 54#define _PAGE_SILENT_READ (1<<2) /* synonym */
55#define _PAGE_GLOBAL (1<<3) /* global page - context is ignored */ 55#define _PAGE_GLOBAL (1<<3) /* global page - context is ignored */
56#define _PAGE_NO_CACHE (1<<31) /* part of the uncached memory map */
56 57
57/* Bits the HW doesn't care about but the kernel uses them in SW */ 58/* Bits the HW doesn't care about but the kernel uses them in SW */
58 59
diff --git a/arch/cris/include/arch-v32/arch/mmu.h b/arch/cris/include/arch-v32/arch/mmu.h
index 6bcdc3fdf7dc..c1a13e05e963 100644
--- a/arch/cris/include/arch-v32/arch/mmu.h
+++ b/arch/cris/include/arch-v32/arch/mmu.h
@@ -28,10 +28,10 @@ typedef struct
28/* 28/*
29 * CRISv32 PTE bits: 29 * CRISv32 PTE bits:
30 * 30 *
31 * Bit: 31-13 12-5 4 3 2 1 0 31 * Bit: 31 30-13 12-5 4 3 2 1 0
32 * +-----+------+--------+-------+--------+-------+---------+ 32 * +-------+-----+------+--------+-------+--------+-------+---------+
33 * | pfn | zero | global | valid | kernel | write | execute | 33 * | cache | pfn | zero | global | valid | kernel | write | execute |
34 * +-----+------+--------+-------+--------+-------+---------+ 34 * +-------+-----+------+--------+-------+--------+-------+---------+
35 */ 35 */
36 36
37/* 37/*
@@ -45,6 +45,8 @@ typedef struct
45#define _PAGE_VALID (1 << 3) /* Page is valid. */ 45#define _PAGE_VALID (1 << 3) /* Page is valid. */
46#define _PAGE_SILENT_READ (1 << 3) /* Same as above. */ 46#define _PAGE_SILENT_READ (1 << 3) /* Same as above. */
47#define _PAGE_GLOBAL (1 << 4) /* Global page. */ 47#define _PAGE_GLOBAL (1 << 4) /* Global page. */
48#define _PAGE_NO_CACHE (1 << 31) /* part of the uncached memory map */
49
48 50
49/* 51/*
50 * The hardware doesn't care about these bits, but the kernel uses them in 52 * The hardware doesn't care about these bits, but the kernel uses them in
diff --git a/arch/cris/include/asm/hardirq.h b/arch/cris/include/asm/hardirq.h
index 74178adeb1cd..17bb12d760b2 100644
--- a/arch/cris/include/asm/hardirq.h
+++ b/arch/cris/include/asm/hardirq.h
@@ -2,16 +2,6 @@
2#define __ASM_HARDIRQ_H 2#define __ASM_HARDIRQ_H
3 3
4#include <asm/irq.h> 4#include <asm/irq.h>
5#include <linux/threads.h>
6#include <linux/cache.h>
7
8typedef struct {
9 unsigned int __softirq_pending;
10} ____cacheline_aligned irq_cpustat_t;
11
12#include <linux/irq_cpustat.h> /* Standard mappings for irq_cpustat_t above */
13
14void ack_bad_irq(unsigned int irq);
15 5
16#define HARDIRQ_BITS 8 6#define HARDIRQ_BITS 8
17 7
@@ -24,4 +14,6 @@ void ack_bad_irq(unsigned int irq);
24# error HARDIRQ_BITS is too low! 14# error HARDIRQ_BITS is too low!
25#endif 15#endif
26 16
17#include <asm-generic/hardirq.h>
18
27#endif /* __ASM_HARDIRQ_H */ 19#endif /* __ASM_HARDIRQ_H */
diff --git a/arch/cris/include/asm/pgtable.h b/arch/cris/include/asm/pgtable.h
index 50aa974aa834..1fcce00f01f4 100644
--- a/arch/cris/include/asm/pgtable.h
+++ b/arch/cris/include/asm/pgtable.h
@@ -197,6 +197,8 @@ static inline pte_t __mk_pte(void * page, pgprot_t pgprot)
197static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) 197static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
198{ pte_val(pte) = (pte_val(pte) & _PAGE_CHG_MASK) | pgprot_val(newprot); return pte; } 198{ pte_val(pte) = (pte_val(pte) & _PAGE_CHG_MASK) | pgprot_val(newprot); return pte; }
199 199
200#define pgprot_noncached(prot) __pgprot((pgprot_val(prot) | _PAGE_NO_CACHE))
201
200 202
201/* pte_val refers to a page in the 0x4xxxxxxx physical DRAM interval 203/* pte_val refers to a page in the 0x4xxxxxxx physical DRAM interval
202 * __pte_page(pte_val) refers to the "virtual" DRAM interval 204 * __pte_page(pte_val) refers to the "virtual" DRAM interval
diff --git a/arch/cris/kernel/irq.c b/arch/cris/kernel/irq.c
index 7f642fcffbfc..0ca7d9892cc6 100644
--- a/arch/cris/kernel/irq.c
+++ b/arch/cris/kernel/irq.c
@@ -38,11 +38,6 @@
38 38
39#include <asm/io.h> 39#include <asm/io.h>
40 40
41void ack_bad_irq(unsigned int irq)
42{
43 printk("unexpected IRQ trap at vector %02x\n", irq);
44}
45
46int show_interrupts(struct seq_file *p, void *v) 41int show_interrupts(struct seq_file *p, void *v)
47{ 42{
48 int i = *(loff_t *) v, j; 43 int i = *(loff_t *) v, j;
diff --git a/arch/cris/kernel/vmlinux.lds.S b/arch/cris/kernel/vmlinux.lds.S
index 6c81836b9229..bbfda67d2907 100644
--- a/arch/cris/kernel/vmlinux.lds.S
+++ b/arch/cris/kernel/vmlinux.lds.S
@@ -51,10 +51,7 @@ SECTIONS
51 _etext = . ; /* End of text section. */ 51 _etext = . ; /* End of text section. */
52 __etext = .; 52 __etext = .;
53 53
54 . = ALIGN(4); /* Exception table. */ 54 EXCEPTION_TABLE(4)
55 __start___ex_table = .;
56 __ex_table : { *(__ex_table) }
57 __stop___ex_table = .;
58 55
59 RODATA 56 RODATA
60 57
@@ -67,36 +64,24 @@ SECTIONS
67 __edata = . ; /* End of data section. */ 64 __edata = . ; /* End of data section. */
68 _edata = . ; 65 _edata = . ;
69 66
70 . = ALIGN(PAGE_SIZE); /* init_task and stack, must be aligned. */ 67 INIT_TASK_DATA_SECTION(PAGE_SIZE)
71 .data.init_task : { *(.data.init_task) }
72 68
73 . = ALIGN(PAGE_SIZE); /* Init code and data. */ 69 . = ALIGN(PAGE_SIZE); /* Init code and data. */
74 __init_begin = .; 70 __init_begin = .;
75 .init.text : { 71 INIT_TEXT_SECTION(PAGE_SIZE)
76 _sinittext = .;
77 INIT_TEXT
78 _einittext = .;
79 }
80 .init.data : { INIT_DATA } 72 .init.data : { INIT_DATA }
81 . = ALIGN(16); 73 .init.setup : { INIT_SETUP(16) }
82 __setup_start = .;
83 .init.setup : { *(.init.setup) }
84 __setup_end = .;
85#ifdef CONFIG_ETRAX_ARCH_V32 74#ifdef CONFIG_ETRAX_ARCH_V32
86 __start___param = .; 75 __start___param = .;
87 __param : { *(__param) } 76 __param : { *(__param) }
88 __stop___param = .; 77 __stop___param = .;
89#endif 78#endif
90 .initcall.init : { 79 .initcall.init : {
91 __initcall_start = .; 80 INIT_CALLS
92 INITCALLS
93 __initcall_end = .;
94 } 81 }
95 82
96 .con_initcall.init : { 83 .con_initcall.init : {
97 __con_initcall_start = .; 84 CON_INITCALL
98 *(.con_initcall.init)
99 __con_initcall_end = .;
100 } 85 }
101 SECURITY_INIT 86 SECURITY_INIT
102 87
@@ -114,9 +99,7 @@ SECTIONS
114 PERCPU(PAGE_SIZE) 99 PERCPU(PAGE_SIZE)
115 100
116 .init.ramfs : { 101 .init.ramfs : {
117 __initramfs_start = .; 102 INIT_RAM_FS
118 *(.init.ramfs)
119 __initramfs_end = .;
120 } 103 }
121#endif 104#endif
122 105
@@ -130,11 +113,7 @@ SECTIONS
130 __init_end = .; 113 __init_end = .;
131 114
132 __data_end = . ; /* Move to _edata ? */ 115 __data_end = . ; /* Move to _edata ? */
133 __bss_start = .; /* BSS. */ 116 BSS_SECTION(0, 0, 0)
134 .bss : {
135 *(COMMON)
136 *(.bss)
137 }
138 117
139 . = ALIGN (0x20); 118 . = ALIGN (0x20);
140 _end = .; 119 _end = .;
diff --git a/arch/frv/kernel/pm.c b/arch/frv/kernel/pm.c
index be722fc1acff..0d4d3e3a4cfc 100644
--- a/arch/frv/kernel/pm.c
+++ b/arch/frv/kernel/pm.c
@@ -150,7 +150,7 @@ static int user_atoi(char __user *ubuf, size_t len)
150/* 150/*
151 * Send us to sleep. 151 * Send us to sleep.
152 */ 152 */
153static int sysctl_pm_do_suspend(ctl_table *ctl, int write, struct file *filp, 153static int sysctl_pm_do_suspend(ctl_table *ctl, int write,
154 void __user *buffer, size_t *lenp, loff_t *fpos) 154 void __user *buffer, size_t *lenp, loff_t *fpos)
155{ 155{
156 int retval, mode; 156 int retval, mode;
@@ -198,13 +198,13 @@ static int try_set_cmode(int new_cmode)
198} 198}
199 199
200 200
201static int cmode_procctl(ctl_table *ctl, int write, struct file *filp, 201static int cmode_procctl(ctl_table *ctl, int write,
202 void __user *buffer, size_t *lenp, loff_t *fpos) 202 void __user *buffer, size_t *lenp, loff_t *fpos)
203{ 203{
204 int new_cmode; 204 int new_cmode;
205 205
206 if (!write) 206 if (!write)
207 return proc_dointvec(ctl, write, filp, buffer, lenp, fpos); 207 return proc_dointvec(ctl, write, buffer, lenp, fpos);
208 208
209 new_cmode = user_atoi(buffer, *lenp); 209 new_cmode = user_atoi(buffer, *lenp);
210 210
@@ -301,13 +301,13 @@ static int try_set_cm(int new_cm)
301 return 0; 301 return 0;
302} 302}
303 303
304static int p0_procctl(ctl_table *ctl, int write, struct file *filp, 304static int p0_procctl(ctl_table *ctl, int write,
305 void __user *buffer, size_t *lenp, loff_t *fpos) 305 void __user *buffer, size_t *lenp, loff_t *fpos)
306{ 306{
307 int new_p0; 307 int new_p0;
308 308
309 if (!write) 309 if (!write)
310 return proc_dointvec(ctl, write, filp, buffer, lenp, fpos); 310 return proc_dointvec(ctl, write, buffer, lenp, fpos);
311 311
312 new_p0 = user_atoi(buffer, *lenp); 312 new_p0 = user_atoi(buffer, *lenp);
313 313
@@ -345,13 +345,13 @@ static int p0_sysctl(ctl_table *table,
345 return 1; 345 return 1;
346} 346}
347 347
348static int cm_procctl(ctl_table *ctl, int write, struct file *filp, 348static int cm_procctl(ctl_table *ctl, int write,
349 void __user *buffer, size_t *lenp, loff_t *fpos) 349 void __user *buffer, size_t *lenp, loff_t *fpos)
350{ 350{
351 int new_cm; 351 int new_cm;
352 352
353 if (!write) 353 if (!write)
354 return proc_dointvec(ctl, write, filp, buffer, lenp, fpos); 354 return proc_dointvec(ctl, write, buffer, lenp, fpos);
355 355
356 new_cm = user_atoi(buffer, *lenp); 356 new_cm = user_atoi(buffer, *lenp);
357 357
diff --git a/arch/frv/mb93090-mb00/Makefile b/arch/frv/mb93090-mb00/Makefile
index 76595e870733..b73b542f8f48 100644
--- a/arch/frv/mb93090-mb00/Makefile
+++ b/arch/frv/mb93090-mb00/Makefile
@@ -11,3 +11,5 @@ else
11obj-y += pci-dma-nommu.o 11obj-y += pci-dma-nommu.o
12endif 12endif
13endif 13endif
14
15obj-$(CONFIG_MTD) += flash.o
diff --git a/arch/frv/mb93090-mb00/flash.c b/arch/frv/mb93090-mb00/flash.c
new file mode 100644
index 000000000000..c0e3707c2299
--- /dev/null
+++ b/arch/frv/mb93090-mb00/flash.c
@@ -0,0 +1,90 @@
1/* Flash mappings for the MB93090-MB00 motherboard
2 *
3 * Copyright (C) 2009 Red Hat, Inc. All Rights Reserved.
4 * Written by David Howells (dhowells@redhat.com)
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public Licence
8 * as published by the Free Software Foundation; either version
9 * 2 of the Licence, or (at your option) any later version.
10 */
11
12#include <linux/init.h>
13#include <linux/platform_device.h>
14#include <linux/mtd/partitions.h>
15#include <linux/mtd/physmap.h>
16
17#define MB93090_BOOTROM_ADDR 0xFF000000 /* Boot ROM */
18#define MB93090_BOOTROM_SIZE (2 * 1024 * 1024)
19#define MB93090_USERROM_ADDR 0xFF200000 /* User ROM */
20#define MB93090_USERROM_SIZE (2 * 1024 * 1024)
21
22/*
23 * default MTD partition table for both main flash devices, expected to be
24 * overridden by RedBoot
25 */
26static struct mtd_partition mb93090_partitions[] = {
27 {
28 .name = "Filesystem",
29 .size = MTDPART_SIZ_FULL,
30 .offset = 0,
31 }
32};
33
34/*
35 * Definition of the MB93090 Boot ROM (on the CPU card)
36 */
37static struct physmap_flash_data mb93090_bootrom_data = {
38 .width = 2,
39 .nr_parts = 2,
40 .parts = mb93090_partitions,
41};
42
43static struct resource mb93090_bootrom_resource = {
44 .start = MB93090_BOOTROM_ADDR,
45 .end = MB93090_BOOTROM_ADDR + MB93090_BOOTROM_SIZE - 1,
46 .flags = IORESOURCE_MEM,
47};
48
49static struct platform_device mb93090_bootrom = {
50 .name = "physmap-flash",
51 .id = 0,
52 .dev.platform_data = &mb93090_bootrom_data,
53 .num_resources = 1,
54 .resource = &mb93090_bootrom_resource,
55};
56
57/*
58 * Definition of the MB93090 User ROM definition (on the motherboard)
59 */
60static struct physmap_flash_data mb93090_userrom_data = {
61 .width = 2,
62 .nr_parts = 2,
63 .parts = mb93090_partitions,
64};
65
66static struct resource mb93090_userrom_resource = {
67 .start = MB93090_USERROM_ADDR,
68 .end = MB93090_USERROM_ADDR + MB93090_USERROM_SIZE - 1,
69 .flags = IORESOURCE_MEM,
70};
71
72static struct platform_device mb93090_userrom = {
73 .name = "physmap-flash",
74 .id = 1,
75 .dev.platform_data = &mb93090_userrom_data,
76 .num_resources = 1,
77 .resource = &mb93090_userrom_resource,
78};
79
80/*
81 * register the MB93090 flashes
82 */
83static int __init mb93090_mtd_init(void)
84{
85 platform_device_register(&mb93090_bootrom);
86 platform_device_register(&mb93090_userrom);
87 return 0;
88}
89
90module_init(mb93090_mtd_init);
diff --git a/arch/h8300/kernel/vmlinux.lds.S b/arch/h8300/kernel/vmlinux.lds.S
index 662b02ecb86e..b9e24907e6ea 100644
--- a/arch/h8300/kernel/vmlinux.lds.S
+++ b/arch/h8300/kernel/vmlinux.lds.S
@@ -1,5 +1,6 @@
1#define VMLINUX_SYMBOL(_sym_) _##_sym_ 1#define VMLINUX_SYMBOL(_sym_) _##_sym_
2#include <asm-generic/vmlinux.lds.h> 2#include <asm-generic/vmlinux.lds.h>
3#include <asm/page.h>
3 4
4/* target memory map */ 5/* target memory map */
5#ifdef CONFIG_H8300H_GENERIC 6#ifdef CONFIG_H8300H_GENERIC
@@ -79,11 +80,8 @@ SECTIONS
79 SCHED_TEXT 80 SCHED_TEXT
80 LOCK_TEXT 81 LOCK_TEXT
81 __etext = . ; 82 __etext = . ;
82 . = ALIGN(16); /* Exception table */
83 ___start___ex_table = .;
84 *(__ex_table)
85 ___stop___ex_table = .;
86 } 83 }
84 EXCEPTION_TABLE(16)
87 85
88 RODATA 86 RODATA
89#if defined(CONFIG_ROMKERNEL) 87#if defined(CONFIG_ROMKERNEL)
@@ -100,8 +98,7 @@ SECTIONS
100 __sdata = . ; 98 __sdata = . ;
101 ___data_start = . ; 99 ___data_start = . ;
102 100
103 . = ALIGN(0x2000) ; 101 INIT_TASK_DATA(0x2000)
104 *(.data.init_task)
105 . = ALIGN(0x4) ; 102 . = ALIGN(0x4) ;
106 DATA_DATA 103 DATA_DATA
107 . = ALIGN(0x4) ; 104 . = ALIGN(0x4) ;
@@ -114,24 +111,16 @@ SECTIONS
114 __einittext = .; 111 __einittext = .;
115 INIT_DATA 112 INIT_DATA
116 . = ALIGN(0x4) ; 113 . = ALIGN(0x4) ;
114 INIT_SETUP(0x4)
117 ___setup_start = .; 115 ___setup_start = .;
118 *(.init.setup) 116 *(.init.setup)
119 . = ALIGN(0x4) ; 117 . = ALIGN(0x4) ;
120 ___setup_end = .; 118 ___setup_end = .;
121 ___initcall_start = .; 119 INIT_CALLS
122 INITCALLS 120 CON_INITCALL
123 ___initcall_end = .;
124 ___con_initcall_start = .;
125 *(.con_initcall.init)
126 ___con_initcall_end = .;
127 EXIT_TEXT 121 EXIT_TEXT
128 EXIT_DATA 122 EXIT_DATA
129#if defined(CONFIG_BLK_DEV_INITRD) 123 INIT_RAM_FS
130 . = ALIGN(4);
131 ___initramfs_start = .;
132 *(.init.ramfs)
133 ___initramfs_end = .;
134#endif
135 . = ALIGN(0x4) ; 124 . = ALIGN(0x4) ;
136 ___init_end = .; 125 ___init_end = .;
137 __edata = . ; 126 __edata = . ;
diff --git a/arch/m32r/include/asm/page.h b/arch/m32r/include/asm/page.h
index 11777f7a5628..725ede8f2889 100644
--- a/arch/m32r/include/asm/page.h
+++ b/arch/m32r/include/asm/page.h
@@ -1,9 +1,11 @@
1#ifndef _ASM_M32R_PAGE_H 1#ifndef _ASM_M32R_PAGE_H
2#define _ASM_M32R_PAGE_H 2#define _ASM_M32R_PAGE_H
3 3
4#include <linux/const.h>
5
4/* PAGE_SHIFT determines the page size */ 6/* PAGE_SHIFT determines the page size */
5#define PAGE_SHIFT 12 7#define PAGE_SHIFT 12
6#define PAGE_SIZE (1UL << PAGE_SHIFT) 8#define PAGE_SIZE (_AC(1, UL) << PAGE_SHIFT)
7#define PAGE_MASK (~(PAGE_SIZE-1)) 9#define PAGE_MASK (~(PAGE_SIZE-1))
8 10
9#ifndef __ASSEMBLY__ 11#ifndef __ASSEMBLY__
diff --git a/arch/m32r/include/asm/processor.h b/arch/m32r/include/asm/processor.h
index 1a997fc148a2..8397c249989b 100644
--- a/arch/m32r/include/asm/processor.h
+++ b/arch/m32r/include/asm/processor.h
@@ -140,8 +140,6 @@ unsigned long get_wchan(struct task_struct *p);
140#define KSTK_EIP(tsk) ((tsk)->thread.lr) 140#define KSTK_EIP(tsk) ((tsk)->thread.lr)
141#define KSTK_ESP(tsk) ((tsk)->thread.sp) 141#define KSTK_ESP(tsk) ((tsk)->thread.sp)
142 142
143#define THREAD_SIZE (2*PAGE_SIZE)
144
145#define cpu_relax() barrier() 143#define cpu_relax() barrier()
146 144
147#endif /* _ASM_M32R_PROCESSOR_H */ 145#endif /* _ASM_M32R_PROCESSOR_H */
diff --git a/arch/m32r/include/asm/thread_info.h b/arch/m32r/include/asm/thread_info.h
index 71578151a403..ed240b6e8e77 100644
--- a/arch/m32r/include/asm/thread_info.h
+++ b/arch/m32r/include/asm/thread_info.h
@@ -55,6 +55,8 @@ struct thread_info {
55 55
56#define PREEMPT_ACTIVE 0x10000000 56#define PREEMPT_ACTIVE 0x10000000
57 57
58#define THREAD_SIZE (PAGE_SIZE << 1)
59
58/* 60/*
59 * macros/functions for gaining access to the thread information structure 61 * macros/functions for gaining access to the thread information structure
60 */ 62 */
@@ -76,8 +78,6 @@ struct thread_info {
76#define init_thread_info (init_thread_union.thread_info) 78#define init_thread_info (init_thread_union.thread_info)
77#define init_stack (init_thread_union.stack) 79#define init_stack (init_thread_union.stack)
78 80
79#define THREAD_SIZE (2*PAGE_SIZE)
80
81/* how to get the thread information struct from C */ 81/* how to get the thread information struct from C */
82static inline struct thread_info *current_thread_info(void) 82static inline struct thread_info *current_thread_info(void)
83{ 83{
@@ -125,17 +125,6 @@ static inline unsigned int get_thread_fault_code(void)
125 return ti->flags >> TI_FLAG_FAULT_CODE_SHIFT; 125 return ti->flags >> TI_FLAG_FAULT_CODE_SHIFT;
126} 126}
127 127
128#else /* !__ASSEMBLY__ */
129
130#define THREAD_SIZE 8192
131
132/* how to get the thread information struct from ASM */
133#define GET_THREAD_INFO(reg) GET_THREAD_INFO reg
134 .macro GET_THREAD_INFO reg
135 ldi \reg, #-THREAD_SIZE
136 and \reg, sp
137 .endm
138
139#endif 128#endif
140 129
141/* 130/*
diff --git a/arch/m32r/kernel/entry.S b/arch/m32r/kernel/entry.S
index 612d35b082a6..403869833b98 100644
--- a/arch/m32r/kernel/entry.S
+++ b/arch/m32r/kernel/entry.S
@@ -118,6 +118,13 @@
118#define resume_kernel restore_all 118#define resume_kernel restore_all
119#endif 119#endif
120 120
121/* how to get the thread information struct from ASM */
122#define GET_THREAD_INFO(reg) GET_THREAD_INFO reg
123 .macro GET_THREAD_INFO reg
124 ldi \reg, #-THREAD_SIZE
125 and \reg, sp
126 .endm
127
121ENTRY(ret_from_fork) 128ENTRY(ret_from_fork)
122 pop r0 129 pop r0
123 bl schedule_tail 130 bl schedule_tail
diff --git a/arch/m32r/kernel/head.S b/arch/m32r/kernel/head.S
index 0a7194439eb1..a46652dd83e6 100644
--- a/arch/m32r/kernel/head.S
+++ b/arch/m32r/kernel/head.S
@@ -268,13 +268,13 @@ ENTRY(empty_zero_page)
268/*------------------------------------------------------------------------ 268/*------------------------------------------------------------------------
269 * Stack area 269 * Stack area
270 */ 270 */
271 .section .spi 271 .section .init.data, "aw"
272 ALIGN 272 ALIGN
273 .global spi_stack_top 273 .global spi_stack_top
274 .zero 1024 274 .zero 1024
275spi_stack_top: 275spi_stack_top:
276 276
277 .section .spu 277 .section .init.data, "aw"
278 ALIGN 278 ALIGN
279 .global spu_stack_top 279 .global spu_stack_top
280 .zero 1024 280 .zero 1024
diff --git a/arch/m32r/kernel/vmlinux.lds.S b/arch/m32r/kernel/vmlinux.lds.S
index de5e21cca6a5..8ceb6181d805 100644
--- a/arch/m32r/kernel/vmlinux.lds.S
+++ b/arch/m32r/kernel/vmlinux.lds.S
@@ -4,6 +4,7 @@
4#include <asm-generic/vmlinux.lds.h> 4#include <asm-generic/vmlinux.lds.h>
5#include <asm/addrspace.h> 5#include <asm/addrspace.h>
6#include <asm/page.h> 6#include <asm/page.h>
7#include <asm/thread_info.h>
7 8
8OUTPUT_ARCH(m32r) 9OUTPUT_ARCH(m32r)
9#if defined(__LITTLE_ENDIAN__) 10#if defined(__LITTLE_ENDIAN__)
@@ -40,83 +41,22 @@ SECTIONS
40#endif 41#endif
41 _etext = .; /* End of text section */ 42 _etext = .; /* End of text section */
42 43
43 . = ALIGN(16); /* Exception table */ 44 EXCEPTION_TABLE(16)
44 __start___ex_table = .;
45 __ex_table : { *(__ex_table) }
46 __stop___ex_table = .;
47
48 RODATA 45 RODATA
49 46 RW_DATA_SECTION(32, PAGE_SIZE, THREAD_SIZE)
50 /* writeable */
51 .data : { /* Data */
52 *(.spu)
53 *(.spi)
54 DATA_DATA
55 CONSTRUCTORS
56 }
57
58 . = ALIGN(4096);
59 __nosave_begin = .;
60 .data_nosave : { *(.data.nosave) }
61 . = ALIGN(4096);
62 __nosave_end = .;
63
64 . = ALIGN(32);
65 .data.cacheline_aligned : { *(.data.cacheline_aligned) }
66
67 _edata = .; /* End of data section */ 47 _edata = .; /* End of data section */
68 48
69 . = ALIGN(8192); /* init_task */
70 .data.init_task : { *(.data.init_task) }
71
72 /* will be freed after init */ 49 /* will be freed after init */
73 . = ALIGN(4096); /* Init code and data */ 50 . = ALIGN(PAGE_SIZE); /* Init code and data */
74 __init_begin = .; 51 __init_begin = .;
75 .init.text : { 52 INIT_TEXT_SECTION(PAGE_SIZE)
76 _sinittext = .; 53 INIT_DATA_SECTION(16)
77 INIT_TEXT 54 PERCPU(PAGE_SIZE)
78 _einittext = .; 55 . = ALIGN(PAGE_SIZE);
79 }
80 .init.data : { INIT_DATA }
81 . = ALIGN(16);
82 __setup_start = .;
83 .init.setup : { *(.init.setup) }
84 __setup_end = .;
85 __initcall_start = .;
86 .initcall.init : {
87 INITCALLS
88 }
89 __initcall_end = .;
90 __con_initcall_start = .;
91 .con_initcall.init : { *(.con_initcall.init) }
92 __con_initcall_end = .;
93 SECURITY_INIT
94 . = ALIGN(4);
95 __alt_instructions = .;
96 .altinstructions : { *(.altinstructions) }
97 __alt_instructions_end = .;
98 .altinstr_replacement : { *(.altinstr_replacement) }
99 /* .exit.text is discard at runtime, not link time, to deal with references
100 from .altinstructions and .eh_frame */
101 .exit.text : { EXIT_TEXT }
102 .exit.data : { EXIT_DATA }
103
104#ifdef CONFIG_BLK_DEV_INITRD
105 . = ALIGN(4096);
106 __initramfs_start = .;
107 .init.ramfs : { *(.init.ramfs) }
108 __initramfs_end = .;
109#endif
110
111 PERCPU(4096)
112 . = ALIGN(4096);
113 __init_end = .; 56 __init_end = .;
114 /* freed after init ends here */ 57 /* freed after init ends here */
115 58
116 __bss_start = .; /* BSS */ 59 BSS_SECTION(0, 0, 4)
117 .bss : { *(.bss) }
118 . = ALIGN(4);
119 __bss_stop = .;
120 60
121 _end = . ; 61 _end = . ;
122 62
diff --git a/arch/microblaze/Kconfig b/arch/microblaze/Kconfig
index 2db722d80d4d..bbd8327f1890 100644
--- a/arch/microblaze/Kconfig
+++ b/arch/microblaze/Kconfig
@@ -6,6 +6,7 @@ mainmenu "Linux/Microblaze Kernel Configuration"
6config MICROBLAZE 6config MICROBLAZE
7 def_bool y 7 def_bool y
8 select HAVE_LMB 8 select HAVE_LMB
9 select USB_ARCH_HAS_EHCI
9 select ARCH_WANT_OPTIONAL_GPIOLIB 10 select ARCH_WANT_OPTIONAL_GPIOLIB
10 11
11config SWAP 12config SWAP
diff --git a/arch/microblaze/Makefile b/arch/microblaze/Makefile
index 8439598d4655..34187354304a 100644
--- a/arch/microblaze/Makefile
+++ b/arch/microblaze/Makefile
@@ -37,12 +37,12 @@ CPUFLAGS-$(CONFIG_XILINX_MICROBLAZE0_USE_PCMP_INSTR) += -mxl-pattern-compare
37CPUFLAGS-1 += $(call cc-option,-mcpu=v$(CPU_VER)) 37CPUFLAGS-1 += $(call cc-option,-mcpu=v$(CPU_VER))
38 38
39# r31 holds current when in kernel mode 39# r31 holds current when in kernel mode
40KBUILD_KERNEL += -ffixed-r31 $(CPUFLAGS-1) $(CPUFLAGS-2) 40KBUILD_CFLAGS += -ffixed-r31 $(CPUFLAGS-1) $(CPUFLAGS-2)
41 41
42LDFLAGS := 42LDFLAGS :=
43LDFLAGS_vmlinux := 43LDFLAGS_vmlinux :=
44 44
45LIBGCC := $(shell $(CC) $(KBUILD_KERNEL) -print-libgcc-file-name) 45LIBGCC := $(shell $(CC) $(KBUILD_CFLAGS) -print-libgcc-file-name)
46 46
47head-y := arch/microblaze/kernel/head.o 47head-y := arch/microblaze/kernel/head.o
48libs-y += arch/microblaze/lib/ 48libs-y += arch/microblaze/lib/
@@ -53,22 +53,41 @@ core-y += arch/microblaze/platform/
53 53
54boot := arch/microblaze/boot 54boot := arch/microblaze/boot
55 55
56# Are we making a simpleImage.<boardname> target? If so, crack out the boardname
57DTB:=$(subst simpleImage.,,$(filter simpleImage.%, $(MAKECMDGOALS)))
58
59ifneq ($(DTB),)
60 core-y += $(boot)/
61endif
62
56# defines filename extension depending memory management type 63# defines filename extension depending memory management type
57ifeq ($(CONFIG_MMU),) 64ifeq ($(CONFIG_MMU),)
58MMU := -nommu 65MMU := -nommu
59endif 66endif
60 67
61export MMU 68export MMU DTB
62 69
63all: linux.bin 70all: linux.bin
64 71
72BOOT_TARGETS = linux.bin linux.bin.gz simpleImage.%
73
65archclean: 74archclean:
66 $(Q)$(MAKE) $(clean)=$(boot) 75 $(Q)$(MAKE) $(clean)=$(boot)
67 76
68linux.bin linux.bin.gz: vmlinux 77$(BOOT_TARGETS): vmlinux
69 $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@ 78 $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
70 79
71define archhelp 80define archhelp
72 echo '* linux.bin - Create raw binary' 81 echo '* linux.bin - Create raw binary'
73 echo ' linux.bin.gz - Create compressed raw binary' 82 echo ' linux.bin.gz - Create compressed raw binary'
83 echo ' simpleImage.<dt> - ELF image with $(arch)/boot/dts/<dt>.dts linked in'
84 echo ' - stripped elf with fdt blob
85 echo ' simpleImage.<dt>.unstrip - full ELF image with fdt blob'
86 echo ' *_defconfig - Select default config from arch/microblaze/configs'
87 echo ''
88 echo ' Targets with <dt> embed a device tree blob inside the image'
89 echo ' These targets support board with firmware that does not'
90 echo ' support passing a device tree directly. Replace <dt> with the'
91 echo ' name of a dts file from the arch/microblaze/boot/dts/ directory'
92 echo ' (minus the .dts extension).'
74endef 93endef
diff --git a/arch/microblaze/boot/Makefile b/arch/microblaze/boot/Makefile
index c2bb043a029d..21f13322a4ca 100644
--- a/arch/microblaze/boot/Makefile
+++ b/arch/microblaze/boot/Makefile
@@ -2,10 +2,24 @@
2# arch/microblaze/boot/Makefile 2# arch/microblaze/boot/Makefile
3# 3#
4 4
5targets := linux.bin linux.bin.gz 5obj-y += linked_dtb.o
6
7targets := linux.bin linux.bin.gz simpleImage.%
6 8
7OBJCOPYFLAGS_linux.bin := -O binary 9OBJCOPYFLAGS_linux.bin := -O binary
8 10
11# Where the DTS files live
12dtstree := $(srctree)/$(src)/dts
13
14# Ensure system.dtb exists
15$(obj)/linked_dtb.o: $(obj)/system.dtb
16
17# Generate system.dtb from $(DTB).dtb
18ifneq ($(DTB),system)
19$(obj)/system.dtb: $(obj)/$(DTB).dtb
20 $(call if_changed,cp)
21endif
22
9$(obj)/linux.bin: vmlinux FORCE 23$(obj)/linux.bin: vmlinux FORCE
10 [ -n $(CONFIG_INITRAMFS_SOURCE) ] && [ ! -e $(CONFIG_INITRAMFS_SOURCE) ] && \ 24 [ -n $(CONFIG_INITRAMFS_SOURCE) ] && [ ! -e $(CONFIG_INITRAMFS_SOURCE) ] && \
11 touch $(CONFIG_INITRAMFS_SOURCE) || echo "No CPIO image" 25 touch $(CONFIG_INITRAMFS_SOURCE) || echo "No CPIO image"
@@ -16,4 +30,27 @@ $(obj)/linux.bin.gz: $(obj)/linux.bin FORCE
16 $(call if_changed,gzip) 30 $(call if_changed,gzip)
17 @echo 'Kernel: $@ is ready' ' (#'`cat .version`')' 31 @echo 'Kernel: $@ is ready' ' (#'`cat .version`')'
18 32
19clean-kernel += linux.bin linux.bin.gz 33quiet_cmd_cp = CP $< $@$2
34 cmd_cp = cat $< >$@$2 || (rm -f $@ && echo false)
35
36quiet_cmd_strip = STRIP $@
37 cmd_strip = $(STRIP) -K _start -K _end -K __log_buf -K _fdt_start vmlinux -o $@
38
39$(obj)/simpleImage.%: vmlinux FORCE
40 $(call if_changed,cp,.unstrip)
41 $(call if_changed,strip)
42 @echo 'Kernel: $@ is ready' ' (#'`cat .version`')'
43
44# Rule to build device tree blobs
45DTC = $(objtree)/scripts/dtc/dtc
46
47# Rule to build device tree blobs
48quiet_cmd_dtc = DTC $@
49 cmd_dtc = $(DTC) -O dtb -o $(obj)/$*.dtb -b 0 -p 1024 $(dtstree)/$*.dts
50
51$(obj)/%.dtb: $(dtstree)/%.dts FORCE
52 $(call if_changed,dtc)
53
54clean-kernel += linux.bin linux.bin.gz simpleImage.*
55
56clean-files += *.dtb
diff --git a/arch/microblaze/boot/dts/system.dts b/arch/microblaze/boot/dts/system.dts
new file mode 120000
index 000000000000..7cb657892f21
--- /dev/null
+++ b/arch/microblaze/boot/dts/system.dts
@@ -0,0 +1 @@
../../platform/generic/system.dts \ No newline at end of file
diff --git a/arch/microblaze/boot/linked_dtb.S b/arch/microblaze/boot/linked_dtb.S
new file mode 100644
index 000000000000..cb2b537aebee
--- /dev/null
+++ b/arch/microblaze/boot/linked_dtb.S
@@ -0,0 +1,3 @@
1.section __fdt_blob,"a"
2.incbin "arch/microblaze/boot/system.dtb"
3
diff --git a/arch/microblaze/configs/mmu_defconfig b/arch/microblaze/configs/mmu_defconfig
index 09c32962b66f..bb7c374713ad 100644
--- a/arch/microblaze/configs/mmu_defconfig
+++ b/arch/microblaze/configs/mmu_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.31-rc6 3# Linux kernel version: 2.6.31
4# Tue Aug 18 11:00:02 2009 4# Thu Sep 24 10:28:50 2009
5# 5#
6CONFIG_MICROBLAZE=y 6CONFIG_MICROBLAZE=y
7# CONFIG_SWAP is not set 7# CONFIG_SWAP is not set
@@ -42,11 +42,12 @@ CONFIG_SYSVIPC_SYSCTL=y
42# 42#
43# RCU Subsystem 43# RCU Subsystem
44# 44#
45CONFIG_CLASSIC_RCU=y 45CONFIG_TREE_RCU=y
46# CONFIG_TREE_RCU is not set 46# CONFIG_TREE_PREEMPT_RCU is not set
47# CONFIG_PREEMPT_RCU is not set 47# CONFIG_RCU_TRACE is not set
48CONFIG_RCU_FANOUT=32
49# CONFIG_RCU_FANOUT_EXACT is not set
48# CONFIG_TREE_RCU_TRACE is not set 50# CONFIG_TREE_RCU_TRACE is not set
49# CONFIG_PREEMPT_RCU_TRACE is not set
50CONFIG_IKCONFIG=y 51CONFIG_IKCONFIG=y
51CONFIG_IKCONFIG_PROC=y 52CONFIG_IKCONFIG_PROC=y
52CONFIG_LOG_BUF_SHIFT=17 53CONFIG_LOG_BUF_SHIFT=17
@@ -260,6 +261,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
260# CONFIG_NETFILTER is not set 261# CONFIG_NETFILTER is not set
261# CONFIG_IP_DCCP is not set 262# CONFIG_IP_DCCP is not set
262# CONFIG_IP_SCTP is not set 263# CONFIG_IP_SCTP is not set
264# CONFIG_RDS is not set
263# CONFIG_TIPC is not set 265# CONFIG_TIPC is not set
264# CONFIG_ATM is not set 266# CONFIG_ATM is not set
265# CONFIG_BRIDGE is not set 267# CONFIG_BRIDGE is not set
@@ -357,12 +359,10 @@ CONFIG_NET_ETHERNET=y
357# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set 359# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
358# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set 360# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
359# CONFIG_KS8842 is not set 361# CONFIG_KS8842 is not set
362CONFIG_XILINX_EMACLITE=y
360CONFIG_NETDEV_1000=y 363CONFIG_NETDEV_1000=y
361CONFIG_NETDEV_10000=y 364CONFIG_NETDEV_10000=y
362 365CONFIG_WLAN=y
363#
364# Wireless LAN
365#
366# CONFIG_WLAN_PRE80211 is not set 366# CONFIG_WLAN_PRE80211 is not set
367# CONFIG_WLAN_80211 is not set 367# CONFIG_WLAN_80211 is not set
368 368
@@ -460,6 +460,7 @@ CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
460# CONFIG_DISPLAY_SUPPORT is not set 460# CONFIG_DISPLAY_SUPPORT is not set
461# CONFIG_SOUND is not set 461# CONFIG_SOUND is not set
462# CONFIG_USB_SUPPORT is not set 462# CONFIG_USB_SUPPORT is not set
463CONFIG_USB_ARCH_HAS_EHCI=y
463# CONFIG_MMC is not set 464# CONFIG_MMC is not set
464# CONFIG_MEMSTICK is not set 465# CONFIG_MEMSTICK is not set
465# CONFIG_NEW_LEDS is not set 466# CONFIG_NEW_LEDS is not set
@@ -488,6 +489,7 @@ CONFIG_EXT2_FS=y
488# CONFIG_GFS2_FS is not set 489# CONFIG_GFS2_FS is not set
489# CONFIG_OCFS2_FS is not set 490# CONFIG_OCFS2_FS is not set
490# CONFIG_BTRFS_FS is not set 491# CONFIG_BTRFS_FS is not set
492# CONFIG_NILFS2_FS is not set
491CONFIG_FILE_LOCKING=y 493CONFIG_FILE_LOCKING=y
492CONFIG_FSNOTIFY=y 494CONFIG_FSNOTIFY=y
493# CONFIG_DNOTIFY is not set 495# CONFIG_DNOTIFY is not set
@@ -546,7 +548,6 @@ CONFIG_MISC_FILESYSTEMS=y
546# CONFIG_ROMFS_FS is not set 548# CONFIG_ROMFS_FS is not set
547# CONFIG_SYSV_FS is not set 549# CONFIG_SYSV_FS is not set
548# CONFIG_UFS_FS is not set 550# CONFIG_UFS_FS is not set
549# CONFIG_NILFS2_FS is not set
550CONFIG_NETWORK_FILESYSTEMS=y 551CONFIG_NETWORK_FILESYSTEMS=y
551CONFIG_NFS_FS=y 552CONFIG_NFS_FS=y
552CONFIG_NFS_V3=y 553CONFIG_NFS_V3=y
@@ -671,18 +672,20 @@ CONFIG_DEBUG_INFO=y
671# CONFIG_DEBUG_LIST is not set 672# CONFIG_DEBUG_LIST is not set
672# CONFIG_DEBUG_SG is not set 673# CONFIG_DEBUG_SG is not set
673# CONFIG_DEBUG_NOTIFIERS is not set 674# CONFIG_DEBUG_NOTIFIERS is not set
675# CONFIG_DEBUG_CREDENTIALS is not set
674# CONFIG_BOOT_PRINTK_DELAY is not set 676# CONFIG_BOOT_PRINTK_DELAY is not set
675# CONFIG_RCU_TORTURE_TEST is not set 677# CONFIG_RCU_TORTURE_TEST is not set
676# CONFIG_RCU_CPU_STALL_DETECTOR is not set 678# CONFIG_RCU_CPU_STALL_DETECTOR is not set
677# CONFIG_BACKTRACE_SELF_TEST is not set 679# CONFIG_BACKTRACE_SELF_TEST is not set
678# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set 680# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
681# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
679# CONFIG_FAULT_INJECTION is not set 682# CONFIG_FAULT_INJECTION is not set
680# CONFIG_SYSCTL_SYSCALL_CHECK is not set 683# CONFIG_SYSCTL_SYSCALL_CHECK is not set
681# CONFIG_PAGE_POISONING is not set 684# CONFIG_PAGE_POISONING is not set
682# CONFIG_SAMPLES is not set 685# CONFIG_SAMPLES is not set
683# CONFIG_KMEMCHECK is not set 686# CONFIG_KMEMCHECK is not set
684CONFIG_EARLY_PRINTK=y 687CONFIG_EARLY_PRINTK=y
685CONFIG_HEART_BEAT=y 688# CONFIG_HEART_BEAT is not set
686CONFIG_DEBUG_BOOTMEM=y 689CONFIG_DEBUG_BOOTMEM=y
687 690
688# 691#
@@ -697,7 +700,6 @@ CONFIG_CRYPTO=y
697# 700#
698# Crypto core or helper 701# Crypto core or helper
699# 702#
700# CONFIG_CRYPTO_FIPS is not set
701# CONFIG_CRYPTO_MANAGER is not set 703# CONFIG_CRYPTO_MANAGER is not set
702# CONFIG_CRYPTO_MANAGER2 is not set 704# CONFIG_CRYPTO_MANAGER2 is not set
703# CONFIG_CRYPTO_GF128MUL is not set 705# CONFIG_CRYPTO_GF128MUL is not set
@@ -729,11 +731,13 @@ CONFIG_CRYPTO=y
729# 731#
730# CONFIG_CRYPTO_HMAC is not set 732# CONFIG_CRYPTO_HMAC is not set
731# CONFIG_CRYPTO_XCBC is not set 733# CONFIG_CRYPTO_XCBC is not set
734# CONFIG_CRYPTO_VMAC is not set
732 735
733# 736#
734# Digest 737# Digest
735# 738#
736# CONFIG_CRYPTO_CRC32C is not set 739# CONFIG_CRYPTO_CRC32C is not set
740# CONFIG_CRYPTO_GHASH is not set
737# CONFIG_CRYPTO_MD4 is not set 741# CONFIG_CRYPTO_MD4 is not set
738# CONFIG_CRYPTO_MD5 is not set 742# CONFIG_CRYPTO_MD5 is not set
739# CONFIG_CRYPTO_MICHAEL_MIC is not set 743# CONFIG_CRYPTO_MICHAEL_MIC is not set
diff --git a/arch/microblaze/configs/nommu_defconfig b/arch/microblaze/configs/nommu_defconfig
index 8b638615a972..adb839bab704 100644
--- a/arch/microblaze/configs/nommu_defconfig
+++ b/arch/microblaze/configs/nommu_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.31-rc6 3# Linux kernel version: 2.6.31
4# Tue Aug 18 10:35:30 2009 4# Thu Sep 24 10:29:43 2009
5# 5#
6CONFIG_MICROBLAZE=y 6CONFIG_MICROBLAZE=y
7# CONFIG_SWAP is not set 7# CONFIG_SWAP is not set
@@ -44,11 +44,12 @@ CONFIG_BSD_PROCESS_ACCT_V3=y
44# 44#
45# RCU Subsystem 45# RCU Subsystem
46# 46#
47CONFIG_CLASSIC_RCU=y 47CONFIG_TREE_RCU=y
48# CONFIG_TREE_RCU is not set 48# CONFIG_TREE_PREEMPT_RCU is not set
49# CONFIG_PREEMPT_RCU is not set 49# CONFIG_RCU_TRACE is not set
50CONFIG_RCU_FANOUT=32
51# CONFIG_RCU_FANOUT_EXACT is not set
50# CONFIG_TREE_RCU_TRACE is not set 52# CONFIG_TREE_RCU_TRACE is not set
51# CONFIG_PREEMPT_RCU_TRACE is not set
52CONFIG_IKCONFIG=y 53CONFIG_IKCONFIG=y
53CONFIG_IKCONFIG_PROC=y 54CONFIG_IKCONFIG_PROC=y
54CONFIG_LOG_BUF_SHIFT=17 55CONFIG_LOG_BUF_SHIFT=17
@@ -243,6 +244,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
243# CONFIG_NETFILTER is not set 244# CONFIG_NETFILTER is not set
244# CONFIG_IP_DCCP is not set 245# CONFIG_IP_DCCP is not set
245# CONFIG_IP_SCTP is not set 246# CONFIG_IP_SCTP is not set
247# CONFIG_RDS is not set
246# CONFIG_TIPC is not set 248# CONFIG_TIPC is not set
247# CONFIG_ATM is not set 249# CONFIG_ATM is not set
248# CONFIG_BRIDGE is not set 250# CONFIG_BRIDGE is not set
@@ -272,6 +274,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
272# CONFIG_AF_RXRPC is not set 274# CONFIG_AF_RXRPC is not set
273CONFIG_WIRELESS=y 275CONFIG_WIRELESS=y
274# CONFIG_CFG80211 is not set 276# CONFIG_CFG80211 is not set
277CONFIG_CFG80211_DEFAULT_PS_VALUE=0
275CONFIG_WIRELESS_OLD_REGULATORY=y 278CONFIG_WIRELESS_OLD_REGULATORY=y
276# CONFIG_WIRELESS_EXT is not set 279# CONFIG_WIRELESS_EXT is not set
277# CONFIG_LIB80211 is not set 280# CONFIG_LIB80211 is not set
@@ -279,7 +282,6 @@ CONFIG_WIRELESS_OLD_REGULATORY=y
279# 282#
280# CFG80211 needs to be enabled for MAC80211 283# CFG80211 needs to be enabled for MAC80211
281# 284#
282CONFIG_MAC80211_DEFAULT_PS_VALUE=0
283# CONFIG_WIMAX is not set 285# CONFIG_WIMAX is not set
284# CONFIG_RFKILL is not set 286# CONFIG_RFKILL is not set
285# CONFIG_NET_9P is not set 287# CONFIG_NET_9P is not set
@@ -304,6 +306,7 @@ CONFIG_MTD_PARTITIONS=y
304# CONFIG_MTD_TESTS is not set 306# CONFIG_MTD_TESTS is not set
305# CONFIG_MTD_REDBOOT_PARTS is not set 307# CONFIG_MTD_REDBOOT_PARTS is not set
306CONFIG_MTD_CMDLINE_PARTS=y 308CONFIG_MTD_CMDLINE_PARTS=y
309# CONFIG_MTD_OF_PARTS is not set
307# CONFIG_MTD_AR7_PARTS is not set 310# CONFIG_MTD_AR7_PARTS is not set
308 311
309# 312#
@@ -349,6 +352,7 @@ CONFIG_MTD_RAM=y
349# 352#
350# CONFIG_MTD_COMPLEX_MAPPINGS is not set 353# CONFIG_MTD_COMPLEX_MAPPINGS is not set
351# CONFIG_MTD_PHYSMAP is not set 354# CONFIG_MTD_PHYSMAP is not set
355# CONFIG_MTD_PHYSMAP_OF is not set
352CONFIG_MTD_UCLINUX=y 356CONFIG_MTD_UCLINUX=y
353# CONFIG_MTD_PLATRAM is not set 357# CONFIG_MTD_PLATRAM is not set
354 358
@@ -429,12 +433,10 @@ CONFIG_NET_ETHERNET=y
429# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set 433# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
430# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set 434# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
431# CONFIG_KS8842 is not set 435# CONFIG_KS8842 is not set
436# CONFIG_XILINX_EMACLITE is not set
432CONFIG_NETDEV_1000=y 437CONFIG_NETDEV_1000=y
433CONFIG_NETDEV_10000=y 438CONFIG_NETDEV_10000=y
434 439CONFIG_WLAN=y
435#
436# Wireless LAN
437#
438# CONFIG_WLAN_PRE80211 is not set 440# CONFIG_WLAN_PRE80211 is not set
439# CONFIG_WLAN_80211 is not set 441# CONFIG_WLAN_80211 is not set
440 442
@@ -535,7 +537,7 @@ CONFIG_VIDEO_OUTPUT_CONTROL=y
535CONFIG_USB_SUPPORT=y 537CONFIG_USB_SUPPORT=y
536CONFIG_USB_ARCH_HAS_HCD=y 538CONFIG_USB_ARCH_HAS_HCD=y
537# CONFIG_USB_ARCH_HAS_OHCI is not set 539# CONFIG_USB_ARCH_HAS_OHCI is not set
538# CONFIG_USB_ARCH_HAS_EHCI is not set 540CONFIG_USB_ARCH_HAS_EHCI=y
539# CONFIG_USB is not set 541# CONFIG_USB is not set
540# CONFIG_USB_OTG_WHITELIST is not set 542# CONFIG_USB_OTG_WHITELIST is not set
541# CONFIG_USB_OTG_BLACKLIST_HUB is not set 543# CONFIG_USB_OTG_BLACKLIST_HUB is not set
@@ -579,6 +581,7 @@ CONFIG_FS_POSIX_ACL=y
579# CONFIG_GFS2_FS is not set 581# CONFIG_GFS2_FS is not set
580# CONFIG_OCFS2_FS is not set 582# CONFIG_OCFS2_FS is not set
581# CONFIG_BTRFS_FS is not set 583# CONFIG_BTRFS_FS is not set
584# CONFIG_NILFS2_FS is not set
582CONFIG_FILE_LOCKING=y 585CONFIG_FILE_LOCKING=y
583CONFIG_FSNOTIFY=y 586CONFIG_FSNOTIFY=y
584# CONFIG_DNOTIFY is not set 587# CONFIG_DNOTIFY is not set
@@ -639,7 +642,6 @@ CONFIG_ROMFS_BACKED_BY_BLOCK=y
639CONFIG_ROMFS_ON_BLOCK=y 642CONFIG_ROMFS_ON_BLOCK=y
640# CONFIG_SYSV_FS is not set 643# CONFIG_SYSV_FS is not set
641# CONFIG_UFS_FS is not set 644# CONFIG_UFS_FS is not set
642# CONFIG_NILFS2_FS is not set
643CONFIG_NETWORK_FILESYSTEMS=y 645CONFIG_NETWORK_FILESYSTEMS=y
644CONFIG_NFS_FS=y 646CONFIG_NFS_FS=y
645CONFIG_NFS_V3=y 647CONFIG_NFS_V3=y
@@ -710,18 +712,20 @@ CONFIG_DEBUG_INFO=y
710CONFIG_DEBUG_LIST=y 712CONFIG_DEBUG_LIST=y
711CONFIG_DEBUG_SG=y 713CONFIG_DEBUG_SG=y
712# CONFIG_DEBUG_NOTIFIERS is not set 714# CONFIG_DEBUG_NOTIFIERS is not set
715# CONFIG_DEBUG_CREDENTIALS is not set
713# CONFIG_BOOT_PRINTK_DELAY is not set 716# CONFIG_BOOT_PRINTK_DELAY is not set
714# CONFIG_RCU_TORTURE_TEST is not set 717# CONFIG_RCU_TORTURE_TEST is not set
715# CONFIG_RCU_CPU_STALL_DETECTOR is not set 718# CONFIG_RCU_CPU_STALL_DETECTOR is not set
716# CONFIG_BACKTRACE_SELF_TEST is not set 719# CONFIG_BACKTRACE_SELF_TEST is not set
717# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set 720# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
721# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
718# CONFIG_FAULT_INJECTION is not set 722# CONFIG_FAULT_INJECTION is not set
719CONFIG_SYSCTL_SYSCALL_CHECK=y 723CONFIG_SYSCTL_SYSCALL_CHECK=y
720# CONFIG_PAGE_POISONING is not set 724# CONFIG_PAGE_POISONING is not set
721# CONFIG_DYNAMIC_DEBUG is not set 725# CONFIG_DYNAMIC_DEBUG is not set
722# CONFIG_SAMPLES is not set 726# CONFIG_SAMPLES is not set
723CONFIG_EARLY_PRINTK=y 727CONFIG_EARLY_PRINTK=y
724CONFIG_HEART_BEAT=y 728# CONFIG_HEART_BEAT is not set
725# CONFIG_DEBUG_BOOTMEM is not set 729# CONFIG_DEBUG_BOOTMEM is not set
726 730
727# 731#
@@ -736,7 +740,6 @@ CONFIG_CRYPTO=y
736# 740#
737# Crypto core or helper 741# Crypto core or helper
738# 742#
739# CONFIG_CRYPTO_FIPS is not set
740# CONFIG_CRYPTO_MANAGER is not set 743# CONFIG_CRYPTO_MANAGER is not set
741# CONFIG_CRYPTO_MANAGER2 is not set 744# CONFIG_CRYPTO_MANAGER2 is not set
742# CONFIG_CRYPTO_GF128MUL is not set 745# CONFIG_CRYPTO_GF128MUL is not set
@@ -768,11 +771,13 @@ CONFIG_CRYPTO=y
768# 771#
769# CONFIG_CRYPTO_HMAC is not set 772# CONFIG_CRYPTO_HMAC is not set
770# CONFIG_CRYPTO_XCBC is not set 773# CONFIG_CRYPTO_XCBC is not set
774# CONFIG_CRYPTO_VMAC is not set
771 775
772# 776#
773# Digest 777# Digest
774# 778#
775# CONFIG_CRYPTO_CRC32C is not set 779# CONFIG_CRYPTO_CRC32C is not set
780# CONFIG_CRYPTO_GHASH is not set
776# CONFIG_CRYPTO_MD4 is not set 781# CONFIG_CRYPTO_MD4 is not set
777# CONFIG_CRYPTO_MD5 is not set 782# CONFIG_CRYPTO_MD5 is not set
778# CONFIG_CRYPTO_MICHAEL_MIC is not set 783# CONFIG_CRYPTO_MICHAEL_MIC is not set
diff --git a/arch/microblaze/include/asm/asm-compat.h b/arch/microblaze/include/asm/asm-compat.h
new file mode 100644
index 000000000000..e7bc9dc11b57
--- /dev/null
+++ b/arch/microblaze/include/asm/asm-compat.h
@@ -0,0 +1,17 @@
1#ifndef _ASM_MICROBLAZE_ASM_COMPAT_H
2#define _ASM_MICROBLAZE_ASM_COMPAT_H
3
4#include <asm/types.h>
5
6#ifdef __ASSEMBLY__
7# define stringify_in_c(...) __VA_ARGS__
8# define ASM_CONST(x) x
9#else
10/* This version of stringify will deal with commas... */
11# define __stringify_in_c(...) #__VA_ARGS__
12# define stringify_in_c(...) __stringify_in_c(__VA_ARGS__) " "
13# define __ASM_CONST(x) x##UL
14# define ASM_CONST(x) __ASM_CONST(x)
15#endif
16
17#endif /* _ASM_MICROBLAZE_ASM_COMPAT_H */
diff --git a/arch/microblaze/include/asm/io.h b/arch/microblaze/include/asm/io.h
index 7c3ec13b44d8..fc9997b73c09 100644
--- a/arch/microblaze/include/asm/io.h
+++ b/arch/microblaze/include/asm/io.h
@@ -210,6 +210,9 @@ static inline void __iomem *__ioremap(phys_addr_t address, unsigned long size,
210#define in_be32(a) __raw_readl((const void __iomem __force *)(a)) 210#define in_be32(a) __raw_readl((const void __iomem __force *)(a))
211#define in_be16(a) __raw_readw(a) 211#define in_be16(a) __raw_readw(a)
212 212
213#define writel_be(v, a) out_be32((__force unsigned *)a, v)
214#define readl_be(a) in_be32((__force unsigned *)a)
215
213/* 216/*
214 * Little endian 217 * Little endian
215 */ 218 */
diff --git a/arch/microblaze/include/asm/ipc.h b/arch/microblaze/include/asm/ipc.h
deleted file mode 100644
index a46e3d9c2a3f..000000000000
--- a/arch/microblaze/include/asm/ipc.h
+++ /dev/null
@@ -1 +0,0 @@
1#include <asm-generic/ipc.h>
diff --git a/arch/microblaze/include/asm/page.h b/arch/microblaze/include/asm/page.h
index 72aceae88680..880c988c2237 100644
--- a/arch/microblaze/include/asm/page.h
+++ b/arch/microblaze/include/asm/page.h
@@ -17,6 +17,7 @@
17 17
18#include <linux/pfn.h> 18#include <linux/pfn.h>
19#include <asm/setup.h> 19#include <asm/setup.h>
20#include <asm/asm-compat.h>
20#include <linux/const.h> 21#include <linux/const.h>
21 22
22#ifdef __KERNEL__ 23#ifdef __KERNEL__
@@ -26,6 +27,8 @@
26#define PAGE_SIZE (_AC(1, UL) << PAGE_SHIFT) 27#define PAGE_SIZE (_AC(1, UL) << PAGE_SHIFT)
27#define PAGE_MASK (~(PAGE_SIZE-1)) 28#define PAGE_MASK (~(PAGE_SIZE-1))
28 29
30#define LOAD_OFFSET ASM_CONST((CONFIG_KERNEL_START-CONFIG_KERNEL_BASE_ADDR))
31
29#ifndef __ASSEMBLY__ 32#ifndef __ASSEMBLY__
30 33
31#define PAGE_UP(addr) (((addr)+((PAGE_SIZE)-1))&(~((PAGE_SIZE)-1))) 34#define PAGE_UP(addr) (((addr)+((PAGE_SIZE)-1))&(~((PAGE_SIZE)-1)))
diff --git a/arch/microblaze/include/asm/setup.h b/arch/microblaze/include/asm/setup.h
index 27f8dafd8c34..ed67c9ed15b8 100644
--- a/arch/microblaze/include/asm/setup.h
+++ b/arch/microblaze/include/asm/setup.h
@@ -38,7 +38,7 @@ extern void early_console_reg_tlb_alloc(unsigned int addr);
38void time_init(void); 38void time_init(void);
39void init_IRQ(void); 39void init_IRQ(void);
40void machine_early_init(const char *cmdline, unsigned int ram, 40void machine_early_init(const char *cmdline, unsigned int ram,
41 unsigned int fdt); 41 unsigned int fdt, unsigned int msr);
42 42
43void machine_restart(char *cmd); 43void machine_restart(char *cmd);
44void machine_shutdown(void); 44void machine_shutdown(void);
diff --git a/arch/microblaze/include/asm/syscall.h b/arch/microblaze/include/asm/syscall.h
new file mode 100644
index 000000000000..048dfcd8d89d
--- /dev/null
+++ b/arch/microblaze/include/asm/syscall.h
@@ -0,0 +1,99 @@
1#ifndef __ASM_MICROBLAZE_SYSCALL_H
2#define __ASM_MICROBLAZE_SYSCALL_H
3
4#include <linux/kernel.h>
5#include <linux/sched.h>
6#include <asm/ptrace.h>
7
8/* The system call number is given by the user in R12 */
9static inline long syscall_get_nr(struct task_struct *task,
10 struct pt_regs *regs)
11{
12 return regs->r12;
13}
14
15static inline void syscall_rollback(struct task_struct *task,
16 struct pt_regs *regs)
17{
18 /* TODO. */
19}
20
21static inline long syscall_get_error(struct task_struct *task,
22 struct pt_regs *regs)
23{
24 return IS_ERR_VALUE(regs->r3) ? regs->r3 : 0;
25}
26
27static inline long syscall_get_return_value(struct task_struct *task,
28 struct pt_regs *regs)
29{
30 return regs->r3;
31}
32
33static inline void syscall_set_return_value(struct task_struct *task,
34 struct pt_regs *regs,
35 int error, long val)
36{
37 if (error)
38 regs->r3 = -error;
39 else
40 regs->r3 = val;
41}
42
43static inline microblaze_reg_t microblaze_get_syscall_arg(struct pt_regs *regs,
44 unsigned int n)
45{
46 switch (n) {
47 case 5: return regs->r10;
48 case 4: return regs->r9;
49 case 3: return regs->r8;
50 case 2: return regs->r7;
51 case 1: return regs->r6;
52 case 0: return regs->r5;
53 default:
54 BUG();
55 }
56 return ~0;
57}
58
59static inline void microblaze_set_syscall_arg(struct pt_regs *regs,
60 unsigned int n,
61 unsigned long val)
62{
63 switch (n) {
64 case 5:
65 regs->r10 = val;
66 case 4:
67 regs->r9 = val;
68 case 3:
69 regs->r8 = val;
70 case 2:
71 regs->r7 = val;
72 case 1:
73 regs->r6 = val;
74 case 0:
75 regs->r5 = val;
76 default:
77 BUG();
78 }
79}
80
81static inline void syscall_get_arguments(struct task_struct *task,
82 struct pt_regs *regs,
83 unsigned int i, unsigned int n,
84 unsigned long *args)
85{
86 while (n--)
87 *args++ = microblaze_get_syscall_arg(regs, i++);
88}
89
90static inline void syscall_set_arguments(struct task_struct *task,
91 struct pt_regs *regs,
92 unsigned int i, unsigned int n,
93 const unsigned long *args)
94{
95 while (n--)
96 microblaze_set_syscall_arg(regs, i++, *args++);
97}
98
99#endif /* __ASM_MICROBLAZE_SYSCALL_H */
diff --git a/arch/microblaze/kernel/cpu/cpuinfo.c b/arch/microblaze/kernel/cpu/cpuinfo.c
index c411c6757deb..3539babc1c18 100644
--- a/arch/microblaze/kernel/cpu/cpuinfo.c
+++ b/arch/microblaze/kernel/cpu/cpuinfo.c
@@ -28,6 +28,7 @@ const struct cpu_ver_key cpu_ver_lookup[] = {
28 {"7.10.d", 0x0b}, 28 {"7.10.d", 0x0b},
29 {"7.20.a", 0x0c}, 29 {"7.20.a", 0x0c},
30 {"7.20.b", 0x0d}, 30 {"7.20.b", 0x0d},
31 {"7.20.c", 0x0e},
31 /* FIXME There is no keycode defined in MBV for these versions */ 32 /* FIXME There is no keycode defined in MBV for these versions */
32 {"2.10.a", 0x10}, 33 {"2.10.a", 0x10},
33 {"3.00.a", 0x20}, 34 {"3.00.a", 0x20},
@@ -49,6 +50,8 @@ const struct family_string_key family_string_lookup[] = {
49 {"spartan3a", 0xa}, 50 {"spartan3a", 0xa},
50 {"spartan3an", 0xb}, 51 {"spartan3an", 0xb},
51 {"spartan3adsp", 0xc}, 52 {"spartan3adsp", 0xc},
53 {"spartan6", 0xd},
54 {"virtex6", 0xe},
52 /* FIXME There is no key code defined for spartan2 */ 55 /* FIXME There is no key code defined for spartan2 */
53 {"spartan2", 0xf0}, 56 {"spartan2", 0xf0},
54 {NULL, 0}, 57 {NULL, 0},
diff --git a/arch/microblaze/kernel/entry.S b/arch/microblaze/kernel/entry.S
index c7353e79f4a2..acc1f05d1e2c 100644
--- a/arch/microblaze/kernel/entry.S
+++ b/arch/microblaze/kernel/entry.S
@@ -308,38 +308,69 @@ C_ENTRY(_user_exception):
308 swi r12, r1, PTO+PT_R0; 308 swi r12, r1, PTO+PT_R0;
309 tovirt(r1,r1) 309 tovirt(r1,r1)
310 310
311 la r15, r0, ret_from_trap-8
312/* where the trap should return need -8 to adjust for rtsd r15, 8*/ 311/* where the trap should return need -8 to adjust for rtsd r15, 8*/
313/* Jump to the appropriate function for the system call number in r12 312/* Jump to the appropriate function for the system call number in r12
314 * (r12 is not preserved), or return an error if r12 is not valid. The LP 313 * (r12 is not preserved), or return an error if r12 is not valid. The LP
315 * register should point to the location where 314 * register should point to the location where
316 * the called function should return. [note that MAKE_SYS_CALL uses label 1] */ 315 * the called function should return. [note that MAKE_SYS_CALL uses label 1] */
317 /* See if the system call number is valid. */ 316
317 # Step into virtual mode.
318 set_vms;
319 addik r11, r0, 3f
320 rtid r11, 0
321 nop
3223:
323 add r11, r0, CURRENT_TASK /* Get current task ptr into r11 */
324 lwi r11, r11, TS_THREAD_INFO /* get thread info */
325 lwi r11, r11, TI_FLAGS /* get flags in thread info */
326 andi r11, r11, _TIF_WORK_SYSCALL_MASK
327 beqi r11, 4f
328
329 addik r3, r0, -ENOSYS
330 swi r3, r1, PTO + PT_R3
331 brlid r15, do_syscall_trace_enter
332 addik r5, r1, PTO + PT_R0
333
334 # do_syscall_trace_enter returns the new syscall nr.
335 addk r12, r0, r3
336 lwi r5, r1, PTO+PT_R5;
337 lwi r6, r1, PTO+PT_R6;
338 lwi r7, r1, PTO+PT_R7;
339 lwi r8, r1, PTO+PT_R8;
340 lwi r9, r1, PTO+PT_R9;
341 lwi r10, r1, PTO+PT_R10;
3424:
343/* Jump to the appropriate function for the system call number in r12
344 * (r12 is not preserved), or return an error if r12 is not valid.
345 * The LP register should point to the location where the called function
346 * should return. [note that MAKE_SYS_CALL uses label 1] */
347 /* See if the system call number is valid */
318 addi r11, r12, -__NR_syscalls; 348 addi r11, r12, -__NR_syscalls;
319 bgei r11,1f; 349 bgei r11,5f;
320 /* Figure out which function to use for this system call. */ 350 /* Figure out which function to use for this system call. */
321 /* Note Microblaze barrel shift is optional, so don't rely on it */ 351 /* Note Microblaze barrel shift is optional, so don't rely on it */
322 add r12, r12, r12; /* convert num -> ptr */ 352 add r12, r12, r12; /* convert num -> ptr */
323 add r12, r12, r12; 353 add r12, r12, r12;
324 354
325 /* Trac syscalls and stored them to r0_ram */ 355 /* Trac syscalls and stored them to r0_ram */
326 lwi r3, r12, 0x400 + TOPHYS(r0_ram) 356 lwi r3, r12, 0x400 + r0_ram
327 addi r3, r3, 1 357 addi r3, r3, 1
328 swi r3, r12, 0x400 + TOPHYS(r0_ram) 358 swi r3, r12, 0x400 + r0_ram
359
360 # Find and jump into the syscall handler.
361 lwi r12, r12, sys_call_table
362 /* where the trap should return need -8 to adjust for rtsd r15, 8 */
363 la r15, r0, ret_from_trap-8
364 bra r12
329 365
330 lwi r12, r12, TOPHYS(sys_call_table); /* Function ptr */
331 /* Make the system call. to r12*/
332 set_vms;
333 rtid r12, 0;
334 nop;
335 /* The syscall number is invalid, return an error. */ 366 /* The syscall number is invalid, return an error. */
3361: VM_ON; /* RETURN() expects virtual mode*/ 3675:
337 addi r3, r0, -ENOSYS; 368 addi r3, r0, -ENOSYS;
338 rtsd r15,8; /* looks like a normal subroutine return */ 369 rtsd r15,8; /* looks like a normal subroutine return */
339 or r0, r0, r0 370 or r0, r0, r0
340 371
341 372
342/* Entry point used to return from a syscall/trap. */ 373/* Entry point used to return from a syscall/trap */
343/* We re-enable BIP bit before state restore */ 374/* We re-enable BIP bit before state restore */
344C_ENTRY(ret_from_trap): 375C_ENTRY(ret_from_trap):
345 set_bip; /* Ints masked for state restore*/ 376 set_bip; /* Ints masked for state restore*/
@@ -349,6 +380,23 @@ C_ENTRY(ret_from_trap):
349 380
350 /* We're returning to user mode, so check for various conditions that 381 /* We're returning to user mode, so check for various conditions that
351 * trigger rescheduling. */ 382 * trigger rescheduling. */
383 # FIXME: Restructure all these flag checks.
384 add r11, r0, CURRENT_TASK; /* Get current task ptr into r11 */
385 lwi r11, r11, TS_THREAD_INFO; /* get thread info */
386 lwi r11, r11, TI_FLAGS; /* get flags in thread info */
387 andi r11, r11, _TIF_WORK_SYSCALL_MASK
388 beqi r11, 1f
389
390 swi r3, r1, PTO + PT_R3
391 swi r4, r1, PTO + PT_R4
392 brlid r15, do_syscall_trace_leave
393 addik r5, r1, PTO + PT_R0
394 lwi r3, r1, PTO + PT_R3
395 lwi r4, r1, PTO + PT_R4
3961:
397
398 /* We're returning to user mode, so check for various conditions that
399 * trigger rescheduling. */
352 /* Get current task ptr into r11 */ 400 /* Get current task ptr into r11 */
353 add r11, r0, CURRENT_TASK; /* Get current task ptr into r11 */ 401 add r11, r0, CURRENT_TASK; /* Get current task ptr into r11 */
354 lwi r11, r11, TS_THREAD_INFO; /* get thread info */ 402 lwi r11, r11, TS_THREAD_INFO; /* get thread info */
diff --git a/arch/microblaze/kernel/exceptions.c b/arch/microblaze/kernel/exceptions.c
index 0cb64a31e89a..d9f70f83097f 100644
--- a/arch/microblaze/kernel/exceptions.c
+++ b/arch/microblaze/kernel/exceptions.c
@@ -72,7 +72,8 @@ asmlinkage void full_exception(struct pt_regs *regs, unsigned int type,
72#endif 72#endif
73 73
74#if 0 74#if 0
75 printk(KERN_WARNING "Exception %02x in %s mode, FSR=%08x PC=%08x ESR=%08x\n", 75 printk(KERN_WARNING "Exception %02x in %s mode, FSR=%08x PC=%08x " \
76 "ESR=%08x\n",
76 type, user_mode(regs) ? "user" : "kernel", fsr, 77 type, user_mode(regs) ? "user" : "kernel", fsr,
77 (unsigned int) regs->pc, (unsigned int) regs->esr); 78 (unsigned int) regs->pc, (unsigned int) regs->esr);
78#endif 79#endif
@@ -80,42 +81,50 @@ asmlinkage void full_exception(struct pt_regs *regs, unsigned int type,
80 switch (type & 0x1F) { 81 switch (type & 0x1F) {
81 case MICROBLAZE_ILL_OPCODE_EXCEPTION: 82 case MICROBLAZE_ILL_OPCODE_EXCEPTION:
82 if (user_mode(regs)) { 83 if (user_mode(regs)) {
83 printk(KERN_WARNING "Illegal opcode exception in user mode.\n"); 84 pr_debug(KERN_WARNING "Illegal opcode exception " \
85 "in user mode.\n");
84 _exception(SIGILL, regs, ILL_ILLOPC, addr); 86 _exception(SIGILL, regs, ILL_ILLOPC, addr);
85 return; 87 return;
86 } 88 }
87 printk(KERN_WARNING "Illegal opcode exception in kernel mode.\n"); 89 printk(KERN_WARNING "Illegal opcode exception " \
90 "in kernel mode.\n");
88 die("opcode exception", regs, SIGBUS); 91 die("opcode exception", regs, SIGBUS);
89 break; 92 break;
90 case MICROBLAZE_IBUS_EXCEPTION: 93 case MICROBLAZE_IBUS_EXCEPTION:
91 if (user_mode(regs)) { 94 if (user_mode(regs)) {
92 printk(KERN_WARNING "Instruction bus error exception in user mode.\n"); 95 pr_debug(KERN_WARNING "Instruction bus error " \
96 "exception in user mode.\n");
93 _exception(SIGBUS, regs, BUS_ADRERR, addr); 97 _exception(SIGBUS, regs, BUS_ADRERR, addr);
94 return; 98 return;
95 } 99 }
96 printk(KERN_WARNING "Instruction bus error exception in kernel mode.\n"); 100 printk(KERN_WARNING "Instruction bus error exception " \
101 "in kernel mode.\n");
97 die("bus exception", regs, SIGBUS); 102 die("bus exception", regs, SIGBUS);
98 break; 103 break;
99 case MICROBLAZE_DBUS_EXCEPTION: 104 case MICROBLAZE_DBUS_EXCEPTION:
100 if (user_mode(regs)) { 105 if (user_mode(regs)) {
101 printk(KERN_WARNING "Data bus error exception in user mode.\n"); 106 pr_debug(KERN_WARNING "Data bus error exception " \
107 "in user mode.\n");
102 _exception(SIGBUS, regs, BUS_ADRERR, addr); 108 _exception(SIGBUS, regs, BUS_ADRERR, addr);
103 return; 109 return;
104 } 110 }
105 printk(KERN_WARNING "Data bus error exception in kernel mode.\n"); 111 printk(KERN_WARNING "Data bus error exception " \
112 "in kernel mode.\n");
106 die("bus exception", regs, SIGBUS); 113 die("bus exception", regs, SIGBUS);
107 break; 114 break;
108 case MICROBLAZE_DIV_ZERO_EXCEPTION: 115 case MICROBLAZE_DIV_ZERO_EXCEPTION:
109 if (user_mode(regs)) { 116 if (user_mode(regs)) {
110 printk(KERN_WARNING "Divide by zero exception in user mode\n"); 117 pr_debug(KERN_WARNING "Divide by zero exception " \
111 _exception(SIGILL, regs, ILL_ILLOPC, addr); 118 "in user mode\n");
119 _exception(SIGILL, regs, FPE_INTDIV, addr);
112 return; 120 return;
113 } 121 }
114 printk(KERN_WARNING "Divide by zero exception in kernel mode.\n"); 122 printk(KERN_WARNING "Divide by zero exception " \
123 "in kernel mode.\n");
115 die("Divide by exception", regs, SIGBUS); 124 die("Divide by exception", regs, SIGBUS);
116 break; 125 break;
117 case MICROBLAZE_FPU_EXCEPTION: 126 case MICROBLAZE_FPU_EXCEPTION:
118 printk(KERN_WARNING "FPU exception\n"); 127 pr_debug(KERN_WARNING "FPU exception\n");
119 /* IEEE FP exception */ 128 /* IEEE FP exception */
120 /* I removed fsr variable and use code var for storing fsr */ 129 /* I removed fsr variable and use code var for storing fsr */
121 if (fsr & FSR_IO) 130 if (fsr & FSR_IO)
@@ -133,7 +142,7 @@ asmlinkage void full_exception(struct pt_regs *regs, unsigned int type,
133 142
134#ifdef CONFIG_MMU 143#ifdef CONFIG_MMU
135 case MICROBLAZE_PRIVILEGED_EXCEPTION: 144 case MICROBLAZE_PRIVILEGED_EXCEPTION:
136 printk(KERN_WARNING "Privileged exception\n"); 145 pr_debug(KERN_WARNING "Privileged exception\n");
137 /* "brk r0,r0" - used as debug breakpoint */ 146 /* "brk r0,r0" - used as debug breakpoint */
138 if (get_user(code, (unsigned long *)regs->pc) == 0 147 if (get_user(code, (unsigned long *)regs->pc) == 0
139 && code == 0x980c0000) { 148 && code == 0x980c0000) {
diff --git a/arch/microblaze/kernel/head.S b/arch/microblaze/kernel/head.S
index e41c6ce2a7be..697ce3007f30 100644
--- a/arch/microblaze/kernel/head.S
+++ b/arch/microblaze/kernel/head.S
@@ -54,6 +54,16 @@ ENTRY(_start)
54 mfs r1, rmsr 54 mfs r1, rmsr
55 andi r1, r1, ~2 55 andi r1, r1, ~2
56 mts rmsr, r1 56 mts rmsr, r1
57/*
58 * Here is checking mechanism which check if Microblaze has msr instructions
59 * We load msr and compare it with previous r1 value - if is the same,
60 * msr instructions works if not - cpu don't have them.
61 */
62 /* r8=0 - I have msr instr, 1 - I don't have them */
63 rsubi r0, r0, 1 /* set the carry bit */
64 msrclr r0, 0x4 /* try to clear it */
65 /* read the carry bit, r8 will be '0' if msrclr exists */
66 addik r8, r0, 0
57 67
58/* r7 may point to an FDT, or there may be one linked in. 68/* r7 may point to an FDT, or there may be one linked in.
59 if it's in r7, we've got to save it away ASAP. 69 if it's in r7, we've got to save it away ASAP.
@@ -209,8 +219,8 @@ start_here:
209 * Please see $(ARCH)/mach-$(SUBARCH)/setup.c for 219 * Please see $(ARCH)/mach-$(SUBARCH)/setup.c for
210 * the function. 220 * the function.
211 */ 221 */
212 la r8, r0, machine_early_init 222 la r9, r0, machine_early_init
213 brald r15, r8 223 brald r15, r9
214 nop 224 nop
215 225
216#ifndef CONFIG_MMU 226#ifndef CONFIG_MMU
diff --git a/arch/microblaze/kernel/hw_exception_handler.S b/arch/microblaze/kernel/hw_exception_handler.S
index 3288c9737671..6b0288ebccd6 100644
--- a/arch/microblaze/kernel/hw_exception_handler.S
+++ b/arch/microblaze/kernel/hw_exception_handler.S
@@ -84,9 +84,10 @@
84#define NUM_TO_REG(num) r ## num 84#define NUM_TO_REG(num) r ## num
85 85
86#ifdef CONFIG_MMU 86#ifdef CONFIG_MMU
87/* FIXME you can't change first load of MSR because there is
88 * hardcoded jump bri 4 */
89 #define RESTORE_STATE \ 87 #define RESTORE_STATE \
88 lwi r5, r1, 0; \
89 mts rmsr, r5; \
90 nop; \
90 lwi r3, r1, PT_R3; \ 91 lwi r3, r1, PT_R3; \
91 lwi r4, r1, PT_R4; \ 92 lwi r4, r1, PT_R4; \
92 lwi r5, r1, PT_R5; \ 93 lwi r5, r1, PT_R5; \
@@ -309,6 +310,9 @@ _hw_exception_handler:
309 lwi r31, r0, TOPHYS(PER_CPU(CURRENT_SAVE)) /* get saved current */ 310 lwi r31, r0, TOPHYS(PER_CPU(CURRENT_SAVE)) /* get saved current */
310#endif 311#endif
311 312
313 mfs r5, rmsr;
314 nop
315 swi r5, r1, 0;
312 mfs r3, resr 316 mfs r3, resr
313 nop 317 nop
314 mfs r4, rear; 318 mfs r4, rear;
@@ -380,6 +384,8 @@ handle_other_ex: /* Handle Other exceptions here */
380 addk r8, r17, r0; /* Load exception address */ 384 addk r8, r17, r0; /* Load exception address */
381 bralid r15, full_exception; /* Branch to the handler */ 385 bralid r15, full_exception; /* Branch to the handler */
382 nop; 386 nop;
387 mts r0, rfsr; /* Clear sticky fsr */
388 nop
383 389
384 /* 390 /*
385 * Trigger execution of the signal handler by enabling 391 * Trigger execution of the signal handler by enabling
diff --git a/arch/microblaze/kernel/process.c b/arch/microblaze/kernel/process.c
index 00b12c6d5326..4201c743cc9f 100644
--- a/arch/microblaze/kernel/process.c
+++ b/arch/microblaze/kernel/process.c
@@ -235,6 +235,7 @@ void start_thread(struct pt_regs *regs, unsigned long pc, unsigned long usp)
235 regs->pc = pc; 235 regs->pc = pc;
236 regs->r1 = usp; 236 regs->r1 = usp;
237 regs->pt_mode = 0; 237 regs->pt_mode = 0;
238 regs->msr |= MSR_UMS;
238} 239}
239 240
240#ifdef CONFIG_MMU 241#ifdef CONFIG_MMU
diff --git a/arch/microblaze/kernel/ptrace.c b/arch/microblaze/kernel/ptrace.c
index 53ff39af6a5c..4b3ac32754de 100644
--- a/arch/microblaze/kernel/ptrace.c
+++ b/arch/microblaze/kernel/ptrace.c
@@ -29,6 +29,10 @@
29#include <linux/sched.h> 29#include <linux/sched.h>
30#include <linux/ptrace.h> 30#include <linux/ptrace.h>
31#include <linux/signal.h> 31#include <linux/signal.h>
32#include <linux/elf.h>
33#include <linux/audit.h>
34#include <linux/seccomp.h>
35#include <linux/tracehook.h>
32 36
33#include <linux/errno.h> 37#include <linux/errno.h>
34#include <asm/processor.h> 38#include <asm/processor.h>
@@ -174,6 +178,64 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
174 return rval; 178 return rval;
175} 179}
176 180
181asmlinkage long do_syscall_trace_enter(struct pt_regs *regs)
182{
183 long ret = 0;
184
185 secure_computing(regs->r12);
186
187 if (test_thread_flag(TIF_SYSCALL_TRACE) &&
188 tracehook_report_syscall_entry(regs))
189 /*
190 * Tracing decided this syscall should not happen.
191 * We'll return a bogus call number to get an ENOSYS
192 * error, but leave the original number in regs->regs[0].
193 */
194 ret = -1L;
195
196 if (unlikely(current->audit_context))
197 audit_syscall_entry(EM_XILINX_MICROBLAZE, regs->r12,
198 regs->r5, regs->r6,
199 regs->r7, regs->r8);
200
201 return ret ?: regs->r12;
202}
203
204asmlinkage void do_syscall_trace_leave(struct pt_regs *regs)
205{
206 int step;
207
208 if (unlikely(current->audit_context))
209 audit_syscall_exit(AUDITSC_RESULT(regs->r3), regs->r3);
210
211 step = test_thread_flag(TIF_SINGLESTEP);
212 if (step || test_thread_flag(TIF_SYSCALL_TRACE))
213 tracehook_report_syscall_exit(regs, step);
214}
215
216#if 0
217static asmlinkage void syscall_trace(void)
218{
219 if (!test_thread_flag(TIF_SYSCALL_TRACE))
220 return;
221 if (!(current->ptrace & PT_PTRACED))
222 return;
223 /* The 0x80 provides a way for the tracing parent to distinguish
224 between a syscall stop and SIGTRAP delivery */
225 ptrace_notify(SIGTRAP | ((current->ptrace & PT_TRACESYSGOOD)
226 ? 0x80 : 0));
227 /*
228 * this isn't the same as continuing with a signal, but it will do
229 * for normal use. strace only continues with a signal if the
230 * stopping signal is not SIGTRAP. -brl
231 */
232 if (current->exit_code) {
233 send_sig(current->exit_code, current, 1);
234 current->exit_code = 0;
235 }
236}
237#endif
238
177void ptrace_disable(struct task_struct *child) 239void ptrace_disable(struct task_struct *child)
178{ 240{
179 /* nothing to do */ 241 /* nothing to do */
diff --git a/arch/microblaze/kernel/setup.c b/arch/microblaze/kernel/setup.c
index 2a97bf513b64..8c1e0f4dcf18 100644
--- a/arch/microblaze/kernel/setup.c
+++ b/arch/microblaze/kernel/setup.c
@@ -94,7 +94,7 @@ inline unsigned get_romfs_len(unsigned *addr)
94#endif /* CONFIG_MTD_UCLINUX_EBSS */ 94#endif /* CONFIG_MTD_UCLINUX_EBSS */
95 95
96void __init machine_early_init(const char *cmdline, unsigned int ram, 96void __init machine_early_init(const char *cmdline, unsigned int ram,
97 unsigned int fdt) 97 unsigned int fdt, unsigned int msr)
98{ 98{
99 unsigned long *src, *dst = (unsigned long *)0x0; 99 unsigned long *src, *dst = (unsigned long *)0x0;
100 100
@@ -157,6 +157,16 @@ void __init machine_early_init(const char *cmdline, unsigned int ram,
157 early_printk("New klimit: 0x%08x\n", (unsigned)klimit); 157 early_printk("New klimit: 0x%08x\n", (unsigned)klimit);
158#endif 158#endif
159 159
160#if CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR
161 if (msr)
162 early_printk("!!!Your kernel has setup MSR instruction but "
163 "CPU don't have it %d\n", msr);
164#else
165 if (!msr)
166 early_printk("!!!Your kernel not setup MSR instruction but "
167 "CPU have it %d\n", msr);
168#endif
169
160 for (src = __ivt_start; src < __ivt_end; src++, dst++) 170 for (src = __ivt_start; src < __ivt_end; src++, dst++)
161 *dst = *src; 171 *dst = *src;
162 172
diff --git a/arch/microblaze/kernel/vmlinux.lds.S b/arch/microblaze/kernel/vmlinux.lds.S
index ec5fa91a48d8..e704188d7855 100644
--- a/arch/microblaze/kernel/vmlinux.lds.S
+++ b/arch/microblaze/kernel/vmlinux.lds.S
@@ -12,13 +12,16 @@ OUTPUT_FORMAT("elf32-microblaze", "elf32-microblaze", "elf32-microblaze")
12OUTPUT_ARCH(microblaze) 12OUTPUT_ARCH(microblaze)
13ENTRY(_start) 13ENTRY(_start)
14 14
15#include <asm/page.h>
15#include <asm-generic/vmlinux.lds.h> 16#include <asm-generic/vmlinux.lds.h>
17#include <asm/thread_info.h>
16 18
17jiffies = jiffies_64 + 4; 19jiffies = jiffies_64 + 4;
18 20
19SECTIONS { 21SECTIONS {
20 . = CONFIG_KERNEL_START; 22 . = CONFIG_KERNEL_START;
21 .text : { 23 _start = CONFIG_KERNEL_BASE_ADDR;
24 .text : AT(ADDR(.text) - LOAD_OFFSET) {
22 _text = . ; 25 _text = . ;
23 _stext = . ; 26 _stext = . ;
24 *(.text .text.*) 27 *(.text .text.*)
@@ -33,24 +36,22 @@ SECTIONS {
33 } 36 }
34 37
35 . = ALIGN (4) ; 38 . = ALIGN (4) ;
36 _fdt_start = . ; /* place for fdt blob */ 39 __fdt_blob : AT(ADDR(__fdt_blob) - LOAD_OFFSET) {
37 . = . + 0x4000; 40 _fdt_start = . ; /* place for fdt blob */
38 _fdt_end = . ; 41 *(__fdt_blob) ; /* Any link-placed DTB */
42 . = _fdt_start + 0x4000; /* Pad up to 16kbyte */
43 _fdt_end = . ;
44 }
39 45
40 . = ALIGN(16); 46 . = ALIGN(16);
41 RODATA 47 RODATA
42 . = ALIGN(16); 48 EXCEPTION_TABLE(16)
43 __ex_table : {
44 __start___ex_table = .;
45 *(__ex_table)
46 __stop___ex_table = .;
47 }
48 49
49 /* 50 /*
50 * sdata2 section can go anywhere, but must be word aligned 51 * sdata2 section can go anywhere, but must be word aligned
51 * and SDA2_BASE must point to the middle of it 52 * and SDA2_BASE must point to the middle of it
52 */ 53 */
53 .sdata2 : { 54 .sdata2 : AT(ADDR(.sdata2) - LOAD_OFFSET) {
54 _ssrw = .; 55 _ssrw = .;
55 . = ALIGN(4096); /* page aligned when MMU used - origin 0x8 */ 56 . = ALIGN(4096); /* page aligned when MMU used - origin 0x8 */
56 *(.sdata2) 57 *(.sdata2)
@@ -61,12 +62,7 @@ SECTIONS {
61 } 62 }
62 63
63 _sdata = . ; 64 _sdata = . ;
64 .data ALIGN (4096) : { /* page aligned when MMU used - origin 0x4 */ 65 RW_DATA_SECTION(32, PAGE_SIZE, THREAD_SIZE)
65 DATA_DATA
66 CONSTRUCTORS
67 }
68 . = ALIGN(32);
69 .data.cacheline_aligned : { *(.data.cacheline_aligned) }
70 _edata = . ; 66 _edata = . ;
71 67
72 /* Reserve some low RAM for r0 based memory references */ 68 /* Reserve some low RAM for r0 based memory references */
@@ -74,18 +70,14 @@ SECTIONS {
74 r0_ram = . ; 70 r0_ram = . ;
75 . = . + 4096; /* a page should be enough */ 71 . = . + 4096; /* a page should be enough */
76 72
77 /* The initial task */
78 . = ALIGN(8192);
79 .data.init_task : { *(.data.init_task) }
80
81 /* Under the microblaze ABI, .sdata and .sbss must be contiguous */ 73 /* Under the microblaze ABI, .sdata and .sbss must be contiguous */
82 . = ALIGN(8); 74 . = ALIGN(8);
83 .sdata : { 75 .sdata : AT(ADDR(.sdata) - LOAD_OFFSET) {
84 _ssro = .; 76 _ssro = .;
85 *(.sdata) 77 *(.sdata)
86 } 78 }
87 79
88 .sbss : { 80 .sbss : AT(ADDR(.sbss) - LOAD_OFFSET) {
89 _ssbss = .; 81 _ssbss = .;
90 *(.sbss) 82 *(.sbss)
91 _esbss = .; 83 _esbss = .;
@@ -96,47 +88,36 @@ SECTIONS {
96 88
97 __init_begin = .; 89 __init_begin = .;
98 90
99 . = ALIGN(4096); 91 INIT_TEXT_SECTION(PAGE_SIZE)
100 .init.text : {
101 _sinittext = . ;
102 INIT_TEXT
103 _einittext = .;
104 }
105 92
106 .init.data : { 93 .init.data : AT(ADDR(.init.data) - LOAD_OFFSET) {
107 INIT_DATA 94 INIT_DATA
108 } 95 }
109 96
110 . = ALIGN(4); 97 . = ALIGN(4);
111 .init.ivt : { 98 .init.ivt : AT(ADDR(.init.ivt) - LOAD_OFFSET) {
112 __ivt_start = .; 99 __ivt_start = .;
113 *(.init.ivt) 100 *(.init.ivt)
114 __ivt_end = .; 101 __ivt_end = .;
115 } 102 }
116 103
117 .init.setup : { 104 .init.setup : AT(ADDR(.init.setup) - LOAD_OFFSET) {
118 __setup_start = .; 105 INIT_SETUP(0)
119 *(.init.setup)
120 __setup_end = .;
121 } 106 }
122 107
123 .initcall.init : { 108 .initcall.init : AT(ADDR(.initcall.init) - LOAD_OFFSET ) {
124 __initcall_start = .; 109 INIT_CALLS
125 INITCALLS
126 __initcall_end = .;
127 } 110 }
128 111
129 .con_initcall.init : { 112 .con_initcall.init : AT(ADDR(.con_initcall.init) - LOAD_OFFSET) {
130 __con_initcall_start = .; 113 CON_INITCALL
131 *(.con_initcall.init)
132 __con_initcall_end = .;
133 } 114 }
134 115
135 SECURITY_INIT 116 SECURITY_INIT
136 117
137 __init_end_before_initramfs = .; 118 __init_end_before_initramfs = .;
138 119
139 .init.ramfs ALIGN(4096) : { 120 .init.ramfs ALIGN(4096) : AT(ADDR(.init.ramfs) - LOAD_OFFSET) {
140 __initramfs_start = .; 121 __initramfs_start = .;
141 *(.init.ramfs) 122 *(.init.ramfs)
142 __initramfs_end = .; 123 __initramfs_end = .;
@@ -152,7 +133,8 @@ SECTIONS {
152 } 133 }
153 __init_end = .; 134 __init_end = .;
154 135
155 .bss ALIGN (4096) : { /* page aligned when MMU used */ 136 .bss ALIGN (4096) : AT(ADDR(.bss) - LOAD_OFFSET) {
137 /* page aligned when MMU used */
156 __bss_start = . ; 138 __bss_start = . ;
157 *(.bss*) 139 *(.bss*)
158 *(COMMON) 140 *(COMMON)
diff --git a/arch/microblaze/mm/init.c b/arch/microblaze/mm/init.c
index 1110784eb3f7..a44892e7cd5b 100644
--- a/arch/microblaze/mm/init.c
+++ b/arch/microblaze/mm/init.c
@@ -180,7 +180,8 @@ void free_initrd_mem(unsigned long start, unsigned long end)
180 totalram_pages++; 180 totalram_pages++;
181 pages++; 181 pages++;
182 } 182 }
183 printk(KERN_NOTICE "Freeing initrd memory: %dk freed\n", pages); 183 printk(KERN_NOTICE "Freeing initrd memory: %dk freed\n",
184 (int)(pages * (PAGE_SIZE / 1024)));
184} 185}
185#endif 186#endif
186 187
diff --git a/arch/mips/lasat/sysctl.c b/arch/mips/lasat/sysctl.c
index 3f04d4c406b7..b3deed8db619 100644
--- a/arch/mips/lasat/sysctl.c
+++ b/arch/mips/lasat/sysctl.c
@@ -56,12 +56,12 @@ int sysctl_lasatstring(ctl_table *table,
56 56
57 57
58/* And the same for proc */ 58/* And the same for proc */
59int proc_dolasatstring(ctl_table *table, int write, struct file *filp, 59int proc_dolasatstring(ctl_table *table, int write,
60 void *buffer, size_t *lenp, loff_t *ppos) 60 void *buffer, size_t *lenp, loff_t *ppos)
61{ 61{
62 int r; 62 int r;
63 63
64 r = proc_dostring(table, write, filp, buffer, lenp, ppos); 64 r = proc_dostring(table, write, buffer, lenp, ppos);
65 if ((!write) || r) 65 if ((!write) || r)
66 return r; 66 return r;
67 67
@@ -71,12 +71,12 @@ int proc_dolasatstring(ctl_table *table, int write, struct file *filp,
71} 71}
72 72
73/* proc function to write EEPROM after changing int entry */ 73/* proc function to write EEPROM after changing int entry */
74int proc_dolasatint(ctl_table *table, int write, struct file *filp, 74int proc_dolasatint(ctl_table *table, int write,
75 void *buffer, size_t *lenp, loff_t *ppos) 75 void *buffer, size_t *lenp, loff_t *ppos)
76{ 76{
77 int r; 77 int r;
78 78
79 r = proc_dointvec(table, write, filp, buffer, lenp, ppos); 79 r = proc_dointvec(table, write, buffer, lenp, ppos);
80 if ((!write) || r) 80 if ((!write) || r)
81 return r; 81 return r;
82 82
@@ -89,7 +89,7 @@ int proc_dolasatint(ctl_table *table, int write, struct file *filp,
89static int rtctmp; 89static int rtctmp;
90 90
91/* proc function to read/write RealTime Clock */ 91/* proc function to read/write RealTime Clock */
92int proc_dolasatrtc(ctl_table *table, int write, struct file *filp, 92int proc_dolasatrtc(ctl_table *table, int write,
93 void *buffer, size_t *lenp, loff_t *ppos) 93 void *buffer, size_t *lenp, loff_t *ppos)
94{ 94{
95 struct timespec ts; 95 struct timespec ts;
@@ -102,7 +102,7 @@ int proc_dolasatrtc(ctl_table *table, int write, struct file *filp,
102 if (rtctmp < 0) 102 if (rtctmp < 0)
103 rtctmp = 0; 103 rtctmp = 0;
104 } 104 }
105 r = proc_dointvec(table, write, filp, buffer, lenp, ppos); 105 r = proc_dointvec(table, write, buffer, lenp, ppos);
106 if (r) 106 if (r)
107 return r; 107 return r;
108 108
@@ -154,7 +154,7 @@ int sysctl_lasat_rtc(ctl_table *table,
154#endif 154#endif
155 155
156#ifdef CONFIG_INET 156#ifdef CONFIG_INET
157int proc_lasat_ip(ctl_table *table, int write, struct file *filp, 157int proc_lasat_ip(ctl_table *table, int write,
158 void *buffer, size_t *lenp, loff_t *ppos) 158 void *buffer, size_t *lenp, loff_t *ppos)
159{ 159{
160 unsigned int ip; 160 unsigned int ip;
@@ -231,12 +231,12 @@ static int sysctl_lasat_prid(ctl_table *table,
231 return 0; 231 return 0;
232} 232}
233 233
234int proc_lasat_prid(ctl_table *table, int write, struct file *filp, 234int proc_lasat_prid(ctl_table *table, int write,
235 void *buffer, size_t *lenp, loff_t *ppos) 235 void *buffer, size_t *lenp, loff_t *ppos)
236{ 236{
237 int r; 237 int r;
238 238
239 r = proc_dointvec(table, write, filp, buffer, lenp, ppos); 239 r = proc_dointvec(table, write, buffer, lenp, ppos);
240 if (r < 0) 240 if (r < 0)
241 return r; 241 return r;
242 if (write) { 242 if (write) {
diff --git a/arch/mn10300/kernel/vmlinux.lds.S b/arch/mn10300/kernel/vmlinux.lds.S
index 76f41bdb79c4..10549dcfb610 100644
--- a/arch/mn10300/kernel/vmlinux.lds.S
+++ b/arch/mn10300/kernel/vmlinux.lds.S
@@ -44,24 +44,8 @@ SECTIONS
44 RO_DATA(PAGE_SIZE) 44 RO_DATA(PAGE_SIZE)
45 45
46 /* writeable */ 46 /* writeable */
47 .data : { /* Data */ 47 RW_DATA_SECTION(32, PAGE_SIZE, THREAD_SIZE)
48 DATA_DATA 48 _edata = .;
49 CONSTRUCTORS
50 }
51
52 .data_nosave : { NOSAVE_DATA; }
53
54 .data.page_aligned : { PAGE_ALIGNED_DATA(PAGE_SIZE); }
55 .data.cacheline_aligned : { CACHELINE_ALIGNED_DATA(32); }
56
57 /* rarely changed data like cpu maps */
58 . = ALIGN(32);
59 .data.read_mostly : AT(ADDR(.data.read_mostly)) {
60 READ_MOSTLY_DATA(32);
61 _edata = .; /* End of data section */
62 }
63
64 .data.init_task : { INIT_TASK_DATA(THREAD_SIZE); }
65 49
66 /* might get freed after init */ 50 /* might get freed after init */
67 . = ALIGN(PAGE_SIZE); 51 . = ALIGN(PAGE_SIZE);
@@ -74,22 +58,8 @@ SECTIONS
74 /* will be freed after init */ 58 /* will be freed after init */
75 . = ALIGN(PAGE_SIZE); /* Init code and data */ 59 . = ALIGN(PAGE_SIZE); /* Init code and data */
76 __init_begin = .; 60 __init_begin = .;
77 .init.text : { 61 INIT_TEXT_SECTION(PAGE_SIZE)
78 _sinittext = .; 62 INIT_DATA_SECTION(16)
79 INIT_TEXT;
80 _einittext = .;
81 }
82 .init.data : { INIT_DATA; }
83 .setup.init : { INIT_SETUP(16); }
84
85 __initcall_start = .;
86 .initcall.init : {
87 INITCALLS
88 }
89 __initcall_end = .;
90 .con_initcall.init : { CON_INITCALL; }
91
92 SECURITY_INIT
93 . = ALIGN(4); 63 . = ALIGN(4);
94 __alt_instructions = .; 64 __alt_instructions = .;
95 .altinstructions : { *(.altinstructions) } 65 .altinstructions : { *(.altinstructions) }
@@ -100,8 +70,6 @@ SECTIONS
100 .exit.text : { EXIT_TEXT; } 70 .exit.text : { EXIT_TEXT; }
101 .exit.data : { EXIT_DATA; } 71 .exit.data : { EXIT_DATA; }
102 72
103 .init.ramfs : { INIT_RAM_FS; }
104
105 PERCPU(32) 73 PERCPU(32)
106 . = ALIGN(PAGE_SIZE); 74 . = ALIGN(PAGE_SIZE);
107 __init_end = .; 75 __init_end = .;
diff --git a/arch/parisc/include/asm/fcntl.h b/arch/parisc/include/asm/fcntl.h
index 1e1c824764ee..5f39d5597ced 100644
--- a/arch/parisc/include/asm/fcntl.h
+++ b/arch/parisc/include/asm/fcntl.h
@@ -28,6 +28,8 @@
28#define F_SETOWN 12 /* for sockets. */ 28#define F_SETOWN 12 /* for sockets. */
29#define F_SETSIG 13 /* for sockets. */ 29#define F_SETSIG 13 /* for sockets. */
30#define F_GETSIG 14 /* for sockets. */ 30#define F_GETSIG 14 /* for sockets. */
31#define F_GETOWN_EX 15
32#define F_SETOWN_EX 16
31 33
32/* for posix fcntl() and lockf() */ 34/* for posix fcntl() and lockf() */
33#define F_RDLCK 01 35#define F_RDLCK 01
diff --git a/arch/parisc/kernel/vmlinux.lds.S b/arch/parisc/kernel/vmlinux.lds.S
index aea1784edbd1..775be2791bc2 100644
--- a/arch/parisc/kernel/vmlinux.lds.S
+++ b/arch/parisc/kernel/vmlinux.lds.S
@@ -77,13 +77,7 @@ SECTIONS
77 */ 77 */
78 . = ALIGN(PAGE_SIZE); 78 . = ALIGN(PAGE_SIZE);
79 data_start = .; 79 data_start = .;
80 . = ALIGN(16); 80 EXCEPTION_TABLE(16)
81 /* Exception table */
82 __ex_table : {
83 __start___ex_table = .;
84 *(__ex_table)
85 __stop___ex_table = .;
86 }
87 81
88 NOTES 82 NOTES
89 83
@@ -94,23 +88,8 @@ SECTIONS
94 __stop___unwind = .; 88 __stop___unwind = .;
95 } 89 }
96 90
97 /* rarely changed data like cpu maps */
98 . = ALIGN(16);
99 .data.read_mostly : {
100 *(.data.read_mostly)
101 }
102
103 . = ALIGN(L1_CACHE_BYTES);
104 /* Data */ 91 /* Data */
105 .data : { 92 RW_DATA_SECTION(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE)
106 DATA_DATA
107 CONSTRUCTORS
108 }
109
110 . = ALIGN(L1_CACHE_BYTES);
111 .data.cacheline_aligned : {
112 *(.data.cacheline_aligned)
113 }
114 93
115 /* PA-RISC locks requires 16-byte alignment */ 94 /* PA-RISC locks requires 16-byte alignment */
116 . = ALIGN(16); 95 . = ALIGN(16);
@@ -118,17 +97,6 @@ SECTIONS
118 *(.data.lock_aligned) 97 *(.data.lock_aligned)
119 } 98 }
120 99
121 /* nosave data is really only used for software suspend...it's here
122 * just in case we ever implement it
123 */
124 . = ALIGN(PAGE_SIZE);
125 __nosave_begin = .;
126 .data_nosave : {
127 *(.data.nosave)
128 }
129 . = ALIGN(PAGE_SIZE);
130 __nosave_end = .;
131
132 /* End of data section */ 100 /* End of data section */
133 _edata = .; 101 _edata = .;
134 102
@@ -147,14 +115,6 @@ SECTIONS
147 } 115 }
148 __bss_stop = .; 116 __bss_stop = .;
149 117
150
151 /* assembler code expects init_task to be 16k aligned */
152 . = ALIGN(16384);
153 /* init_task */
154 .data.init_task : {
155 *(.data.init_task)
156 }
157
158#ifdef CONFIG_64BIT 118#ifdef CONFIG_64BIT
159 . = ALIGN(16); 119 . = ALIGN(16);
160 /* Linkage tables */ 120 /* Linkage tables */
@@ -172,64 +132,8 @@ SECTIONS
172 /* reserve space for interrupt stack by aligning __init* to 16k */ 132 /* reserve space for interrupt stack by aligning __init* to 16k */
173 . = ALIGN(16384); 133 . = ALIGN(16384);
174 __init_begin = .; 134 __init_begin = .;
175 .init.text : { 135 INIT_TEXT_SECTION(16384)
176 _sinittext = .; 136 INIT_DATA_SECTION(16)
177 INIT_TEXT
178 _einittext = .;
179 }
180 .init.data : {
181 INIT_DATA
182 }
183 . = ALIGN(16);
184 .init.setup : {
185 __setup_start = .;
186 *(.init.setup)
187 __setup_end = .;
188 }
189 .initcall.init : {
190 __initcall_start = .;
191 INITCALLS
192 __initcall_end = .;
193 }
194 .con_initcall.init : {
195 __con_initcall_start = .;
196 *(.con_initcall.init)
197 __con_initcall_end = .;
198 }
199 SECURITY_INIT
200
201 /* alternate instruction replacement. This is a mechanism x86 uses
202 * to detect the CPU type and replace generic instruction sequences
203 * with CPU specific ones. We don't currently do this in PA, but
204 * it seems like a good idea...
205 */
206 . = ALIGN(4);
207 .altinstructions : {
208 __alt_instructions = .;
209 *(.altinstructions)
210 __alt_instructions_end = .;
211 }
212 .altinstr_replacement : {
213 *(.altinstr_replacement)
214 }
215
216 /* .exit.text is discard at runtime, not link time, to deal with references
217 * from .altinstructions and .eh_frame
218 */
219 .exit.text : {
220 EXIT_TEXT
221 }
222 .exit.data : {
223 EXIT_DATA
224 }
225#ifdef CONFIG_BLK_DEV_INITRD
226 . = ALIGN(PAGE_SIZE);
227 .init.ramfs : {
228 __initramfs_start = .;
229 *(.init.ramfs)
230 __initramfs_end = .;
231 }
232#endif
233 137
234 PERCPU(PAGE_SIZE) 138 PERCPU(PAGE_SIZE)
235 . = ALIGN(PAGE_SIZE); 139 . = ALIGN(PAGE_SIZE);
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index 4fd479059d65..10a0a5488a44 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -385,9 +385,15 @@ config NUMA
385 385
386config NODES_SHIFT 386config NODES_SHIFT
387 int 387 int
388 default "8" if PPC64
388 default "4" 389 default "4"
389 depends on NEED_MULTIPLE_NODES 390 depends on NEED_MULTIPLE_NODES
390 391
392config MAX_ACTIVE_REGIONS
393 int
394 default "256" if PPC64
395 default "32"
396
391config ARCH_SELECT_MEMORY_MODEL 397config ARCH_SELECT_MEMORY_MODEL
392 def_bool y 398 def_bool y
393 depends on PPC64 399 depends on PPC64
diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
index aacf629c1a9f..1a54a3b3a3fa 100644
--- a/arch/powerpc/Makefile
+++ b/arch/powerpc/Makefile
@@ -164,6 +164,17 @@ PHONY += $(BOOT_TARGETS)
164 164
165boot := arch/$(ARCH)/boot 165boot := arch/$(ARCH)/boot
166 166
167ifeq ($(CONFIG_RELOCATABLE),y)
168quiet_cmd_relocs_check = CALL $<
169 cmd_relocs_check = perl $< "$(OBJDUMP)" "$(obj)/vmlinux"
170
171PHONY += relocs_check
172relocs_check: arch/powerpc/relocs_check.pl vmlinux
173 $(call cmd,relocs_check)
174
175zImage: relocs_check
176endif
177
167$(BOOT_TARGETS): vmlinux 178$(BOOT_TARGETS): vmlinux
168 $(Q)$(MAKE) ARCH=ppc64 $(build)=$(boot) $(patsubst %,$(boot)/%,$@) 179 $(Q)$(MAKE) ARCH=ppc64 $(build)=$(boot) $(patsubst %,$(boot)/%,$@)
169 180
diff --git a/arch/powerpc/include/asm/device.h b/arch/powerpc/include/asm/device.h
index 9dade15d1ab4..6d94d27ed850 100644
--- a/arch/powerpc/include/asm/device.h
+++ b/arch/powerpc/include/asm/device.h
@@ -15,7 +15,16 @@ struct dev_archdata {
15 15
16 /* DMA operations on that device */ 16 /* DMA operations on that device */
17 struct dma_map_ops *dma_ops; 17 struct dma_map_ops *dma_ops;
18 void *dma_data; 18
19 /*
20 * When an iommu is in use, dma_data is used as a ptr to the base of the
21 * iommu_table. Otherwise, it is a simple numerical offset.
22 */
23 union {
24 dma_addr_t dma_offset;
25 void *iommu_table_base;
26 } dma_data;
27
19#ifdef CONFIG_SWIOTLB 28#ifdef CONFIG_SWIOTLB
20 dma_addr_t max_direct_dma_addr; 29 dma_addr_t max_direct_dma_addr;
21#endif 30#endif
diff --git a/arch/powerpc/include/asm/dma-mapping.h b/arch/powerpc/include/asm/dma-mapping.h
index cb2ca41dd526..e281daebddca 100644
--- a/arch/powerpc/include/asm/dma-mapping.h
+++ b/arch/powerpc/include/asm/dma-mapping.h
@@ -26,7 +26,6 @@ extern void *dma_direct_alloc_coherent(struct device *dev, size_t size,
26extern void dma_direct_free_coherent(struct device *dev, size_t size, 26extern void dma_direct_free_coherent(struct device *dev, size_t size,
27 void *vaddr, dma_addr_t dma_handle); 27 void *vaddr, dma_addr_t dma_handle);
28 28
29extern unsigned long get_dma_direct_offset(struct device *dev);
30 29
31#ifdef CONFIG_NOT_COHERENT_CACHE 30#ifdef CONFIG_NOT_COHERENT_CACHE
32/* 31/*
@@ -90,6 +89,28 @@ static inline void set_dma_ops(struct device *dev, struct dma_map_ops *ops)
90 dev->archdata.dma_ops = ops; 89 dev->archdata.dma_ops = ops;
91} 90}
92 91
92/*
93 * get_dma_offset()
94 *
95 * Get the dma offset on configurations where the dma address can be determined
96 * from the physical address by looking at a simple offset. Direct dma and
97 * swiotlb use this function, but it is typically not used by implementations
98 * with an iommu.
99 */
100static inline dma_addr_t get_dma_offset(struct device *dev)
101{
102 if (dev)
103 return dev->archdata.dma_data.dma_offset;
104
105 return PCI_DRAM_OFFSET;
106}
107
108static inline void set_dma_offset(struct device *dev, dma_addr_t off)
109{
110 if (dev)
111 dev->archdata.dma_data.dma_offset = off;
112}
113
93/* this will be removed soon */ 114/* this will be removed soon */
94#define flush_write_buffers() 115#define flush_write_buffers()
95 116
@@ -181,12 +202,12 @@ static inline bool dma_capable(struct device *dev, dma_addr_t addr, size_t size)
181 202
182static inline dma_addr_t phys_to_dma(struct device *dev, phys_addr_t paddr) 203static inline dma_addr_t phys_to_dma(struct device *dev, phys_addr_t paddr)
183{ 204{
184 return paddr + get_dma_direct_offset(dev); 205 return paddr + get_dma_offset(dev);
185} 206}
186 207
187static inline phys_addr_t dma_to_phys(struct device *dev, dma_addr_t daddr) 208static inline phys_addr_t dma_to_phys(struct device *dev, dma_addr_t daddr)
188{ 209{
189 return daddr - get_dma_direct_offset(dev); 210 return daddr - get_dma_offset(dev);
190} 211}
191 212
192#define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) 213#define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f)
diff --git a/arch/powerpc/include/asm/fsldma.h b/arch/powerpc/include/asm/fsldma.h
new file mode 100644
index 000000000000..a67aeed17d40
--- /dev/null
+++ b/arch/powerpc/include/asm/fsldma.h
@@ -0,0 +1,136 @@
1/*
2 * Freescale MPC83XX / MPC85XX DMA Controller
3 *
4 * Copyright (c) 2009 Ira W. Snyder <iws@ovro.caltech.edu>
5 *
6 * This file is licensed under the terms of the GNU General Public License
7 * version 2. This program is licensed "as is" without any warranty of any
8 * kind, whether express or implied.
9 */
10
11#ifndef __ARCH_POWERPC_ASM_FSLDMA_H__
12#define __ARCH_POWERPC_ASM_FSLDMA_H__
13
14#include <linux/dmaengine.h>
15
16/*
17 * Definitions for the Freescale DMA controller's DMA_SLAVE implemention
18 *
19 * The Freescale DMA_SLAVE implementation was designed to handle many-to-many
20 * transfers. An example usage would be an accelerated copy between two
21 * scatterlists. Another example use would be an accelerated copy from
22 * multiple non-contiguous device buffers into a single scatterlist.
23 *
24 * A DMA_SLAVE transaction is defined by a struct fsl_dma_slave. This
25 * structure contains a list of hardware addresses that should be copied
26 * to/from the scatterlist passed into device_prep_slave_sg(). The structure
27 * also has some fields to enable hardware-specific features.
28 */
29
30/**
31 * struct fsl_dma_hw_addr
32 * @entry: linked list entry
33 * @address: the hardware address
34 * @length: length to transfer
35 *
36 * Holds a single physical hardware address / length pair for use
37 * with the DMAEngine DMA_SLAVE API.
38 */
39struct fsl_dma_hw_addr {
40 struct list_head entry;
41
42 dma_addr_t address;
43 size_t length;
44};
45
46/**
47 * struct fsl_dma_slave
48 * @addresses: a linked list of struct fsl_dma_hw_addr structures
49 * @request_count: value for DMA request count
50 * @src_loop_size: setup and enable constant source-address DMA transfers
51 * @dst_loop_size: setup and enable constant destination address DMA transfers
52 * @external_start: enable externally started DMA transfers
53 * @external_pause: enable externally paused DMA transfers
54 *
55 * Holds a list of address / length pairs for use with the DMAEngine
56 * DMA_SLAVE API implementation for the Freescale DMA controller.
57 */
58struct fsl_dma_slave {
59
60 /* List of hardware address/length pairs */
61 struct list_head addresses;
62
63 /* Support for extra controller features */
64 unsigned int request_count;
65 unsigned int src_loop_size;
66 unsigned int dst_loop_size;
67 bool external_start;
68 bool external_pause;
69};
70
71/**
72 * fsl_dma_slave_append - add an address/length pair to a struct fsl_dma_slave
73 * @slave: the &struct fsl_dma_slave to add to
74 * @address: the hardware address to add
75 * @length: the length of bytes to transfer from @address
76 *
77 * Add a hardware address/length pair to a struct fsl_dma_slave. Returns 0 on
78 * success, -ERRNO otherwise.
79 */
80static inline int fsl_dma_slave_append(struct fsl_dma_slave *slave,
81 dma_addr_t address, size_t length)
82{
83 struct fsl_dma_hw_addr *addr;
84
85 addr = kzalloc(sizeof(*addr), GFP_ATOMIC);
86 if (!addr)
87 return -ENOMEM;
88
89 INIT_LIST_HEAD(&addr->entry);
90 addr->address = address;
91 addr->length = length;
92
93 list_add_tail(&addr->entry, &slave->addresses);
94 return 0;
95}
96
97/**
98 * fsl_dma_slave_free - free a struct fsl_dma_slave
99 * @slave: the struct fsl_dma_slave to free
100 *
101 * Free a struct fsl_dma_slave and all associated address/length pairs
102 */
103static inline void fsl_dma_slave_free(struct fsl_dma_slave *slave)
104{
105 struct fsl_dma_hw_addr *addr, *tmp;
106
107 if (slave) {
108 list_for_each_entry_safe(addr, tmp, &slave->addresses, entry) {
109 list_del(&addr->entry);
110 kfree(addr);
111 }
112
113 kfree(slave);
114 }
115}
116
117/**
118 * fsl_dma_slave_alloc - allocate a struct fsl_dma_slave
119 * @gfp: the flags to pass to kmalloc when allocating this structure
120 *
121 * Allocate a struct fsl_dma_slave for use by the DMA_SLAVE API. Returns a new
122 * struct fsl_dma_slave on success, or NULL on failure.
123 */
124static inline struct fsl_dma_slave *fsl_dma_slave_alloc(gfp_t gfp)
125{
126 struct fsl_dma_slave *slave;
127
128 slave = kzalloc(sizeof(*slave), gfp);
129 if (!slave)
130 return NULL;
131
132 INIT_LIST_HEAD(&slave->addresses);
133 return slave;
134}
135
136#endif /* __ARCH_POWERPC_ASM_FSLDMA_H__ */
diff --git a/arch/powerpc/include/asm/iommu.h b/arch/powerpc/include/asm/iommu.h
index 7464c0daddd1..edfc9803ec91 100644
--- a/arch/powerpc/include/asm/iommu.h
+++ b/arch/powerpc/include/asm/iommu.h
@@ -70,6 +70,16 @@ struct iommu_table {
70 70
71struct scatterlist; 71struct scatterlist;
72 72
73static inline void set_iommu_table_base(struct device *dev, void *base)
74{
75 dev->archdata.dma_data.iommu_table_base = base;
76}
77
78static inline void *get_iommu_table_base(struct device *dev)
79{
80 return dev->archdata.dma_data.iommu_table_base;
81}
82
73/* Frees table for an individual device node */ 83/* Frees table for an individual device node */
74extern void iommu_free_table(struct iommu_table *tbl, const char *node_name); 84extern void iommu_free_table(struct iommu_table *tbl, const char *node_name);
75 85
diff --git a/arch/powerpc/include/asm/pmc.h b/arch/powerpc/include/asm/pmc.h
index ccc68b50d05d..5a9ede4962cb 100644
--- a/arch/powerpc/include/asm/pmc.h
+++ b/arch/powerpc/include/asm/pmc.h
@@ -29,7 +29,7 @@ int reserve_pmc_hardware(perf_irq_t new_perf_irq);
29void release_pmc_hardware(void); 29void release_pmc_hardware(void);
30void ppc_enable_pmcs(void); 30void ppc_enable_pmcs(void);
31 31
32#ifdef CONFIG_PPC64 32#ifdef CONFIG_PPC_BOOK3S_64
33#include <asm/lppaca.h> 33#include <asm/lppaca.h>
34 34
35static inline void ppc_set_pmu_inuse(int inuse) 35static inline void ppc_set_pmu_inuse(int inuse)
diff --git a/arch/powerpc/include/asm/pte-40x.h b/arch/powerpc/include/asm/pte-40x.h
index 6c3e1f4378d4..ec0b0b0d1df9 100644
--- a/arch/powerpc/include/asm/pte-40x.h
+++ b/arch/powerpc/include/asm/pte-40x.h
@@ -43,6 +43,7 @@
43#define _PAGE_NO_CACHE 0x004 /* I: caching is inhibited */ 43#define _PAGE_NO_CACHE 0x004 /* I: caching is inhibited */
44#define _PAGE_WRITETHRU 0x008 /* W: caching is write-through */ 44#define _PAGE_WRITETHRU 0x008 /* W: caching is write-through */
45#define _PAGE_USER 0x010 /* matches one of the zone permission bits */ 45#define _PAGE_USER 0x010 /* matches one of the zone permission bits */
46#define _PAGE_SPECIAL 0x020 /* software: Special page */
46#define _PAGE_RW 0x040 /* software: Writes permitted */ 47#define _PAGE_RW 0x040 /* software: Writes permitted */
47#define _PAGE_DIRTY 0x080 /* software: dirty page */ 48#define _PAGE_DIRTY 0x080 /* software: dirty page */
48#define _PAGE_HWWRITE 0x100 /* hardware: Dirty & RW, set in exception */ 49#define _PAGE_HWWRITE 0x100 /* hardware: Dirty & RW, set in exception */
diff --git a/arch/powerpc/include/asm/pte-8xx.h b/arch/powerpc/include/asm/pte-8xx.h
index 94e979718dcf..dd5ea95fe61e 100644
--- a/arch/powerpc/include/asm/pte-8xx.h
+++ b/arch/powerpc/include/asm/pte-8xx.h
@@ -32,6 +32,7 @@
32#define _PAGE_FILE 0x0002 /* when !present: nonlinear file mapping */ 32#define _PAGE_FILE 0x0002 /* when !present: nonlinear file mapping */
33#define _PAGE_NO_CACHE 0x0002 /* I: cache inhibit */ 33#define _PAGE_NO_CACHE 0x0002 /* I: cache inhibit */
34#define _PAGE_SHARED 0x0004 /* No ASID (context) compare */ 34#define _PAGE_SHARED 0x0004 /* No ASID (context) compare */
35#define _PAGE_SPECIAL 0x0008 /* SW entry, forced to 0 by the TLB miss */
35 36
36/* These five software bits must be masked out when the entry is loaded 37/* These five software bits must be masked out when the entry is loaded
37 * into the TLB. 38 * into the TLB.
diff --git a/arch/powerpc/include/asm/pte-common.h b/arch/powerpc/include/asm/pte-common.h
index c3b65076a263..f2b370180a09 100644
--- a/arch/powerpc/include/asm/pte-common.h
+++ b/arch/powerpc/include/asm/pte-common.h
@@ -25,9 +25,6 @@
25#ifndef _PAGE_WRITETHRU 25#ifndef _PAGE_WRITETHRU
26#define _PAGE_WRITETHRU 0 26#define _PAGE_WRITETHRU 0
27#endif 27#endif
28#ifndef _PAGE_SPECIAL
29#define _PAGE_SPECIAL 0
30#endif
31#ifndef _PAGE_4K_PFN 28#ifndef _PAGE_4K_PFN
32#define _PAGE_4K_PFN 0 29#define _PAGE_4K_PFN 0
33#endif 30#endif
@@ -179,7 +176,5 @@ extern unsigned long bad_call_to_PMD_PAGE_SIZE(void);
179#define HAVE_PAGE_AGP 176#define HAVE_PAGE_AGP
180 177
181/* Advertise support for _PAGE_SPECIAL */ 178/* Advertise support for _PAGE_SPECIAL */
182#ifdef _PAGE_SPECIAL
183#define __HAVE_ARCH_PTE_SPECIAL 179#define __HAVE_ARCH_PTE_SPECIAL
184#endif
185 180
diff --git a/arch/powerpc/kernel/dma-iommu.c b/arch/powerpc/kernel/dma-iommu.c
index 87ddb3fb948c..37771a518119 100644
--- a/arch/powerpc/kernel/dma-iommu.c
+++ b/arch/powerpc/kernel/dma-iommu.c
@@ -18,7 +18,7 @@
18static void *dma_iommu_alloc_coherent(struct device *dev, size_t size, 18static void *dma_iommu_alloc_coherent(struct device *dev, size_t size,
19 dma_addr_t *dma_handle, gfp_t flag) 19 dma_addr_t *dma_handle, gfp_t flag)
20{ 20{
21 return iommu_alloc_coherent(dev, dev->archdata.dma_data, size, 21 return iommu_alloc_coherent(dev, get_iommu_table_base(dev), size,
22 dma_handle, device_to_mask(dev), flag, 22 dma_handle, device_to_mask(dev), flag,
23 dev_to_node(dev)); 23 dev_to_node(dev));
24} 24}
@@ -26,7 +26,7 @@ static void *dma_iommu_alloc_coherent(struct device *dev, size_t size,
26static void dma_iommu_free_coherent(struct device *dev, size_t size, 26static void dma_iommu_free_coherent(struct device *dev, size_t size,
27 void *vaddr, dma_addr_t dma_handle) 27 void *vaddr, dma_addr_t dma_handle)
28{ 28{
29 iommu_free_coherent(dev->archdata.dma_data, size, vaddr, dma_handle); 29 iommu_free_coherent(get_iommu_table_base(dev), size, vaddr, dma_handle);
30} 30}
31 31
32/* Creates TCEs for a user provided buffer. The user buffer must be 32/* Creates TCEs for a user provided buffer. The user buffer must be
@@ -39,8 +39,8 @@ static dma_addr_t dma_iommu_map_page(struct device *dev, struct page *page,
39 enum dma_data_direction direction, 39 enum dma_data_direction direction,
40 struct dma_attrs *attrs) 40 struct dma_attrs *attrs)
41{ 41{
42 return iommu_map_page(dev, dev->archdata.dma_data, page, offset, size, 42 return iommu_map_page(dev, get_iommu_table_base(dev), page, offset,
43 device_to_mask(dev), direction, attrs); 43 size, device_to_mask(dev), direction, attrs);
44} 44}
45 45
46 46
@@ -48,7 +48,7 @@ static void dma_iommu_unmap_page(struct device *dev, dma_addr_t dma_handle,
48 size_t size, enum dma_data_direction direction, 48 size_t size, enum dma_data_direction direction,
49 struct dma_attrs *attrs) 49 struct dma_attrs *attrs)
50{ 50{
51 iommu_unmap_page(dev->archdata.dma_data, dma_handle, size, direction, 51 iommu_unmap_page(get_iommu_table_base(dev), dma_handle, size, direction,
52 attrs); 52 attrs);
53} 53}
54 54
@@ -57,7 +57,7 @@ static int dma_iommu_map_sg(struct device *dev, struct scatterlist *sglist,
57 int nelems, enum dma_data_direction direction, 57 int nelems, enum dma_data_direction direction,
58 struct dma_attrs *attrs) 58 struct dma_attrs *attrs)
59{ 59{
60 return iommu_map_sg(dev, dev->archdata.dma_data, sglist, nelems, 60 return iommu_map_sg(dev, get_iommu_table_base(dev), sglist, nelems,
61 device_to_mask(dev), direction, attrs); 61 device_to_mask(dev), direction, attrs);
62} 62}
63 63
@@ -65,14 +65,14 @@ static void dma_iommu_unmap_sg(struct device *dev, struct scatterlist *sglist,
65 int nelems, enum dma_data_direction direction, 65 int nelems, enum dma_data_direction direction,
66 struct dma_attrs *attrs) 66 struct dma_attrs *attrs)
67{ 67{
68 iommu_unmap_sg(dev->archdata.dma_data, sglist, nelems, direction, 68 iommu_unmap_sg(get_iommu_table_base(dev), sglist, nelems, direction,
69 attrs); 69 attrs);
70} 70}
71 71
72/* We support DMA to/from any memory page via the iommu */ 72/* We support DMA to/from any memory page via the iommu */
73static int dma_iommu_dma_supported(struct device *dev, u64 mask) 73static int dma_iommu_dma_supported(struct device *dev, u64 mask)
74{ 74{
75 struct iommu_table *tbl = dev->archdata.dma_data; 75 struct iommu_table *tbl = get_iommu_table_base(dev);
76 76
77 if (!tbl || tbl->it_offset > mask) { 77 if (!tbl || tbl->it_offset > mask) {
78 printk(KERN_INFO 78 printk(KERN_INFO
diff --git a/arch/powerpc/kernel/dma.c b/arch/powerpc/kernel/dma.c
index 21b784d7e7d0..6215062caf8c 100644
--- a/arch/powerpc/kernel/dma.c
+++ b/arch/powerpc/kernel/dma.c
@@ -21,13 +21,6 @@
21 * default the offset is PCI_DRAM_OFFSET. 21 * default the offset is PCI_DRAM_OFFSET.
22 */ 22 */
23 23
24unsigned long get_dma_direct_offset(struct device *dev)
25{
26 if (dev)
27 return (unsigned long)dev->archdata.dma_data;
28
29 return PCI_DRAM_OFFSET;
30}
31 24
32void *dma_direct_alloc_coherent(struct device *dev, size_t size, 25void *dma_direct_alloc_coherent(struct device *dev, size_t size,
33 dma_addr_t *dma_handle, gfp_t flag) 26 dma_addr_t *dma_handle, gfp_t flag)
@@ -37,7 +30,7 @@ void *dma_direct_alloc_coherent(struct device *dev, size_t size,
37 ret = __dma_alloc_coherent(dev, size, dma_handle, flag); 30 ret = __dma_alloc_coherent(dev, size, dma_handle, flag);
38 if (ret == NULL) 31 if (ret == NULL)
39 return NULL; 32 return NULL;
40 *dma_handle += get_dma_direct_offset(dev); 33 *dma_handle += get_dma_offset(dev);
41 return ret; 34 return ret;
42#else 35#else
43 struct page *page; 36 struct page *page;
@@ -51,7 +44,7 @@ void *dma_direct_alloc_coherent(struct device *dev, size_t size,
51 return NULL; 44 return NULL;
52 ret = page_address(page); 45 ret = page_address(page);
53 memset(ret, 0, size); 46 memset(ret, 0, size);
54 *dma_handle = virt_to_abs(ret) + get_dma_direct_offset(dev); 47 *dma_handle = virt_to_abs(ret) + get_dma_offset(dev);
55 48
56 return ret; 49 return ret;
57#endif 50#endif
@@ -75,7 +68,7 @@ static int dma_direct_map_sg(struct device *dev, struct scatterlist *sgl,
75 int i; 68 int i;
76 69
77 for_each_sg(sgl, sg, nents, i) { 70 for_each_sg(sgl, sg, nents, i) {
78 sg->dma_address = sg_phys(sg) + get_dma_direct_offset(dev); 71 sg->dma_address = sg_phys(sg) + get_dma_offset(dev);
79 sg->dma_length = sg->length; 72 sg->dma_length = sg->length;
80 __dma_sync_page(sg_page(sg), sg->offset, sg->length, direction); 73 __dma_sync_page(sg_page(sg), sg->offset, sg->length, direction);
81 } 74 }
@@ -110,7 +103,7 @@ static inline dma_addr_t dma_direct_map_page(struct device *dev,
110{ 103{
111 BUG_ON(dir == DMA_NONE); 104 BUG_ON(dir == DMA_NONE);
112 __dma_sync_page(page, offset, size, dir); 105 __dma_sync_page(page, offset, size, dir);
113 return page_to_phys(page) + offset + get_dma_direct_offset(dev); 106 return page_to_phys(page) + offset + get_dma_offset(dev);
114} 107}
115 108
116static inline void dma_direct_unmap_page(struct device *dev, 109static inline void dma_direct_unmap_page(struct device *dev,
diff --git a/arch/powerpc/kernel/exceptions-64e.S b/arch/powerpc/kernel/exceptions-64e.S
index 9048f96237f6..24dcc0ecf246 100644
--- a/arch/powerpc/kernel/exceptions-64e.S
+++ b/arch/powerpc/kernel/exceptions-64e.S
@@ -17,7 +17,6 @@
17#include <asm/cputable.h> 17#include <asm/cputable.h>
18#include <asm/setup.h> 18#include <asm/setup.h>
19#include <asm/thread_info.h> 19#include <asm/thread_info.h>
20#include <asm/reg.h>
21#include <asm/exception-64e.h> 20#include <asm/exception-64e.h>
22#include <asm/bug.h> 21#include <asm/bug.h>
23#include <asm/irqflags.h> 22#include <asm/irqflags.h>
diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c
index e9f4840096b3..bb8209e34931 100644
--- a/arch/powerpc/kernel/pci-common.c
+++ b/arch/powerpc/kernel/pci-common.c
@@ -1117,7 +1117,7 @@ void __devinit pcibios_setup_bus_devices(struct pci_bus *bus)
1117 1117
1118 /* Hook up default DMA ops */ 1118 /* Hook up default DMA ops */
1119 sd->dma_ops = pci_dma_ops; 1119 sd->dma_ops = pci_dma_ops;
1120 sd->dma_data = (void *)PCI_DRAM_OFFSET; 1120 set_dma_offset(&dev->dev, PCI_DRAM_OFFSET);
1121 1121
1122 /* Additional platform DMA/iommu setup */ 1122 /* Additional platform DMA/iommu setup */
1123 if (ppc_md.pci_dma_dev_setup) 1123 if (ppc_md.pci_dma_dev_setup)
diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
index 0a3216433051..1168c5f440ab 100644
--- a/arch/powerpc/kernel/process.c
+++ b/arch/powerpc/kernel/process.c
@@ -1165,7 +1165,22 @@ static inline unsigned long brk_rnd(void)
1165 1165
1166unsigned long arch_randomize_brk(struct mm_struct *mm) 1166unsigned long arch_randomize_brk(struct mm_struct *mm)
1167{ 1167{
1168 unsigned long ret = PAGE_ALIGN(mm->brk + brk_rnd()); 1168 unsigned long base = mm->brk;
1169 unsigned long ret;
1170
1171#ifdef CONFIG_PPC64
1172 /*
1173 * If we are using 1TB segments and we are allowed to randomise
1174 * the heap, we can put it above 1TB so it is backed by a 1TB
1175 * segment. Otherwise the heap will be in the bottom 1TB
1176 * which always uses 256MB segments and this may result in a
1177 * performance penalty.
1178 */
1179 if (!is_32bit_task() && (mmu_highuser_ssize == MMU_SEGSIZE_1T))
1180 base = max_t(unsigned long, mm->brk, 1UL << SID_SHIFT_1T);
1181#endif
1182
1183 ret = PAGE_ALIGN(base + brk_rnd());
1169 1184
1170 if (ret < mm->brk) 1185 if (ret < mm->brk)
1171 return mm->brk; 1186 return mm->brk;
diff --git a/arch/powerpc/kernel/prom_init.c b/arch/powerpc/kernel/prom_init.c
index 864334b337a3..bafac2e41ae1 100644
--- a/arch/powerpc/kernel/prom_init.c
+++ b/arch/powerpc/kernel/prom_init.c
@@ -800,7 +800,7 @@ static void __init prom_send_capabilities(void)
800 root = call_prom("open", 1, 1, ADDR("/")); 800 root = call_prom("open", 1, 1, ADDR("/"));
801 if (root != 0) { 801 if (root != 0) {
802 /* try calling the ibm,client-architecture-support method */ 802 /* try calling the ibm,client-architecture-support method */
803 prom_printf("Calling ibm,client-architecture..."); 803 prom_printf("Calling ibm,client-architecture-support...");
804 if (call_prom_ret("call-method", 3, 2, &ret, 804 if (call_prom_ret("call-method", 3, 2, &ret,
805 ADDR("ibm,client-architecture-support"), 805 ADDR("ibm,client-architecture-support"),
806 root, 806 root,
@@ -814,6 +814,7 @@ static void __init prom_send_capabilities(void)
814 return; 814 return;
815 } 815 }
816 call_prom("close", 1, 0, root); 816 call_prom("close", 1, 0, root);
817 prom_printf(" not implemented\n");
817 } 818 }
818 819
819 /* no ibm,client-architecture-support call, try the old way */ 820 /* no ibm,client-architecture-support call, try the old way */
diff --git a/arch/powerpc/kernel/vdso.c b/arch/powerpc/kernel/vdso.c
index 3faaf29bdb29..94e2df3cae07 100644
--- a/arch/powerpc/kernel/vdso.c
+++ b/arch/powerpc/kernel/vdso.c
@@ -241,6 +241,13 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
241 } 241 }
242 242
243 /* 243 /*
244 * Put vDSO base into mm struct. We need to do this before calling
245 * install_special_mapping or the perf counter mmap tracking code
246 * will fail to recognise it as a vDSO (since arch_vma_name fails).
247 */
248 current->mm->context.vdso_base = vdso_base;
249
250 /*
244 * our vma flags don't have VM_WRITE so by default, the process isn't 251 * our vma flags don't have VM_WRITE so by default, the process isn't
245 * allowed to write those pages. 252 * allowed to write those pages.
246 * gdb can break that with ptrace interface, and thus trigger COW on 253 * gdb can break that with ptrace interface, and thus trigger COW on
@@ -260,11 +267,10 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
260 VM_MAYREAD|VM_MAYWRITE|VM_MAYEXEC| 267 VM_MAYREAD|VM_MAYWRITE|VM_MAYEXEC|
261 VM_ALWAYSDUMP, 268 VM_ALWAYSDUMP,
262 vdso_pagelist); 269 vdso_pagelist);
263 if (rc) 270 if (rc) {
271 current->mm->context.vdso_base = 0;
264 goto fail_mmapsem; 272 goto fail_mmapsem;
265 273 }
266 /* Put vDSO base into mm struct */
267 current->mm->context.vdso_base = vdso_base;
268 274
269 up_write(&mm->mmap_sem); 275 up_write(&mm->mmap_sem);
270 return 0; 276 return 0;
diff --git a/arch/powerpc/kernel/vio.c b/arch/powerpc/kernel/vio.c
index bc7b41edbdfc..77f64218abf3 100644
--- a/arch/powerpc/kernel/vio.c
+++ b/arch/powerpc/kernel/vio.c
@@ -1054,6 +1054,8 @@ static struct iommu_table *vio_build_iommu_table(struct vio_dev *dev)
1054 return NULL; 1054 return NULL;
1055 1055
1056 tbl = kmalloc(sizeof(*tbl), GFP_KERNEL); 1056 tbl = kmalloc(sizeof(*tbl), GFP_KERNEL);
1057 if (tbl == NULL)
1058 return NULL;
1057 1059
1058 of_parse_dma_window(dev->dev.archdata.of_node, dma_window, 1060 of_parse_dma_window(dev->dev.archdata.of_node, dma_window,
1059 &tbl->it_index, &offset, &size); 1061 &tbl->it_index, &offset, &size);
@@ -1233,7 +1235,7 @@ struct vio_dev *vio_register_device_node(struct device_node *of_node)
1233 vio_cmo_set_dma_ops(viodev); 1235 vio_cmo_set_dma_ops(viodev);
1234 else 1236 else
1235 viodev->dev.archdata.dma_ops = &dma_iommu_ops; 1237 viodev->dev.archdata.dma_ops = &dma_iommu_ops;
1236 viodev->dev.archdata.dma_data = vio_build_iommu_table(viodev); 1238 set_iommu_table_base(&viodev->dev, vio_build_iommu_table(viodev));
1237 set_dev_node(&viodev->dev, of_node_to_nid(of_node)); 1239 set_dev_node(&viodev->dev, of_node_to_nid(of_node));
1238 1240
1239 /* init generic 'struct device' fields: */ 1241 /* init generic 'struct device' fields: */
diff --git a/arch/powerpc/kernel/vmlinux.lds.S b/arch/powerpc/kernel/vmlinux.lds.S
index 58da4070723d..f56429362a12 100644
--- a/arch/powerpc/kernel/vmlinux.lds.S
+++ b/arch/powerpc/kernel/vmlinux.lds.S
@@ -6,6 +6,7 @@
6#include <asm/page.h> 6#include <asm/page.h>
7#include <asm-generic/vmlinux.lds.h> 7#include <asm-generic/vmlinux.lds.h>
8#include <asm/cache.h> 8#include <asm/cache.h>
9#include <asm/thread_info.h>
9 10
10ENTRY(_stext) 11ENTRY(_stext)
11 12
@@ -71,12 +72,7 @@ SECTIONS
71 /* Read-only data */ 72 /* Read-only data */
72 RODATA 73 RODATA
73 74
74 /* Exception & bug tables */ 75 EXCEPTION_TABLE(0)
75 __ex_table : AT(ADDR(__ex_table) - LOAD_OFFSET) {
76 __start___ex_table = .;
77 *(__ex_table)
78 __stop___ex_table = .;
79 }
80 76
81 NOTES :kernel :notes 77 NOTES :kernel :notes
82 78
@@ -93,12 +89,7 @@ SECTIONS
93 */ 89 */
94 . = ALIGN(PAGE_SIZE); 90 . = ALIGN(PAGE_SIZE);
95 __init_begin = .; 91 __init_begin = .;
96 92 INIT_TEXT_SECTION(PAGE_SIZE) :kernel
97 .init.text : AT(ADDR(.init.text) - LOAD_OFFSET) {
98 _sinittext = .;
99 INIT_TEXT
100 _einittext = .;
101 } :kernel
102 93
103 /* .exit.text is discarded at runtime, not link time, 94 /* .exit.text is discarded at runtime, not link time,
104 * to deal with references from __bug_table 95 * to deal with references from __bug_table
@@ -122,23 +113,16 @@ SECTIONS
122#endif 113#endif
123 } 114 }
124 115
125 . = ALIGN(16);
126 .init.setup : AT(ADDR(.init.setup) - LOAD_OFFSET) { 116 .init.setup : AT(ADDR(.init.setup) - LOAD_OFFSET) {
127 __setup_start = .; 117 INIT_SETUP(16)
128 *(.init.setup)
129 __setup_end = .;
130 } 118 }
131 119
132 .initcall.init : AT(ADDR(.initcall.init) - LOAD_OFFSET) { 120 .initcall.init : AT(ADDR(.initcall.init) - LOAD_OFFSET) {
133 __initcall_start = .; 121 INIT_CALLS
134 INITCALLS 122 }
135 __initcall_end = .;
136 }
137 123
138 .con_initcall.init : AT(ADDR(.con_initcall.init) - LOAD_OFFSET) { 124 .con_initcall.init : AT(ADDR(.con_initcall.init) - LOAD_OFFSET) {
139 __con_initcall_start = .; 125 CON_INITCALL
140 *(.con_initcall.init)
141 __con_initcall_end = .;
142 } 126 }
143 127
144 SECURITY_INIT 128 SECURITY_INIT
@@ -169,14 +153,10 @@ SECTIONS
169 __stop___fw_ftr_fixup = .; 153 __stop___fw_ftr_fixup = .;
170 } 154 }
171#endif 155#endif
172#ifdef CONFIG_BLK_DEV_INITRD
173 . = ALIGN(PAGE_SIZE);
174 .init.ramfs : AT(ADDR(.init.ramfs) - LOAD_OFFSET) { 156 .init.ramfs : AT(ADDR(.init.ramfs) - LOAD_OFFSET) {
175 __initramfs_start = .; 157 INIT_RAM_FS
176 *(.init.ramfs)
177 __initramfs_end = .;
178 } 158 }
179#endif 159
180 PERCPU(PAGE_SIZE) 160 PERCPU(PAGE_SIZE)
181 161
182 . = ALIGN(8); 162 . = ALIGN(8);
@@ -240,36 +220,24 @@ SECTIONS
240#endif 220#endif
241 221
242 /* The initial task and kernel stack */ 222 /* The initial task and kernel stack */
243#ifdef CONFIG_PPC32
244 . = ALIGN(8192);
245#else
246 . = ALIGN(16384);
247#endif
248 .data.init_task : AT(ADDR(.data.init_task) - LOAD_OFFSET) { 223 .data.init_task : AT(ADDR(.data.init_task) - LOAD_OFFSET) {
249 *(.data.init_task) 224 INIT_TASK_DATA(THREAD_SIZE)
250 } 225 }
251 226
252 . = ALIGN(PAGE_SIZE);
253 .data.page_aligned : AT(ADDR(.data.page_aligned) - LOAD_OFFSET) { 227 .data.page_aligned : AT(ADDR(.data.page_aligned) - LOAD_OFFSET) {
254 *(.data.page_aligned) 228 PAGE_ALIGNED_DATA(PAGE_SIZE)
255 } 229 }
256 230
257 . = ALIGN(L1_CACHE_BYTES);
258 .data.cacheline_aligned : AT(ADDR(.data.cacheline_aligned) - LOAD_OFFSET) { 231 .data.cacheline_aligned : AT(ADDR(.data.cacheline_aligned) - LOAD_OFFSET) {
259 *(.data.cacheline_aligned) 232 CACHELINE_ALIGNED_DATA(L1_CACHE_BYTES)
260 } 233 }
261 234
262 . = ALIGN(L1_CACHE_BYTES);
263 .data.read_mostly : AT(ADDR(.data.read_mostly) - LOAD_OFFSET) { 235 .data.read_mostly : AT(ADDR(.data.read_mostly) - LOAD_OFFSET) {
264 *(.data.read_mostly) 236 READ_MOSTLY_DATA(L1_CACHE_BYTES)
265 } 237 }
266 238
267 . = ALIGN(PAGE_SIZE);
268 .data_nosave : AT(ADDR(.data_nosave) - LOAD_OFFSET) { 239 .data_nosave : AT(ADDR(.data_nosave) - LOAD_OFFSET) {
269 __nosave_begin = .; 240 NOSAVE_DATA
270 *(.data.nosave)
271 . = ALIGN(PAGE_SIZE);
272 __nosave_end = .;
273 } 241 }
274 242
275 . = ALIGN(PAGE_SIZE); 243 . = ALIGN(PAGE_SIZE);
@@ -280,14 +248,7 @@ SECTIONS
280 * And finally the bss 248 * And finally the bss
281 */ 249 */
282 250
283 .bss : AT(ADDR(.bss) - LOAD_OFFSET) { 251 BSS_SECTION(0, 0, 0)
284 __bss_start = .;
285 *(.sbss) *(.scommon)
286 *(.dynbss)
287 *(.bss)
288 *(COMMON)
289 __bss_stop = .;
290 }
291 252
292 . = ALIGN(PAGE_SIZE); 253 . = ALIGN(PAGE_SIZE);
293 _end = . ; 254 _end = . ;
diff --git a/arch/powerpc/mm/pgtable.c b/arch/powerpc/mm/pgtable.c
index 83f1551ec2c9..53040931de32 100644
--- a/arch/powerpc/mm/pgtable.c
+++ b/arch/powerpc/mm/pgtable.c
@@ -30,6 +30,8 @@
30#include <asm/tlbflush.h> 30#include <asm/tlbflush.h>
31#include <asm/tlb.h> 31#include <asm/tlb.h>
32 32
33#include "mmu_decl.h"
34
33DEFINE_PER_CPU(struct mmu_gather, mmu_gathers); 35DEFINE_PER_CPU(struct mmu_gather, mmu_gathers);
34 36
35#ifdef CONFIG_SMP 37#ifdef CONFIG_SMP
@@ -166,7 +168,7 @@ struct page * maybe_pte_to_page(pte_t pte)
166 * support falls into the same category. 168 * support falls into the same category.
167 */ 169 */
168 170
169static pte_t set_pte_filter(pte_t pte) 171static pte_t set_pte_filter(pte_t pte, unsigned long addr)
170{ 172{
171 pte = __pte(pte_val(pte) & ~_PAGE_HPTEFLAGS); 173 pte = __pte(pte_val(pte) & ~_PAGE_HPTEFLAGS);
172 if (pte_looks_normal(pte) && !(cpu_has_feature(CPU_FTR_COHERENT_ICACHE) || 174 if (pte_looks_normal(pte) && !(cpu_has_feature(CPU_FTR_COHERENT_ICACHE) ||
@@ -175,6 +177,17 @@ static pte_t set_pte_filter(pte_t pte)
175 if (!pg) 177 if (!pg)
176 return pte; 178 return pte;
177 if (!test_bit(PG_arch_1, &pg->flags)) { 179 if (!test_bit(PG_arch_1, &pg->flags)) {
180#ifdef CONFIG_8xx
181 /* On 8xx, cache control instructions (particularly
182 * "dcbst" from flush_dcache_icache) fault as write
183 * operation if there is an unpopulated TLB entry
184 * for the address in question. To workaround that,
185 * we invalidate the TLB here, thus avoiding dcbst
186 * misbehaviour.
187 */
188 /* 8xx doesn't care about PID, size or ind args */
189 _tlbil_va(addr, 0, 0, 0);
190#endif /* CONFIG_8xx */
178 flush_dcache_icache_page(pg); 191 flush_dcache_icache_page(pg);
179 set_bit(PG_arch_1, &pg->flags); 192 set_bit(PG_arch_1, &pg->flags);
180 } 193 }
@@ -194,7 +207,7 @@ static pte_t set_access_flags_filter(pte_t pte, struct vm_area_struct *vma,
194 * as we don't have two bits to spare for _PAGE_EXEC and _PAGE_HWEXEC so 207 * as we don't have two bits to spare for _PAGE_EXEC and _PAGE_HWEXEC so
195 * instead we "filter out" the exec permission for non clean pages. 208 * instead we "filter out" the exec permission for non clean pages.
196 */ 209 */
197static pte_t set_pte_filter(pte_t pte) 210static pte_t set_pte_filter(pte_t pte, unsigned long addr)
198{ 211{
199 struct page *pg; 212 struct page *pg;
200 213
@@ -276,7 +289,7 @@ void set_pte_at(struct mm_struct *mm, unsigned long addr, pte_t *ptep,
276 * this context might not have been activated yet when this 289 * this context might not have been activated yet when this
277 * is called. 290 * is called.
278 */ 291 */
279 pte = set_pte_filter(pte); 292 pte = set_pte_filter(pte, addr);
280 293
281 /* Perform the setting of the PTE */ 294 /* Perform the setting of the PTE */
282 __set_pte_at(mm, addr, ptep, pte, 0); 295 __set_pte_at(mm, addr, ptep, pte, 0);
diff --git a/arch/powerpc/mm/tlb_low_64e.S b/arch/powerpc/mm/tlb_low_64e.S
index ef1cccf71173..f288279e679d 100644
--- a/arch/powerpc/mm/tlb_low_64e.S
+++ b/arch/powerpc/mm/tlb_low_64e.S
@@ -18,7 +18,6 @@
18#include <asm/asm-offsets.h> 18#include <asm/asm-offsets.h>
19#include <asm/cputable.h> 19#include <asm/cputable.h>
20#include <asm/pgtable.h> 20#include <asm/pgtable.h>
21#include <asm/reg.h>
22#include <asm/exception-64e.h> 21#include <asm/exception-64e.h>
23#include <asm/ppc-opcode.h> 22#include <asm/ppc-opcode.h>
24 23
diff --git a/arch/powerpc/platforms/cell/beat_iommu.c b/arch/powerpc/platforms/cell/beat_iommu.c
index 93b0efddd658..39d361c5c6d2 100644
--- a/arch/powerpc/platforms/cell/beat_iommu.c
+++ b/arch/powerpc/platforms/cell/beat_iommu.c
@@ -77,7 +77,7 @@ static void __init celleb_init_direct_mapping(void)
77static void celleb_dma_dev_setup(struct device *dev) 77static void celleb_dma_dev_setup(struct device *dev)
78{ 78{
79 dev->archdata.dma_ops = get_pci_dma_ops(); 79 dev->archdata.dma_ops = get_pci_dma_ops();
80 dev->archdata.dma_data = (void *)celleb_dma_direct_offset; 80 set_dma_offset(dev, celleb_dma_direct_offset);
81} 81}
82 82
83static void celleb_pci_dma_dev_setup(struct pci_dev *pdev) 83static void celleb_pci_dma_dev_setup(struct pci_dev *pdev)
diff --git a/arch/powerpc/platforms/cell/iommu.c b/arch/powerpc/platforms/cell/iommu.c
index 416db17eb18f..ca5bfdfe47f2 100644
--- a/arch/powerpc/platforms/cell/iommu.c
+++ b/arch/powerpc/platforms/cell/iommu.c
@@ -657,15 +657,13 @@ static void cell_dma_dev_setup_fixed(struct device *dev);
657 657
658static void cell_dma_dev_setup(struct device *dev) 658static void cell_dma_dev_setup(struct device *dev)
659{ 659{
660 struct dev_archdata *archdata = &dev->archdata;
661
662 /* Order is important here, these are not mutually exclusive */ 660 /* Order is important here, these are not mutually exclusive */
663 if (get_dma_ops(dev) == &dma_iommu_fixed_ops) 661 if (get_dma_ops(dev) == &dma_iommu_fixed_ops)
664 cell_dma_dev_setup_fixed(dev); 662 cell_dma_dev_setup_fixed(dev);
665 else if (get_pci_dma_ops() == &dma_iommu_ops) 663 else if (get_pci_dma_ops() == &dma_iommu_ops)
666 archdata->dma_data = cell_get_iommu_table(dev); 664 set_iommu_table_base(dev, cell_get_iommu_table(dev));
667 else if (get_pci_dma_ops() == &dma_direct_ops) 665 else if (get_pci_dma_ops() == &dma_direct_ops)
668 archdata->dma_data = (void *)cell_dma_direct_offset; 666 set_dma_offset(dev, cell_dma_direct_offset);
669 else 667 else
670 BUG(); 668 BUG();
671} 669}
@@ -973,11 +971,10 @@ static int dma_set_mask_and_switch(struct device *dev, u64 dma_mask)
973 971
974static void cell_dma_dev_setup_fixed(struct device *dev) 972static void cell_dma_dev_setup_fixed(struct device *dev)
975{ 973{
976 struct dev_archdata *archdata = &dev->archdata;
977 u64 addr; 974 u64 addr;
978 975
979 addr = cell_iommu_get_fixed_address(dev) + dma_iommu_fixed_base; 976 addr = cell_iommu_get_fixed_address(dev) + dma_iommu_fixed_base;
980 archdata->dma_data = (void *)addr; 977 set_dma_offset(dev, addr);
981 978
982 dev_dbg(dev, "iommu: fixed addr = %llx\n", addr); 979 dev_dbg(dev, "iommu: fixed addr = %llx\n", addr);
983} 980}
diff --git a/arch/powerpc/platforms/iseries/iommu.c b/arch/powerpc/platforms/iseries/iommu.c
index 6c1e1011959e..9d53cb481a7c 100644
--- a/arch/powerpc/platforms/iseries/iommu.c
+++ b/arch/powerpc/platforms/iseries/iommu.c
@@ -193,7 +193,7 @@ static void pci_dma_dev_setup_iseries(struct pci_dev *pdev)
193 pdn->iommu_table = iommu_init_table(tbl, -1); 193 pdn->iommu_table = iommu_init_table(tbl, -1);
194 else 194 else
195 kfree(tbl); 195 kfree(tbl);
196 pdev->dev.archdata.dma_data = pdn->iommu_table; 196 set_iommu_table_base(&pdev->dev, pdn->iommu_table);
197} 197}
198#else 198#else
199#define pci_dma_dev_setup_iseries NULL 199#define pci_dma_dev_setup_iseries NULL
diff --git a/arch/powerpc/platforms/pasemi/iommu.c b/arch/powerpc/platforms/pasemi/iommu.c
index a0ff03a3d8da..7b1d608ea3c8 100644
--- a/arch/powerpc/platforms/pasemi/iommu.c
+++ b/arch/powerpc/platforms/pasemi/iommu.c
@@ -189,7 +189,7 @@ static void pci_dma_dev_setup_pasemi(struct pci_dev *dev)
189 } 189 }
190#endif 190#endif
191 191
192 dev->dev.archdata.dma_data = &iommu_table_iobmap; 192 set_iommu_table_base(&dev->dev, &iommu_table_iobmap);
193} 193}
194 194
195static void pci_dma_bus_setup_null(struct pci_bus *b) { } 195static void pci_dma_bus_setup_null(struct pci_bus *b) { }
diff --git a/arch/powerpc/platforms/pseries/iommu.c b/arch/powerpc/platforms/pseries/iommu.c
index 661c8e02bcba..1a0000a4b6d6 100644
--- a/arch/powerpc/platforms/pseries/iommu.c
+++ b/arch/powerpc/platforms/pseries/iommu.c
@@ -482,7 +482,7 @@ static void pci_dma_dev_setup_pSeries(struct pci_dev *dev)
482 phb->node); 482 phb->node);
483 iommu_table_setparms(phb, dn, tbl); 483 iommu_table_setparms(phb, dn, tbl);
484 PCI_DN(dn)->iommu_table = iommu_init_table(tbl, phb->node); 484 PCI_DN(dn)->iommu_table = iommu_init_table(tbl, phb->node);
485 dev->dev.archdata.dma_data = PCI_DN(dn)->iommu_table; 485 set_iommu_table_base(&dev->dev, PCI_DN(dn)->iommu_table);
486 return; 486 return;
487 } 487 }
488 488
@@ -494,7 +494,7 @@ static void pci_dma_dev_setup_pSeries(struct pci_dev *dev)
494 dn = dn->parent; 494 dn = dn->parent;
495 495
496 if (dn && PCI_DN(dn)) 496 if (dn && PCI_DN(dn))
497 dev->dev.archdata.dma_data = PCI_DN(dn)->iommu_table; 497 set_iommu_table_base(&dev->dev, PCI_DN(dn)->iommu_table);
498 else 498 else
499 printk(KERN_WARNING "iommu: Device %s has no iommu table\n", 499 printk(KERN_WARNING "iommu: Device %s has no iommu table\n",
500 pci_name(dev)); 500 pci_name(dev));
@@ -538,7 +538,7 @@ static void pci_dma_dev_setup_pSeriesLP(struct pci_dev *dev)
538 */ 538 */
539 if (dma_window == NULL || pdn->parent == NULL) { 539 if (dma_window == NULL || pdn->parent == NULL) {
540 pr_debug(" no dma window for device, linking to parent\n"); 540 pr_debug(" no dma window for device, linking to parent\n");
541 dev->dev.archdata.dma_data = PCI_DN(pdn)->iommu_table; 541 set_iommu_table_base(&dev->dev, PCI_DN(pdn)->iommu_table);
542 return; 542 return;
543 } 543 }
544 544
@@ -554,7 +554,7 @@ static void pci_dma_dev_setup_pSeriesLP(struct pci_dev *dev)
554 pr_debug(" found DMA window, table: %p\n", pci->iommu_table); 554 pr_debug(" found DMA window, table: %p\n", pci->iommu_table);
555 } 555 }
556 556
557 dev->dev.archdata.dma_data = pci->iommu_table; 557 set_iommu_table_base(&dev->dev, pci->iommu_table);
558} 558}
559#else /* CONFIG_PCI */ 559#else /* CONFIG_PCI */
560#define pci_dma_bus_setup_pSeries NULL 560#define pci_dma_bus_setup_pSeries NULL
diff --git a/arch/powerpc/relocs_check.pl b/arch/powerpc/relocs_check.pl
new file mode 100755
index 000000000000..d2571096c3e9
--- /dev/null
+++ b/arch/powerpc/relocs_check.pl
@@ -0,0 +1,56 @@
1#!/usr/bin/perl
2
3# Copyright © 2009 IBM Corporation
4
5# This program is free software; you can redistribute it and/or
6# modify it under the terms of the GNU General Public License
7# as published by the Free Software Foundation; either version
8# 2 of the License, or (at your option) any later version.
9
10# This script checks the relcoations of a vmlinux for "suspicious"
11# relocations.
12
13use strict;
14use warnings;
15
16if ($#ARGV != 1) {
17 die "$0 [path to objdump] [path to vmlinux]\n";
18}
19
20# Have Kbuild supply the path to objdump so we handle cross compilation.
21my $objdump = shift;
22my $vmlinux = shift;
23my $bad_relocs_count = 0;
24my $bad_relocs = "";
25my $old_binutils = 0;
26
27open(FD, "$objdump -R $vmlinux|") or die;
28while (<FD>) {
29 study $_;
30
31 # Only look at relcoation lines.
32 next if (!/\s+R_/);
33
34 # These relocations are okay
35 next if (/R_PPC64_RELATIVE/ or /R_PPC64_NONE/ or
36 /R_PPC64_ADDR64\s+mach_/);
37
38 # If we see this type of relcoation it's an idication that
39 # we /may/ be using an old version of binutils.
40 if (/R_PPC64_UADDR64/) {
41 $old_binutils++;
42 }
43
44 $bad_relocs_count++;
45 $bad_relocs .= $_;
46}
47
48if ($bad_relocs_count) {
49 print "WARNING: $bad_relocs_count bad relocations\n";
50 print $bad_relocs;
51}
52
53if ($old_binutils) {
54 print "WARNING: You need at binutils >= 2.19 to build a ".
55 "CONFIG_RELCOATABLE kernel\n";
56}
diff --git a/arch/powerpc/sysdev/dart_iommu.c b/arch/powerpc/sysdev/dart_iommu.c
index 89639ecbf381..ae3c4db86fe8 100644
--- a/arch/powerpc/sysdev/dart_iommu.c
+++ b/arch/powerpc/sysdev/dart_iommu.c
@@ -297,7 +297,7 @@ static void pci_dma_dev_setup_dart(struct pci_dev *dev)
297 /* We only have one iommu table on the mac for now, which makes 297 /* We only have one iommu table on the mac for now, which makes
298 * things simple. Setup all PCI devices to point to this table 298 * things simple. Setup all PCI devices to point to this table
299 */ 299 */
300 dev->dev.archdata.dma_data = &iommu_table_dart; 300 set_iommu_table_base(&dev->dev, &iommu_table_dart);
301} 301}
302 302
303static void pci_dma_bus_setup_dart(struct pci_bus *bus) 303static void pci_dma_bus_setup_dart(struct pci_bus *bus)
diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c
index 0e09a45ac79a..c6f0a71b405e 100644
--- a/arch/powerpc/xmon/xmon.c
+++ b/arch/powerpc/xmon/xmon.c
@@ -335,6 +335,16 @@ int cpus_are_in_xmon(void)
335} 335}
336#endif 336#endif
337 337
338static inline int unrecoverable_excp(struct pt_regs *regs)
339{
340#ifdef CONFIG_4xx
341 /* We have no MSR_RI bit on 4xx, so we simply return false */
342 return 0;
343#else
344 return ((regs->msr & MSR_RI) == 0);
345#endif
346}
347
338static int xmon_core(struct pt_regs *regs, int fromipi) 348static int xmon_core(struct pt_regs *regs, int fromipi)
339{ 349{
340 int cmd = 0; 350 int cmd = 0;
@@ -388,7 +398,7 @@ static int xmon_core(struct pt_regs *regs, int fromipi)
388 bp = NULL; 398 bp = NULL;
389 if ((regs->msr & (MSR_IR|MSR_PR|MSR_SF)) == (MSR_IR|MSR_SF)) 399 if ((regs->msr & (MSR_IR|MSR_PR|MSR_SF)) == (MSR_IR|MSR_SF))
390 bp = at_breakpoint(regs->nip); 400 bp = at_breakpoint(regs->nip);
391 if (bp || (regs->msr & MSR_RI) == 0) 401 if (bp || unrecoverable_excp(regs))
392 fromipi = 0; 402 fromipi = 0;
393 403
394 if (!fromipi) { 404 if (!fromipi) {
@@ -399,7 +409,7 @@ static int xmon_core(struct pt_regs *regs, int fromipi)
399 cpu, BP_NUM(bp)); 409 cpu, BP_NUM(bp));
400 xmon_print_symbol(regs->nip, " ", ")\n"); 410 xmon_print_symbol(regs->nip, " ", ")\n");
401 } 411 }
402 if ((regs->msr & MSR_RI) == 0) 412 if (unrecoverable_excp(regs))
403 printf("WARNING: exception is not recoverable, " 413 printf("WARNING: exception is not recoverable, "
404 "can't continue\n"); 414 "can't continue\n");
405 release_output_lock(); 415 release_output_lock();
@@ -490,7 +500,7 @@ static int xmon_core(struct pt_regs *regs, int fromipi)
490 printf("Stopped at breakpoint %x (", BP_NUM(bp)); 500 printf("Stopped at breakpoint %x (", BP_NUM(bp));
491 xmon_print_symbol(regs->nip, " ", ")\n"); 501 xmon_print_symbol(regs->nip, " ", ")\n");
492 } 502 }
493 if ((regs->msr & MSR_RI) == 0) 503 if (unrecoverable_excp(regs))
494 printf("WARNING: exception is not recoverable, " 504 printf("WARNING: exception is not recoverable, "
495 "can't continue\n"); 505 "can't continue\n");
496 remove_bpts(); 506 remove_bpts();
diff --git a/arch/s390/appldata/appldata_base.c b/arch/s390/appldata/appldata_base.c
index 264528e4f58d..b55fd7ed1c31 100644
--- a/arch/s390/appldata/appldata_base.c
+++ b/arch/s390/appldata/appldata_base.c
@@ -50,10 +50,9 @@ static struct platform_device *appldata_pdev;
50 * /proc entries (sysctl) 50 * /proc entries (sysctl)
51 */ 51 */
52static const char appldata_proc_name[APPLDATA_PROC_NAME_LENGTH] = "appldata"; 52static const char appldata_proc_name[APPLDATA_PROC_NAME_LENGTH] = "appldata";
53static int appldata_timer_handler(ctl_table *ctl, int write, struct file *filp, 53static int appldata_timer_handler(ctl_table *ctl, int write,
54 void __user *buffer, size_t *lenp, loff_t *ppos); 54 void __user *buffer, size_t *lenp, loff_t *ppos);
55static int appldata_interval_handler(ctl_table *ctl, int write, 55static int appldata_interval_handler(ctl_table *ctl, int write,
56 struct file *filp,
57 void __user *buffer, 56 void __user *buffer,
58 size_t *lenp, loff_t *ppos); 57 size_t *lenp, loff_t *ppos);
59 58
@@ -247,7 +246,7 @@ __appldata_vtimer_setup(int cmd)
247 * Start/Stop timer, show status of timer (0 = not active, 1 = active) 246 * Start/Stop timer, show status of timer (0 = not active, 1 = active)
248 */ 247 */
249static int 248static int
250appldata_timer_handler(ctl_table *ctl, int write, struct file *filp, 249appldata_timer_handler(ctl_table *ctl, int write,
251 void __user *buffer, size_t *lenp, loff_t *ppos) 250 void __user *buffer, size_t *lenp, loff_t *ppos)
252{ 251{
253 int len; 252 int len;
@@ -289,7 +288,7 @@ out:
289 * current timer interval. 288 * current timer interval.
290 */ 289 */
291static int 290static int
292appldata_interval_handler(ctl_table *ctl, int write, struct file *filp, 291appldata_interval_handler(ctl_table *ctl, int write,
293 void __user *buffer, size_t *lenp, loff_t *ppos) 292 void __user *buffer, size_t *lenp, loff_t *ppos)
294{ 293{
295 int len, interval; 294 int len, interval;
@@ -335,7 +334,7 @@ out:
335 * monitoring (0 = not in process, 1 = in process) 334 * monitoring (0 = not in process, 1 = in process)
336 */ 335 */
337static int 336static int
338appldata_generic_handler(ctl_table *ctl, int write, struct file *filp, 337appldata_generic_handler(ctl_table *ctl, int write,
339 void __user *buffer, size_t *lenp, loff_t *ppos) 338 void __user *buffer, size_t *lenp, loff_t *ppos)
340{ 339{
341 struct appldata_ops *ops = NULL, *tmp_ops; 340 struct appldata_ops *ops = NULL, *tmp_ops;
diff --git a/arch/s390/kernel/debug.c b/arch/s390/kernel/debug.c
index 4c512561687d..20f282c911c2 100644
--- a/arch/s390/kernel/debug.c
+++ b/arch/s390/kernel/debug.c
@@ -881,11 +881,11 @@ static int debug_active=1;
881 * if debug_active is already off 881 * if debug_active is already off
882 */ 882 */
883static int 883static int
884s390dbf_procactive(ctl_table *table, int write, struct file *filp, 884s390dbf_procactive(ctl_table *table, int write,
885 void __user *buffer, size_t *lenp, loff_t *ppos) 885 void __user *buffer, size_t *lenp, loff_t *ppos)
886{ 886{
887 if (!write || debug_stoppable || !debug_active) 887 if (!write || debug_stoppable || !debug_active)
888 return proc_dointvec(table, write, filp, buffer, lenp, ppos); 888 return proc_dointvec(table, write, buffer, lenp, ppos);
889 else 889 else
890 return 0; 890 return 0;
891} 891}
diff --git a/arch/s390/mm/cmm.c b/arch/s390/mm/cmm.c
index 413c240cbca7..b201135cc18c 100644
--- a/arch/s390/mm/cmm.c
+++ b/arch/s390/mm/cmm.c
@@ -262,7 +262,7 @@ cmm_skip_blanks(char *cp, char **endp)
262static struct ctl_table cmm_table[]; 262static struct ctl_table cmm_table[];
263 263
264static int 264static int
265cmm_pages_handler(ctl_table *ctl, int write, struct file *filp, 265cmm_pages_handler(ctl_table *ctl, int write,
266 void __user *buffer, size_t *lenp, loff_t *ppos) 266 void __user *buffer, size_t *lenp, loff_t *ppos)
267{ 267{
268 char buf[16], *p; 268 char buf[16], *p;
@@ -303,7 +303,7 @@ cmm_pages_handler(ctl_table *ctl, int write, struct file *filp,
303} 303}
304 304
305static int 305static int
306cmm_timeout_handler(ctl_table *ctl, int write, struct file *filp, 306cmm_timeout_handler(ctl_table *ctl, int write,
307 void __user *buffer, size_t *lenp, loff_t *ppos) 307 void __user *buffer, size_t *lenp, loff_t *ppos)
308{ 308{
309 char buf[64], *p; 309 char buf[64], *p;
diff --git a/arch/sh/drivers/dma/Kconfig b/arch/sh/drivers/dma/Kconfig
index b91fa8dbf047..4d58eb0973d4 100644
--- a/arch/sh/drivers/dma/Kconfig
+++ b/arch/sh/drivers/dma/Kconfig
@@ -1,12 +1,9 @@
1menu "DMA support" 1menu "DMA support"
2 2
3config SH_DMA_API
4 bool
5 3
6config SH_DMA 4config SH_DMA
7 bool "SuperH on-chip DMA controller (DMAC) support" 5 bool "SuperH on-chip DMA controller (DMAC) support"
8 depends on CPU_SH3 || CPU_SH4 6 depends on CPU_SH3 || CPU_SH4
9 select SH_DMA_API
10 default n 7 default n
11 8
12config SH_DMA_IRQ_MULTI 9config SH_DMA_IRQ_MULTI
@@ -19,6 +16,15 @@ config SH_DMA_IRQ_MULTI
19 CPU_SUBTYPE_SH7780 || CPU_SUBTYPE_SH7785 || \ 16 CPU_SUBTYPE_SH7780 || CPU_SUBTYPE_SH7785 || \
20 CPU_SUBTYPE_SH7760 17 CPU_SUBTYPE_SH7760
21 18
19config SH_DMA_API
20 depends on SH_DMA
21 bool "SuperH DMA API support"
22 default n
23 help
24 SH_DMA_API always enabled DMA API of used SuperH.
25 If you want to use DMA ENGINE, you must not enable this.
26 Please enable DMA_ENGINE and SH_DMAE.
27
22config NR_ONCHIP_DMA_CHANNELS 28config NR_ONCHIP_DMA_CHANNELS
23 int 29 int
24 depends on SH_DMA 30 depends on SH_DMA
diff --git a/arch/sh/drivers/dma/Makefile b/arch/sh/drivers/dma/Makefile
index c6068137b46f..d88c9484762c 100644
--- a/arch/sh/drivers/dma/Makefile
+++ b/arch/sh/drivers/dma/Makefile
@@ -2,8 +2,7 @@
2# Makefile for the SuperH DMA specific kernel interface routines under Linux. 2# Makefile for the SuperH DMA specific kernel interface routines under Linux.
3# 3#
4 4
5obj-$(CONFIG_SH_DMA_API) += dma-api.o dma-sysfs.o 5obj-$(CONFIG_SH_DMA_API) += dma-sh.o dma-api.o dma-sysfs.o
6obj-$(CONFIG_SH_DMA) += dma-sh.o
7obj-$(CONFIG_PVR2_DMA) += dma-pvr2.o 6obj-$(CONFIG_PVR2_DMA) += dma-pvr2.o
8obj-$(CONFIG_G2_DMA) += dma-g2.o 7obj-$(CONFIG_G2_DMA) += dma-g2.o
9obj-$(CONFIG_SH_DMABRG) += dmabrg.o 8obj-$(CONFIG_SH_DMABRG) += dmabrg.o
diff --git a/arch/sh/include/asm/dma-sh.h b/arch/sh/include/asm/dma-sh.h
index 68a5f4cb0343..78eed3e0bdf5 100644
--- a/arch/sh/include/asm/dma-sh.h
+++ b/arch/sh/include/asm/dma-sh.h
@@ -116,4 +116,17 @@ static u32 dma_base_addr[] __maybe_unused = {
116#define CHCR 0x0C 116#define CHCR 0x0C
117#define DMAOR 0x40 117#define DMAOR 0x40
118 118
119/*
120 * for dma engine
121 *
122 * SuperH DMA mode
123 */
124#define SHDMA_MIX_IRQ (1 << 1)
125#define SHDMA_DMAOR1 (1 << 2)
126#define SHDMA_DMAE1 (1 << 3)
127
128struct sh_dmae_pdata {
129 unsigned int mode;
130};
131
119#endif /* __DMA_SH_H */ 132#endif /* __DMA_SH_H */
diff --git a/arch/um/include/asm/common.lds.S b/arch/um/include/asm/common.lds.S
index 37ecc5577a9a..ac55b9efa1ce 100644
--- a/arch/um/include/asm/common.lds.S
+++ b/arch/um/include/asm/common.lds.S
@@ -16,11 +16,7 @@
16 16
17 . = ALIGN(4096); 17 . = ALIGN(4096);
18 .note : { *(.note.*) } 18 .note : { *(.note.*) }
19 __ex_table : { 19 EXCEPTION_TABLE(0)
20 __start___ex_table = .;
21 *(__ex_table)
22 __stop___ex_table = .;
23 }
24 20
25 BUG_TABLE 21 BUG_TABLE
26 22
@@ -43,28 +39,17 @@
43 } 39 }
44 40
45 .init.setup : { 41 .init.setup : {
46 __setup_start = .; 42 INIT_SETUP(0)
47 *(.init.setup)
48 __setup_end = .;
49 } 43 }
50 44
51 . = ALIGN(32); 45 PERCPU(32)
52 .data.percpu : {
53 __per_cpu_start = . ;
54 *(.data.percpu)
55 __per_cpu_end = . ;
56 }
57 46
58 .initcall.init : { 47 .initcall.init : {
59 __initcall_start = .; 48 INIT_CALLS
60 INITCALLS
61 __initcall_end = .;
62 } 49 }
63 50
64 .con_initcall.init : { 51 .con_initcall.init : {
65 __con_initcall_start = .; 52 CON_INITCALL
66 *(.con_initcall.init)
67 __con_initcall_end = .;
68 } 53 }
69 54
70 .uml.initcall.init : { 55 .uml.initcall.init : {
@@ -118,8 +103,6 @@
118 103
119 . = ALIGN(4096); 104 . = ALIGN(4096);
120 .init.ramfs : { 105 .init.ramfs : {
121 __initramfs_start = .; 106 INIT_RAM_FS
122 *(.init.ramfs)
123 __initramfs_end = .;
124 } 107 }
125 108
diff --git a/arch/um/kernel/dyn.lds.S b/arch/um/kernel/dyn.lds.S
index 715a188c0472..7fcad58e216d 100644
--- a/arch/um/kernel/dyn.lds.S
+++ b/arch/um/kernel/dyn.lds.S
@@ -16,11 +16,7 @@ SECTIONS
16 _text = .; 16 _text = .;
17 _stext = .; 17 _stext = .;
18 __init_begin = .; 18 __init_begin = .;
19 .init.text : { 19 INIT_TEXT_SECTION(PAGE_SIZE)
20 _sinittext = .;
21 INIT_TEXT
22 _einittext = .;
23 }
24 20
25 . = ALIGN(PAGE_SIZE); 21 . = ALIGN(PAGE_SIZE);
26 22
@@ -96,8 +92,7 @@ SECTIONS
96 .init_array : { *(.init_array) } 92 .init_array : { *(.init_array) }
97 .fini_array : { *(.fini_array) } 93 .fini_array : { *(.fini_array) }
98 .data : { 94 .data : {
99 . = ALIGN(KERNEL_STACK_SIZE); /* init_task */ 95 INIT_TASK_DATA(KERNEL_STACK_SIZE)
100 *(.data.init_task)
101 . = ALIGN(KERNEL_STACK_SIZE); 96 . = ALIGN(KERNEL_STACK_SIZE);
102 *(.data.init_irqstack) 97 *(.data.init_irqstack)
103 DATA_DATA 98 DATA_DATA
diff --git a/arch/um/kernel/uml.lds.S b/arch/um/kernel/uml.lds.S
index 2ebd39765db8..e7a6cca667aa 100644
--- a/arch/um/kernel/uml.lds.S
+++ b/arch/um/kernel/uml.lds.S
@@ -22,11 +22,7 @@ SECTIONS
22 _text = .; 22 _text = .;
23 _stext = .; 23 _stext = .;
24 __init_begin = .; 24 __init_begin = .;
25 .init.text : { 25 INIT_TEXT_SECTION(PAGE_SIZE)
26 _sinittext = .;
27 INIT_TEXT
28 _einittext = .;
29 }
30 . = ALIGN(PAGE_SIZE); 26 . = ALIGN(PAGE_SIZE);
31 27
32 .text : 28 .text :
@@ -52,8 +48,7 @@ SECTIONS
52 init.data : { INIT_DATA } 48 init.data : { INIT_DATA }
53 .data : 49 .data :
54 { 50 {
55 . = ALIGN(KERNEL_STACK_SIZE); /* init_task */ 51 INIT_TASK_DATA(KERNEL_STACK_SIZE)
56 *(.data.init_task)
57 . = ALIGN(KERNEL_STACK_SIZE); 52 . = ALIGN(KERNEL_STACK_SIZE);
58 *(.data.init_irqstack) 53 *(.data.init_irqstack)
59 DATA_DATA 54 DATA_DATA
@@ -81,19 +76,10 @@ SECTIONS
81 _edata = .; 76 _edata = .;
82 PROVIDE (edata = .); 77 PROVIDE (edata = .);
83 . = ALIGN(PAGE_SIZE); 78 . = ALIGN(PAGE_SIZE);
84 .sbss : 79 __bss_start = .;
85 { 80 PROVIDE(_bss_start = .);
86 __bss_start = .; 81 SBSS(0)
87 PROVIDE(_bss_start = .); 82 BSS(0)
88 *(.sbss)
89 *(.scommon)
90 }
91 .bss :
92 {
93 *(.dynbss)
94 *(.bss)
95 *(COMMON)
96 }
97 _end = .; 83 _end = .;
98 PROVIDE (end = .); 84 PROVIDE (end = .);
99 85
diff --git a/arch/x86/include/asm/nmi.h b/arch/x86/include/asm/nmi.h
index e63cf7d441e1..139d4c1a33a7 100644
--- a/arch/x86/include/asm/nmi.h
+++ b/arch/x86/include/asm/nmi.h
@@ -40,8 +40,7 @@ extern unsigned int nmi_watchdog;
40#define NMI_INVALID 3 40#define NMI_INVALID 3
41 41
42struct ctl_table; 42struct ctl_table;
43struct file; 43extern int proc_nmi_enabled(struct ctl_table *, int ,
44extern int proc_nmi_enabled(struct ctl_table *, int , struct file *,
45 void __user *, size_t *, loff_t *); 44 void __user *, size_t *, loff_t *);
46extern int unknown_nmi_panic; 45extern int unknown_nmi_panic;
47 46
diff --git a/arch/x86/include/asm/pci.h b/arch/x86/include/asm/pci.h
index f76a162c082c..ada8c201d513 100644
--- a/arch/x86/include/asm/pci.h
+++ b/arch/x86/include/asm/pci.h
@@ -143,7 +143,11 @@ static inline int __pcibus_to_node(const struct pci_bus *bus)
143static inline const struct cpumask * 143static inline const struct cpumask *
144cpumask_of_pcibus(const struct pci_bus *bus) 144cpumask_of_pcibus(const struct pci_bus *bus)
145{ 145{
146 return cpumask_of_node(__pcibus_to_node(bus)); 146 int node;
147
148 node = __pcibus_to_node(bus);
149 return (node == -1) ? cpu_online_mask :
150 cpumask_of_node(node);
147} 151}
148#endif 152#endif
149 153
diff --git a/arch/x86/kernel/apic/nmi.c b/arch/x86/kernel/apic/nmi.c
index cb66a22d98ad..7ff61d6a188a 100644
--- a/arch/x86/kernel/apic/nmi.c
+++ b/arch/x86/kernel/apic/nmi.c
@@ -508,14 +508,14 @@ static int unknown_nmi_panic_callback(struct pt_regs *regs, int cpu)
508/* 508/*
509 * proc handler for /proc/sys/kernel/nmi 509 * proc handler for /proc/sys/kernel/nmi
510 */ 510 */
511int proc_nmi_enabled(struct ctl_table *table, int write, struct file *file, 511int proc_nmi_enabled(struct ctl_table *table, int write,
512 void __user *buffer, size_t *length, loff_t *ppos) 512 void __user *buffer, size_t *length, loff_t *ppos)
513{ 513{
514 int old_state; 514 int old_state;
515 515
516 nmi_watchdog_enabled = (atomic_read(&nmi_active) > 0) ? 1 : 0; 516 nmi_watchdog_enabled = (atomic_read(&nmi_active) > 0) ? 1 : 0;
517 old_state = nmi_watchdog_enabled; 517 old_state = nmi_watchdog_enabled;
518 proc_dointvec(table, write, file, buffer, length, ppos); 518 proc_dointvec(table, write, buffer, length, ppos);
519 if (!!old_state == !!nmi_watchdog_enabled) 519 if (!!old_state == !!nmi_watchdog_enabled)
520 return 0; 520 return 0;
521 521
diff --git a/arch/x86/kernel/vsyscall_64.c b/arch/x86/kernel/vsyscall_64.c
index cf53a78e2dcf..8cb4974ff599 100644
--- a/arch/x86/kernel/vsyscall_64.c
+++ b/arch/x86/kernel/vsyscall_64.c
@@ -228,19 +228,11 @@ static long __vsyscall(3) venosys_1(void)
228} 228}
229 229
230#ifdef CONFIG_SYSCTL 230#ifdef CONFIG_SYSCTL
231
232static int
233vsyscall_sysctl_change(ctl_table *ctl, int write, struct file * filp,
234 void __user *buffer, size_t *lenp, loff_t *ppos)
235{
236 return proc_dointvec(ctl, write, filp, buffer, lenp, ppos);
237}
238
239static ctl_table kernel_table2[] = { 231static ctl_table kernel_table2[] = {
240 { .procname = "vsyscall64", 232 { .procname = "vsyscall64",
241 .data = &vsyscall_gtod_data.sysctl_enabled, .maxlen = sizeof(int), 233 .data = &vsyscall_gtod_data.sysctl_enabled, .maxlen = sizeof(int),
242 .mode = 0644, 234 .mode = 0644,
243 .proc_handler = vsyscall_sysctl_change }, 235 .proc_handler = proc_dointvec },
244 {} 236 {}
245}; 237};
246 238
diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c
index 82728f2c6d55..f4cee9028cf0 100644
--- a/arch/x86/mm/fault.c
+++ b/arch/x86/mm/fault.c
@@ -167,6 +167,7 @@ force_sig_info_fault(int si_signo, int si_code, unsigned long address,
167 info.si_errno = 0; 167 info.si_errno = 0;
168 info.si_code = si_code; 168 info.si_code = si_code;
169 info.si_addr = (void __user *)address; 169 info.si_addr = (void __user *)address;
170 info.si_addr_lsb = si_code == BUS_MCEERR_AR ? PAGE_SHIFT : 0;
170 171
171 force_sig_info(si_signo, &info, tsk); 172 force_sig_info(si_signo, &info, tsk);
172} 173}
@@ -790,10 +791,12 @@ out_of_memory(struct pt_regs *regs, unsigned long error_code,
790} 791}
791 792
792static void 793static void
793do_sigbus(struct pt_regs *regs, unsigned long error_code, unsigned long address) 794do_sigbus(struct pt_regs *regs, unsigned long error_code, unsigned long address,
795 unsigned int fault)
794{ 796{
795 struct task_struct *tsk = current; 797 struct task_struct *tsk = current;
796 struct mm_struct *mm = tsk->mm; 798 struct mm_struct *mm = tsk->mm;
799 int code = BUS_ADRERR;
797 800
798 up_read(&mm->mmap_sem); 801 up_read(&mm->mmap_sem);
799 802
@@ -809,7 +812,15 @@ do_sigbus(struct pt_regs *regs, unsigned long error_code, unsigned long address)
809 tsk->thread.error_code = error_code; 812 tsk->thread.error_code = error_code;
810 tsk->thread.trap_no = 14; 813 tsk->thread.trap_no = 14;
811 814
812 force_sig_info_fault(SIGBUS, BUS_ADRERR, address, tsk); 815#ifdef CONFIG_MEMORY_FAILURE
816 if (fault & VM_FAULT_HWPOISON) {
817 printk(KERN_ERR
818 "MCE: Killing %s:%d due to hardware memory corruption fault at %lx\n",
819 tsk->comm, tsk->pid, address);
820 code = BUS_MCEERR_AR;
821 }
822#endif
823 force_sig_info_fault(SIGBUS, code, address, tsk);
813} 824}
814 825
815static noinline void 826static noinline void
@@ -819,8 +830,8 @@ mm_fault_error(struct pt_regs *regs, unsigned long error_code,
819 if (fault & VM_FAULT_OOM) { 830 if (fault & VM_FAULT_OOM) {
820 out_of_memory(regs, error_code, address); 831 out_of_memory(regs, error_code, address);
821 } else { 832 } else {
822 if (fault & VM_FAULT_SIGBUS) 833 if (fault & (VM_FAULT_SIGBUS|VM_FAULT_HWPOISON))
823 do_sigbus(regs, error_code, address); 834 do_sigbus(regs, error_code, address, fault);
824 else 835 else
825 BUG(); 836 BUG();
826 } 837 }
diff --git a/arch/x86/mm/pageattr.c b/arch/x86/mm/pageattr.c
index 24952fdc7e40..dd38bfbefd1f 100644
--- a/arch/x86/mm/pageattr.c
+++ b/arch/x86/mm/pageattr.c
@@ -144,6 +144,7 @@ void clflush_cache_range(void *vaddr, unsigned int size)
144 144
145 mb(); 145 mb();
146} 146}
147EXPORT_SYMBOL_GPL(clflush_cache_range);
147 148
148static void __cpa_flush_all(void *arg) 149static void __cpa_flush_all(void *arg)
149{ 150{
diff --git a/arch/x86/pci/common.c b/arch/x86/pci/common.c
index 5db96d4304de..1331fcf26143 100644
--- a/arch/x86/pci/common.c
+++ b/arch/x86/pci/common.c
@@ -646,7 +646,7 @@ int get_mp_bus_to_node(int busnum)
646 646
647#else /* CONFIG_X86_32 */ 647#else /* CONFIG_X86_32 */
648 648
649static unsigned char mp_bus_to_node[BUS_NR] = { 649static int mp_bus_to_node[BUS_NR] = {
650 [0 ... BUS_NR - 1] = -1 650 [0 ... BUS_NR - 1] = -1
651}; 651};
652 652
diff --git a/arch/xtensa/kernel/vmlinux.lds.S b/arch/xtensa/kernel/vmlinux.lds.S
index 921b6ff3b645..9b526154c9ba 100644
--- a/arch/xtensa/kernel/vmlinux.lds.S
+++ b/arch/xtensa/kernel/vmlinux.lds.S
@@ -15,6 +15,8 @@
15 */ 15 */
16 16
17#include <asm-generic/vmlinux.lds.h> 17#include <asm-generic/vmlinux.lds.h>
18#include <asm/page.h>
19#include <asm/thread_info.h>
18 20
19#include <variant/core.h> 21#include <variant/core.h>
20#include <platform/hardware.h> 22#include <platform/hardware.h>
@@ -107,41 +109,18 @@ SECTIONS
107 109
108 .fixup : { *(.fixup) } 110 .fixup : { *(.fixup) }
109 111
110 . = ALIGN(16); 112 EXCEPTION_TABLE(16)
111
112 __ex_table : {
113 __start___ex_table = .;
114 *(__ex_table)
115 __stop___ex_table = .;
116 }
117
118 /* Data section */ 113 /* Data section */
119 114
120 . = ALIGN(XCHAL_ICACHE_LINESIZE);
121 _fdata = .; 115 _fdata = .;
122 .data : 116 RW_DATA_SECTION(XCHAL_ICACHE_LINESIZE, PAGE_SIZE, THREAD_SIZE)
123 {
124 DATA_DATA
125 CONSTRUCTORS
126 . = ALIGN(XCHAL_ICACHE_LINESIZE);
127 *(.data.cacheline_aligned)
128 }
129
130 _edata = .; 117 _edata = .;
131 118
132 /* The initial task */
133 . = ALIGN(8192);
134 .data.init_task : { *(.data.init_task) }
135
136 /* Initialization code and data: */ 119 /* Initialization code and data: */
137 120
138 . = ALIGN(1 << 12); 121 . = ALIGN(PAGE_SIZE);
139 __init_begin = .; 122 __init_begin = .;
140 .init.text : { 123 INIT_TEXT_SECTION(PAGE_SIZE)
141 _sinittext = .;
142 INIT_TEXT
143 _einittext = .;
144 }
145 124
146 .init.data : 125 .init.data :
147 { 126 {
@@ -168,36 +147,15 @@ SECTIONS
168 .DebugInterruptVector.text); 147 .DebugInterruptVector.text);
169 148
170 __boot_reloc_table_end = ABSOLUTE(.) ; 149 __boot_reloc_table_end = ABSOLUTE(.) ;
171 }
172 150
173 . = ALIGN(XCHAL_ICACHE_LINESIZE); 151 INIT_SETUP(XCHAL_ICACHE_LINESIZE)
174 152 INIT_CALLS
175 __setup_start = .; 153 CON_INITCALL
176 .init.setup : { *(.init.setup) } 154 SECURITY_INITCALL
177 __setup_end = .; 155 INIT_RAM_FS
178
179 __initcall_start = .;
180 .initcall.init : {
181 INITCALLS
182 } 156 }
183 __initcall_end = .;
184
185 __con_initcall_start = .;
186 .con_initcall.init : { *(.con_initcall.init) }
187 __con_initcall_end = .;
188
189 SECURITY_INIT
190
191
192#ifdef CONFIG_BLK_DEV_INITRD
193 . = ALIGN(4096);
194 __initramfs_start =.;
195 .init.ramfs : { *(.init.ramfs) }
196 __initramfs_end = .;
197#endif
198
199 PERCPU(4096)
200 157
158 PERCPU(PAGE_SIZE)
201 159
202 /* We need this dummy segment here */ 160 /* We need this dummy segment here */
203 161
@@ -252,16 +210,11 @@ SECTIONS
252 .DoubleExceptionVector.literal) 210 .DoubleExceptionVector.literal)
253 211
254 . = (LOADADDR( .DoubleExceptionVector.text ) + SIZEOF( .DoubleExceptionVector.text ) + 3) & ~ 3; 212 . = (LOADADDR( .DoubleExceptionVector.text ) + SIZEOF( .DoubleExceptionVector.text ) + 3) & ~ 3;
255 . = ALIGN(1 << 12); 213 . = ALIGN(PAGE_SIZE);
256 214
257 __init_end = .; 215 __init_end = .;
258 216
259 . = ALIGN(8192); 217 BSS_SECTION(0, 8192, 0)
260
261 /* BSS section */
262 _bss_start = .;
263 .bss : { *(.bss.page_aligned) *(.bss) }
264 _bss_end = .;
265 218
266 _end = .; 219 _end = .;
267 220