diff options
83 files changed, 5106 insertions, 570 deletions
| diff --git a/MAINTAINERS b/MAINTAINERS index 16129e67678a..6150c80bccf6 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
| @@ -771,6 +771,14 @@ ARM/NEC MOBILEPRO 900/c MACHINE SUPPORT | |||
| 771 | M: Michael Petchkovsky <mkpetch@internode.on.net> | 771 | M: Michael Petchkovsky <mkpetch@internode.on.net> | 
| 772 | S: Maintained | 772 | S: Maintained | 
| 773 | 773 | ||
| 774 | ARM/NOMADIK ARCHITECTURE | ||
| 775 | M: Alessandro Rubini <rubini@unipv.it> | ||
| 776 | M: STEricsson <STEricsson_nomadik_linux@list.st.com> | ||
| 777 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | ||
| 778 | S: Maintained | ||
| 779 | F: arch/arm/mach-nomadik/ | ||
| 780 | F: arch/arm/plat-nomadik/ | ||
| 781 | |||
| 774 | ARM/OPENMOKO NEO FREERUNNER (GTA02) MACHINE SUPPORT | 782 | ARM/OPENMOKO NEO FREERUNNER (GTA02) MACHINE SUPPORT | 
| 775 | M: Nelson Castillo <arhuaco@freaks-unidos.net> | 783 | M: Nelson Castillo <arhuaco@freaks-unidos.net> | 
| 776 | L: openmoko-kernel@lists.openmoko.org (subscribers-only) | 784 | L: openmoko-kernel@lists.openmoko.org (subscribers-only) | 
| @@ -915,6 +923,12 @@ L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | |||
| 915 | W: http://www.mcuos.com | 923 | W: http://www.mcuos.com | 
| 916 | S: Maintained | 924 | S: Maintained | 
| 917 | 925 | ||
| 926 | ARM/U8500 ARM ARCHITECTURE | ||
| 927 | M: Srinidhi Kasagar <srinidhi.kasagar@stericsson.com> | ||
| 928 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | ||
| 929 | S: Maintained | ||
| 930 | F: arch/arm/mach-ux500/ | ||
| 931 | |||
| 918 | ARM/VFP SUPPORT | 932 | ARM/VFP SUPPORT | 
| 919 | M: Russell King <linux@arm.linux.org.uk> | 933 | M: Russell King <linux@arm.linux.org.uk> | 
| 920 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | 934 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | 
| diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 1c4119c60040..1ae18d879e12 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
| @@ -702,6 +702,16 @@ config ARCH_BCMRING | |||
| 702 | help | 702 | help | 
| 703 | Support for Broadcom's BCMRing platform. | 703 | Support for Broadcom's BCMRing platform. | 
| 704 | 704 | ||
| 705 | config ARCH_U8500 | ||
| 706 | bool "ST-Ericsson U8500 Series" | ||
| 707 | select CPU_V7 | ||
| 708 | select ARM_AMBA | ||
| 709 | select GENERIC_TIME | ||
| 710 | select GENERIC_CLOCKEVENTS | ||
| 711 | select COMMON_CLKDEV | ||
| 712 | help | ||
| 713 | Support for ST-Ericsson's Ux500 architecture | ||
| 714 | |||
| 705 | endchoice | 715 | endchoice | 
| 706 | 716 | ||
| 707 | source "arch/arm/mach-clps711x/Kconfig" | 717 | source "arch/arm/mach-clps711x/Kconfig" | 
| @@ -787,6 +797,7 @@ source "arch/arm/mach-at91/Kconfig" | |||
| 787 | source "arch/arm/plat-mxc/Kconfig" | 797 | source "arch/arm/plat-mxc/Kconfig" | 
| 788 | 798 | ||
| 789 | source "arch/arm/mach-nomadik/Kconfig" | 799 | source "arch/arm/mach-nomadik/Kconfig" | 
| 800 | source "arch/arm/plat-nomadik/Kconfig" | ||
| 790 | 801 | ||
| 791 | source "arch/arm/mach-netx/Kconfig" | 802 | source "arch/arm/mach-netx/Kconfig" | 
| 792 | 803 | ||
| @@ -804,6 +815,8 @@ source "arch/arm/mach-w90x900/Kconfig" | |||
| 804 | 815 | ||
| 805 | source "arch/arm/mach-bcmring/Kconfig" | 816 | source "arch/arm/mach-bcmring/Kconfig" | 
| 806 | 817 | ||
| 818 | source "arch/arm/mach-ux500/Kconfig" | ||
| 819 | |||
| 807 | # Definitions to make life easier | 820 | # Definitions to make life easier | 
| 808 | config ARCH_ACORN | 821 | config ARCH_ACORN | 
| 809 | bool | 822 | bool | 
| @@ -955,10 +968,10 @@ source "kernel/time/Kconfig" | |||
| 955 | config SMP | 968 | config SMP | 
| 956 | bool "Symmetric Multi-Processing (EXPERIMENTAL)" | 969 | bool "Symmetric Multi-Processing (EXPERIMENTAL)" | 
| 957 | depends on EXPERIMENTAL && (REALVIEW_EB_ARM11MP || REALVIEW_EB_A9MP ||\ | 970 | depends on EXPERIMENTAL && (REALVIEW_EB_ARM11MP || REALVIEW_EB_A9MP ||\ | 
| 958 | MACH_REALVIEW_PB11MP || MACH_REALVIEW_PBX || ARCH_OMAP4) | 971 | MACH_REALVIEW_PB11MP || MACH_REALVIEW_PBX || ARCH_OMAP4 || ARCH_U8500) | 
| 959 | depends on GENERIC_CLOCKEVENTS | 972 | depends on GENERIC_CLOCKEVENTS | 
| 960 | select USE_GENERIC_SMP_HELPERS | 973 | select USE_GENERIC_SMP_HELPERS | 
| 961 | select HAVE_ARM_SCU if (ARCH_REALVIEW || ARCH_OMAP4) | 974 | select HAVE_ARM_SCU if (ARCH_REALVIEW || ARCH_OMAP4 || ARCH_U8500) | 
| 962 | help | 975 | help | 
| 963 | This enables support for systems with more than one CPU. If you have | 976 | This enables support for systems with more than one CPU. If you have | 
| 964 | a system with only one CPU, like most personal computers, say N. If | 977 | a system with only one CPU, like most personal computers, say N. If | 
| @@ -1027,9 +1040,9 @@ config HOTPLUG_CPU | |||
| 1027 | config LOCAL_TIMERS | 1040 | config LOCAL_TIMERS | 
| 1028 | bool "Use local timer interrupts" | 1041 | bool "Use local timer interrupts" | 
| 1029 | depends on SMP && (REALVIEW_EB_ARM11MP || MACH_REALVIEW_PB11MP || \ | 1042 | depends on SMP && (REALVIEW_EB_ARM11MP || MACH_REALVIEW_PB11MP || \ | 
| 1030 | REALVIEW_EB_A9MP || MACH_REALVIEW_PBX || ARCH_OMAP4) | 1043 | REALVIEW_EB_A9MP || MACH_REALVIEW_PBX || ARCH_OMAP4 || ARCH_U8500) | 
| 1031 | default y | 1044 | default y | 
| 1032 | select HAVE_ARM_TWD if (ARCH_REALVIEW || ARCH_OMAP4) | 1045 | select HAVE_ARM_TWD if (ARCH_REALVIEW || ARCH_OMAP4 || ARCH_U8500) | 
| 1033 | help | 1046 | help | 
| 1034 | Enable support for local timers on SMP platforms, rather then the | 1047 | Enable support for local timers on SMP platforms, rather then the | 
| 1035 | legacy IPI broadcast method. Local timers allows the system | 1048 | legacy IPI broadcast method. Local timers allows the system | 
| diff --git a/arch/arm/Makefile b/arch/arm/Makefile index a73caaf66763..7603eba7c0cd 100644 --- a/arch/arm/Makefile +++ b/arch/arm/Makefile | |||
| @@ -166,6 +166,7 @@ machine-$(CONFIG_ARCH_SHARK) := shark | |||
| 166 | machine-$(CONFIG_ARCH_STMP378X) := stmp378x | 166 | machine-$(CONFIG_ARCH_STMP378X) := stmp378x | 
| 167 | machine-$(CONFIG_ARCH_STMP37XX) := stmp37xx | 167 | machine-$(CONFIG_ARCH_STMP37XX) := stmp37xx | 
| 168 | machine-$(CONFIG_ARCH_U300) := u300 | 168 | machine-$(CONFIG_ARCH_U300) := u300 | 
| 169 | machine-$(CONFIG_ARCH_U8500) := ux500 | ||
| 169 | machine-$(CONFIG_ARCH_VERSATILE) := versatile | 170 | machine-$(CONFIG_ARCH_VERSATILE) := versatile | 
| 170 | machine-$(CONFIG_ARCH_W90X900) := w90x900 | 171 | machine-$(CONFIG_ARCH_W90X900) := w90x900 | 
| 171 | machine-$(CONFIG_FOOTBRIDGE) := footbridge | 172 | machine-$(CONFIG_FOOTBRIDGE) := footbridge | 
| @@ -176,6 +177,7 @@ machine-$(CONFIG_ARCH_MXC91231) := mxc91231 | |||
| 176 | plat-$(CONFIG_ARCH_MXC) := mxc | 177 | plat-$(CONFIG_ARCH_MXC) := mxc | 
| 177 | plat-$(CONFIG_ARCH_OMAP) := omap | 178 | plat-$(CONFIG_ARCH_OMAP) := omap | 
| 178 | plat-$(CONFIG_PLAT_IOP) := iop | 179 | plat-$(CONFIG_PLAT_IOP) := iop | 
| 180 | plat-$(CONFIG_PLAT_NOMADIK) := nomadik | ||
| 179 | plat-$(CONFIG_PLAT_ORION) := orion | 181 | plat-$(CONFIG_PLAT_ORION) := orion | 
| 180 | plat-$(CONFIG_PLAT_PXA) := pxa | 182 | plat-$(CONFIG_PLAT_PXA) := pxa | 
| 181 | plat-$(CONFIG_PLAT_S3C24XX) := s3c24xx s3c | 183 | plat-$(CONFIG_PLAT_S3C24XX) := s3c24xx s3c | 
| diff --git a/arch/arm/common/dmabounce.c b/arch/arm/common/dmabounce.c index 734ac9135998..5a375e5fef21 100644 --- a/arch/arm/common/dmabounce.c +++ b/arch/arm/common/dmabounce.c | |||
| @@ -342,6 +342,22 @@ dma_addr_t dma_map_single(struct device *dev, void *ptr, size_t size, | |||
| 342 | } | 342 | } | 
| 343 | EXPORT_SYMBOL(dma_map_single); | 343 | EXPORT_SYMBOL(dma_map_single); | 
| 344 | 344 | ||
| 345 | /* | ||
| 346 | * see if a mapped address was really a "safe" buffer and if so, copy | ||
| 347 | * the data from the safe buffer back to the unsafe buffer and free up | ||
| 348 | * the safe buffer. (basically return things back to the way they | ||
| 349 | * should be) | ||
| 350 | */ | ||
| 351 | void dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size, | ||
| 352 | enum dma_data_direction dir) | ||
| 353 | { | ||
| 354 | dev_dbg(dev, "%s(ptr=%p,size=%d,dir=%x)\n", | ||
| 355 | __func__, (void *) dma_addr, size, dir); | ||
| 356 | |||
| 357 | unmap_single(dev, dma_addr, size, dir); | ||
| 358 | } | ||
| 359 | EXPORT_SYMBOL(dma_unmap_single); | ||
| 360 | |||
| 345 | dma_addr_t dma_map_page(struct device *dev, struct page *page, | 361 | dma_addr_t dma_map_page(struct device *dev, struct page *page, | 
| 346 | unsigned long offset, size_t size, enum dma_data_direction dir) | 362 | unsigned long offset, size_t size, enum dma_data_direction dir) | 
| 347 | { | 363 | { | 
| @@ -366,8 +382,7 @@ EXPORT_SYMBOL(dma_map_page); | |||
| 366 | * the safe buffer. (basically return things back to the way they | 382 | * the safe buffer. (basically return things back to the way they | 
| 367 | * should be) | 383 | * should be) | 
| 368 | */ | 384 | */ | 
| 369 | 385 | void dma_unmap_page(struct device *dev, dma_addr_t dma_addr, size_t size, | |
| 370 | void dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size, | ||
| 371 | enum dma_data_direction dir) | 386 | enum dma_data_direction dir) | 
| 372 | { | 387 | { | 
| 373 | dev_dbg(dev, "%s(ptr=%p,size=%d,dir=%x)\n", | 388 | dev_dbg(dev, "%s(ptr=%p,size=%d,dir=%x)\n", | 
| @@ -375,7 +390,7 @@ void dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size, | |||
| 375 | 390 | ||
| 376 | unmap_single(dev, dma_addr, size, dir); | 391 | unmap_single(dev, dma_addr, size, dir); | 
| 377 | } | 392 | } | 
| 378 | EXPORT_SYMBOL(dma_unmap_single); | 393 | EXPORT_SYMBOL(dma_unmap_page); | 
| 379 | 394 | ||
| 380 | int dmabounce_sync_for_cpu(struct device *dev, dma_addr_t addr, | 395 | int dmabounce_sync_for_cpu(struct device *dev, dma_addr_t addr, | 
| 381 | unsigned long off, size_t sz, enum dma_data_direction dir) | 396 | unsigned long off, size_t sz, enum dma_data_direction dir) | 
| diff --git a/arch/arm/configs/at91rm9200dk_defconfig b/arch/arm/configs/at91rm9200dk_defconfig index 238b218394e3..c97e1022ada1 100644 --- a/arch/arm/configs/at91rm9200dk_defconfig +++ b/arch/arm/configs/at91rm9200dk_defconfig | |||
| @@ -120,6 +120,7 @@ CONFIG_ARCH_AT91RM9200DK=y | |||
| 120 | # CONFIG_MACH_CARMEVA is not set | 120 | # CONFIG_MACH_CARMEVA is not set | 
| 121 | # CONFIG_MACH_KB9200 is not set | 121 | # CONFIG_MACH_KB9200 is not set | 
| 122 | # CONFIG_MACH_ATEB9200 is not set | 122 | # CONFIG_MACH_ATEB9200 is not set | 
| 123 | CONFIG_MACH_ECO920=y | ||
| 123 | 124 | ||
| 124 | # | 125 | # | 
| 125 | # AT91RM9200 Feature Selections | 126 | # AT91RM9200 Feature Selections | 
| diff --git a/arch/arm/configs/w90p910_defconfig b/arch/arm/configs/nuc910_defconfig index 5245655a0ad3..5245655a0ad3 100644 --- a/arch/arm/configs/w90p910_defconfig +++ b/arch/arm/configs/nuc910_defconfig | |||
| diff --git a/arch/arm/configs/nuc950_defconfig b/arch/arm/configs/nuc950_defconfig new file mode 100644 index 000000000000..df1de9b45ca4 --- /dev/null +++ b/arch/arm/configs/nuc950_defconfig | |||
| @@ -0,0 +1,922 @@ | |||
| 1 | # | ||
| 2 | # Automatically generated make config: don't edit | ||
| 3 | # Linux kernel version: 2.6.32-rc7 | ||
| 4 | # Tue Nov 17 12:31:33 2009 | ||
| 5 | # | ||
| 6 | CONFIG_ARM=y | ||
| 7 | CONFIG_SYS_SUPPORTS_APM_EMULATION=y | ||
| 8 | CONFIG_GENERIC_GPIO=y | ||
| 9 | CONFIG_GENERIC_TIME=y | ||
| 10 | CONFIG_GENERIC_CLOCKEVENTS=y | ||
| 11 | CONFIG_GENERIC_HARDIRQS=y | ||
| 12 | CONFIG_STACKTRACE_SUPPORT=y | ||
| 13 | CONFIG_HAVE_LATENCYTOP_SUPPORT=y | ||
| 14 | CONFIG_LOCKDEP_SUPPORT=y | ||
| 15 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y | ||
| 16 | CONFIG_HARDIRQS_SW_RESEND=y | ||
| 17 | CONFIG_GENERIC_IRQ_PROBE=y | ||
| 18 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | ||
| 19 | CONFIG_GENERIC_HWEIGHT=y | ||
| 20 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
| 21 | CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y | ||
| 22 | CONFIG_VECTORS_BASE=0xffff0000 | ||
| 23 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||
| 24 | CONFIG_CONSTRUCTORS=y | ||
| 25 | |||
| 26 | # | ||
| 27 | # General setup | ||
| 28 | # | ||
| 29 | CONFIG_EXPERIMENTAL=y | ||
| 30 | CONFIG_BROKEN_ON_SMP=y | ||
| 31 | CONFIG_LOCK_KERNEL=y | ||
| 32 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
| 33 | CONFIG_LOCALVERSION="" | ||
| 34 | # CONFIG_LOCALVERSION_AUTO is not set | ||
| 35 | CONFIG_SWAP=y | ||
| 36 | CONFIG_SYSVIPC=y | ||
| 37 | CONFIG_SYSVIPC_SYSCTL=y | ||
| 38 | CONFIG_BSD_PROCESS_ACCT=y | ||
| 39 | # CONFIG_BSD_PROCESS_ACCT_V3 is not set | ||
| 40 | |||
| 41 | # | ||
| 42 | # RCU Subsystem | ||
| 43 | # | ||
| 44 | CONFIG_TREE_RCU=y | ||
| 45 | # CONFIG_TREE_PREEMPT_RCU is not set | ||
| 46 | # CONFIG_RCU_TRACE is not set | ||
| 47 | CONFIG_RCU_FANOUT=32 | ||
| 48 | # CONFIG_RCU_FANOUT_EXACT is not set | ||
| 49 | # CONFIG_TREE_RCU_TRACE is not set | ||
| 50 | # CONFIG_IKCONFIG is not set | ||
| 51 | CONFIG_LOG_BUF_SHIFT=17 | ||
| 52 | # CONFIG_GROUP_SCHED is not set | ||
| 53 | # CONFIG_CGROUPS is not set | ||
| 54 | CONFIG_SYSFS_DEPRECATED=y | ||
| 55 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
| 56 | CONFIG_RELAY=y | ||
| 57 | CONFIG_NAMESPACES=y | ||
| 58 | # CONFIG_UTS_NS is not set | ||
| 59 | # CONFIG_IPC_NS is not set | ||
| 60 | CONFIG_USER_NS=y | ||
| 61 | # CONFIG_PID_NS is not set | ||
| 62 | CONFIG_BLK_DEV_INITRD=y | ||
| 63 | CONFIG_INITRAMFS_SOURCE="" | ||
| 64 | CONFIG_RD_GZIP=y | ||
| 65 | CONFIG_RD_BZIP2=y | ||
| 66 | CONFIG_RD_LZMA=y | ||
| 67 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
| 68 | CONFIG_SYSCTL=y | ||
| 69 | CONFIG_ANON_INODES=y | ||
| 70 | # CONFIG_EMBEDDED is not set | ||
| 71 | CONFIG_UID16=y | ||
| 72 | CONFIG_SYSCTL_SYSCALL=y | ||
| 73 | CONFIG_KALLSYMS=y | ||
| 74 | CONFIG_KALLSYMS_EXTRA_PASS=y | ||
| 75 | CONFIG_HOTPLUG=y | ||
| 76 | CONFIG_PRINTK=y | ||
| 77 | CONFIG_BUG=y | ||
| 78 | CONFIG_ELF_CORE=y | ||
| 79 | CONFIG_BASE_FULL=y | ||
| 80 | CONFIG_FUTEX=y | ||
| 81 | CONFIG_EPOLL=y | ||
| 82 | CONFIG_SIGNALFD=y | ||
| 83 | CONFIG_TIMERFD=y | ||
| 84 | CONFIG_EVENTFD=y | ||
| 85 | CONFIG_SHMEM=y | ||
| 86 | CONFIG_AIO=y | ||
| 87 | |||
| 88 | # | ||
| 89 | # Kernel Performance Events And Counters | ||
| 90 | # | ||
| 91 | CONFIG_VM_EVENT_COUNTERS=y | ||
| 92 | CONFIG_COMPAT_BRK=y | ||
| 93 | CONFIG_SLAB=y | ||
| 94 | # CONFIG_SLUB is not set | ||
| 95 | # CONFIG_SLOB is not set | ||
| 96 | # CONFIG_PROFILING is not set | ||
| 97 | CONFIG_HAVE_OPROFILE=y | ||
| 98 | CONFIG_HAVE_KPROBES=y | ||
| 99 | CONFIG_HAVE_KRETPROBES=y | ||
| 100 | CONFIG_HAVE_CLK=y | ||
| 101 | |||
| 102 | # | ||
| 103 | # GCOV-based kernel profiling | ||
| 104 | # | ||
| 105 | # CONFIG_GCOV_KERNEL is not set | ||
| 106 | # CONFIG_SLOW_WORK is not set | ||
| 107 | CONFIG_HAVE_GENERIC_DMA_COHERENT=y | ||
| 108 | CONFIG_SLABINFO=y | ||
| 109 | CONFIG_RT_MUTEXES=y | ||
| 110 | CONFIG_BASE_SMALL=0 | ||
| 111 | # CONFIG_MODULES is not set | ||
| 112 | CONFIG_BLOCK=y | ||
| 113 | CONFIG_LBDAF=y | ||
| 114 | CONFIG_BLK_DEV_BSG=y | ||
| 115 | # CONFIG_BLK_DEV_INTEGRITY is not set | ||
| 116 | |||
| 117 | # | ||
| 118 | # IO Schedulers | ||
| 119 | # | ||
| 120 | CONFIG_IOSCHED_NOOP=y | ||
| 121 | CONFIG_IOSCHED_AS=y | ||
| 122 | CONFIG_IOSCHED_DEADLINE=y | ||
| 123 | CONFIG_IOSCHED_CFQ=y | ||
| 124 | # CONFIG_DEFAULT_AS is not set | ||
| 125 | # CONFIG_DEFAULT_DEADLINE is not set | ||
| 126 | CONFIG_DEFAULT_CFQ=y | ||
| 127 | # CONFIG_DEFAULT_NOOP is not set | ||
| 128 | CONFIG_DEFAULT_IOSCHED="cfq" | ||
| 129 | # CONFIG_FREEZER is not set | ||
| 130 | |||
| 131 | # | ||
| 132 | # System Type | ||
| 133 | # | ||
| 134 | CONFIG_MMU=y | ||
| 135 | # CONFIG_ARCH_AAEC2000 is not set | ||
| 136 | # CONFIG_ARCH_INTEGRATOR is not set | ||
| 137 | # CONFIG_ARCH_REALVIEW is not set | ||
| 138 | # CONFIG_ARCH_VERSATILE is not set | ||
| 139 | # CONFIG_ARCH_AT91 is not set | ||
| 140 | # CONFIG_ARCH_CLPS711X is not set | ||
| 141 | # CONFIG_ARCH_GEMINI is not set | ||
| 142 | # CONFIG_ARCH_EBSA110 is not set | ||
| 143 | # CONFIG_ARCH_EP93XX is not set | ||
| 144 | # CONFIG_ARCH_FOOTBRIDGE is not set | ||
| 145 | # CONFIG_ARCH_MXC is not set | ||
| 146 | # CONFIG_ARCH_STMP3XXX is not set | ||
| 147 | # CONFIG_ARCH_NETX is not set | ||
| 148 | # CONFIG_ARCH_H720X is not set | ||
| 149 | # CONFIG_ARCH_NOMADIK is not set | ||
| 150 | # CONFIG_ARCH_IOP13XX is not set | ||
| 151 | # CONFIG_ARCH_IOP32X is not set | ||
| 152 | # CONFIG_ARCH_IOP33X is not set | ||
| 153 | # CONFIG_ARCH_IXP23XX is not set | ||
| 154 | # CONFIG_ARCH_IXP2000 is not set | ||
| 155 | # CONFIG_ARCH_IXP4XX is not set | ||
| 156 | # CONFIG_ARCH_L7200 is not set | ||
| 157 | # CONFIG_ARCH_KIRKWOOD is not set | ||
| 158 | # CONFIG_ARCH_LOKI is not set | ||
| 159 | # CONFIG_ARCH_MV78XX0 is not set | ||
| 160 | # CONFIG_ARCH_ORION5X is not set | ||
| 161 | # CONFIG_ARCH_MMP is not set | ||
| 162 | # CONFIG_ARCH_KS8695 is not set | ||
| 163 | # CONFIG_ARCH_NS9XXX is not set | ||
| 164 | CONFIG_ARCH_W90X900=y | ||
| 165 | # CONFIG_ARCH_PNX4008 is not set | ||
| 166 | # CONFIG_ARCH_PXA is not set | ||
| 167 | # CONFIG_ARCH_MSM is not set | ||
| 168 | # CONFIG_ARCH_RPC is not set | ||
| 169 | # CONFIG_ARCH_SA1100 is not set | ||
| 170 | # CONFIG_ARCH_S3C2410 is not set | ||
| 171 | # CONFIG_ARCH_S3C64XX is not set | ||
| 172 | # CONFIG_ARCH_S5PC1XX is not set | ||
| 173 | # CONFIG_ARCH_SHARK is not set | ||
| 174 | # CONFIG_ARCH_LH7A40X is not set | ||
| 175 | # CONFIG_ARCH_U300 is not set | ||
| 176 | # CONFIG_ARCH_DAVINCI is not set | ||
| 177 | # CONFIG_ARCH_OMAP is not set | ||
| 178 | # CONFIG_ARCH_BCMRING is not set | ||
| 179 | CONFIG_CPU_NUC950=y | ||
| 180 | |||
| 181 | # | ||
| 182 | # W90P910 Machines | ||
| 183 | # | ||
| 184 | # CONFIG_MACH_W90P910EVB is not set | ||
| 185 | |||
| 186 | # | ||
| 187 | # NUC950 Machines | ||
| 188 | # | ||
| 189 | CONFIG_MACH_W90P950EVB=y | ||
| 190 | |||
| 191 | # | ||
| 192 | # NUC960 Machines | ||
| 193 | # | ||
| 194 | # CONFIG_MACH_W90N960EVB is not set | ||
| 195 | |||
| 196 | # | ||
| 197 | # NUC932 Machines | ||
| 198 | # | ||
| 199 | # CONFIG_MACH_NUC932EVB is not set | ||
| 200 | |||
| 201 | # | ||
| 202 | # Processor Type | ||
| 203 | # | ||
| 204 | CONFIG_CPU_32=y | ||
| 205 | CONFIG_CPU_ARM926T=y | ||
| 206 | CONFIG_CPU_32v5=y | ||
| 207 | CONFIG_CPU_ABRT_EV5TJ=y | ||
| 208 | CONFIG_CPU_PABRT_LEGACY=y | ||
| 209 | CONFIG_CPU_CACHE_VIVT=y | ||
| 210 | CONFIG_CPU_COPY_V4WB=y | ||
| 211 | CONFIG_CPU_TLB_V4WBI=y | ||
| 212 | CONFIG_CPU_CP15=y | ||
| 213 | CONFIG_CPU_CP15_MMU=y | ||
| 214 | |||
| 215 | # | ||
| 216 | # Processor Features | ||
| 217 | # | ||
| 218 | CONFIG_ARM_THUMB=y | ||
| 219 | # CONFIG_CPU_ICACHE_DISABLE is not set | ||
| 220 | # CONFIG_CPU_DCACHE_DISABLE is not set | ||
| 221 | # CONFIG_CPU_DCACHE_WRITETHROUGH is not set | ||
| 222 | # CONFIG_CPU_CACHE_ROUND_ROBIN is not set | ||
| 223 | CONFIG_ARM_L1_CACHE_SHIFT=5 | ||
| 224 | CONFIG_COMMON_CLKDEV=y | ||
| 225 | |||
| 226 | # | ||
| 227 | # Bus support | ||
| 228 | # | ||
| 229 | # CONFIG_PCI_SYSCALL is not set | ||
| 230 | # CONFIG_ARCH_SUPPORTS_MSI is not set | ||
| 231 | # CONFIG_PCCARD is not set | ||
| 232 | |||
| 233 | # | ||
| 234 | # Kernel Features | ||
| 235 | # | ||
| 236 | CONFIG_TICK_ONESHOT=y | ||
| 237 | CONFIG_NO_HZ=y | ||
| 238 | CONFIG_HIGH_RES_TIMERS=y | ||
| 239 | CONFIG_GENERIC_CLOCKEVENTS_BUILD=y | ||
| 240 | CONFIG_VMSPLIT_3G=y | ||
| 241 | # CONFIG_VMSPLIT_2G is not set | ||
| 242 | # CONFIG_VMSPLIT_1G is not set | ||
| 243 | CONFIG_PAGE_OFFSET=0xC0000000 | ||
| 244 | # CONFIG_PREEMPT_NONE is not set | ||
| 245 | # CONFIG_PREEMPT_VOLUNTARY is not set | ||
| 246 | CONFIG_PREEMPT=y | ||
| 247 | CONFIG_HZ=100 | ||
| 248 | CONFIG_AEABI=y | ||
| 249 | CONFIG_OABI_COMPAT=y | ||
| 250 | # CONFIG_ARCH_SPARSEMEM_DEFAULT is not set | ||
| 251 | # CONFIG_ARCH_SELECT_MEMORY_MODEL is not set | ||
| 252 | # CONFIG_HIGHMEM is not set | ||
| 253 | CONFIG_SELECT_MEMORY_MODEL=y | ||
| 254 | CONFIG_FLATMEM_MANUAL=y | ||
| 255 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
| 256 | # CONFIG_SPARSEMEM_MANUAL is not set | ||
| 257 | CONFIG_FLATMEM=y | ||
| 258 | CONFIG_FLAT_NODE_MEM_MAP=y | ||
| 259 | CONFIG_PAGEFLAGS_EXTENDED=y | ||
| 260 | CONFIG_SPLIT_PTLOCK_CPUS=4096 | ||
| 261 | # CONFIG_PHYS_ADDR_T_64BIT is not set | ||
| 262 | CONFIG_ZONE_DMA_FLAG=0 | ||
| 263 | CONFIG_VIRT_TO_BUS=y | ||
| 264 | CONFIG_HAVE_MLOCK=y | ||
| 265 | CONFIG_HAVE_MLOCKED_PAGE_BIT=y | ||
| 266 | # CONFIG_KSM is not set | ||
| 267 | CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 | ||
| 268 | CONFIG_ALIGNMENT_TRAP=y | ||
| 269 | # CONFIG_UACCESS_WITH_MEMCPY is not set | ||
| 270 | |||
| 271 | # | ||
| 272 | # Boot options | ||
| 273 | # | ||
| 274 | CONFIG_ZBOOT_ROM_TEXT=0 | ||
| 275 | CONFIG_ZBOOT_ROM_BSS=0 | ||
| 276 | CONFIG_CMDLINE="root=/dev/ram0 console=ttyS0,115200n8 rdinit=/sbin/init mem=64M" | ||
| 277 | # CONFIG_XIP_KERNEL is not set | ||
| 278 | CONFIG_KEXEC=y | ||
| 279 | CONFIG_ATAGS_PROC=y | ||
| 280 | |||
| 281 | # | ||
| 282 | # CPU Power Management | ||
| 283 | # | ||
| 284 | # CONFIG_CPU_IDLE is not set | ||
| 285 | |||
| 286 | # | ||
| 287 | # Floating point emulation | ||
| 288 | # | ||
| 289 | |||
| 290 | # | ||
| 291 | # At least one emulation must be selected | ||
| 292 | # | ||
| 293 | CONFIG_FPE_NWFPE=y | ||
| 294 | # CONFIG_FPE_NWFPE_XP is not set | ||
| 295 | # CONFIG_FPE_FASTFPE is not set | ||
| 296 | # CONFIG_VFP is not set | ||
| 297 | |||
| 298 | # | ||
| 299 | # Userspace binary formats | ||
| 300 | # | ||
| 301 | CONFIG_BINFMT_ELF=y | ||
| 302 | # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set | ||
| 303 | CONFIG_HAVE_AOUT=y | ||
| 304 | CONFIG_BINFMT_AOUT=y | ||
| 305 | CONFIG_BINFMT_MISC=y | ||
| 306 | |||
| 307 | # | ||
| 308 | # Power management options | ||
| 309 | # | ||
| 310 | # CONFIG_PM is not set | ||
| 311 | CONFIG_ARCH_SUSPEND_POSSIBLE=y | ||
| 312 | # CONFIG_NET is not set | ||
| 313 | |||
| 314 | # | ||
| 315 | # Device Drivers | ||
| 316 | # | ||
| 317 | |||
| 318 | # | ||
| 319 | # Generic Driver Options | ||
| 320 | # | ||
| 321 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||
| 322 | # CONFIG_DEVTMPFS is not set | ||
| 323 | CONFIG_STANDALONE=y | ||
| 324 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
| 325 | CONFIG_FW_LOADER=y | ||
| 326 | CONFIG_FIRMWARE_IN_KERNEL=y | ||
| 327 | CONFIG_EXTRA_FIRMWARE="" | ||
| 328 | # CONFIG_SYS_HYPERVISOR is not set | ||
| 329 | CONFIG_MTD=y | ||
| 330 | # CONFIG_MTD_DEBUG is not set | ||
| 331 | CONFIG_MTD_CONCAT=y | ||
| 332 | CONFIG_MTD_PARTITIONS=y | ||
| 333 | # CONFIG_MTD_REDBOOT_PARTS is not set | ||
| 334 | # CONFIG_MTD_CMDLINE_PARTS is not set | ||
| 335 | # CONFIG_MTD_AFS_PARTS is not set | ||
| 336 | # CONFIG_MTD_AR7_PARTS is not set | ||
| 337 | |||
| 338 | # | ||
| 339 | # User Modules And Translation Layers | ||
| 340 | # | ||
| 341 | CONFIG_MTD_CHAR=y | ||
| 342 | CONFIG_MTD_BLKDEVS=y | ||
| 343 | CONFIG_MTD_BLOCK=y | ||
| 344 | # CONFIG_FTL is not set | ||
| 345 | # CONFIG_NFTL is not set | ||
| 346 | # CONFIG_INFTL is not set | ||
| 347 | # CONFIG_RFD_FTL is not set | ||
| 348 | # CONFIG_SSFDC is not set | ||
| 349 | # CONFIG_MTD_OOPS is not set | ||
| 350 | |||
| 351 | # | ||
| 352 | # RAM/ROM/Flash chip drivers | ||
| 353 | # | ||
| 354 | CONFIG_MTD_CFI=y | ||
| 355 | # CONFIG_MTD_JEDECPROBE is not set | ||
| 356 | CONFIG_MTD_GEN_PROBE=y | ||
| 357 | # CONFIG_MTD_CFI_ADV_OPTIONS is not set | ||
| 358 | CONFIG_MTD_MAP_BANK_WIDTH_1=y | ||
| 359 | CONFIG_MTD_MAP_BANK_WIDTH_2=y | ||
| 360 | CONFIG_MTD_MAP_BANK_WIDTH_4=y | ||
| 361 | # CONFIG_MTD_MAP_BANK_WIDTH_8 is not set | ||
| 362 | # CONFIG_MTD_MAP_BANK_WIDTH_16 is not set | ||
| 363 | # CONFIG_MTD_MAP_BANK_WIDTH_32 is not set | ||
| 364 | CONFIG_MTD_CFI_I1=y | ||
| 365 | CONFIG_MTD_CFI_I2=y | ||
| 366 | # CONFIG_MTD_CFI_I4 is not set | ||
| 367 | # CONFIG_MTD_CFI_I8 is not set | ||
| 368 | # CONFIG_MTD_CFI_INTELEXT is not set | ||
| 369 | CONFIG_MTD_CFI_AMDSTD=y | ||
| 370 | # CONFIG_MTD_CFI_STAA is not set | ||
| 371 | CONFIG_MTD_CFI_UTIL=y | ||
| 372 | # CONFIG_MTD_RAM is not set | ||
| 373 | # CONFIG_MTD_ROM is not set | ||
| 374 | # CONFIG_MTD_ABSENT is not set | ||
| 375 | |||
| 376 | # | ||
| 377 | # Mapping drivers for chip access | ||
| 378 | # | ||
| 379 | # CONFIG_MTD_COMPLEX_MAPPINGS is not set | ||
| 380 | CONFIG_MTD_PHYSMAP=y | ||
| 381 | # CONFIG_MTD_PHYSMAP_COMPAT is not set | ||
| 382 | # CONFIG_MTD_ARM_INTEGRATOR is not set | ||
| 383 | # CONFIG_MTD_PLATRAM is not set | ||
| 384 | |||
| 385 | # | ||
| 386 | # Self-contained MTD device drivers | ||
| 387 | # | ||
| 388 | # CONFIG_MTD_SLRAM is not set | ||
| 389 | # CONFIG_MTD_PHRAM is not set | ||
| 390 | # CONFIG_MTD_MTDRAM is not set | ||
| 391 | # CONFIG_MTD_BLOCK2MTD is not set | ||
| 392 | |||
| 393 | # | ||
| 394 | # Disk-On-Chip Device Drivers | ||
| 395 | # | ||
| 396 | # CONFIG_MTD_DOC2000 is not set | ||
| 397 | # CONFIG_MTD_DOC2001 is not set | ||
| 398 | # CONFIG_MTD_DOC2001PLUS is not set | ||
| 399 | # CONFIG_MTD_NAND is not set | ||
| 400 | # CONFIG_MTD_ONENAND is not set | ||
| 401 | |||
| 402 | # | ||
| 403 | # LPDDR flash memory drivers | ||
| 404 | # | ||
| 405 | # CONFIG_MTD_LPDDR is not set | ||
| 406 | |||
| 407 | # | ||
| 408 | # UBI - Unsorted block images | ||
| 409 | # | ||
| 410 | # CONFIG_MTD_UBI is not set | ||
| 411 | # CONFIG_PARPORT is not set | ||
| 412 | CONFIG_BLK_DEV=y | ||
| 413 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
| 414 | # CONFIG_BLK_DEV_LOOP is not set | ||
| 415 | # CONFIG_BLK_DEV_UB is not set | ||
| 416 | CONFIG_BLK_DEV_RAM=y | ||
| 417 | CONFIG_BLK_DEV_RAM_COUNT=16 | ||
| 418 | CONFIG_BLK_DEV_RAM_SIZE=16384 | ||
| 419 | # CONFIG_BLK_DEV_XIP is not set | ||
| 420 | # CONFIG_CDROM_PKTCDVD is not set | ||
| 421 | # CONFIG_MG_DISK is not set | ||
| 422 | # CONFIG_MISC_DEVICES is not set | ||
| 423 | CONFIG_HAVE_IDE=y | ||
| 424 | # CONFIG_IDE is not set | ||
| 425 | |||
| 426 | # | ||
| 427 | # SCSI device support | ||
| 428 | # | ||
| 429 | # CONFIG_RAID_ATTRS is not set | ||
| 430 | CONFIG_SCSI=y | ||
| 431 | CONFIG_SCSI_DMA=y | ||
| 432 | # CONFIG_SCSI_TGT is not set | ||
| 433 | # CONFIG_SCSI_NETLINK is not set | ||
| 434 | # CONFIG_SCSI_PROC_FS is not set | ||
| 435 | |||
| 436 | # | ||
| 437 | # SCSI support type (disk, tape, CD-ROM) | ||
| 438 | # | ||
| 439 | CONFIG_BLK_DEV_SD=y | ||
| 440 | # CONFIG_CHR_DEV_ST is not set | ||
| 441 | # CONFIG_CHR_DEV_OSST is not set | ||
| 442 | # CONFIG_BLK_DEV_SR is not set | ||
| 443 | # CONFIG_CHR_DEV_SG is not set | ||
| 444 | # CONFIG_CHR_DEV_SCH is not set | ||
| 445 | # CONFIG_SCSI_MULTI_LUN is not set | ||
| 446 | # CONFIG_SCSI_CONSTANTS is not set | ||
| 447 | # CONFIG_SCSI_LOGGING is not set | ||
| 448 | # CONFIG_SCSI_SCAN_ASYNC is not set | ||
| 449 | |||
| 450 | # | ||
| 451 | # SCSI Transports | ||
| 452 | # | ||
| 453 | # CONFIG_SCSI_SPI_ATTRS is not set | ||
| 454 | # CONFIG_SCSI_FC_ATTRS is not set | ||
| 455 | # CONFIG_SCSI_SAS_ATTRS is not set | ||
| 456 | # CONFIG_SCSI_SAS_LIBSAS is not set | ||
| 457 | # CONFIG_SCSI_SRP_ATTRS is not set | ||
| 458 | # CONFIG_SCSI_LOWLEVEL is not set | ||
| 459 | # CONFIG_SCSI_DH is not set | ||
| 460 | # CONFIG_SCSI_OSD_INITIATOR is not set | ||
| 461 | # CONFIG_ATA is not set | ||
| 462 | # CONFIG_MD is not set | ||
| 463 | # CONFIG_PHONE is not set | ||
| 464 | |||
| 465 | # | ||
| 466 | # Input device support | ||
| 467 | # | ||
| 468 | CONFIG_INPUT=y | ||
| 469 | # CONFIG_INPUT_FF_MEMLESS is not set | ||
| 470 | # CONFIG_INPUT_POLLDEV is not set | ||
| 471 | |||
| 472 | # | ||
| 473 | # Userland interfaces | ||
| 474 | # | ||
| 475 | CONFIG_INPUT_MOUSEDEV=y | ||
| 476 | # CONFIG_INPUT_MOUSEDEV_PSAUX is not set | ||
| 477 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 | ||
| 478 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | ||
| 479 | # CONFIG_INPUT_JOYDEV is not set | ||
| 480 | # CONFIG_INPUT_EVDEV is not set | ||
| 481 | # CONFIG_INPUT_EVBUG is not set | ||
| 482 | |||
| 483 | # | ||
| 484 | # Input Device Drivers | ||
| 485 | # | ||
| 486 | # CONFIG_INPUT_KEYBOARD is not set | ||
| 487 | # CONFIG_INPUT_MOUSE is not set | ||
| 488 | # CONFIG_INPUT_JOYSTICK is not set | ||
| 489 | # CONFIG_INPUT_TABLET is not set | ||
| 490 | # CONFIG_INPUT_TOUCHSCREEN is not set | ||
| 491 | # CONFIG_INPUT_MISC is not set | ||
| 492 | |||
| 493 | # | ||
| 494 | # Hardware I/O ports | ||
| 495 | # | ||
| 496 | # CONFIG_SERIO is not set | ||
| 497 | # CONFIG_GAMEPORT is not set | ||
| 498 | |||
| 499 | # | ||
| 500 | # Character devices | ||
| 501 | # | ||
| 502 | CONFIG_VT=y | ||
| 503 | CONFIG_CONSOLE_TRANSLATIONS=y | ||
| 504 | CONFIG_VT_CONSOLE=y | ||
| 505 | CONFIG_HW_CONSOLE=y | ||
| 506 | # CONFIG_VT_HW_CONSOLE_BINDING is not set | ||
| 507 | # CONFIG_DEVKMEM is not set | ||
| 508 | # CONFIG_SERIAL_NONSTANDARD is not set | ||
| 509 | |||
| 510 | # | ||
| 511 | # Serial drivers | ||
| 512 | # | ||
| 513 | CONFIG_SERIAL_8250=y | ||
| 514 | CONFIG_SERIAL_8250_CONSOLE=y | ||
| 515 | CONFIG_SERIAL_8250_NR_UARTS=1 | ||
| 516 | CONFIG_SERIAL_8250_RUNTIME_UARTS=1 | ||
| 517 | # CONFIG_SERIAL_8250_EXTENDED is not set | ||
| 518 | |||
| 519 | # | ||
| 520 | # Non-8250 serial port support | ||
| 521 | # | ||
| 522 | CONFIG_SERIAL_CORE=y | ||
| 523 | CONFIG_SERIAL_CORE_CONSOLE=y | ||
| 524 | CONFIG_UNIX98_PTYS=y | ||
| 525 | # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set | ||
| 526 | # CONFIG_LEGACY_PTYS is not set | ||
| 527 | # CONFIG_IPMI_HANDLER is not set | ||
| 528 | # CONFIG_HW_RANDOM is not set | ||
| 529 | # CONFIG_R3964 is not set | ||
| 530 | # CONFIG_RAW_DRIVER is not set | ||
| 531 | # CONFIG_TCG_TPM is not set | ||
| 532 | # CONFIG_I2C is not set | ||
| 533 | # CONFIG_SPI is not set | ||
| 534 | |||
| 535 | # | ||
| 536 | # PPS support | ||
| 537 | # | ||
| 538 | # CONFIG_PPS is not set | ||
| 539 | CONFIG_ARCH_REQUIRE_GPIOLIB=y | ||
| 540 | CONFIG_GPIOLIB=y | ||
| 541 | # CONFIG_GPIO_SYSFS is not set | ||
| 542 | |||
| 543 | # | ||
| 544 | # Memory mapped GPIO expanders: | ||
| 545 | # | ||
| 546 | |||
| 547 | # | ||
| 548 | # I2C GPIO expanders: | ||
| 549 | # | ||
| 550 | |||
| 551 | # | ||
| 552 | # PCI GPIO expanders: | ||
| 553 | # | ||
| 554 | |||
| 555 | # | ||
| 556 | # SPI GPIO expanders: | ||
| 557 | # | ||
| 558 | |||
| 559 | # | ||
| 560 | # AC97 GPIO expanders: | ||
| 561 | # | ||
| 562 | # CONFIG_W1 is not set | ||
| 563 | # CONFIG_POWER_SUPPLY is not set | ||
| 564 | # CONFIG_HWMON is not set | ||
| 565 | # CONFIG_THERMAL is not set | ||
| 566 | # CONFIG_WATCHDOG is not set | ||
| 567 | CONFIG_SSB_POSSIBLE=y | ||
| 568 | |||
| 569 | # | ||
| 570 | # Sonics Silicon Backplane | ||
| 571 | # | ||
| 572 | # CONFIG_SSB is not set | ||
| 573 | |||
| 574 | # | ||
| 575 | # Multifunction device drivers | ||
| 576 | # | ||
| 577 | # CONFIG_MFD_CORE is not set | ||
| 578 | # CONFIG_MFD_SM501 is not set | ||
| 579 | # CONFIG_MFD_ASIC3 is not set | ||
| 580 | # CONFIG_HTC_EGPIO is not set | ||
| 581 | # CONFIG_HTC_PASIC3 is not set | ||
| 582 | # CONFIG_MFD_TMIO is not set | ||
| 583 | # CONFIG_MFD_T7L66XB is not set | ||
| 584 | # CONFIG_MFD_TC6387XB is not set | ||
| 585 | # CONFIG_MFD_TC6393XB is not set | ||
| 586 | # CONFIG_REGULATOR is not set | ||
| 587 | # CONFIG_MEDIA_SUPPORT is not set | ||
| 588 | |||
| 589 | # | ||
| 590 | # Graphics support | ||
| 591 | # | ||
| 592 | # CONFIG_VGASTATE is not set | ||
| 593 | # CONFIG_VIDEO_OUTPUT_CONTROL is not set | ||
| 594 | # CONFIG_FB is not set | ||
| 595 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | ||
| 596 | |||
| 597 | # | ||
| 598 | # Display device support | ||
| 599 | # | ||
| 600 | # CONFIG_DISPLAY_SUPPORT is not set | ||
| 601 | |||
| 602 | # | ||
| 603 | # Console display driver support | ||
| 604 | # | ||
| 605 | # CONFIG_VGA_CONSOLE is not set | ||
| 606 | CONFIG_DUMMY_CONSOLE=y | ||
| 607 | # CONFIG_SOUND is not set | ||
| 608 | # CONFIG_HID_SUPPORT is not set | ||
| 609 | CONFIG_USB_SUPPORT=y | ||
| 610 | CONFIG_USB_ARCH_HAS_HCD=y | ||
| 611 | CONFIG_USB_ARCH_HAS_OHCI=y | ||
| 612 | CONFIG_USB_ARCH_HAS_EHCI=y | ||
| 613 | CONFIG_USB=y | ||
| 614 | # CONFIG_USB_DEBUG is not set | ||
| 615 | # CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set | ||
| 616 | |||
| 617 | # | ||
| 618 | # Miscellaneous USB options | ||
| 619 | # | ||
| 620 | # CONFIG_USB_DEVICEFS is not set | ||
| 621 | CONFIG_USB_DEVICE_CLASS=y | ||
| 622 | # CONFIG_USB_DYNAMIC_MINORS is not set | ||
| 623 | # CONFIG_USB_OTG is not set | ||
| 624 | CONFIG_USB_MON=y | ||
| 625 | # CONFIG_USB_WUSB is not set | ||
| 626 | # CONFIG_USB_WUSB_CBAF is not set | ||
| 627 | |||
| 628 | # | ||
| 629 | # USB Host Controller Drivers | ||
| 630 | # | ||
| 631 | # CONFIG_USB_C67X00_HCD is not set | ||
| 632 | # CONFIG_USB_EHCI_HCD is not set | ||
| 633 | # CONFIG_USB_OXU210HP_HCD is not set | ||
| 634 | # CONFIG_USB_ISP116X_HCD is not set | ||
| 635 | # CONFIG_USB_ISP1760_HCD is not set | ||
| 636 | # CONFIG_USB_ISP1362_HCD is not set | ||
| 637 | # CONFIG_USB_OHCI_HCD is not set | ||
| 638 | # CONFIG_USB_SL811_HCD is not set | ||
| 639 | # CONFIG_USB_R8A66597_HCD is not set | ||
| 640 | # CONFIG_USB_HWA_HCD is not set | ||
| 641 | # CONFIG_USB_MUSB_HDRC is not set | ||
| 642 | |||
| 643 | # | ||
| 644 | # USB Device Class drivers | ||
| 645 | # | ||
| 646 | # CONFIG_USB_ACM is not set | ||
| 647 | # CONFIG_USB_PRINTER is not set | ||
| 648 | # CONFIG_USB_WDM is not set | ||
| 649 | # CONFIG_USB_TMC is not set | ||
| 650 | |||
| 651 | # | ||
| 652 | # NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may | ||
| 653 | # | ||
| 654 | |||
| 655 | # | ||
| 656 | # also be needed; see USB_STORAGE Help for more info | ||
| 657 | # | ||
| 658 | CONFIG_USB_STORAGE=y | ||
| 659 | # CONFIG_USB_STORAGE_DEBUG is not set | ||
| 660 | # CONFIG_USB_STORAGE_DATAFAB is not set | ||
| 661 | # CONFIG_USB_STORAGE_FREECOM is not set | ||
| 662 | # CONFIG_USB_STORAGE_ISD200 is not set | ||
| 663 | # CONFIG_USB_STORAGE_USBAT is not set | ||
| 664 | # CONFIG_USB_STORAGE_SDDR09 is not set | ||
| 665 | # CONFIG_USB_STORAGE_SDDR55 is not set | ||
| 666 | # CONFIG_USB_STORAGE_JUMPSHOT is not set | ||
| 667 | # CONFIG_USB_STORAGE_ALAUDA is not set | ||
| 668 | # CONFIG_USB_STORAGE_ONETOUCH is not set | ||
| 669 | # CONFIG_USB_STORAGE_KARMA is not set | ||
| 670 | # CONFIG_USB_STORAGE_CYPRESS_ATACB is not set | ||
| 671 | # CONFIG_USB_LIBUSUAL is not set | ||
| 672 | |||
| 673 | # | ||
| 674 | # USB Imaging devices | ||
| 675 | # | ||
| 676 | # CONFIG_USB_MDC800 is not set | ||
| 677 | # CONFIG_USB_MICROTEK is not set | ||
| 678 | |||
| 679 | # | ||
| 680 | # USB port drivers | ||
| 681 | # | ||
| 682 | # CONFIG_USB_SERIAL is not set | ||
| 683 | |||
| 684 | # | ||
| 685 | # USB Miscellaneous drivers | ||
| 686 | # | ||
| 687 | # CONFIG_USB_EMI62 is not set | ||
| 688 | # CONFIG_USB_EMI26 is not set | ||
| 689 | # CONFIG_USB_ADUTUX is not set | ||
| 690 | # CONFIG_USB_SEVSEG is not set | ||
| 691 | # CONFIG_USB_RIO500 is not set | ||
| 692 | # CONFIG_USB_LEGOTOWER is not set | ||
| 693 | # CONFIG_USB_LCD is not set | ||
| 694 | # CONFIG_USB_BERRY_CHARGE is not set | ||
| 695 | # CONFIG_USB_LED is not set | ||
| 696 | # CONFIG_USB_CYPRESS_CY7C63 is not set | ||
| 697 | # CONFIG_USB_CYTHERM is not set | ||
| 698 | # CONFIG_USB_IDMOUSE is not set | ||
| 699 | # CONFIG_USB_FTDI_ELAN is not set | ||
| 700 | # CONFIG_USB_APPLEDISPLAY is not set | ||
| 701 | # CONFIG_USB_LD is not set | ||
| 702 | # CONFIG_USB_TRANCEVIBRATOR is not set | ||
| 703 | # CONFIG_USB_IOWARRIOR is not set | ||
| 704 | # CONFIG_USB_TEST is not set | ||
| 705 | # CONFIG_USB_ISIGHTFW is not set | ||
| 706 | # CONFIG_USB_VST is not set | ||
| 707 | # CONFIG_USB_GADGET is not set | ||
| 708 | |||
| 709 | # | ||
| 710 | # OTG and related infrastructure | ||
| 711 | # | ||
| 712 | # CONFIG_USB_GPIO_VBUS is not set | ||
| 713 | # CONFIG_NOP_USB_XCEIV is not set | ||
| 714 | # CONFIG_MMC is not set | ||
| 715 | # CONFIG_MEMSTICK is not set | ||
| 716 | # CONFIG_NEW_LEDS is not set | ||
| 717 | # CONFIG_ACCESSIBILITY is not set | ||
| 718 | CONFIG_RTC_LIB=y | ||
| 719 | # CONFIG_RTC_CLASS is not set | ||
| 720 | # CONFIG_DMADEVICES is not set | ||
| 721 | # CONFIG_AUXDISPLAY is not set | ||
| 722 | # CONFIG_UIO is not set | ||
| 723 | |||
| 724 | # | ||
| 725 | # TI VLYNQ | ||
| 726 | # | ||
| 727 | # CONFIG_STAGING is not set | ||
| 728 | |||
| 729 | # | ||
| 730 | # File systems | ||
| 731 | # | ||
| 732 | # CONFIG_EXT2_FS is not set | ||
| 733 | # CONFIG_EXT3_FS is not set | ||
| 734 | # CONFIG_EXT4_FS is not set | ||
| 735 | # CONFIG_REISERFS_FS is not set | ||
| 736 | # CONFIG_JFS_FS is not set | ||
| 737 | CONFIG_FS_POSIX_ACL=y | ||
| 738 | # CONFIG_XFS_FS is not set | ||
| 739 | # CONFIG_GFS2_FS is not set | ||
| 740 | # CONFIG_BTRFS_FS is not set | ||
| 741 | # CONFIG_NILFS2_FS is not set | ||
| 742 | CONFIG_FILE_LOCKING=y | ||
| 743 | CONFIG_FSNOTIFY=y | ||
| 744 | # CONFIG_DNOTIFY is not set | ||
| 745 | # CONFIG_INOTIFY is not set | ||
| 746 | CONFIG_INOTIFY_USER=y | ||
| 747 | # CONFIG_QUOTA is not set | ||
| 748 | # CONFIG_AUTOFS_FS is not set | ||
| 749 | # CONFIG_AUTOFS4_FS is not set | ||
| 750 | # CONFIG_FUSE_FS is not set | ||
| 751 | CONFIG_GENERIC_ACL=y | ||
| 752 | |||
| 753 | # | ||
| 754 | # Caches | ||
| 755 | # | ||
| 756 | # CONFIG_FSCACHE is not set | ||
| 757 | |||
| 758 | # | ||
| 759 | # CD-ROM/DVD Filesystems | ||
| 760 | # | ||
| 761 | # CONFIG_ISO9660_FS is not set | ||
| 762 | # CONFIG_UDF_FS is not set | ||
| 763 | |||
| 764 | # | ||
| 765 | # DOS/FAT/NT Filesystems | ||
| 766 | # | ||
| 767 | # CONFIG_MSDOS_FS is not set | ||
| 768 | # CONFIG_VFAT_FS is not set | ||
| 769 | # CONFIG_NTFS_FS is not set | ||
| 770 | |||
| 771 | # | ||
| 772 | # Pseudo filesystems | ||
| 773 | # | ||
| 774 | CONFIG_PROC_FS=y | ||
| 775 | CONFIG_PROC_SYSCTL=y | ||
| 776 | CONFIG_PROC_PAGE_MONITOR=y | ||
| 777 | CONFIG_SYSFS=y | ||
| 778 | CONFIG_TMPFS=y | ||
| 779 | CONFIG_TMPFS_POSIX_ACL=y | ||
| 780 | # CONFIG_HUGETLB_PAGE is not set | ||
| 781 | # CONFIG_CONFIGFS_FS is not set | ||
| 782 | CONFIG_MISC_FILESYSTEMS=y | ||
| 783 | # CONFIG_ADFS_FS is not set | ||
| 784 | # CONFIG_AFFS_FS is not set | ||
| 785 | # CONFIG_HFS_FS is not set | ||
| 786 | # CONFIG_HFSPLUS_FS is not set | ||
| 787 | # CONFIG_BEFS_FS is not set | ||
| 788 | # CONFIG_BFS_FS is not set | ||
| 789 | # CONFIG_EFS_FS is not set | ||
| 790 | # CONFIG_JFFS2_FS is not set | ||
| 791 | # CONFIG_CRAMFS is not set | ||
| 792 | # CONFIG_SQUASHFS is not set | ||
| 793 | # CONFIG_VXFS_FS is not set | ||
| 794 | # CONFIG_MINIX_FS is not set | ||
| 795 | # CONFIG_OMFS_FS is not set | ||
| 796 | # CONFIG_HPFS_FS is not set | ||
| 797 | # CONFIG_QNX4FS_FS is not set | ||
| 798 | CONFIG_ROMFS_FS=y | ||
| 799 | CONFIG_ROMFS_BACKED_BY_BLOCK=y | ||
| 800 | # CONFIG_ROMFS_BACKED_BY_MTD is not set | ||
| 801 | # CONFIG_ROMFS_BACKED_BY_BOTH is not set | ||
| 802 | CONFIG_ROMFS_ON_BLOCK=y | ||
| 803 | # CONFIG_SYSV_FS is not set | ||
| 804 | # CONFIG_UFS_FS is not set | ||
| 805 | |||
| 806 | # | ||
| 807 | # Partition Types | ||
| 808 | # | ||
| 809 | CONFIG_PARTITION_ADVANCED=y | ||
| 810 | # CONFIG_ACORN_PARTITION is not set | ||
| 811 | # CONFIG_OSF_PARTITION is not set | ||
| 812 | # CONFIG_AMIGA_PARTITION is not set | ||
| 813 | # CONFIG_ATARI_PARTITION is not set | ||
| 814 | # CONFIG_MAC_PARTITION is not set | ||
| 815 | CONFIG_MSDOS_PARTITION=y | ||
| 816 | # CONFIG_BSD_DISKLABEL is not set | ||
| 817 | # CONFIG_MINIX_SUBPARTITION is not set | ||
| 818 | # CONFIG_SOLARIS_X86_PARTITION is not set | ||
| 819 | # CONFIG_UNIXWARE_DISKLABEL is not set | ||
| 820 | # CONFIG_LDM_PARTITION is not set | ||
| 821 | # CONFIG_SGI_PARTITION is not set | ||
| 822 | # CONFIG_ULTRIX_PARTITION is not set | ||
| 823 | # CONFIG_SUN_PARTITION is not set | ||
| 824 | # CONFIG_KARMA_PARTITION is not set | ||
| 825 | # CONFIG_EFI_PARTITION is not set | ||
| 826 | # CONFIG_SYSV68_PARTITION is not set | ||
| 827 | CONFIG_NLS=y | ||
| 828 | CONFIG_NLS_DEFAULT="iso8859-1" | ||
| 829 | CONFIG_NLS_CODEPAGE_437=y | ||
| 830 | # CONFIG_NLS_CODEPAGE_737 is not set | ||
| 831 | # CONFIG_NLS_CODEPAGE_775 is not set | ||
| 832 | # CONFIG_NLS_CODEPAGE_850 is not set | ||
| 833 | # CONFIG_NLS_CODEPAGE_852 is not set | ||
| 834 | # CONFIG_NLS_CODEPAGE_855 is not set | ||
| 835 | # CONFIG_NLS_CODEPAGE_857 is not set | ||
| 836 | # CONFIG_NLS_CODEPAGE_860 is not set | ||
| 837 | # CONFIG_NLS_CODEPAGE_861 is not set | ||
| 838 | # CONFIG_NLS_CODEPAGE_862 is not set | ||
| 839 | # CONFIG_NLS_CODEPAGE_863 is not set | ||
| 840 | # CONFIG_NLS_CODEPAGE_864 is not set | ||
| 841 | # CONFIG_NLS_CODEPAGE_865 is not set | ||
| 842 | # CONFIG_NLS_CODEPAGE_866 is not set | ||
| 843 | # CONFIG_NLS_CODEPAGE_869 is not set | ||
| 844 | # CONFIG_NLS_CODEPAGE_936 is not set | ||
| 845 | # CONFIG_NLS_CODEPAGE_950 is not set | ||
| 846 | # CONFIG_NLS_CODEPAGE_932 is not set | ||
| 847 | # CONFIG_NLS_CODEPAGE_949 is not set | ||
| 848 | # CONFIG_NLS_CODEPAGE_874 is not set | ||
| 849 | # CONFIG_NLS_ISO8859_8 is not set | ||
| 850 | # CONFIG_NLS_CODEPAGE_1250 is not set | ||
| 851 | # CONFIG_NLS_CODEPAGE_1251 is not set | ||
| 852 | # CONFIG_NLS_ASCII is not set | ||
| 853 | CONFIG_NLS_ISO8859_1=y | ||
| 854 | # CONFIG_NLS_ISO8859_2 is not set | ||
| 855 | # CONFIG_NLS_ISO8859_3 is not set | ||
| 856 | # CONFIG_NLS_ISO8859_4 is not set | ||
| 857 | # CONFIG_NLS_ISO8859_5 is not set | ||
| 858 | # CONFIG_NLS_ISO8859_6 is not set | ||
| 859 | # CONFIG_NLS_ISO8859_7 is not set | ||
| 860 | # CONFIG_NLS_ISO8859_9 is not set | ||
| 861 | # CONFIG_NLS_ISO8859_13 is not set | ||
| 862 | # CONFIG_NLS_ISO8859_14 is not set | ||
| 863 | # CONFIG_NLS_ISO8859_15 is not set | ||
| 864 | # CONFIG_NLS_KOI8_R is not set | ||
| 865 | # CONFIG_NLS_KOI8_U is not set | ||
| 866 | # CONFIG_NLS_UTF8 is not set | ||
| 867 | |||
| 868 | # | ||
| 869 | # Kernel hacking | ||
| 870 | # | ||
| 871 | # CONFIG_PRINTK_TIME is not set | ||
| 872 | # CONFIG_ENABLE_WARN_DEPRECATED is not set | ||
| 873 | # CONFIG_ENABLE_MUST_CHECK is not set | ||
| 874 | CONFIG_FRAME_WARN=1024 | ||
| 875 | # CONFIG_MAGIC_SYSRQ is not set | ||
| 876 | # CONFIG_STRIP_ASM_SYMS is not set | ||
| 877 | # CONFIG_UNUSED_SYMBOLS is not set | ||
| 878 | CONFIG_DEBUG_FS=y | ||
| 879 | # CONFIG_HEADERS_CHECK is not set | ||
| 880 | # CONFIG_DEBUG_KERNEL is not set | ||
| 881 | CONFIG_DEBUG_BUGVERBOSE=y | ||
| 882 | CONFIG_DEBUG_MEMORY_INIT=y | ||
| 883 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | ||
| 884 | # CONFIG_LATENCYTOP is not set | ||
| 885 | # CONFIG_SYSCTL_SYSCALL_CHECK is not set | ||
| 886 | CONFIG_HAVE_FUNCTION_TRACER=y | ||
| 887 | CONFIG_TRACING_SUPPORT=y | ||
| 888 | # CONFIG_FTRACE is not set | ||
| 889 | # CONFIG_DYNAMIC_DEBUG is not set | ||
| 890 | # CONFIG_SAMPLES is not set | ||
| 891 | CONFIG_HAVE_ARCH_KGDB=y | ||
| 892 | CONFIG_ARM_UNWIND=y | ||
| 893 | # CONFIG_DEBUG_USER is not set | ||
| 894 | |||
| 895 | # | ||
| 896 | # Security options | ||
| 897 | # | ||
| 898 | # CONFIG_KEYS is not set | ||
| 899 | # CONFIG_SECURITY is not set | ||
| 900 | # CONFIG_SECURITYFS is not set | ||
| 901 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set | ||
| 902 | # CONFIG_CRYPTO is not set | ||
| 903 | # CONFIG_BINARY_PRINTF is not set | ||
| 904 | |||
| 905 | # | ||
| 906 | # Library routines | ||
| 907 | # | ||
| 908 | CONFIG_GENERIC_FIND_LAST_BIT=y | ||
| 909 | # CONFIG_CRC_CCITT is not set | ||
| 910 | # CONFIG_CRC16 is not set | ||
| 911 | # CONFIG_CRC_T10DIF is not set | ||
| 912 | # CONFIG_CRC_ITU_T is not set | ||
| 913 | # CONFIG_CRC32 is not set | ||
| 914 | # CONFIG_CRC7 is not set | ||
| 915 | # CONFIG_LIBCRC32C is not set | ||
| 916 | CONFIG_ZLIB_INFLATE=y | ||
| 917 | CONFIG_DECOMPRESS_GZIP=y | ||
| 918 | CONFIG_DECOMPRESS_BZIP2=y | ||
| 919 | CONFIG_DECOMPRESS_LZMA=y | ||
| 920 | CONFIG_HAS_IOMEM=y | ||
| 921 | CONFIG_HAS_IOPORT=y | ||
| 922 | CONFIG_HAS_DMA=y | ||
| diff --git a/arch/arm/configs/nuc960_defconfig b/arch/arm/configs/nuc960_defconfig new file mode 100644 index 000000000000..4b2cd9eae9bc --- /dev/null +++ b/arch/arm/configs/nuc960_defconfig | |||
| @@ -0,0 +1,922 @@ | |||
| 1 | # | ||
| 2 | # Automatically generated make config: don't edit | ||
| 3 | # Linux kernel version: 2.6.32-rc7 | ||
| 4 | # Tue Nov 17 12:20:11 2009 | ||
| 5 | # | ||
| 6 | CONFIG_ARM=y | ||
| 7 | CONFIG_SYS_SUPPORTS_APM_EMULATION=y | ||
| 8 | CONFIG_GENERIC_GPIO=y | ||
| 9 | CONFIG_GENERIC_TIME=y | ||
| 10 | CONFIG_GENERIC_CLOCKEVENTS=y | ||
| 11 | CONFIG_GENERIC_HARDIRQS=y | ||
| 12 | CONFIG_STACKTRACE_SUPPORT=y | ||
| 13 | CONFIG_HAVE_LATENCYTOP_SUPPORT=y | ||
| 14 | CONFIG_LOCKDEP_SUPPORT=y | ||
| 15 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y | ||
| 16 | CONFIG_HARDIRQS_SW_RESEND=y | ||
| 17 | CONFIG_GENERIC_IRQ_PROBE=y | ||
| 18 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | ||
| 19 | CONFIG_GENERIC_HWEIGHT=y | ||
| 20 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
| 21 | CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y | ||
| 22 | CONFIG_VECTORS_BASE=0xffff0000 | ||
| 23 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||
| 24 | CONFIG_CONSTRUCTORS=y | ||
| 25 | |||
| 26 | # | ||
| 27 | # General setup | ||
| 28 | # | ||
| 29 | CONFIG_EXPERIMENTAL=y | ||
| 30 | CONFIG_BROKEN_ON_SMP=y | ||
| 31 | CONFIG_LOCK_KERNEL=y | ||
| 32 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
| 33 | CONFIG_LOCALVERSION="" | ||
| 34 | # CONFIG_LOCALVERSION_AUTO is not set | ||
| 35 | CONFIG_SWAP=y | ||
| 36 | CONFIG_SYSVIPC=y | ||
| 37 | CONFIG_SYSVIPC_SYSCTL=y | ||
| 38 | CONFIG_BSD_PROCESS_ACCT=y | ||
| 39 | # CONFIG_BSD_PROCESS_ACCT_V3 is not set | ||
| 40 | |||
| 41 | # | ||
| 42 | # RCU Subsystem | ||
| 43 | # | ||
| 44 | CONFIG_TREE_RCU=y | ||
| 45 | # CONFIG_TREE_PREEMPT_RCU is not set | ||
| 46 | # CONFIG_RCU_TRACE is not set | ||
| 47 | CONFIG_RCU_FANOUT=32 | ||
| 48 | # CONFIG_RCU_FANOUT_EXACT is not set | ||
| 49 | # CONFIG_TREE_RCU_TRACE is not set | ||
| 50 | # CONFIG_IKCONFIG is not set | ||
| 51 | CONFIG_LOG_BUF_SHIFT=17 | ||
| 52 | # CONFIG_GROUP_SCHED is not set | ||
| 53 | # CONFIG_CGROUPS is not set | ||
| 54 | CONFIG_SYSFS_DEPRECATED=y | ||
| 55 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
| 56 | CONFIG_RELAY=y | ||
| 57 | CONFIG_NAMESPACES=y | ||
| 58 | # CONFIG_UTS_NS is not set | ||
| 59 | # CONFIG_IPC_NS is not set | ||
| 60 | CONFIG_USER_NS=y | ||
| 61 | # CONFIG_PID_NS is not set | ||
| 62 | CONFIG_BLK_DEV_INITRD=y | ||
| 63 | CONFIG_INITRAMFS_SOURCE="" | ||
| 64 | CONFIG_RD_GZIP=y | ||
| 65 | CONFIG_RD_BZIP2=y | ||
| 66 | CONFIG_RD_LZMA=y | ||
| 67 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
| 68 | CONFIG_SYSCTL=y | ||
| 69 | CONFIG_ANON_INODES=y | ||
| 70 | # CONFIG_EMBEDDED is not set | ||
| 71 | CONFIG_UID16=y | ||
| 72 | CONFIG_SYSCTL_SYSCALL=y | ||
| 73 | CONFIG_KALLSYMS=y | ||
| 74 | CONFIG_KALLSYMS_EXTRA_PASS=y | ||
| 75 | CONFIG_HOTPLUG=y | ||
| 76 | CONFIG_PRINTK=y | ||
| 77 | CONFIG_BUG=y | ||
| 78 | CONFIG_ELF_CORE=y | ||
| 79 | CONFIG_BASE_FULL=y | ||
| 80 | CONFIG_FUTEX=y | ||
| 81 | CONFIG_EPOLL=y | ||
| 82 | CONFIG_SIGNALFD=y | ||
| 83 | CONFIG_TIMERFD=y | ||
| 84 | CONFIG_EVENTFD=y | ||
| 85 | CONFIG_SHMEM=y | ||
| 86 | CONFIG_AIO=y | ||
| 87 | |||
| 88 | # | ||
| 89 | # Kernel Performance Events And Counters | ||
| 90 | # | ||
| 91 | CONFIG_VM_EVENT_COUNTERS=y | ||
| 92 | CONFIG_COMPAT_BRK=y | ||
| 93 | CONFIG_SLAB=y | ||
| 94 | # CONFIG_SLUB is not set | ||
| 95 | # CONFIG_SLOB is not set | ||
| 96 | # CONFIG_PROFILING is not set | ||
| 97 | CONFIG_HAVE_OPROFILE=y | ||
| 98 | CONFIG_HAVE_KPROBES=y | ||
| 99 | CONFIG_HAVE_KRETPROBES=y | ||
| 100 | CONFIG_HAVE_CLK=y | ||
| 101 | |||
| 102 | # | ||
| 103 | # GCOV-based kernel profiling | ||
| 104 | # | ||
| 105 | # CONFIG_GCOV_KERNEL is not set | ||
| 106 | # CONFIG_SLOW_WORK is not set | ||
| 107 | CONFIG_HAVE_GENERIC_DMA_COHERENT=y | ||
| 108 | CONFIG_SLABINFO=y | ||
| 109 | CONFIG_RT_MUTEXES=y | ||
| 110 | CONFIG_BASE_SMALL=0 | ||
| 111 | # CONFIG_MODULES is not set | ||
| 112 | CONFIG_BLOCK=y | ||
| 113 | CONFIG_LBDAF=y | ||
| 114 | CONFIG_BLK_DEV_BSG=y | ||
| 115 | # CONFIG_BLK_DEV_INTEGRITY is not set | ||
| 116 | |||
| 117 | # | ||
| 118 | # IO Schedulers | ||
| 119 | # | ||
| 120 | CONFIG_IOSCHED_NOOP=y | ||
| 121 | CONFIG_IOSCHED_AS=y | ||
| 122 | CONFIG_IOSCHED_DEADLINE=y | ||
| 123 | CONFIG_IOSCHED_CFQ=y | ||
| 124 | # CONFIG_DEFAULT_AS is not set | ||
| 125 | # CONFIG_DEFAULT_DEADLINE is not set | ||
| 126 | CONFIG_DEFAULT_CFQ=y | ||
| 127 | # CONFIG_DEFAULT_NOOP is not set | ||
| 128 | CONFIG_DEFAULT_IOSCHED="cfq" | ||
| 129 | # CONFIG_FREEZER is not set | ||
| 130 | |||
| 131 | # | ||
| 132 | # System Type | ||
| 133 | # | ||
| 134 | CONFIG_MMU=y | ||
| 135 | # CONFIG_ARCH_AAEC2000 is not set | ||
| 136 | # CONFIG_ARCH_INTEGRATOR is not set | ||
| 137 | # CONFIG_ARCH_REALVIEW is not set | ||
| 138 | # CONFIG_ARCH_VERSATILE is not set | ||
| 139 | # CONFIG_ARCH_AT91 is not set | ||
| 140 | # CONFIG_ARCH_CLPS711X is not set | ||
| 141 | # CONFIG_ARCH_GEMINI is not set | ||
| 142 | # CONFIG_ARCH_EBSA110 is not set | ||
| 143 | # CONFIG_ARCH_EP93XX is not set | ||
| 144 | # CONFIG_ARCH_FOOTBRIDGE is not set | ||
| 145 | # CONFIG_ARCH_MXC is not set | ||
| 146 | # CONFIG_ARCH_STMP3XXX is not set | ||
| 147 | # CONFIG_ARCH_NETX is not set | ||
| 148 | # CONFIG_ARCH_H720X is not set | ||
| 149 | # CONFIG_ARCH_NOMADIK is not set | ||
| 150 | # CONFIG_ARCH_IOP13XX is not set | ||
| 151 | # CONFIG_ARCH_IOP32X is not set | ||
| 152 | # CONFIG_ARCH_IOP33X is not set | ||
| 153 | # CONFIG_ARCH_IXP23XX is not set | ||
| 154 | # CONFIG_ARCH_IXP2000 is not set | ||
| 155 | # CONFIG_ARCH_IXP4XX is not set | ||
| 156 | # CONFIG_ARCH_L7200 is not set | ||
| 157 | # CONFIG_ARCH_KIRKWOOD is not set | ||
| 158 | # CONFIG_ARCH_LOKI is not set | ||
| 159 | # CONFIG_ARCH_MV78XX0 is not set | ||
| 160 | # CONFIG_ARCH_ORION5X is not set | ||
| 161 | # CONFIG_ARCH_MMP is not set | ||
| 162 | # CONFIG_ARCH_KS8695 is not set | ||
| 163 | # CONFIG_ARCH_NS9XXX is not set | ||
| 164 | CONFIG_ARCH_W90X900=y | ||
| 165 | # CONFIG_ARCH_PNX4008 is not set | ||
| 166 | # CONFIG_ARCH_PXA is not set | ||
| 167 | # CONFIG_ARCH_MSM is not set | ||
| 168 | # CONFIG_ARCH_RPC is not set | ||
| 169 | # CONFIG_ARCH_SA1100 is not set | ||
| 170 | # CONFIG_ARCH_S3C2410 is not set | ||
| 171 | # CONFIG_ARCH_S3C64XX is not set | ||
| 172 | # CONFIG_ARCH_S5PC1XX is not set | ||
| 173 | # CONFIG_ARCH_SHARK is not set | ||
| 174 | # CONFIG_ARCH_LH7A40X is not set | ||
| 175 | # CONFIG_ARCH_U300 is not set | ||
| 176 | # CONFIG_ARCH_DAVINCI is not set | ||
| 177 | # CONFIG_ARCH_OMAP is not set | ||
| 178 | # CONFIG_ARCH_BCMRING is not set | ||
| 179 | CONFIG_CPU_NUC960=y | ||
| 180 | |||
| 181 | # | ||
| 182 | # W90P910 Machines | ||
| 183 | # | ||
| 184 | # CONFIG_MACH_W90P910EVB is not set | ||
| 185 | |||
| 186 | # | ||
| 187 | # NUC950 Machines | ||
| 188 | # | ||
| 189 | # CONFIG_MACH_W90P950EVB is not set | ||
| 190 | |||
| 191 | # | ||
| 192 | # NUC960 Machines | ||
| 193 | # | ||
| 194 | CONFIG_MACH_W90N960EVB=y | ||
| 195 | |||
| 196 | # | ||
| 197 | # NUC932 Machines | ||
| 198 | # | ||
| 199 | # CONFIG_MACH_NUC932EVB is not set | ||
| 200 | |||
| 201 | # | ||
| 202 | # Processor Type | ||
| 203 | # | ||
| 204 | CONFIG_CPU_32=y | ||
| 205 | CONFIG_CPU_ARM926T=y | ||
| 206 | CONFIG_CPU_32v5=y | ||
| 207 | CONFIG_CPU_ABRT_EV5TJ=y | ||
| 208 | CONFIG_CPU_PABRT_LEGACY=y | ||
| 209 | CONFIG_CPU_CACHE_VIVT=y | ||
| 210 | CONFIG_CPU_COPY_V4WB=y | ||
| 211 | CONFIG_CPU_TLB_V4WBI=y | ||
| 212 | CONFIG_CPU_CP15=y | ||
| 213 | CONFIG_CPU_CP15_MMU=y | ||
| 214 | |||
| 215 | # | ||
| 216 | # Processor Features | ||
| 217 | # | ||
| 218 | CONFIG_ARM_THUMB=y | ||
| 219 | # CONFIG_CPU_ICACHE_DISABLE is not set | ||
| 220 | # CONFIG_CPU_DCACHE_DISABLE is not set | ||
| 221 | # CONFIG_CPU_DCACHE_WRITETHROUGH is not set | ||
| 222 | # CONFIG_CPU_CACHE_ROUND_ROBIN is not set | ||
| 223 | CONFIG_ARM_L1_CACHE_SHIFT=5 | ||
| 224 | CONFIG_COMMON_CLKDEV=y | ||
| 225 | |||
| 226 | # | ||
| 227 | # Bus support | ||
| 228 | # | ||
| 229 | # CONFIG_PCI_SYSCALL is not set | ||
| 230 | # CONFIG_ARCH_SUPPORTS_MSI is not set | ||
| 231 | # CONFIG_PCCARD is not set | ||
| 232 | |||
| 233 | # | ||
| 234 | # Kernel Features | ||
| 235 | # | ||
| 236 | CONFIG_TICK_ONESHOT=y | ||
| 237 | CONFIG_NO_HZ=y | ||
| 238 | CONFIG_HIGH_RES_TIMERS=y | ||
| 239 | CONFIG_GENERIC_CLOCKEVENTS_BUILD=y | ||
| 240 | CONFIG_VMSPLIT_3G=y | ||
| 241 | # CONFIG_VMSPLIT_2G is not set | ||
| 242 | # CONFIG_VMSPLIT_1G is not set | ||
| 243 | CONFIG_PAGE_OFFSET=0xC0000000 | ||
| 244 | # CONFIG_PREEMPT_NONE is not set | ||
| 245 | # CONFIG_PREEMPT_VOLUNTARY is not set | ||
| 246 | CONFIG_PREEMPT=y | ||
| 247 | CONFIG_HZ=100 | ||
| 248 | CONFIG_AEABI=y | ||
| 249 | CONFIG_OABI_COMPAT=y | ||
| 250 | # CONFIG_ARCH_SPARSEMEM_DEFAULT is not set | ||
| 251 | # CONFIG_ARCH_SELECT_MEMORY_MODEL is not set | ||
| 252 | # CONFIG_HIGHMEM is not set | ||
| 253 | CONFIG_SELECT_MEMORY_MODEL=y | ||
| 254 | CONFIG_FLATMEM_MANUAL=y | ||
| 255 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
| 256 | # CONFIG_SPARSEMEM_MANUAL is not set | ||
| 257 | CONFIG_FLATMEM=y | ||
| 258 | CONFIG_FLAT_NODE_MEM_MAP=y | ||
| 259 | CONFIG_PAGEFLAGS_EXTENDED=y | ||
| 260 | CONFIG_SPLIT_PTLOCK_CPUS=4096 | ||
| 261 | # CONFIG_PHYS_ADDR_T_64BIT is not set | ||
| 262 | CONFIG_ZONE_DMA_FLAG=0 | ||
| 263 | CONFIG_VIRT_TO_BUS=y | ||
| 264 | CONFIG_HAVE_MLOCK=y | ||
| 265 | CONFIG_HAVE_MLOCKED_PAGE_BIT=y | ||
| 266 | # CONFIG_KSM is not set | ||
| 267 | CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 | ||
| 268 | CONFIG_ALIGNMENT_TRAP=y | ||
| 269 | # CONFIG_UACCESS_WITH_MEMCPY is not set | ||
| 270 | |||
| 271 | # | ||
| 272 | # Boot options | ||
| 273 | # | ||
| 274 | CONFIG_ZBOOT_ROM_TEXT=0 | ||
| 275 | CONFIG_ZBOOT_ROM_BSS=0 | ||
| 276 | CONFIG_CMDLINE="root=/dev/ram0 console=ttyS0,115200n8 rdinit=/sbin/init mem=64M" | ||
| 277 | # CONFIG_XIP_KERNEL is not set | ||
| 278 | CONFIG_KEXEC=y | ||
| 279 | CONFIG_ATAGS_PROC=y | ||
| 280 | |||
| 281 | # | ||
| 282 | # CPU Power Management | ||
| 283 | # | ||
| 284 | # CONFIG_CPU_IDLE is not set | ||
| 285 | |||
| 286 | # | ||
| 287 | # Floating point emulation | ||
| 288 | # | ||
| 289 | |||
| 290 | # | ||
| 291 | # At least one emulation must be selected | ||
| 292 | # | ||
| 293 | CONFIG_FPE_NWFPE=y | ||
| 294 | # CONFIG_FPE_NWFPE_XP is not set | ||
| 295 | # CONFIG_FPE_FASTFPE is not set | ||
| 296 | # CONFIG_VFP is not set | ||
| 297 | |||
| 298 | # | ||
| 299 | # Userspace binary formats | ||
| 300 | # | ||
| 301 | CONFIG_BINFMT_ELF=y | ||
| 302 | # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set | ||
| 303 | CONFIG_HAVE_AOUT=y | ||
| 304 | CONFIG_BINFMT_AOUT=y | ||
| 305 | CONFIG_BINFMT_MISC=y | ||
| 306 | |||
| 307 | # | ||
| 308 | # Power management options | ||
| 309 | # | ||
| 310 | # CONFIG_PM is not set | ||
| 311 | CONFIG_ARCH_SUSPEND_POSSIBLE=y | ||
| 312 | # CONFIG_NET is not set | ||
| 313 | |||
| 314 | # | ||
| 315 | # Device Drivers | ||
| 316 | # | ||
| 317 | |||
| 318 | # | ||
| 319 | # Generic Driver Options | ||
| 320 | # | ||
| 321 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||
| 322 | # CONFIG_DEVTMPFS is not set | ||
| 323 | CONFIG_STANDALONE=y | ||
| 324 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
| 325 | CONFIG_FW_LOADER=y | ||
| 326 | CONFIG_FIRMWARE_IN_KERNEL=y | ||
| 327 | CONFIG_EXTRA_FIRMWARE="" | ||
| 328 | # CONFIG_SYS_HYPERVISOR is not set | ||
| 329 | CONFIG_MTD=y | ||
| 330 | # CONFIG_MTD_DEBUG is not set | ||
| 331 | CONFIG_MTD_CONCAT=y | ||
| 332 | CONFIG_MTD_PARTITIONS=y | ||
| 333 | # CONFIG_MTD_REDBOOT_PARTS is not set | ||
| 334 | # CONFIG_MTD_CMDLINE_PARTS is not set | ||
| 335 | # CONFIG_MTD_AFS_PARTS is not set | ||
| 336 | # CONFIG_MTD_AR7_PARTS is not set | ||
| 337 | |||
| 338 | # | ||
| 339 | # User Modules And Translation Layers | ||
| 340 | # | ||
| 341 | CONFIG_MTD_CHAR=y | ||
| 342 | CONFIG_MTD_BLKDEVS=y | ||
| 343 | CONFIG_MTD_BLOCK=y | ||
| 344 | # CONFIG_FTL is not set | ||
| 345 | # CONFIG_NFTL is not set | ||
| 346 | # CONFIG_INFTL is not set | ||
| 347 | # CONFIG_RFD_FTL is not set | ||
| 348 | # CONFIG_SSFDC is not set | ||
| 349 | # CONFIG_MTD_OOPS is not set | ||
| 350 | |||
| 351 | # | ||
| 352 | # RAM/ROM/Flash chip drivers | ||
| 353 | # | ||
| 354 | CONFIG_MTD_CFI=y | ||
| 355 | # CONFIG_MTD_JEDECPROBE is not set | ||
| 356 | CONFIG_MTD_GEN_PROBE=y | ||
| 357 | # CONFIG_MTD_CFI_ADV_OPTIONS is not set | ||
| 358 | CONFIG_MTD_MAP_BANK_WIDTH_1=y | ||
| 359 | CONFIG_MTD_MAP_BANK_WIDTH_2=y | ||
| 360 | CONFIG_MTD_MAP_BANK_WIDTH_4=y | ||
| 361 | # CONFIG_MTD_MAP_BANK_WIDTH_8 is not set | ||
| 362 | # CONFIG_MTD_MAP_BANK_WIDTH_16 is not set | ||
| 363 | # CONFIG_MTD_MAP_BANK_WIDTH_32 is not set | ||
| 364 | CONFIG_MTD_CFI_I1=y | ||
| 365 | CONFIG_MTD_CFI_I2=y | ||
| 366 | # CONFIG_MTD_CFI_I4 is not set | ||
| 367 | # CONFIG_MTD_CFI_I8 is not set | ||
| 368 | # CONFIG_MTD_CFI_INTELEXT is not set | ||
| 369 | CONFIG_MTD_CFI_AMDSTD=y | ||
| 370 | # CONFIG_MTD_CFI_STAA is not set | ||
| 371 | CONFIG_MTD_CFI_UTIL=y | ||
| 372 | # CONFIG_MTD_RAM is not set | ||
| 373 | # CONFIG_MTD_ROM is not set | ||
| 374 | # CONFIG_MTD_ABSENT is not set | ||
| 375 | |||
| 376 | # | ||
| 377 | # Mapping drivers for chip access | ||
| 378 | # | ||
| 379 | # CONFIG_MTD_COMPLEX_MAPPINGS is not set | ||
| 380 | CONFIG_MTD_PHYSMAP=y | ||
| 381 | # CONFIG_MTD_PHYSMAP_COMPAT is not set | ||
| 382 | # CONFIG_MTD_ARM_INTEGRATOR is not set | ||
| 383 | # CONFIG_MTD_PLATRAM is not set | ||
| 384 | |||
| 385 | # | ||
| 386 | # Self-contained MTD device drivers | ||
| 387 | # | ||
| 388 | # CONFIG_MTD_SLRAM is not set | ||
| 389 | # CONFIG_MTD_PHRAM is not set | ||
| 390 | # CONFIG_MTD_MTDRAM is not set | ||
| 391 | # CONFIG_MTD_BLOCK2MTD is not set | ||
| 392 | |||
| 393 | # | ||
| 394 | # Disk-On-Chip Device Drivers | ||
| 395 | # | ||
| 396 | # CONFIG_MTD_DOC2000 is not set | ||
| 397 | # CONFIG_MTD_DOC2001 is not set | ||
| 398 | # CONFIG_MTD_DOC2001PLUS is not set | ||
| 399 | # CONFIG_MTD_NAND is not set | ||
| 400 | # CONFIG_MTD_ONENAND is not set | ||
| 401 | |||
| 402 | # | ||
| 403 | # LPDDR flash memory drivers | ||
| 404 | # | ||
| 405 | # CONFIG_MTD_LPDDR is not set | ||
| 406 | |||
| 407 | # | ||
| 408 | # UBI - Unsorted block images | ||
| 409 | # | ||
| 410 | # CONFIG_MTD_UBI is not set | ||
| 411 | # CONFIG_PARPORT is not set | ||
| 412 | CONFIG_BLK_DEV=y | ||
| 413 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
| 414 | # CONFIG_BLK_DEV_LOOP is not set | ||
| 415 | # CONFIG_BLK_DEV_UB is not set | ||
| 416 | CONFIG_BLK_DEV_RAM=y | ||
| 417 | CONFIG_BLK_DEV_RAM_COUNT=16 | ||
| 418 | CONFIG_BLK_DEV_RAM_SIZE=16384 | ||
| 419 | # CONFIG_BLK_DEV_XIP is not set | ||
| 420 | # CONFIG_CDROM_PKTCDVD is not set | ||
| 421 | # CONFIG_MG_DISK is not set | ||
| 422 | # CONFIG_MISC_DEVICES is not set | ||
| 423 | CONFIG_HAVE_IDE=y | ||
| 424 | # CONFIG_IDE is not set | ||
| 425 | |||
| 426 | # | ||
| 427 | # SCSI device support | ||
| 428 | # | ||
| 429 | # CONFIG_RAID_ATTRS is not set | ||
| 430 | CONFIG_SCSI=y | ||
| 431 | CONFIG_SCSI_DMA=y | ||
| 432 | # CONFIG_SCSI_TGT is not set | ||
| 433 | # CONFIG_SCSI_NETLINK is not set | ||
| 434 | # CONFIG_SCSI_PROC_FS is not set | ||
| 435 | |||
| 436 | # | ||
| 437 | # SCSI support type (disk, tape, CD-ROM) | ||
| 438 | # | ||
| 439 | CONFIG_BLK_DEV_SD=y | ||
| 440 | # CONFIG_CHR_DEV_ST is not set | ||
| 441 | # CONFIG_CHR_DEV_OSST is not set | ||
| 442 | # CONFIG_BLK_DEV_SR is not set | ||
| 443 | # CONFIG_CHR_DEV_SG is not set | ||
| 444 | # CONFIG_CHR_DEV_SCH is not set | ||
| 445 | # CONFIG_SCSI_MULTI_LUN is not set | ||
| 446 | # CONFIG_SCSI_CONSTANTS is not set | ||
| 447 | # CONFIG_SCSI_LOGGING is not set | ||
| 448 | # CONFIG_SCSI_SCAN_ASYNC is not set | ||
| 449 | |||
| 450 | # | ||
| 451 | # SCSI Transports | ||
| 452 | # | ||
| 453 | # CONFIG_SCSI_SPI_ATTRS is not set | ||
| 454 | # CONFIG_SCSI_FC_ATTRS is not set | ||
| 455 | # CONFIG_SCSI_SAS_ATTRS is not set | ||
| 456 | # CONFIG_SCSI_SAS_LIBSAS is not set | ||
| 457 | # CONFIG_SCSI_SRP_ATTRS is not set | ||
| 458 | # CONFIG_SCSI_LOWLEVEL is not set | ||
| 459 | # CONFIG_SCSI_DH is not set | ||
| 460 | # CONFIG_SCSI_OSD_INITIATOR is not set | ||
| 461 | # CONFIG_ATA is not set | ||
| 462 | # CONFIG_MD is not set | ||
| 463 | # CONFIG_PHONE is not set | ||
| 464 | |||
| 465 | # | ||
| 466 | # Input device support | ||
| 467 | # | ||
| 468 | CONFIG_INPUT=y | ||
| 469 | # CONFIG_INPUT_FF_MEMLESS is not set | ||
| 470 | # CONFIG_INPUT_POLLDEV is not set | ||
| 471 | |||
| 472 | # | ||
| 473 | # Userland interfaces | ||
| 474 | # | ||
| 475 | CONFIG_INPUT_MOUSEDEV=y | ||
| 476 | # CONFIG_INPUT_MOUSEDEV_PSAUX is not set | ||
| 477 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 | ||
| 478 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | ||
| 479 | # CONFIG_INPUT_JOYDEV is not set | ||
| 480 | # CONFIG_INPUT_EVDEV is not set | ||
| 481 | # CONFIG_INPUT_EVBUG is not set | ||
| 482 | |||
| 483 | # | ||
| 484 | # Input Device Drivers | ||
| 485 | # | ||
| 486 | # CONFIG_INPUT_KEYBOARD is not set | ||
| 487 | # CONFIG_INPUT_MOUSE is not set | ||
| 488 | # CONFIG_INPUT_JOYSTICK is not set | ||
| 489 | # CONFIG_INPUT_TABLET is not set | ||
| 490 | # CONFIG_INPUT_TOUCHSCREEN is not set | ||
| 491 | # CONFIG_INPUT_MISC is not set | ||
| 492 | |||
| 493 | # | ||
| 494 | # Hardware I/O ports | ||
| 495 | # | ||
| 496 | # CONFIG_SERIO is not set | ||
| 497 | # CONFIG_GAMEPORT is not set | ||
| 498 | |||
| 499 | # | ||
| 500 | # Character devices | ||
| 501 | # | ||
| 502 | CONFIG_VT=y | ||
| 503 | CONFIG_CONSOLE_TRANSLATIONS=y | ||
| 504 | CONFIG_VT_CONSOLE=y | ||
| 505 | CONFIG_HW_CONSOLE=y | ||
| 506 | # CONFIG_VT_HW_CONSOLE_BINDING is not set | ||
| 507 | # CONFIG_DEVKMEM is not set | ||
| 508 | # CONFIG_SERIAL_NONSTANDARD is not set | ||
| 509 | |||
| 510 | # | ||
| 511 | # Serial drivers | ||
| 512 | # | ||
| 513 | CONFIG_SERIAL_8250=y | ||
| 514 | CONFIG_SERIAL_8250_CONSOLE=y | ||
| 515 | CONFIG_SERIAL_8250_NR_UARTS=1 | ||
| 516 | CONFIG_SERIAL_8250_RUNTIME_UARTS=1 | ||
| 517 | # CONFIG_SERIAL_8250_EXTENDED is not set | ||
| 518 | |||
| 519 | # | ||
| 520 | # Non-8250 serial port support | ||
| 521 | # | ||
| 522 | CONFIG_SERIAL_CORE=y | ||
| 523 | CONFIG_SERIAL_CORE_CONSOLE=y | ||
| 524 | CONFIG_UNIX98_PTYS=y | ||
| 525 | # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set | ||
| 526 | # CONFIG_LEGACY_PTYS is not set | ||
| 527 | # CONFIG_IPMI_HANDLER is not set | ||
| 528 | # CONFIG_HW_RANDOM is not set | ||
| 529 | # CONFIG_R3964 is not set | ||
| 530 | # CONFIG_RAW_DRIVER is not set | ||
| 531 | # CONFIG_TCG_TPM is not set | ||
| 532 | # CONFIG_I2C is not set | ||
| 533 | # CONFIG_SPI is not set | ||
| 534 | |||
| 535 | # | ||
| 536 | # PPS support | ||
| 537 | # | ||
| 538 | # CONFIG_PPS is not set | ||
| 539 | CONFIG_ARCH_REQUIRE_GPIOLIB=y | ||
| 540 | CONFIG_GPIOLIB=y | ||
| 541 | # CONFIG_GPIO_SYSFS is not set | ||
| 542 | |||
| 543 | # | ||
| 544 | # Memory mapped GPIO expanders: | ||
| 545 | # | ||
| 546 | |||
| 547 | # | ||
| 548 | # I2C GPIO expanders: | ||
| 549 | # | ||
| 550 | |||
| 551 | # | ||
| 552 | # PCI GPIO expanders: | ||
| 553 | # | ||
| 554 | |||
| 555 | # | ||
| 556 | # SPI GPIO expanders: | ||
| 557 | # | ||
| 558 | |||
| 559 | # | ||
| 560 | # AC97 GPIO expanders: | ||
| 561 | # | ||
| 562 | # CONFIG_W1 is not set | ||
| 563 | # CONFIG_POWER_SUPPLY is not set | ||
| 564 | # CONFIG_HWMON is not set | ||
| 565 | # CONFIG_THERMAL is not set | ||
| 566 | # CONFIG_WATCHDOG is not set | ||
| 567 | CONFIG_SSB_POSSIBLE=y | ||
| 568 | |||
| 569 | # | ||
| 570 | # Sonics Silicon Backplane | ||
| 571 | # | ||
| 572 | # CONFIG_SSB is not set | ||
| 573 | |||
| 574 | # | ||
| 575 | # Multifunction device drivers | ||
| 576 | # | ||
| 577 | # CONFIG_MFD_CORE is not set | ||
| 578 | # CONFIG_MFD_SM501 is not set | ||
| 579 | # CONFIG_MFD_ASIC3 is not set | ||
| 580 | # CONFIG_HTC_EGPIO is not set | ||
| 581 | # CONFIG_HTC_PASIC3 is not set | ||
| 582 | # CONFIG_MFD_TMIO is not set | ||
| 583 | # CONFIG_MFD_T7L66XB is not set | ||
| 584 | # CONFIG_MFD_TC6387XB is not set | ||
| 585 | # CONFIG_MFD_TC6393XB is not set | ||
| 586 | # CONFIG_REGULATOR is not set | ||
| 587 | # CONFIG_MEDIA_SUPPORT is not set | ||
| 588 | |||
| 589 | # | ||
| 590 | # Graphics support | ||
| 591 | # | ||
| 592 | # CONFIG_VGASTATE is not set | ||
| 593 | # CONFIG_VIDEO_OUTPUT_CONTROL is not set | ||
| 594 | # CONFIG_FB is not set | ||
| 595 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | ||
| 596 | |||
| 597 | # | ||
| 598 | # Display device support | ||
| 599 | # | ||
| 600 | # CONFIG_DISPLAY_SUPPORT is not set | ||
| 601 | |||
| 602 | # | ||
| 603 | # Console display driver support | ||
| 604 | # | ||
| 605 | # CONFIG_VGA_CONSOLE is not set | ||
| 606 | CONFIG_DUMMY_CONSOLE=y | ||
| 607 | # CONFIG_SOUND is not set | ||
| 608 | # CONFIG_HID_SUPPORT is not set | ||
| 609 | CONFIG_USB_SUPPORT=y | ||
| 610 | CONFIG_USB_ARCH_HAS_HCD=y | ||
| 611 | CONFIG_USB_ARCH_HAS_OHCI=y | ||
| 612 | CONFIG_USB_ARCH_HAS_EHCI=y | ||
| 613 | CONFIG_USB=y | ||
| 614 | # CONFIG_USB_DEBUG is not set | ||
| 615 | # CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set | ||
| 616 | |||
| 617 | # | ||
| 618 | # Miscellaneous USB options | ||
| 619 | # | ||
| 620 | # CONFIG_USB_DEVICEFS is not set | ||
| 621 | CONFIG_USB_DEVICE_CLASS=y | ||
| 622 | # CONFIG_USB_DYNAMIC_MINORS is not set | ||
| 623 | # CONFIG_USB_OTG is not set | ||
| 624 | CONFIG_USB_MON=y | ||
| 625 | # CONFIG_USB_WUSB is not set | ||
| 626 | # CONFIG_USB_WUSB_CBAF is not set | ||
| 627 | |||
| 628 | # | ||
| 629 | # USB Host Controller Drivers | ||
| 630 | # | ||
| 631 | # CONFIG_USB_C67X00_HCD is not set | ||
| 632 | # CONFIG_USB_EHCI_HCD is not set | ||
| 633 | # CONFIG_USB_OXU210HP_HCD is not set | ||
| 634 | # CONFIG_USB_ISP116X_HCD is not set | ||
| 635 | # CONFIG_USB_ISP1760_HCD is not set | ||
| 636 | # CONFIG_USB_ISP1362_HCD is not set | ||
| 637 | # CONFIG_USB_OHCI_HCD is not set | ||
| 638 | # CONFIG_USB_SL811_HCD is not set | ||
| 639 | # CONFIG_USB_R8A66597_HCD is not set | ||
| 640 | # CONFIG_USB_HWA_HCD is not set | ||
| 641 | # CONFIG_USB_MUSB_HDRC is not set | ||
| 642 | |||
| 643 | # | ||
| 644 | # USB Device Class drivers | ||
| 645 | # | ||
| 646 | # CONFIG_USB_ACM is not set | ||
| 647 | # CONFIG_USB_PRINTER is not set | ||
| 648 | # CONFIG_USB_WDM is not set | ||
| 649 | # CONFIG_USB_TMC is not set | ||
| 650 | |||
| 651 | # | ||
| 652 | # NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may | ||
| 653 | # | ||
| 654 | |||
| 655 | # | ||
| 656 | # also be needed; see USB_STORAGE Help for more info | ||
| 657 | # | ||
| 658 | CONFIG_USB_STORAGE=y | ||
| 659 | # CONFIG_USB_STORAGE_DEBUG is not set | ||
| 660 | # CONFIG_USB_STORAGE_DATAFAB is not set | ||
| 661 | # CONFIG_USB_STORAGE_FREECOM is not set | ||
| 662 | # CONFIG_USB_STORAGE_ISD200 is not set | ||
| 663 | # CONFIG_USB_STORAGE_USBAT is not set | ||
| 664 | # CONFIG_USB_STORAGE_SDDR09 is not set | ||
| 665 | # CONFIG_USB_STORAGE_SDDR55 is not set | ||
| 666 | # CONFIG_USB_STORAGE_JUMPSHOT is not set | ||
| 667 | # CONFIG_USB_STORAGE_ALAUDA is not set | ||
| 668 | # CONFIG_USB_STORAGE_ONETOUCH is not set | ||
| 669 | # CONFIG_USB_STORAGE_KARMA is not set | ||
| 670 | # CONFIG_USB_STORAGE_CYPRESS_ATACB is not set | ||
| 671 | # CONFIG_USB_LIBUSUAL is not set | ||
| 672 | |||
| 673 | # | ||
| 674 | # USB Imaging devices | ||
| 675 | # | ||
| 676 | # CONFIG_USB_MDC800 is not set | ||
| 677 | # CONFIG_USB_MICROTEK is not set | ||
| 678 | |||
| 679 | # | ||
| 680 | # USB port drivers | ||
| 681 | # | ||
| 682 | # CONFIG_USB_SERIAL is not set | ||
| 683 | |||
| 684 | # | ||
| 685 | # USB Miscellaneous drivers | ||
| 686 | # | ||
| 687 | # CONFIG_USB_EMI62 is not set | ||
| 688 | # CONFIG_USB_EMI26 is not set | ||
| 689 | # CONFIG_USB_ADUTUX is not set | ||
| 690 | # CONFIG_USB_SEVSEG is not set | ||
| 691 | # CONFIG_USB_RIO500 is not set | ||
| 692 | # CONFIG_USB_LEGOTOWER is not set | ||
| 693 | # CONFIG_USB_LCD is not set | ||
| 694 | # CONFIG_USB_BERRY_CHARGE is not set | ||
| 695 | # CONFIG_USB_LED is not set | ||
| 696 | # CONFIG_USB_CYPRESS_CY7C63 is not set | ||
| 697 | # CONFIG_USB_CYTHERM is not set | ||
| 698 | # CONFIG_USB_IDMOUSE is not set | ||
| 699 | # CONFIG_USB_FTDI_ELAN is not set | ||
| 700 | # CONFIG_USB_APPLEDISPLAY is not set | ||
| 701 | # CONFIG_USB_LD is not set | ||
| 702 | # CONFIG_USB_TRANCEVIBRATOR is not set | ||
| 703 | # CONFIG_USB_IOWARRIOR is not set | ||
| 704 | # CONFIG_USB_TEST is not set | ||
| 705 | # CONFIG_USB_ISIGHTFW is not set | ||
| 706 | # CONFIG_USB_VST is not set | ||
| 707 | # CONFIG_USB_GADGET is not set | ||
| 708 | |||
| 709 | # | ||
| 710 | # OTG and related infrastructure | ||
| 711 | # | ||
| 712 | # CONFIG_USB_GPIO_VBUS is not set | ||
| 713 | # CONFIG_NOP_USB_XCEIV is not set | ||
| 714 | # CONFIG_MMC is not set | ||
| 715 | # CONFIG_MEMSTICK is not set | ||
| 716 | # CONFIG_NEW_LEDS is not set | ||
| 717 | # CONFIG_ACCESSIBILITY is not set | ||
| 718 | CONFIG_RTC_LIB=y | ||
| 719 | # CONFIG_RTC_CLASS is not set | ||
| 720 | # CONFIG_DMADEVICES is not set | ||
| 721 | # CONFIG_AUXDISPLAY is not set | ||
| 722 | # CONFIG_UIO is not set | ||
| 723 | |||
| 724 | # | ||
| 725 | # TI VLYNQ | ||
| 726 | # | ||
| 727 | # CONFIG_STAGING is not set | ||
| 728 | |||
| 729 | # | ||
| 730 | # File systems | ||
| 731 | # | ||
| 732 | # CONFIG_EXT2_FS is not set | ||
| 733 | # CONFIG_EXT3_FS is not set | ||
| 734 | # CONFIG_EXT4_FS is not set | ||
| 735 | # CONFIG_REISERFS_FS is not set | ||
| 736 | # CONFIG_JFS_FS is not set | ||
| 737 | CONFIG_FS_POSIX_ACL=y | ||
| 738 | # CONFIG_XFS_FS is not set | ||
| 739 | # CONFIG_GFS2_FS is not set | ||
| 740 | # CONFIG_BTRFS_FS is not set | ||
| 741 | # CONFIG_NILFS2_FS is not set | ||
| 742 | CONFIG_FILE_LOCKING=y | ||
| 743 | CONFIG_FSNOTIFY=y | ||
| 744 | # CONFIG_DNOTIFY is not set | ||
| 745 | # CONFIG_INOTIFY is not set | ||
| 746 | CONFIG_INOTIFY_USER=y | ||
| 747 | # CONFIG_QUOTA is not set | ||
| 748 | # CONFIG_AUTOFS_FS is not set | ||
| 749 | # CONFIG_AUTOFS4_FS is not set | ||
| 750 | # CONFIG_FUSE_FS is not set | ||
| 751 | CONFIG_GENERIC_ACL=y | ||
| 752 | |||
| 753 | # | ||
| 754 | # Caches | ||
| 755 | # | ||
| 756 | # CONFIG_FSCACHE is not set | ||
| 757 | |||
| 758 | # | ||
| 759 | # CD-ROM/DVD Filesystems | ||
| 760 | # | ||
| 761 | # CONFIG_ISO9660_FS is not set | ||
| 762 | # CONFIG_UDF_FS is not set | ||
| 763 | |||
| 764 | # | ||
| 765 | # DOS/FAT/NT Filesystems | ||
| 766 | # | ||
| 767 | # CONFIG_MSDOS_FS is not set | ||
| 768 | # CONFIG_VFAT_FS is not set | ||
| 769 | # CONFIG_NTFS_FS is not set | ||
| 770 | |||
| 771 | # | ||
| 772 | # Pseudo filesystems | ||
| 773 | # | ||
| 774 | CONFIG_PROC_FS=y | ||
| 775 | CONFIG_PROC_SYSCTL=y | ||
| 776 | CONFIG_PROC_PAGE_MONITOR=y | ||
| 777 | CONFIG_SYSFS=y | ||
| 778 | CONFIG_TMPFS=y | ||
| 779 | CONFIG_TMPFS_POSIX_ACL=y | ||
| 780 | # CONFIG_HUGETLB_PAGE is not set | ||
| 781 | # CONFIG_CONFIGFS_FS is not set | ||
| 782 | CONFIG_MISC_FILESYSTEMS=y | ||
| 783 | # CONFIG_ADFS_FS is not set | ||
| 784 | # CONFIG_AFFS_FS is not set | ||
| 785 | # CONFIG_HFS_FS is not set | ||
| 786 | # CONFIG_HFSPLUS_FS is not set | ||
| 787 | # CONFIG_BEFS_FS is not set | ||
| 788 | # CONFIG_BFS_FS is not set | ||
| 789 | # CONFIG_EFS_FS is not set | ||
| 790 | # CONFIG_JFFS2_FS is not set | ||
| 791 | # CONFIG_CRAMFS is not set | ||
| 792 | # CONFIG_SQUASHFS is not set | ||
| 793 | # CONFIG_VXFS_FS is not set | ||
| 794 | # CONFIG_MINIX_FS is not set | ||
| 795 | # CONFIG_OMFS_FS is not set | ||
| 796 | # CONFIG_HPFS_FS is not set | ||
| 797 | # CONFIG_QNX4FS_FS is not set | ||
| 798 | CONFIG_ROMFS_FS=y | ||
| 799 | CONFIG_ROMFS_BACKED_BY_BLOCK=y | ||
| 800 | # CONFIG_ROMFS_BACKED_BY_MTD is not set | ||
| 801 | # CONFIG_ROMFS_BACKED_BY_BOTH is not set | ||
| 802 | CONFIG_ROMFS_ON_BLOCK=y | ||
| 803 | # CONFIG_SYSV_FS is not set | ||
| 804 | # CONFIG_UFS_FS is not set | ||
| 805 | |||
| 806 | # | ||
| 807 | # Partition Types | ||
| 808 | # | ||
| 809 | CONFIG_PARTITION_ADVANCED=y | ||
| 810 | # CONFIG_ACORN_PARTITION is not set | ||
| 811 | # CONFIG_OSF_PARTITION is not set | ||
| 812 | # CONFIG_AMIGA_PARTITION is not set | ||
| 813 | # CONFIG_ATARI_PARTITION is not set | ||
| 814 | # CONFIG_MAC_PARTITION is not set | ||
| 815 | CONFIG_MSDOS_PARTITION=y | ||
| 816 | # CONFIG_BSD_DISKLABEL is not set | ||
| 817 | # CONFIG_MINIX_SUBPARTITION is not set | ||
| 818 | # CONFIG_SOLARIS_X86_PARTITION is not set | ||
| 819 | # CONFIG_UNIXWARE_DISKLABEL is not set | ||
| 820 | # CONFIG_LDM_PARTITION is not set | ||
| 821 | # CONFIG_SGI_PARTITION is not set | ||
| 822 | # CONFIG_ULTRIX_PARTITION is not set | ||
| 823 | # CONFIG_SUN_PARTITION is not set | ||
| 824 | # CONFIG_KARMA_PARTITION is not set | ||
| 825 | # CONFIG_EFI_PARTITION is not set | ||
| 826 | # CONFIG_SYSV68_PARTITION is not set | ||
| 827 | CONFIG_NLS=y | ||
| 828 | CONFIG_NLS_DEFAULT="iso8859-1" | ||
| 829 | CONFIG_NLS_CODEPAGE_437=y | ||
| 830 | # CONFIG_NLS_CODEPAGE_737 is not set | ||
| 831 | # CONFIG_NLS_CODEPAGE_775 is not set | ||
| 832 | # CONFIG_NLS_CODEPAGE_850 is not set | ||
| 833 | # CONFIG_NLS_CODEPAGE_852 is not set | ||
| 834 | # CONFIG_NLS_CODEPAGE_855 is not set | ||
| 835 | # CONFIG_NLS_CODEPAGE_857 is not set | ||
| 836 | # CONFIG_NLS_CODEPAGE_860 is not set | ||
| 837 | # CONFIG_NLS_CODEPAGE_861 is not set | ||
| 838 | # CONFIG_NLS_CODEPAGE_862 is not set | ||
| 839 | # CONFIG_NLS_CODEPAGE_863 is not set | ||
| 840 | # CONFIG_NLS_CODEPAGE_864 is not set | ||
| 841 | # CONFIG_NLS_CODEPAGE_865 is not set | ||
| 842 | # CONFIG_NLS_CODEPAGE_866 is not set | ||
| 843 | # CONFIG_NLS_CODEPAGE_869 is not set | ||
| 844 | # CONFIG_NLS_CODEPAGE_936 is not set | ||
| 845 | # CONFIG_NLS_CODEPAGE_950 is not set | ||
| 846 | # CONFIG_NLS_CODEPAGE_932 is not set | ||
| 847 | # CONFIG_NLS_CODEPAGE_949 is not set | ||
| 848 | # CONFIG_NLS_CODEPAGE_874 is not set | ||
| 849 | # CONFIG_NLS_ISO8859_8 is not set | ||
| 850 | # CONFIG_NLS_CODEPAGE_1250 is not set | ||
| 851 | # CONFIG_NLS_CODEPAGE_1251 is not set | ||
| 852 | # CONFIG_NLS_ASCII is not set | ||
| 853 | CONFIG_NLS_ISO8859_1=y | ||
| 854 | # CONFIG_NLS_ISO8859_2 is not set | ||
| 855 | # CONFIG_NLS_ISO8859_3 is not set | ||
| 856 | # CONFIG_NLS_ISO8859_4 is not set | ||
| 857 | # CONFIG_NLS_ISO8859_5 is not set | ||
| 858 | # CONFIG_NLS_ISO8859_6 is not set | ||
| 859 | # CONFIG_NLS_ISO8859_7 is not set | ||
| 860 | # CONFIG_NLS_ISO8859_9 is not set | ||
| 861 | # CONFIG_NLS_ISO8859_13 is not set | ||
| 862 | # CONFIG_NLS_ISO8859_14 is not set | ||
| 863 | # CONFIG_NLS_ISO8859_15 is not set | ||
| 864 | # CONFIG_NLS_KOI8_R is not set | ||
| 865 | # CONFIG_NLS_KOI8_U is not set | ||
| 866 | # CONFIG_NLS_UTF8 is not set | ||
| 867 | |||
| 868 | # | ||
| 869 | # Kernel hacking | ||
| 870 | # | ||
| 871 | # CONFIG_PRINTK_TIME is not set | ||
| 872 | # CONFIG_ENABLE_WARN_DEPRECATED is not set | ||
| 873 | # CONFIG_ENABLE_MUST_CHECK is not set | ||
| 874 | CONFIG_FRAME_WARN=1024 | ||
| 875 | # CONFIG_MAGIC_SYSRQ is not set | ||
| 876 | # CONFIG_STRIP_ASM_SYMS is not set | ||
| 877 | # CONFIG_UNUSED_SYMBOLS is not set | ||
| 878 | CONFIG_DEBUG_FS=y | ||
| 879 | # CONFIG_HEADERS_CHECK is not set | ||
| 880 | # CONFIG_DEBUG_KERNEL is not set | ||
| 881 | CONFIG_DEBUG_BUGVERBOSE=y | ||
| 882 | CONFIG_DEBUG_MEMORY_INIT=y | ||
| 883 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | ||
| 884 | # CONFIG_LATENCYTOP is not set | ||
| 885 | # CONFIG_SYSCTL_SYSCALL_CHECK is not set | ||
| 886 | CONFIG_HAVE_FUNCTION_TRACER=y | ||
| 887 | CONFIG_TRACING_SUPPORT=y | ||
| 888 | # CONFIG_FTRACE is not set | ||
| 889 | # CONFIG_DYNAMIC_DEBUG is not set | ||
| 890 | # CONFIG_SAMPLES is not set | ||
| 891 | CONFIG_HAVE_ARCH_KGDB=y | ||
| 892 | CONFIG_ARM_UNWIND=y | ||
| 893 | # CONFIG_DEBUG_USER is not set | ||
| 894 | |||
| 895 | # | ||
| 896 | # Security options | ||
| 897 | # | ||
| 898 | # CONFIG_KEYS is not set | ||
| 899 | # CONFIG_SECURITY is not set | ||
| 900 | # CONFIG_SECURITYFS is not set | ||
| 901 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set | ||
| 902 | # CONFIG_CRYPTO is not set | ||
| 903 | # CONFIG_BINARY_PRINTF is not set | ||
| 904 | |||
| 905 | # | ||
| 906 | # Library routines | ||
| 907 | # | ||
| 908 | CONFIG_GENERIC_FIND_LAST_BIT=y | ||
| 909 | # CONFIG_CRC_CCITT is not set | ||
| 910 | # CONFIG_CRC16 is not set | ||
| 911 | # CONFIG_CRC_T10DIF is not set | ||
| 912 | # CONFIG_CRC_ITU_T is not set | ||
| 913 | # CONFIG_CRC32 is not set | ||
| 914 | # CONFIG_CRC7 is not set | ||
| 915 | # CONFIG_LIBCRC32C is not set | ||
| 916 | CONFIG_ZLIB_INFLATE=y | ||
| 917 | CONFIG_DECOMPRESS_GZIP=y | ||
| 918 | CONFIG_DECOMPRESS_BZIP2=y | ||
| 919 | CONFIG_DECOMPRESS_LZMA=y | ||
| 920 | CONFIG_HAS_IOMEM=y | ||
| 921 | CONFIG_HAS_IOPORT=y | ||
| 922 | CONFIG_HAS_DMA=y | ||
| diff --git a/arch/arm/configs/u8500_defconfig b/arch/arm/configs/u8500_defconfig new file mode 100644 index 000000000000..15fde22ce3f3 --- /dev/null +++ b/arch/arm/configs/u8500_defconfig | |||
| @@ -0,0 +1,680 @@ | |||
| 1 | # | ||
| 2 | # Automatically generated make config: don't edit | ||
| 3 | # Linux kernel version: 2.6.32-rc8 | ||
| 4 | # Mon Nov 30 11:11:29 2009 | ||
| 5 | # | ||
| 6 | CONFIG_ARM=y | ||
| 7 | CONFIG_SYS_SUPPORTS_APM_EMULATION=y | ||
| 8 | CONFIG_GENERIC_TIME=y | ||
| 9 | CONFIG_GENERIC_CLOCKEVENTS=y | ||
| 10 | CONFIG_GENERIC_HARDIRQS=y | ||
| 11 | CONFIG_STACKTRACE_SUPPORT=y | ||
| 12 | CONFIG_LOCKDEP_SUPPORT=y | ||
| 13 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y | ||
| 14 | CONFIG_HARDIRQS_SW_RESEND=y | ||
| 15 | CONFIG_GENERIC_IRQ_PROBE=y | ||
| 16 | CONFIG_GENERIC_LOCKBREAK=y | ||
| 17 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | ||
| 18 | CONFIG_GENERIC_HWEIGHT=y | ||
| 19 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
| 20 | CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y | ||
| 21 | CONFIG_VECTORS_BASE=0xffff0000 | ||
| 22 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||
| 23 | CONFIG_CONSTRUCTORS=y | ||
| 24 | |||
| 25 | # | ||
| 26 | # General setup | ||
| 27 | # | ||
| 28 | CONFIG_EXPERIMENTAL=y | ||
| 29 | CONFIG_LOCK_KERNEL=y | ||
| 30 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
| 31 | CONFIG_LOCALVERSION="" | ||
| 32 | CONFIG_LOCALVERSION_AUTO=y | ||
| 33 | # CONFIG_SWAP is not set | ||
| 34 | CONFIG_SYSVIPC=y | ||
| 35 | CONFIG_SYSVIPC_SYSCTL=y | ||
| 36 | # CONFIG_BSD_PROCESS_ACCT is not set | ||
| 37 | |||
| 38 | # | ||
| 39 | # RCU Subsystem | ||
| 40 | # | ||
| 41 | CONFIG_TREE_RCU=y | ||
| 42 | # CONFIG_TREE_PREEMPT_RCU is not set | ||
| 43 | # CONFIG_RCU_TRACE is not set | ||
| 44 | CONFIG_RCU_FANOUT=32 | ||
| 45 | # CONFIG_RCU_FANOUT_EXACT is not set | ||
| 46 | # CONFIG_TREE_RCU_TRACE is not set | ||
| 47 | # CONFIG_IKCONFIG is not set | ||
| 48 | CONFIG_LOG_BUF_SHIFT=17 | ||
| 49 | CONFIG_GROUP_SCHED=y | ||
| 50 | CONFIG_FAIR_GROUP_SCHED=y | ||
| 51 | CONFIG_RT_GROUP_SCHED=y | ||
| 52 | CONFIG_USER_SCHED=y | ||
| 53 | # CONFIG_CGROUP_SCHED is not set | ||
| 54 | # CONFIG_CGROUPS is not set | ||
| 55 | CONFIG_SYSFS_DEPRECATED=y | ||
| 56 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
| 57 | # CONFIG_RELAY is not set | ||
| 58 | CONFIG_NAMESPACES=y | ||
| 59 | # CONFIG_UTS_NS is not set | ||
| 60 | # CONFIG_IPC_NS is not set | ||
| 61 | # CONFIG_USER_NS is not set | ||
| 62 | # CONFIG_PID_NS is not set | ||
| 63 | CONFIG_BLK_DEV_INITRD=y | ||
| 64 | CONFIG_INITRAMFS_SOURCE="" | ||
| 65 | CONFIG_RD_GZIP=y | ||
| 66 | CONFIG_RD_BZIP2=y | ||
| 67 | CONFIG_RD_LZMA=y | ||
| 68 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
| 69 | CONFIG_SYSCTL=y | ||
| 70 | CONFIG_ANON_INODES=y | ||
| 71 | # CONFIG_EMBEDDED is not set | ||
| 72 | CONFIG_UID16=y | ||
| 73 | CONFIG_SYSCTL_SYSCALL=y | ||
| 74 | CONFIG_KALLSYMS=y | ||
| 75 | CONFIG_KALLSYMS_ALL=y | ||
| 76 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | ||
| 77 | CONFIG_HOTPLUG=y | ||
| 78 | CONFIG_PRINTK=y | ||
| 79 | CONFIG_BUG=y | ||
| 80 | CONFIG_ELF_CORE=y | ||
| 81 | CONFIG_BASE_FULL=y | ||
| 82 | CONFIG_FUTEX=y | ||
| 83 | CONFIG_EPOLL=y | ||
| 84 | CONFIG_SIGNALFD=y | ||
| 85 | CONFIG_TIMERFD=y | ||
| 86 | CONFIG_EVENTFD=y | ||
| 87 | CONFIG_SHMEM=y | ||
| 88 | CONFIG_AIO=y | ||
| 89 | |||
| 90 | # | ||
| 91 | # Kernel Performance Events And Counters | ||
| 92 | # | ||
| 93 | CONFIG_VM_EVENT_COUNTERS=y | ||
| 94 | CONFIG_SLUB_DEBUG=y | ||
| 95 | CONFIG_COMPAT_BRK=y | ||
| 96 | # CONFIG_SLAB is not set | ||
| 97 | CONFIG_SLUB=y | ||
| 98 | # CONFIG_SLOB is not set | ||
| 99 | # CONFIG_PROFILING is not set | ||
| 100 | CONFIG_HAVE_OPROFILE=y | ||
| 101 | # CONFIG_KPROBES is not set | ||
| 102 | CONFIG_HAVE_KPROBES=y | ||
| 103 | CONFIG_HAVE_KRETPROBES=y | ||
| 104 | CONFIG_USE_GENERIC_SMP_HELPERS=y | ||
| 105 | |||
| 106 | # | ||
| 107 | # GCOV-based kernel profiling | ||
| 108 | # | ||
| 109 | # CONFIG_SLOW_WORK is not set | ||
| 110 | CONFIG_HAVE_GENERIC_DMA_COHERENT=y | ||
| 111 | CONFIG_SLABINFO=y | ||
| 112 | CONFIG_RT_MUTEXES=y | ||
| 113 | CONFIG_BASE_SMALL=0 | ||
| 114 | CONFIG_MODULES=y | ||
| 115 | # CONFIG_MODULE_FORCE_LOAD is not set | ||
| 116 | CONFIG_MODULE_UNLOAD=y | ||
| 117 | # CONFIG_MODULE_FORCE_UNLOAD is not set | ||
| 118 | # CONFIG_MODVERSIONS is not set | ||
| 119 | # CONFIG_MODULE_SRCVERSION_ALL is not set | ||
| 120 | CONFIG_STOP_MACHINE=y | ||
| 121 | CONFIG_BLOCK=y | ||
| 122 | # CONFIG_LBDAF is not set | ||
| 123 | # CONFIG_BLK_DEV_BSG is not set | ||
| 124 | # CONFIG_BLK_DEV_INTEGRITY is not set | ||
| 125 | |||
| 126 | # | ||
| 127 | # IO Schedulers | ||
| 128 | # | ||
| 129 | CONFIG_IOSCHED_NOOP=y | ||
| 130 | CONFIG_IOSCHED_AS=y | ||
| 131 | CONFIG_IOSCHED_DEADLINE=y | ||
| 132 | CONFIG_IOSCHED_CFQ=y | ||
| 133 | # CONFIG_DEFAULT_AS is not set | ||
| 134 | # CONFIG_DEFAULT_DEADLINE is not set | ||
| 135 | CONFIG_DEFAULT_CFQ=y | ||
| 136 | # CONFIG_DEFAULT_NOOP is not set | ||
| 137 | CONFIG_DEFAULT_IOSCHED="cfq" | ||
| 138 | # CONFIG_FREEZER is not set | ||
| 139 | |||
| 140 | # | ||
| 141 | # System Type | ||
| 142 | # | ||
| 143 | CONFIG_MMU=y | ||
| 144 | # CONFIG_ARCH_AAEC2000 is not set | ||
| 145 | # CONFIG_ARCH_INTEGRATOR is not set | ||
| 146 | # CONFIG_ARCH_REALVIEW is not set | ||
| 147 | # CONFIG_ARCH_VERSATILE is not set | ||
| 148 | # CONFIG_ARCH_AT91 is not set | ||
| 149 | # CONFIG_ARCH_CLPS711X is not set | ||
| 150 | # CONFIG_ARCH_GEMINI is not set | ||
| 151 | # CONFIG_ARCH_EBSA110 is not set | ||
| 152 | # CONFIG_ARCH_EP93XX is not set | ||
| 153 | # CONFIG_ARCH_FOOTBRIDGE is not set | ||
| 154 | # CONFIG_ARCH_MXC is not set | ||
| 155 | # CONFIG_ARCH_STMP3XXX is not set | ||
| 156 | # CONFIG_ARCH_NETX is not set | ||
| 157 | # CONFIG_ARCH_H720X is not set | ||
| 158 | # CONFIG_ARCH_NOMADIK is not set | ||
| 159 | # CONFIG_ARCH_IOP13XX is not set | ||
| 160 | # CONFIG_ARCH_IOP32X is not set | ||
| 161 | # CONFIG_ARCH_IOP33X is not set | ||
| 162 | # CONFIG_ARCH_IXP23XX is not set | ||
| 163 | # CONFIG_ARCH_IXP2000 is not set | ||
| 164 | # CONFIG_ARCH_IXP4XX is not set | ||
| 165 | # CONFIG_ARCH_L7200 is not set | ||
| 166 | # CONFIG_ARCH_KIRKWOOD is not set | ||
| 167 | # CONFIG_ARCH_LOKI is not set | ||
| 168 | # CONFIG_ARCH_MV78XX0 is not set | ||
| 169 | # CONFIG_ARCH_ORION5X is not set | ||
| 170 | # CONFIG_ARCH_MMP is not set | ||
| 171 | # CONFIG_ARCH_KS8695 is not set | ||
| 172 | # CONFIG_ARCH_NS9XXX is not set | ||
| 173 | # CONFIG_ARCH_W90X900 is not set | ||
| 174 | # CONFIG_ARCH_PNX4008 is not set | ||
| 175 | # CONFIG_ARCH_PXA is not set | ||
| 176 | # CONFIG_ARCH_MSM is not set | ||
| 177 | # CONFIG_ARCH_RPC is not set | ||
| 178 | # CONFIG_ARCH_SA1100 is not set | ||
| 179 | # CONFIG_ARCH_S3C2410 is not set | ||
| 180 | # CONFIG_ARCH_S3C64XX is not set | ||
| 181 | # CONFIG_ARCH_S5PC1XX is not set | ||
| 182 | # CONFIG_ARCH_SHARK is not set | ||
| 183 | # CONFIG_ARCH_LH7A40X is not set | ||
| 184 | # CONFIG_ARCH_U300 is not set | ||
| 185 | # CONFIG_ARCH_DAVINCI is not set | ||
| 186 | # CONFIG_ARCH_OMAP is not set | ||
| 187 | # CONFIG_ARCH_BCMRING is not set | ||
| 188 | CONFIG_ARCH_U8500=y | ||
| 189 | CONFIG_PLAT_NOMADIK=y | ||
| 190 | CONFIG_HAS_MTU=y | ||
| 191 | |||
| 192 | # | ||
| 193 | # ST-Ericsson platform type | ||
| 194 | # | ||
| 195 | |||
| 196 | # | ||
| 197 | # ST-Ericsson Multicore Mobile Platforms | ||
| 198 | # | ||
| 199 | CONFIG_MACH_U8500_MOP=y | ||
| 200 | |||
| 201 | # | ||
| 202 | # Processor Type | ||
| 203 | # | ||
| 204 | CONFIG_CPU_32=y | ||
| 205 | CONFIG_CPU_32v6K=y | ||
| 206 | CONFIG_CPU_V7=y | ||
| 207 | CONFIG_CPU_32v7=y | ||
| 208 | CONFIG_CPU_ABRT_EV7=y | ||
| 209 | CONFIG_CPU_PABRT_V7=y | ||
| 210 | CONFIG_CPU_CACHE_V7=y | ||
| 211 | CONFIG_CPU_CACHE_VIPT=y | ||
| 212 | CONFIG_CPU_COPY_V6=y | ||
| 213 | CONFIG_CPU_TLB_V7=y | ||
| 214 | CONFIG_CPU_HAS_ASID=y | ||
| 215 | CONFIG_CPU_CP15=y | ||
| 216 | CONFIG_CPU_CP15_MMU=y | ||
| 217 | |||
| 218 | # | ||
| 219 | # Processor Features | ||
| 220 | # | ||
| 221 | CONFIG_ARM_THUMB=y | ||
| 222 | # CONFIG_ARM_THUMBEE is not set | ||
| 223 | # CONFIG_CPU_ICACHE_DISABLE is not set | ||
| 224 | # CONFIG_CPU_DCACHE_DISABLE is not set | ||
| 225 | # CONFIG_CPU_BPREDICT_DISABLE is not set | ||
| 226 | CONFIG_HAS_TLS_REG=y | ||
| 227 | CONFIG_ARM_L1_CACHE_SHIFT=5 | ||
| 228 | # CONFIG_ARM_ERRATA_430973 is not set | ||
| 229 | # CONFIG_ARM_ERRATA_458693 is not set | ||
| 230 | # CONFIG_ARM_ERRATA_460075 is not set | ||
| 231 | CONFIG_ARM_GIC=y | ||
| 232 | CONFIG_COMMON_CLKDEV=y | ||
| 233 | |||
| 234 | # | ||
| 235 | # Bus support | ||
| 236 | # | ||
| 237 | CONFIG_ARM_AMBA=y | ||
| 238 | # CONFIG_PCI_SYSCALL is not set | ||
| 239 | # CONFIG_ARCH_SUPPORTS_MSI is not set | ||
| 240 | # CONFIG_PCCARD is not set | ||
| 241 | |||
| 242 | # | ||
| 243 | # Kernel Features | ||
| 244 | # | ||
| 245 | # CONFIG_NO_HZ is not set | ||
| 246 | # CONFIG_HIGH_RES_TIMERS is not set | ||
| 247 | CONFIG_GENERIC_CLOCKEVENTS_BUILD=y | ||
| 248 | CONFIG_SMP=y | ||
| 249 | CONFIG_HAVE_ARM_SCU=y | ||
| 250 | CONFIG_HAVE_ARM_TWD=y | ||
| 251 | CONFIG_VMSPLIT_3G=y | ||
| 252 | # CONFIG_VMSPLIT_2G is not set | ||
| 253 | # CONFIG_VMSPLIT_1G is not set | ||
| 254 | CONFIG_PAGE_OFFSET=0xC0000000 | ||
| 255 | CONFIG_NR_CPUS=2 | ||
| 256 | # CONFIG_HOTPLUG_CPU is not set | ||
| 257 | CONFIG_LOCAL_TIMERS=y | ||
| 258 | # CONFIG_PREEMPT_NONE is not set | ||
| 259 | # CONFIG_PREEMPT_VOLUNTARY is not set | ||
| 260 | CONFIG_PREEMPT=y | ||
| 261 | CONFIG_HZ=100 | ||
| 262 | # CONFIG_THUMB2_KERNEL is not set | ||
| 263 | CONFIG_AEABI=y | ||
| 264 | CONFIG_OABI_COMPAT=y | ||
| 265 | # CONFIG_ARCH_SPARSEMEM_DEFAULT is not set | ||
| 266 | # CONFIG_ARCH_SELECT_MEMORY_MODEL is not set | ||
| 267 | # CONFIG_HIGHMEM is not set | ||
| 268 | CONFIG_SELECT_MEMORY_MODEL=y | ||
| 269 | CONFIG_FLATMEM_MANUAL=y | ||
| 270 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
| 271 | # CONFIG_SPARSEMEM_MANUAL is not set | ||
| 272 | CONFIG_FLATMEM=y | ||
| 273 | CONFIG_FLAT_NODE_MEM_MAP=y | ||
| 274 | CONFIG_PAGEFLAGS_EXTENDED=y | ||
| 275 | CONFIG_SPLIT_PTLOCK_CPUS=4 | ||
| 276 | # CONFIG_PHYS_ADDR_T_64BIT is not set | ||
| 277 | CONFIG_ZONE_DMA_FLAG=0 | ||
| 278 | CONFIG_VIRT_TO_BUS=y | ||
| 279 | CONFIG_HAVE_MLOCK=y | ||
| 280 | CONFIG_HAVE_MLOCKED_PAGE_BIT=y | ||
| 281 | # CONFIG_KSM is not set | ||
| 282 | CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 | ||
| 283 | CONFIG_ALIGNMENT_TRAP=y | ||
| 284 | # CONFIG_UACCESS_WITH_MEMCPY is not set | ||
| 285 | |||
| 286 | # | ||
| 287 | # Boot options | ||
| 288 | # | ||
| 289 | CONFIG_ZBOOT_ROM_TEXT=0 | ||
| 290 | CONFIG_ZBOOT_ROM_BSS=0 | ||
| 291 | CONFIG_CMDLINE="root=/dev/ram0 console=ttyAMA2,115200n8" | ||
| 292 | # CONFIG_XIP_KERNEL is not set | ||
| 293 | # CONFIG_KEXEC is not set | ||
| 294 | |||
| 295 | # | ||
| 296 | # CPU Power Management | ||
| 297 | # | ||
| 298 | # CONFIG_CPU_IDLE is not set | ||
| 299 | |||
| 300 | # | ||
| 301 | # Floating point emulation | ||
| 302 | # | ||
| 303 | |||
| 304 | # | ||
| 305 | # At least one emulation must be selected | ||
| 306 | # | ||
| 307 | # CONFIG_FPE_NWFPE is not set | ||
| 308 | # CONFIG_FPE_FASTFPE is not set | ||
| 309 | CONFIG_VFP=y | ||
| 310 | CONFIG_VFPv3=y | ||
| 311 | CONFIG_NEON=y | ||
| 312 | |||
| 313 | # | ||
| 314 | # Userspace binary formats | ||
| 315 | # | ||
| 316 | CONFIG_BINFMT_ELF=y | ||
| 317 | # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set | ||
| 318 | CONFIG_HAVE_AOUT=y | ||
| 319 | # CONFIG_BINFMT_AOUT is not set | ||
| 320 | # CONFIG_BINFMT_MISC is not set | ||
| 321 | |||
| 322 | # | ||
| 323 | # Power management options | ||
| 324 | # | ||
| 325 | # CONFIG_PM is not set | ||
| 326 | CONFIG_ARCH_SUSPEND_POSSIBLE=y | ||
| 327 | # CONFIG_NET is not set | ||
| 328 | |||
| 329 | # | ||
| 330 | # Device Drivers | ||
| 331 | # | ||
| 332 | |||
| 333 | # | ||
| 334 | # Generic Driver Options | ||
| 335 | # | ||
| 336 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||
| 337 | # CONFIG_DEVTMPFS is not set | ||
| 338 | CONFIG_STANDALONE=y | ||
| 339 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
| 340 | CONFIG_FW_LOADER=y | ||
| 341 | CONFIG_FIRMWARE_IN_KERNEL=y | ||
| 342 | CONFIG_EXTRA_FIRMWARE="" | ||
| 343 | # CONFIG_DEBUG_DRIVER is not set | ||
| 344 | # CONFIG_DEBUG_DEVRES is not set | ||
| 345 | # CONFIG_SYS_HYPERVISOR is not set | ||
| 346 | # CONFIG_MTD is not set | ||
| 347 | # CONFIG_PARPORT is not set | ||
| 348 | CONFIG_BLK_DEV=y | ||
| 349 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
| 350 | # CONFIG_BLK_DEV_LOOP is not set | ||
| 351 | CONFIG_BLK_DEV_RAM=y | ||
| 352 | CONFIG_BLK_DEV_RAM_COUNT=16 | ||
| 353 | CONFIG_BLK_DEV_RAM_SIZE=65536 | ||
| 354 | # CONFIG_BLK_DEV_XIP is not set | ||
| 355 | # CONFIG_CDROM_PKTCDVD is not set | ||
| 356 | # CONFIG_MISC_DEVICES is not set | ||
| 357 | CONFIG_HAVE_IDE=y | ||
| 358 | # CONFIG_IDE is not set | ||
| 359 | |||
| 360 | # | ||
| 361 | # SCSI device support | ||
| 362 | # | ||
| 363 | # CONFIG_RAID_ATTRS is not set | ||
| 364 | # CONFIG_SCSI is not set | ||
| 365 | # CONFIG_SCSI_DMA is not set | ||
| 366 | # CONFIG_SCSI_NETLINK is not set | ||
| 367 | # CONFIG_ATA is not set | ||
| 368 | # CONFIG_MD is not set | ||
| 369 | # CONFIG_PHONE is not set | ||
| 370 | |||
| 371 | # | ||
| 372 | # Input device support | ||
| 373 | # | ||
| 374 | CONFIG_INPUT=y | ||
| 375 | # CONFIG_INPUT_FF_MEMLESS is not set | ||
| 376 | # CONFIG_INPUT_POLLDEV is not set | ||
| 377 | |||
| 378 | # | ||
| 379 | # Userland interfaces | ||
| 380 | # | ||
| 381 | CONFIG_INPUT_MOUSEDEV=y | ||
| 382 | # CONFIG_INPUT_MOUSEDEV_PSAUX is not set | ||
| 383 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 | ||
| 384 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | ||
| 385 | # CONFIG_INPUT_JOYDEV is not set | ||
| 386 | CONFIG_INPUT_EVDEV=y | ||
| 387 | # CONFIG_INPUT_EVBUG is not set | ||
| 388 | |||
| 389 | # | ||
| 390 | # Input Device Drivers | ||
| 391 | # | ||
| 392 | # CONFIG_INPUT_KEYBOARD is not set | ||
| 393 | # CONFIG_INPUT_MOUSE is not set | ||
| 394 | # CONFIG_INPUT_JOYSTICK is not set | ||
| 395 | # CONFIG_INPUT_TABLET is not set | ||
| 396 | # CONFIG_INPUT_TOUCHSCREEN is not set | ||
| 397 | # CONFIG_INPUT_MISC is not set | ||
| 398 | |||
| 399 | # | ||
| 400 | # Hardware I/O ports | ||
| 401 | # | ||
| 402 | # CONFIG_SERIO is not set | ||
| 403 | # CONFIG_GAMEPORT is not set | ||
| 404 | |||
| 405 | # | ||
| 406 | # Character devices | ||
| 407 | # | ||
| 408 | CONFIG_VT=y | ||
| 409 | CONFIG_CONSOLE_TRANSLATIONS=y | ||
| 410 | CONFIG_VT_CONSOLE=y | ||
| 411 | CONFIG_HW_CONSOLE=y | ||
| 412 | CONFIG_VT_HW_CONSOLE_BINDING=y | ||
| 413 | CONFIG_DEVKMEM=y | ||
| 414 | # CONFIG_SERIAL_NONSTANDARD is not set | ||
| 415 | |||
| 416 | # | ||
| 417 | # Serial drivers | ||
| 418 | # | ||
| 419 | # CONFIG_SERIAL_8250 is not set | ||
| 420 | |||
| 421 | # | ||
| 422 | # Non-8250 serial port support | ||
| 423 | # | ||
| 424 | # CONFIG_SERIAL_AMBA_PL010 is not set | ||
| 425 | CONFIG_SERIAL_AMBA_PL011=y | ||
| 426 | CONFIG_SERIAL_AMBA_PL011_CONSOLE=y | ||
| 427 | # CONFIG_SERIAL_MAX3100 is not set | ||
| 428 | CONFIG_SERIAL_CORE=y | ||
| 429 | CONFIG_SERIAL_CORE_CONSOLE=y | ||
| 430 | CONFIG_UNIX98_PTYS=y | ||
| 431 | # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set | ||
| 432 | # CONFIG_LEGACY_PTYS is not set | ||
| 433 | # CONFIG_IPMI_HANDLER is not set | ||
| 434 | # CONFIG_HW_RANDOM is not set | ||
| 435 | # CONFIG_R3964 is not set | ||
| 436 | # CONFIG_RAW_DRIVER is not set | ||
| 437 | # CONFIG_TCG_TPM is not set | ||
| 438 | # CONFIG_I2C is not set | ||
| 439 | CONFIG_SPI=y | ||
| 440 | # CONFIG_SPI_DEBUG is not set | ||
| 441 | CONFIG_SPI_MASTER=y | ||
| 442 | |||
| 443 | # | ||
| 444 | # SPI Master Controller Drivers | ||
| 445 | # | ||
| 446 | # CONFIG_SPI_BITBANG is not set | ||
| 447 | CONFIG_SPI_PL022=y | ||
| 448 | |||
| 449 | # | ||
| 450 | # SPI Protocol Masters | ||
| 451 | # | ||
| 452 | # CONFIG_SPI_SPIDEV is not set | ||
| 453 | # CONFIG_SPI_TLE62X0 is not set | ||
| 454 | |||
| 455 | # | ||
| 456 | # PPS support | ||
| 457 | # | ||
| 458 | # CONFIG_PPS is not set | ||
| 459 | # CONFIG_W1 is not set | ||
| 460 | # CONFIG_POWER_SUPPLY is not set | ||
| 461 | # CONFIG_HWMON is not set | ||
| 462 | # CONFIG_THERMAL is not set | ||
| 463 | # CONFIG_WATCHDOG is not set | ||
| 464 | CONFIG_SSB_POSSIBLE=y | ||
| 465 | |||
| 466 | # | ||
| 467 | # Sonics Silicon Backplane | ||
| 468 | # | ||
| 469 | # CONFIG_SSB is not set | ||
| 470 | |||
| 471 | # | ||
| 472 | # Multifunction device drivers | ||
| 473 | # | ||
| 474 | # CONFIG_MFD_CORE is not set | ||
| 475 | # CONFIG_MFD_SM501 is not set | ||
| 476 | # CONFIG_HTC_PASIC3 is not set | ||
| 477 | # CONFIG_MFD_TMIO is not set | ||
| 478 | # CONFIG_MFD_MC13783 is not set | ||
| 479 | # CONFIG_EZX_PCAP is not set | ||
| 480 | # CONFIG_REGULATOR is not set | ||
| 481 | # CONFIG_MEDIA_SUPPORT is not set | ||
| 482 | |||
| 483 | # | ||
| 484 | # Graphics support | ||
| 485 | # | ||
| 486 | # CONFIG_VGASTATE is not set | ||
| 487 | # CONFIG_VIDEO_OUTPUT_CONTROL is not set | ||
| 488 | # CONFIG_FB is not set | ||
| 489 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | ||
| 490 | |||
| 491 | # | ||
| 492 | # Display device support | ||
| 493 | # | ||
| 494 | # CONFIG_DISPLAY_SUPPORT is not set | ||
| 495 | |||
| 496 | # | ||
| 497 | # Console display driver support | ||
| 498 | # | ||
| 499 | # CONFIG_VGA_CONSOLE is not set | ||
| 500 | CONFIG_DUMMY_CONSOLE=y | ||
| 501 | # CONFIG_SOUND is not set | ||
| 502 | # CONFIG_HID_SUPPORT is not set | ||
| 503 | # CONFIG_USB_SUPPORT is not set | ||
| 504 | # CONFIG_MMC is not set | ||
| 505 | # CONFIG_MEMSTICK is not set | ||
| 506 | # CONFIG_NEW_LEDS is not set | ||
| 507 | # CONFIG_ACCESSIBILITY is not set | ||
| 508 | CONFIG_RTC_LIB=y | ||
| 509 | # CONFIG_RTC_CLASS is not set | ||
| 510 | # CONFIG_DMADEVICES is not set | ||
| 511 | # CONFIG_AUXDISPLAY is not set | ||
| 512 | # CONFIG_UIO is not set | ||
| 513 | |||
| 514 | # | ||
| 515 | # TI VLYNQ | ||
| 516 | # | ||
| 517 | # CONFIG_STAGING is not set | ||
| 518 | |||
| 519 | # | ||
| 520 | # File systems | ||
| 521 | # | ||
| 522 | CONFIG_EXT2_FS=y | ||
| 523 | CONFIG_EXT2_FS_XATTR=y | ||
| 524 | CONFIG_EXT2_FS_POSIX_ACL=y | ||
| 525 | CONFIG_EXT2_FS_SECURITY=y | ||
| 526 | # CONFIG_EXT2_FS_XIP is not set | ||
| 527 | # CONFIG_EXT3_FS is not set | ||
| 528 | # CONFIG_EXT4_FS is not set | ||
| 529 | CONFIG_FS_MBCACHE=y | ||
| 530 | # CONFIG_REISERFS_FS is not set | ||
| 531 | # CONFIG_JFS_FS is not set | ||
| 532 | CONFIG_FS_POSIX_ACL=y | ||
| 533 | # CONFIG_XFS_FS is not set | ||
| 534 | # CONFIG_BTRFS_FS is not set | ||
| 535 | # CONFIG_NILFS2_FS is not set | ||
| 536 | CONFIG_FILE_LOCKING=y | ||
| 537 | CONFIG_FSNOTIFY=y | ||
| 538 | CONFIG_DNOTIFY=y | ||
| 539 | CONFIG_INOTIFY=y | ||
| 540 | CONFIG_INOTIFY_USER=y | ||
| 541 | # CONFIG_QUOTA is not set | ||
| 542 | # CONFIG_AUTOFS_FS is not set | ||
| 543 | # CONFIG_AUTOFS4_FS is not set | ||
| 544 | # CONFIG_FUSE_FS is not set | ||
| 545 | CONFIG_GENERIC_ACL=y | ||
| 546 | |||
| 547 | # | ||
| 548 | # Caches | ||
| 549 | # | ||
| 550 | # CONFIG_FSCACHE is not set | ||
| 551 | |||
| 552 | # | ||
| 553 | # CD-ROM/DVD Filesystems | ||
| 554 | # | ||
| 555 | # CONFIG_ISO9660_FS is not set | ||
| 556 | # CONFIG_UDF_FS is not set | ||
| 557 | |||
| 558 | # | ||
| 559 | # DOS/FAT/NT Filesystems | ||
| 560 | # | ||
| 561 | # CONFIG_MSDOS_FS is not set | ||
| 562 | # CONFIG_VFAT_FS is not set | ||
| 563 | # CONFIG_NTFS_FS is not set | ||
| 564 | |||
| 565 | # | ||
| 566 | # Pseudo filesystems | ||
| 567 | # | ||
| 568 | CONFIG_PROC_FS=y | ||
| 569 | CONFIG_PROC_SYSCTL=y | ||
| 570 | CONFIG_PROC_PAGE_MONITOR=y | ||
| 571 | CONFIG_SYSFS=y | ||
| 572 | CONFIG_TMPFS=y | ||
| 573 | CONFIG_TMPFS_POSIX_ACL=y | ||
| 574 | # CONFIG_HUGETLB_PAGE is not set | ||
| 575 | CONFIG_CONFIGFS_FS=m | ||
| 576 | # CONFIG_MISC_FILESYSTEMS is not set | ||
| 577 | |||
| 578 | # | ||
| 579 | # Partition Types | ||
| 580 | # | ||
| 581 | # CONFIG_PARTITION_ADVANCED is not set | ||
| 582 | CONFIG_MSDOS_PARTITION=y | ||
| 583 | # CONFIG_NLS is not set | ||
| 584 | |||
| 585 | # | ||
| 586 | # Kernel hacking | ||
| 587 | # | ||
| 588 | # CONFIG_PRINTK_TIME is not set | ||
| 589 | CONFIG_ENABLE_WARN_DEPRECATED=y | ||
| 590 | CONFIG_ENABLE_MUST_CHECK=y | ||
| 591 | CONFIG_FRAME_WARN=1024 | ||
| 592 | CONFIG_MAGIC_SYSRQ=y | ||
| 593 | # CONFIG_STRIP_ASM_SYMS is not set | ||
| 594 | # CONFIG_UNUSED_SYMBOLS is not set | ||
| 595 | # CONFIG_DEBUG_FS is not set | ||
| 596 | # CONFIG_HEADERS_CHECK is not set | ||
| 597 | CONFIG_DEBUG_KERNEL=y | ||
| 598 | # CONFIG_DEBUG_SHIRQ is not set | ||
| 599 | CONFIG_DETECT_SOFTLOCKUP=y | ||
| 600 | # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set | ||
| 601 | CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 | ||
| 602 | CONFIG_DETECT_HUNG_TASK=y | ||
| 603 | # CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set | ||
| 604 | CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0 | ||
| 605 | # CONFIG_SCHED_DEBUG is not set | ||
| 606 | # CONFIG_SCHEDSTATS is not set | ||
| 607 | # CONFIG_TIMER_STATS is not set | ||
| 608 | # CONFIG_DEBUG_OBJECTS is not set | ||
| 609 | # CONFIG_SLUB_DEBUG_ON is not set | ||
| 610 | # CONFIG_SLUB_STATS is not set | ||
| 611 | # CONFIG_DEBUG_KMEMLEAK is not set | ||
| 612 | # CONFIG_DEBUG_PREEMPT is not set | ||
| 613 | # CONFIG_DEBUG_RT_MUTEXES is not set | ||
| 614 | # CONFIG_RT_MUTEX_TESTER is not set | ||
| 615 | # CONFIG_DEBUG_SPINLOCK is not set | ||
| 616 | # CONFIG_DEBUG_MUTEXES is not set | ||
| 617 | # CONFIG_DEBUG_LOCK_ALLOC is not set | ||
| 618 | # CONFIG_PROVE_LOCKING is not set | ||
| 619 | # CONFIG_LOCK_STAT is not set | ||
| 620 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | ||
| 621 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | ||
| 622 | # CONFIG_DEBUG_KOBJECT is not set | ||
| 623 | CONFIG_DEBUG_BUGVERBOSE=y | ||
| 624 | CONFIG_DEBUG_INFO=y | ||
| 625 | # CONFIG_DEBUG_VM is not set | ||
| 626 | # CONFIG_DEBUG_WRITECOUNT is not set | ||
| 627 | CONFIG_DEBUG_MEMORY_INIT=y | ||
| 628 | # CONFIG_DEBUG_LIST is not set | ||
| 629 | # CONFIG_DEBUG_SG is not set | ||
| 630 | # CONFIG_DEBUG_NOTIFIERS is not set | ||
| 631 | # CONFIG_DEBUG_CREDENTIALS is not set | ||
| 632 | # CONFIG_BOOT_PRINTK_DELAY is not set | ||
| 633 | # CONFIG_RCU_TORTURE_TEST is not set | ||
| 634 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | ||
| 635 | # CONFIG_BACKTRACE_SELF_TEST is not set | ||
| 636 | # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set | ||
| 637 | # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set | ||
| 638 | # CONFIG_FAULT_INJECTION is not set | ||
| 639 | # CONFIG_SYSCTL_SYSCALL_CHECK is not set | ||
| 640 | # CONFIG_PAGE_POISONING is not set | ||
| 641 | CONFIG_HAVE_FUNCTION_TRACER=y | ||
| 642 | CONFIG_TRACING_SUPPORT=y | ||
| 643 | # CONFIG_FTRACE is not set | ||
| 644 | # CONFIG_SAMPLES is not set | ||
| 645 | CONFIG_HAVE_ARCH_KGDB=y | ||
| 646 | # CONFIG_KGDB is not set | ||
| 647 | CONFIG_ARM_UNWIND=y | ||
| 648 | CONFIG_DEBUG_USER=y | ||
| 649 | CONFIG_DEBUG_ERRORS=y | ||
| 650 | # CONFIG_DEBUG_STACK_USAGE is not set | ||
| 651 | # CONFIG_DEBUG_LL is not set | ||
| 652 | |||
| 653 | # | ||
| 654 | # Security options | ||
| 655 | # | ||
| 656 | # CONFIG_KEYS is not set | ||
| 657 | # CONFIG_SECURITY is not set | ||
| 658 | # CONFIG_SECURITYFS is not set | ||
| 659 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set | ||
| 660 | # CONFIG_CRYPTO is not set | ||
| 661 | # CONFIG_BINARY_PRINTF is not set | ||
| 662 | |||
| 663 | # | ||
| 664 | # Library routines | ||
| 665 | # | ||
| 666 | CONFIG_GENERIC_FIND_LAST_BIT=y | ||
| 667 | # CONFIG_CRC_CCITT is not set | ||
| 668 | # CONFIG_CRC16 is not set | ||
| 669 | CONFIG_CRC_T10DIF=m | ||
| 670 | # CONFIG_CRC_ITU_T is not set | ||
| 671 | # CONFIG_CRC32 is not set | ||
| 672 | # CONFIG_CRC7 is not set | ||
| 673 | # CONFIG_LIBCRC32C is not set | ||
| 674 | CONFIG_ZLIB_INFLATE=y | ||
| 675 | CONFIG_DECOMPRESS_GZIP=y | ||
| 676 | CONFIG_DECOMPRESS_BZIP2=y | ||
| 677 | CONFIG_DECOMPRESS_LZMA=y | ||
| 678 | CONFIG_HAS_IOMEM=y | ||
| 679 | CONFIG_HAS_IOPORT=y | ||
| 680 | CONFIG_HAS_DMA=y | ||
| diff --git a/arch/arm/include/asm/cacheflush.h b/arch/arm/include/asm/cacheflush.h index 3d0cdd21b882..9fd6d3ab68c0 100644 --- a/arch/arm/include/asm/cacheflush.h +++ b/arch/arm/include/asm/cacheflush.h | |||
| @@ -331,15 +331,15 @@ static inline void outer_flush_range(unsigned long start, unsigned long end) | |||
| 331 | * Convert calls to our calling convention. | 331 | * Convert calls to our calling convention. | 
| 332 | */ | 332 | */ | 
| 333 | #define flush_cache_all() __cpuc_flush_kern_all() | 333 | #define flush_cache_all() __cpuc_flush_kern_all() | 
| 334 | #ifndef CONFIG_CPU_CACHE_VIPT | 334 | |
| 335 | static inline void flush_cache_mm(struct mm_struct *mm) | 335 | static inline void vivt_flush_cache_mm(struct mm_struct *mm) | 
| 336 | { | 336 | { | 
| 337 | if (cpumask_test_cpu(smp_processor_id(), mm_cpumask(mm))) | 337 | if (cpumask_test_cpu(smp_processor_id(), mm_cpumask(mm))) | 
| 338 | __cpuc_flush_user_all(); | 338 | __cpuc_flush_user_all(); | 
| 339 | } | 339 | } | 
| 340 | 340 | ||
| 341 | static inline void | 341 | static inline void | 
| 342 | flush_cache_range(struct vm_area_struct *vma, unsigned long start, unsigned long end) | 342 | vivt_flush_cache_range(struct vm_area_struct *vma, unsigned long start, unsigned long end) | 
| 343 | { | 343 | { | 
| 344 | if (cpumask_test_cpu(smp_processor_id(), mm_cpumask(vma->vm_mm))) | 344 | if (cpumask_test_cpu(smp_processor_id(), mm_cpumask(vma->vm_mm))) | 
| 345 | __cpuc_flush_user_range(start & PAGE_MASK, PAGE_ALIGN(end), | 345 | __cpuc_flush_user_range(start & PAGE_MASK, PAGE_ALIGN(end), | 
| @@ -347,7 +347,7 @@ flush_cache_range(struct vm_area_struct *vma, unsigned long start, unsigned long | |||
| 347 | } | 347 | } | 
| 348 | 348 | ||
| 349 | static inline void | 349 | static inline void | 
| 350 | flush_cache_page(struct vm_area_struct *vma, unsigned long user_addr, unsigned long pfn) | 350 | vivt_flush_cache_page(struct vm_area_struct *vma, unsigned long user_addr, unsigned long pfn) | 
| 351 | { | 351 | { | 
| 352 | if (cpumask_test_cpu(smp_processor_id(), mm_cpumask(vma->vm_mm))) { | 352 | if (cpumask_test_cpu(smp_processor_id(), mm_cpumask(vma->vm_mm))) { | 
| 353 | unsigned long addr = user_addr & PAGE_MASK; | 353 | unsigned long addr = user_addr & PAGE_MASK; | 
| @@ -356,7 +356,7 @@ flush_cache_page(struct vm_area_struct *vma, unsigned long user_addr, unsigned l | |||
| 356 | } | 356 | } | 
| 357 | 357 | ||
| 358 | static inline void | 358 | static inline void | 
| 359 | flush_ptrace_access(struct vm_area_struct *vma, struct page *page, | 359 | vivt_flush_ptrace_access(struct vm_area_struct *vma, struct page *page, | 
| 360 | unsigned long uaddr, void *kaddr, | 360 | unsigned long uaddr, void *kaddr, | 
| 361 | unsigned long len, int write) | 361 | unsigned long len, int write) | 
| 362 | { | 362 | { | 
| @@ -365,6 +365,16 @@ flush_ptrace_access(struct vm_area_struct *vma, struct page *page, | |||
| 365 | __cpuc_coherent_kern_range(addr, addr + len); | 365 | __cpuc_coherent_kern_range(addr, addr + len); | 
| 366 | } | 366 | } | 
| 367 | } | 367 | } | 
| 368 | |||
| 369 | #ifndef CONFIG_CPU_CACHE_VIPT | ||
| 370 | #define flush_cache_mm(mm) \ | ||
| 371 | vivt_flush_cache_mm(mm) | ||
| 372 | #define flush_cache_range(vma,start,end) \ | ||
| 373 | vivt_flush_cache_range(vma,start,end) | ||
| 374 | #define flush_cache_page(vma,addr,pfn) \ | ||
| 375 | vivt_flush_cache_page(vma,addr,pfn) | ||
| 376 | #define flush_ptrace_access(vma,page,ua,ka,len,write) \ | ||
| 377 | vivt_flush_ptrace_access(vma,page,ua,ka,len,write) | ||
| 368 | #else | 378 | #else | 
| 369 | extern void flush_cache_mm(struct mm_struct *mm); | 379 | extern void flush_cache_mm(struct mm_struct *mm); | 
| 370 | extern void flush_cache_range(struct vm_area_struct *vma, unsigned long start, unsigned long end); | 380 | extern void flush_cache_range(struct vm_area_struct *vma, unsigned long start, unsigned long end); | 
| @@ -410,8 +420,6 @@ extern void flush_ptrace_access(struct vm_area_struct *vma, struct page *page, | |||
| 410 | */ | 420 | */ | 
| 411 | extern void flush_dcache_page(struct page *); | 421 | extern void flush_dcache_page(struct page *); | 
| 412 | 422 | ||
| 413 | extern void __flush_dcache_page(struct address_space *mapping, struct page *page); | ||
| 414 | |||
| 415 | static inline void __flush_icache_all(void) | 423 | static inline void __flush_icache_all(void) | 
| 416 | { | 424 | { | 
| 417 | #ifdef CONFIG_ARM_ERRATA_411920 | 425 | #ifdef CONFIG_ARM_ERRATA_411920 | 
| diff --git a/arch/arm/include/asm/dma-mapping.h b/arch/arm/include/asm/dma-mapping.h index ff46dfa68a97..a96300bf83fd 100644 --- a/arch/arm/include/asm/dma-mapping.h +++ b/arch/arm/include/asm/dma-mapping.h | |||
| @@ -15,20 +15,15 @@ | |||
| 15 | * must not be used by drivers. | 15 | * must not be used by drivers. | 
| 16 | */ | 16 | */ | 
| 17 | #ifndef __arch_page_to_dma | 17 | #ifndef __arch_page_to_dma | 
| 18 | |||
| 19 | #if !defined(CONFIG_HIGHMEM) | ||
| 20 | static inline dma_addr_t page_to_dma(struct device *dev, struct page *page) | 18 | static inline dma_addr_t page_to_dma(struct device *dev, struct page *page) | 
| 21 | { | 19 | { | 
| 22 | return (dma_addr_t)__virt_to_bus((unsigned long)page_address(page)); | 20 | return (dma_addr_t)__pfn_to_bus(page_to_pfn(page)); | 
| 23 | } | 21 | } | 
| 24 | #elif defined(__pfn_to_bus) | 22 | |
| 25 | static inline dma_addr_t page_to_dma(struct device *dev, struct page *page) | 23 | static inline struct page *dma_to_page(struct device *dev, dma_addr_t addr) | 
| 26 | { | 24 | { | 
| 27 | return (dma_addr_t)__pfn_to_bus(page_to_pfn(page)); | 25 | return pfn_to_page(__bus_to_pfn(addr)); | 
| 28 | } | 26 | } | 
| 29 | #else | ||
| 30 | #error "this machine class needs to define __arch_page_to_dma to use HIGHMEM" | ||
| 31 | #endif | ||
| 32 | 27 | ||
| 33 | static inline void *dma_to_virt(struct device *dev, dma_addr_t addr) | 28 | static inline void *dma_to_virt(struct device *dev, dma_addr_t addr) | 
| 34 | { | 29 | { | 
| @@ -45,6 +40,11 @@ static inline dma_addr_t page_to_dma(struct device *dev, struct page *page) | |||
| 45 | return __arch_page_to_dma(dev, page); | 40 | return __arch_page_to_dma(dev, page); | 
| 46 | } | 41 | } | 
| 47 | 42 | ||
| 43 | static inline struct page *dma_to_page(struct device *dev, dma_addr_t addr) | ||
| 44 | { | ||
| 45 | return __arch_dma_to_page(dev, addr); | ||
| 46 | } | ||
| 47 | |||
| 48 | static inline void *dma_to_virt(struct device *dev, dma_addr_t addr) | 48 | static inline void *dma_to_virt(struct device *dev, dma_addr_t addr) | 
| 49 | { | 49 | { | 
| 50 | return __arch_dma_to_virt(dev, addr); | 50 | return __arch_dma_to_virt(dev, addr); | 
| @@ -257,9 +257,11 @@ extern int dma_needs_bounce(struct device*, dma_addr_t, size_t); | |||
| 257 | */ | 257 | */ | 
| 258 | extern dma_addr_t dma_map_single(struct device *, void *, size_t, | 258 | extern dma_addr_t dma_map_single(struct device *, void *, size_t, | 
| 259 | enum dma_data_direction); | 259 | enum dma_data_direction); | 
| 260 | extern void dma_unmap_single(struct device *, dma_addr_t, size_t, | ||
| 261 | enum dma_data_direction); | ||
| 260 | extern dma_addr_t dma_map_page(struct device *, struct page *, | 262 | extern dma_addr_t dma_map_page(struct device *, struct page *, | 
| 261 | unsigned long, size_t, enum dma_data_direction); | 263 | unsigned long, size_t, enum dma_data_direction); | 
| 262 | extern void dma_unmap_single(struct device *, dma_addr_t, size_t, | 264 | extern void dma_unmap_page(struct device *, dma_addr_t, size_t, | 
| 263 | enum dma_data_direction); | 265 | enum dma_data_direction); | 
| 264 | 266 | ||
| 265 | /* | 267 | /* | 
| @@ -352,7 +354,6 @@ static inline void dma_unmap_single(struct device *dev, dma_addr_t handle, | |||
| 352 | { | 354 | { | 
| 353 | /* nothing to do */ | 355 | /* nothing to do */ | 
| 354 | } | 356 | } | 
| 355 | #endif /* CONFIG_DMABOUNCE */ | ||
| 356 | 357 | ||
| 357 | /** | 358 | /** | 
| 358 | * dma_unmap_page - unmap a buffer previously mapped through dma_map_page() | 359 | * dma_unmap_page - unmap a buffer previously mapped through dma_map_page() | 
| @@ -371,8 +372,9 @@ static inline void dma_unmap_single(struct device *dev, dma_addr_t handle, | |||
| 371 | static inline void dma_unmap_page(struct device *dev, dma_addr_t handle, | 372 | static inline void dma_unmap_page(struct device *dev, dma_addr_t handle, | 
| 372 | size_t size, enum dma_data_direction dir) | 373 | size_t size, enum dma_data_direction dir) | 
| 373 | { | 374 | { | 
| 374 | dma_unmap_single(dev, handle, size, dir); | 375 | /* nothing to do */ | 
| 375 | } | 376 | } | 
| 377 | #endif /* CONFIG_DMABOUNCE */ | ||
| 376 | 378 | ||
| 377 | /** | 379 | /** | 
| 378 | * dma_sync_single_range_for_cpu | 380 | * dma_sync_single_range_for_cpu | 
| diff --git a/arch/arm/include/asm/memory.h b/arch/arm/include/asm/memory.h index cefedf062138..5421d82a2572 100644 --- a/arch/arm/include/asm/memory.h +++ b/arch/arm/include/asm/memory.h | |||
| @@ -125,8 +125,10 @@ | |||
| 125 | * private definitions which should NOT be used outside memory.h | 125 | * private definitions which should NOT be used outside memory.h | 
| 126 | * files. Use virt_to_phys/phys_to_virt/__pa/__va instead. | 126 | * files. Use virt_to_phys/phys_to_virt/__pa/__va instead. | 
| 127 | */ | 127 | */ | 
| 128 | #ifndef __virt_to_phys | ||
| 128 | #define __virt_to_phys(x) ((x) - PAGE_OFFSET + PHYS_OFFSET) | 129 | #define __virt_to_phys(x) ((x) - PAGE_OFFSET + PHYS_OFFSET) | 
| 129 | #define __phys_to_virt(x) ((x) - PHYS_OFFSET + PAGE_OFFSET) | 130 | #define __phys_to_virt(x) ((x) - PHYS_OFFSET + PAGE_OFFSET) | 
| 131 | #endif | ||
| 130 | 132 | ||
| 131 | /* | 133 | /* | 
| 132 | * Convert a physical address to a Page Frame Number and back | 134 | * Convert a physical address to a Page Frame Number and back | 
| @@ -134,6 +136,12 @@ | |||
| 134 | #define __phys_to_pfn(paddr) ((paddr) >> PAGE_SHIFT) | 136 | #define __phys_to_pfn(paddr) ((paddr) >> PAGE_SHIFT) | 
| 135 | #define __pfn_to_phys(pfn) ((pfn) << PAGE_SHIFT) | 137 | #define __pfn_to_phys(pfn) ((pfn) << PAGE_SHIFT) | 
| 136 | 138 | ||
| 139 | /* | ||
| 140 | * Convert a page to/from a physical address | ||
| 141 | */ | ||
| 142 | #define page_to_phys(page) (__pfn_to_phys(page_to_pfn(page))) | ||
| 143 | #define phys_to_page(phys) (pfn_to_page(__phys_to_pfn(phys))) | ||
| 144 | |||
| 137 | #ifndef __ASSEMBLY__ | 145 | #ifndef __ASSEMBLY__ | 
| 138 | 146 | ||
| 139 | /* | 147 | /* | 
| @@ -194,7 +202,8 @@ static inline void *phys_to_virt(unsigned long x) | |||
| 194 | #ifndef __virt_to_bus | 202 | #ifndef __virt_to_bus | 
| 195 | #define __virt_to_bus __virt_to_phys | 203 | #define __virt_to_bus __virt_to_phys | 
| 196 | #define __bus_to_virt __phys_to_virt | 204 | #define __bus_to_virt __phys_to_virt | 
| 197 | #define __pfn_to_bus(x) ((x) << PAGE_SHIFT) | 205 | #define __pfn_to_bus(x) __pfn_to_phys(x) | 
| 206 | #define __bus_to_pfn(x) __phys_to_pfn(x) | ||
| 198 | #endif | 207 | #endif | 
| 199 | 208 | ||
| 200 | static inline __deprecated unsigned long virt_to_bus(void *x) | 209 | static inline __deprecated unsigned long virt_to_bus(void *x) | 
| @@ -293,11 +302,6 @@ static inline __deprecated void *bus_to_virt(unsigned long x) | |||
| 293 | #endif /* !CONFIG_DISCONTIGMEM */ | 302 | #endif /* !CONFIG_DISCONTIGMEM */ | 
| 294 | 303 | ||
| 295 | /* | 304 | /* | 
| 296 | * For BIO. "will die". Kill me when bio_to_phys() and bvec_to_phys() die. | ||
| 297 | */ | ||
| 298 | #define page_to_phys(page) (page_to_pfn(page) << PAGE_SHIFT) | ||
| 299 | |||
| 300 | /* | ||
| 301 | * Optional coherency support. Currently used only by selected | 305 | * Optional coherency support. Currently used only by selected | 
| 302 | * Intel XSC3-based systems. | 306 | * Intel XSC3-based systems. | 
| 303 | */ | 307 | */ | 
| diff --git a/arch/arm/include/asm/pgtable.h b/arch/arm/include/asm/pgtable.h index 201ccaa11f61..11397687f42c 100644 --- a/arch/arm/include/asm/pgtable.h +++ b/arch/arm/include/asm/pgtable.h | |||
| @@ -304,13 +304,23 @@ PTE_BIT_FUNC(mkyoung, |= L_PTE_YOUNG); | |||
| 304 | 304 | ||
| 305 | static inline pte_t pte_mkspecial(pte_t pte) { return pte; } | 305 | static inline pte_t pte_mkspecial(pte_t pte) { return pte; } | 
| 306 | 306 | ||
| 307 | #define __pgprot_modify(prot,mask,bits) \ | ||
| 308 | __pgprot((pgprot_val(prot) & ~(mask)) | (bits)) | ||
| 309 | |||
| 307 | /* | 310 | /* | 
| 308 | * Mark the prot value as uncacheable and unbufferable. | 311 | * Mark the prot value as uncacheable and unbufferable. | 
| 309 | */ | 312 | */ | 
| 310 | #define pgprot_noncached(prot) \ | 313 | #define pgprot_noncached(prot) \ | 
| 311 | __pgprot((pgprot_val(prot) & ~L_PTE_MT_MASK) | L_PTE_MT_UNCACHED) | 314 | __pgprot_modify(prot, L_PTE_MT_MASK, L_PTE_MT_UNCACHED) | 
| 312 | #define pgprot_writecombine(prot) \ | 315 | #define pgprot_writecombine(prot) \ | 
| 313 | __pgprot((pgprot_val(prot) & ~L_PTE_MT_MASK) | L_PTE_MT_BUFFERABLE) | 316 | __pgprot_modify(prot, L_PTE_MT_MASK, L_PTE_MT_BUFFERABLE) | 
| 317 | #if __LINUX_ARM_ARCH__ >= 7 | ||
| 318 | #define pgprot_dmacoherent(prot) \ | ||
| 319 | __pgprot_modify(prot, L_PTE_MT_MASK|L_PTE_EXEC, L_PTE_MT_BUFFERABLE) | ||
| 320 | #else | ||
| 321 | #define pgprot_dmacoherent(prot) \ | ||
| 322 | __pgprot_modify(prot, L_PTE_MT_MASK|L_PTE_EXEC, L_PTE_MT_UNCACHED) | ||
| 323 | #endif | ||
| 314 | 324 | ||
| 315 | #define pmd_none(pmd) (!pmd_val(pmd)) | 325 | #define pmd_none(pmd) (!pmd_val(pmd)) | 
| 316 | #define pmd_present(pmd) (pmd_val(pmd)) | 326 | #define pmd_present(pmd) (pmd_val(pmd)) | 
| diff --git a/arch/arm/include/asm/swab.h b/arch/arm/include/asm/swab.h index ca2bf2f6d6ea..9997ad20eff1 100644 --- a/arch/arm/include/asm/swab.h +++ b/arch/arm/include/asm/swab.h | |||
| @@ -22,6 +22,24 @@ | |||
| 22 | # define __SWAB_64_THRU_32__ | 22 | # define __SWAB_64_THRU_32__ | 
| 23 | #endif | 23 | #endif | 
| 24 | 24 | ||
| 25 | #if defined(__KERNEL__) && __LINUX_ARM_ARCH__ >= 6 | ||
| 26 | |||
| 27 | static inline __attribute_const__ __u16 __arch_swab16(__u16 x) | ||
| 28 | { | ||
| 29 | __asm__ ("rev16 %0, %1" : "=r" (x) : "r" (x)); | ||
| 30 | return x; | ||
| 31 | } | ||
| 32 | #define __arch_swab16 __arch_swab16 | ||
| 33 | |||
| 34 | static inline __attribute_const__ __u32 __arch_swab32(__u32 x) | ||
| 35 | { | ||
| 36 | __asm__ ("rev %0, %1" : "=r" (x) : "r" (x)); | ||
| 37 | return x; | ||
| 38 | } | ||
| 39 | #define __arch_swab32 __arch_swab32 | ||
| 40 | |||
| 41 | #else | ||
| 42 | |||
| 25 | static inline __attribute_const__ __u32 __arch_swab32(__u32 x) | 43 | static inline __attribute_const__ __u32 __arch_swab32(__u32 x) | 
| 26 | { | 44 | { | 
| 27 | __u32 t; | 45 | __u32 t; | 
| @@ -48,3 +66,4 @@ static inline __attribute_const__ __u32 __arch_swab32(__u32 x) | |||
| 48 | 66 | ||
| 49 | #endif | 67 | #endif | 
| 50 | 68 | ||
| 69 | #endif | ||
| diff --git a/arch/arm/include/asm/system.h b/arch/arm/include/asm/system.h index d65b2f5bf41f..058e7e90881d 100644 --- a/arch/arm/include/asm/system.h +++ b/arch/arm/include/asm/system.h | |||
| @@ -138,21 +138,26 @@ extern unsigned int user_debug; | |||
| 138 | #define dmb() __asm__ __volatile__ ("" : : : "memory") | 138 | #define dmb() __asm__ __volatile__ ("" : : : "memory") | 
| 139 | #endif | 139 | #endif | 
| 140 | 140 | ||
| 141 | #ifndef CONFIG_SMP | 141 | #if __LINUX_ARM_ARCH__ >= 7 || defined(CONFIG_SMP) | 
| 142 | #define mb() dmb() | ||
| 143 | #define rmb() dmb() | ||
| 144 | #define wmb() dmb() | ||
| 145 | #else | ||
| 142 | #define mb() do { if (arch_is_coherent()) dmb(); else barrier(); } while (0) | 146 | #define mb() do { if (arch_is_coherent()) dmb(); else barrier(); } while (0) | 
| 143 | #define rmb() do { if (arch_is_coherent()) dmb(); else barrier(); } while (0) | 147 | #define rmb() do { if (arch_is_coherent()) dmb(); else barrier(); } while (0) | 
| 144 | #define wmb() do { if (arch_is_coherent()) dmb(); else barrier(); } while (0) | 148 | #define wmb() do { if (arch_is_coherent()) dmb(); else barrier(); } while (0) | 
| 149 | #endif | ||
| 150 | |||
| 151 | #ifndef CONFIG_SMP | ||
| 145 | #define smp_mb() barrier() | 152 | #define smp_mb() barrier() | 
| 146 | #define smp_rmb() barrier() | 153 | #define smp_rmb() barrier() | 
| 147 | #define smp_wmb() barrier() | 154 | #define smp_wmb() barrier() | 
| 148 | #else | 155 | #else | 
| 149 | #define mb() dmb() | 156 | #define smp_mb() mb() | 
| 150 | #define rmb() dmb() | 157 | #define smp_rmb() rmb() | 
| 151 | #define wmb() dmb() | 158 | #define smp_wmb() wmb() | 
| 152 | #define smp_mb() dmb() | ||
| 153 | #define smp_rmb() dmb() | ||
| 154 | #define smp_wmb() dmb() | ||
| 155 | #endif | 159 | #endif | 
| 160 | |||
| 156 | #define read_barrier_depends() do { } while(0) | 161 | #define read_barrier_depends() do { } while(0) | 
| 157 | #define smp_read_barrier_depends() do { } while(0) | 162 | #define smp_read_barrier_depends() do { } while(0) | 
| 158 | 163 | ||
| diff --git a/arch/arm/mach-at91/Kconfig b/arch/arm/mach-at91/Kconfig index 2fd88437348b..c71e39ed092f 100644 --- a/arch/arm/mach-at91/Kconfig +++ b/arch/arm/mach-at91/Kconfig | |||
| @@ -163,6 +163,11 @@ config MACH_CPUAT91 | |||
| 163 | Select this if you are using the Eukrea Electromatique's | 163 | Select this if you are using the Eukrea Electromatique's | 
| 164 | CPUAT91 board <http://www.eukrea.com/>. | 164 | CPUAT91 board <http://www.eukrea.com/>. | 
| 165 | 165 | ||
| 166 | config MACH_ECO920 | ||
| 167 | bool "eco920" | ||
| 168 | help | ||
| 169 | Select this if you are using the eco920 board | ||
| 170 | |||
| 166 | endif | 171 | endif | 
| 167 | 172 | ||
| 168 | # ---------------------------------------------------------- | 173 | # ---------------------------------------------------------- | 
| diff --git a/arch/arm/mach-at91/Makefile b/arch/arm/mach-at91/Makefile index ada440aab0c5..709fbad4a3ee 100644 --- a/arch/arm/mach-at91/Makefile +++ b/arch/arm/mach-at91/Makefile | |||
| @@ -35,6 +35,7 @@ obj-$(CONFIG_MACH_PICOTUX2XX) += board-picotux200.o | |||
| 35 | obj-$(CONFIG_MACH_ECBAT91) += board-ecbat91.o | 35 | obj-$(CONFIG_MACH_ECBAT91) += board-ecbat91.o | 
| 36 | obj-$(CONFIG_MACH_YL9200) += board-yl-9200.o | 36 | obj-$(CONFIG_MACH_YL9200) += board-yl-9200.o | 
| 37 | obj-$(CONFIG_MACH_CPUAT91) += board-cpuat91.o | 37 | obj-$(CONFIG_MACH_CPUAT91) += board-cpuat91.o | 
| 38 | obj-$(CONFIG_MACH_ECO920) += board-eco920.o | ||
| 38 | 39 | ||
| 39 | # AT91SAM9260 board-specific support | 40 | # AT91SAM9260 board-specific support | 
| 40 | obj-$(CONFIG_MACH_AT91SAM9260EK) += board-sam9260ek.o | 41 | obj-$(CONFIG_MACH_AT91SAM9260EK) += board-sam9260ek.o | 
| @@ -77,6 +78,7 @@ obj-y += leds.o | |||
| 77 | # Power Management | 78 | # Power Management | 
| 78 | obj-$(CONFIG_PM) += pm.o | 79 | obj-$(CONFIG_PM) += pm.o | 
| 79 | obj-$(CONFIG_AT91_SLOW_CLOCK) += pm_slowclock.o | 80 | obj-$(CONFIG_AT91_SLOW_CLOCK) += pm_slowclock.o | 
| 81 | obj-$(CONFIG_CPU_IDLE) += cpuidle.o | ||
| 80 | 82 | ||
| 81 | ifeq ($(CONFIG_PM_DEBUG),y) | 83 | ifeq ($(CONFIG_PM_DEBUG),y) | 
| 82 | CFLAGS_pm.o += -DDEBUG | 84 | CFLAGS_pm.o += -DDEBUG | 
| diff --git a/arch/arm/mach-at91/at91sam9g45_devices.c b/arch/arm/mach-at91/at91sam9g45_devices.c index 332b784050b2..a57af3e99c7c 100644 --- a/arch/arm/mach-at91/at91sam9g45_devices.c +++ b/arch/arm/mach-at91/at91sam9g45_devices.c | |||
| @@ -131,6 +131,62 @@ void __init at91_add_device_usbh_ohci(struct at91_usbh_data *data) {} | |||
| 131 | 131 | ||
| 132 | 132 | ||
| 133 | /* -------------------------------------------------------------------- | 133 | /* -------------------------------------------------------------------- | 
| 134 | * USB Host HS (EHCI) | ||
| 135 | * Needs an OHCI host for low and full speed management | ||
| 136 | * -------------------------------------------------------------------- */ | ||
| 137 | |||
| 138 | #if defined(CONFIG_USB_EHCI_HCD) || defined(CONFIG_USB_EHCI_HCD_MODULE) | ||
| 139 | static u64 ehci_dmamask = DMA_BIT_MASK(32); | ||
| 140 | static struct at91_usbh_data usbh_ehci_data; | ||
| 141 | |||
| 142 | static struct resource usbh_ehci_resources[] = { | ||
| 143 | [0] = { | ||
| 144 | .start = AT91SAM9G45_EHCI_BASE, | ||
| 145 | .end = AT91SAM9G45_EHCI_BASE + SZ_1M - 1, | ||
| 146 | .flags = IORESOURCE_MEM, | ||
| 147 | }, | ||
| 148 | [1] = { | ||
| 149 | .start = AT91SAM9G45_ID_UHPHS, | ||
| 150 | .end = AT91SAM9G45_ID_UHPHS, | ||
| 151 | .flags = IORESOURCE_IRQ, | ||
| 152 | }, | ||
| 153 | }; | ||
| 154 | |||
| 155 | static struct platform_device at91_usbh_ehci_device = { | ||
| 156 | .name = "atmel-ehci", | ||
| 157 | .id = -1, | ||
| 158 | .dev = { | ||
| 159 | .dma_mask = &ehci_dmamask, | ||
| 160 | .coherent_dma_mask = DMA_BIT_MASK(32), | ||
| 161 | .platform_data = &usbh_ehci_data, | ||
| 162 | }, | ||
| 163 | .resource = usbh_ehci_resources, | ||
| 164 | .num_resources = ARRAY_SIZE(usbh_ehci_resources), | ||
| 165 | }; | ||
| 166 | |||
| 167 | void __init at91_add_device_usbh_ehci(struct at91_usbh_data *data) | ||
| 168 | { | ||
| 169 | int i; | ||
| 170 | |||
| 171 | if (!data) | ||
| 172 | return; | ||
| 173 | |||
| 174 | /* Enable VBus control for UHP ports */ | ||
| 175 | for (i = 0; i < data->ports; i++) { | ||
| 176 | if (data->vbus_pin[i]) | ||
| 177 | at91_set_gpio_output(data->vbus_pin[i], 0); | ||
| 178 | } | ||
| 179 | |||
| 180 | usbh_ehci_data = *data; | ||
| 181 | at91_clock_associate("uhphs_clk", &at91_usbh_ehci_device.dev, "ehci_clk"); | ||
| 182 | platform_device_register(&at91_usbh_ehci_device); | ||
| 183 | } | ||
| 184 | #else | ||
| 185 | void __init at91_add_device_usbh_ehci(struct at91_usbh_data *data) {} | ||
| 186 | #endif | ||
| 187 | |||
| 188 | |||
| 189 | /* -------------------------------------------------------------------- | ||
| 134 | * USB HS Device (Gadget) | 190 | * USB HS Device (Gadget) | 
| 135 | * -------------------------------------------------------------------- */ | 191 | * -------------------------------------------------------------------- */ | 
| 136 | 192 | ||
| diff --git a/arch/arm/mach-at91/board-eco920.c b/arch/arm/mach-at91/board-eco920.c new file mode 100644 index 000000000000..295a96609e71 --- /dev/null +++ b/arch/arm/mach-at91/board-eco920.c | |||
| @@ -0,0 +1,158 @@ | |||
| 1 | /* | ||
| 2 | * This program is free software; you can redistribute it and/or modify | ||
| 3 | * it under the terms of the GNU General Public License as published by | ||
| 4 | * the Free Software Foundation; either version 2 of the License, or | ||
| 5 | * (at your option) any later version. | ||
| 6 | * | ||
| 7 | * This program is distributed in the hope that it will be useful, | ||
| 8 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 9 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 10 | * GNU General Public License for more details. | ||
| 11 | * | ||
| 12 | * You should have received a copy of the GNU General Public License | ||
| 13 | * along with this program; if not, write to the Free Software | ||
| 14 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | ||
| 15 | */ | ||
| 16 | |||
| 17 | #include <linux/init.h> | ||
| 18 | #include <linux/platform_device.h> | ||
| 19 | #include <linux/mtd/physmap.h> | ||
| 20 | #include <linux/gpio.h> | ||
| 21 | |||
| 22 | #include <asm/mach-types.h> | ||
| 23 | |||
| 24 | #include <asm/mach/arch.h> | ||
| 25 | #include <asm/mach/map.h> | ||
| 26 | |||
| 27 | #include <mach/board.h> | ||
| 28 | #include <mach/at91rm9200_mc.h> | ||
| 29 | #include "generic.h" | ||
| 30 | |||
| 31 | static void __init eco920_map_io(void) | ||
| 32 | { | ||
| 33 | at91rm9200_initialize(18432000, AT91RM9200_PQFP); | ||
| 34 | |||
| 35 | /* Setup the LEDs */ | ||
| 36 | at91_init_leds(AT91_PIN_PB0, AT91_PIN_PB1); | ||
| 37 | |||
| 38 | /* DBGU on ttyS0. (Rx & Tx only */ | ||
| 39 | at91_register_uart(0, 0, 0); | ||
| 40 | |||
| 41 | /* set serial console to ttyS0 (ie, DBGU) */ | ||
| 42 | at91_set_serial_console(0); | ||
| 43 | } | ||
| 44 | |||
| 45 | static void __init eco920_init_irq(void) | ||
| 46 | { | ||
| 47 | at91rm9200_init_interrupts(NULL); | ||
| 48 | } | ||
| 49 | |||
| 50 | static struct at91_eth_data __initdata eco920_eth_data = { | ||
| 51 | .phy_irq_pin = AT91_PIN_PC2, | ||
| 52 | .is_rmii = 1, | ||
| 53 | }; | ||
| 54 | |||
| 55 | static struct at91_usbh_data __initdata eco920_usbh_data = { | ||
| 56 | .ports = 1, | ||
| 57 | }; | ||
| 58 | |||
| 59 | static struct at91_udc_data __initdata eco920_udc_data = { | ||
| 60 | .vbus_pin = AT91_PIN_PB12, | ||
| 61 | .pullup_pin = AT91_PIN_PB13, | ||
| 62 | }; | ||
| 63 | |||
| 64 | static struct at91_mmc_data __initdata eco920_mmc_data = { | ||
| 65 | .slot_b = 0, | ||
| 66 | .wire4 = 0, | ||
| 67 | }; | ||
| 68 | |||
| 69 | static struct physmap_flash_data eco920_flash_data = { | ||
| 70 | .width = 2, | ||
| 71 | }; | ||
| 72 | |||
| 73 | static struct resource eco920_flash_resource = { | ||
| 74 | .start = 0x11000000, | ||
| 75 | .end = 0x11ffffff, | ||
| 76 | .flags = IORESOURCE_MEM, | ||
| 77 | }; | ||
| 78 | |||
| 79 | static struct platform_device eco920_flash = { | ||
| 80 | .name = "physmap-flash", | ||
| 81 | .id = 0, | ||
| 82 | .dev = { | ||
| 83 | .platform_data = &eco920_flash_data, | ||
| 84 | }, | ||
| 85 | .resource = &eco920_flash_resource, | ||
| 86 | .num_resources = 1, | ||
| 87 | }; | ||
| 88 | |||
| 89 | static struct resource at91_beeper_resources[] = { | ||
| 90 | [0] = { | ||
| 91 | .start = AT91RM9200_BASE_TC3, | ||
| 92 | .end = AT91RM9200_BASE_TC3 + 0x39, | ||
| 93 | .flags = IORESOURCE_MEM, | ||
| 94 | }, | ||
| 95 | }; | ||
| 96 | |||
| 97 | static struct platform_device at91_beeper = { | ||
| 98 | .name = "at91_beeper", | ||
| 99 | .id = 0, | ||
| 100 | .resource = at91_beeper_resources, | ||
| 101 | .num_resources = ARRAY_SIZE(at91_beeper_resources), | ||
| 102 | }; | ||
| 103 | |||
| 104 | static struct spi_board_info eco920_spi_devices[] = { | ||
| 105 | { /* CAN controller */ | ||
| 106 | .modalias = "tlv5638", | ||
| 107 | .chip_select = 3, | ||
| 108 | .max_speed_hz = 20 * 1000 * 1000, | ||
| 109 | .mode = SPI_CPHA, | ||
| 110 | }, | ||
| 111 | }; | ||
| 112 | |||
| 113 | static void __init eco920_board_init(void) | ||
| 114 | { | ||
| 115 | at91_add_device_serial(); | ||
| 116 | at91_add_device_eth(&eco920_eth_data); | ||
| 117 | at91_add_device_usbh(&eco920_usbh_data); | ||
| 118 | at91_add_device_udc(&eco920_udc_data); | ||
| 119 | |||
| 120 | at91_add_device_mmc(0, &eco920_mmc_data); | ||
| 121 | platform_device_register(&eco920_flash); | ||
| 122 | |||
| 123 | at91_sys_write(AT91_SMC_CSR(7), AT91_SMC_RWHOLD_(1) | ||
| 124 | | AT91_SMC_RWSETUP_(1) | ||
| 125 | | AT91_SMC_DBW_8 | ||
| 126 | | AT91_SMC_WSEN | ||
| 127 | | AT91_SMC_NWS_(15)); | ||
| 128 | |||
| 129 | at91_set_A_periph(AT91_PIN_PC6, 1); | ||
| 130 | |||
| 131 | at91_set_gpio_input(AT91_PIN_PA23, 0); | ||
| 132 | at91_set_deglitch(AT91_PIN_PA23, 1); | ||
| 133 | |||
| 134 | /* Initialization of the Static Memory Controller for Chip Select 3 */ | ||
| 135 | at91_sys_write(AT91_SMC_CSR(3), | ||
| 136 | AT91_SMC_DBW_16 | /* 16 bit */ | ||
| 137 | AT91_SMC_WSEN | | ||
| 138 | AT91_SMC_NWS_(5) | /* wait states */ | ||
| 139 | AT91_SMC_TDF_(1) /* float time */ | ||
| 140 | ); | ||
| 141 | |||
| 142 | at91_clock_associate("tc3_clk", &at91_beeper.dev, "at91_beeper"); | ||
| 143 | at91_set_B_periph(AT91_PIN_PB6, 0); | ||
| 144 | platform_device_register(&at91_beeper); | ||
| 145 | |||
| 146 | at91_add_device_spi(eco920_spi_devices, ARRAY_SIZE(eco920_spi_devices)); | ||
| 147 | } | ||
| 148 | |||
| 149 | MACHINE_START(ECO920, "eco920") | ||
| 150 | /* Maintainer: Sascha Hauer */ | ||
| 151 | .phys_io = AT91_BASE_SYS, | ||
| 152 | .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc, | ||
| 153 | .boot_params = AT91_SDRAM_BASE + 0x100, | ||
| 154 | .timer = &at91rm9200_timer, | ||
| 155 | .map_io = eco920_map_io, | ||
| 156 | .init_irq = eco920_init_irq, | ||
| 157 | .init_machine = eco920_board_init, | ||
| 158 | MACHINE_END | ||
| diff --git a/arch/arm/mach-at91/board-sam9m10g45ek.c b/arch/arm/mach-at91/board-sam9m10g45ek.c index 64c3843f323d..1cf4d8681078 100644 --- a/arch/arm/mach-at91/board-sam9m10g45ek.c +++ b/arch/arm/mach-at91/board-sam9m10g45ek.c | |||
| @@ -366,6 +366,7 @@ static void __init ek_board_init(void) | |||
| 366 | at91_add_device_serial(); | 366 | at91_add_device_serial(); | 
| 367 | /* USB HS Host */ | 367 | /* USB HS Host */ | 
| 368 | at91_add_device_usbh_ohci(&ek_usbh_hs_data); | 368 | at91_add_device_usbh_ohci(&ek_usbh_hs_data); | 
| 369 | at91_add_device_usbh_ehci(&ek_usbh_hs_data); | ||
| 369 | /* USB HS Device */ | 370 | /* USB HS Device */ | 
| 370 | at91_add_device_usba(&ek_usba_udc_data); | 371 | at91_add_device_usba(&ek_usba_udc_data); | 
| 371 | /* SPI */ | 372 | /* SPI */ | 
| diff --git a/arch/arm/mach-at91/cpuidle.c b/arch/arm/mach-at91/cpuidle.c new file mode 100644 index 000000000000..1cfeac1483d6 --- /dev/null +++ b/arch/arm/mach-at91/cpuidle.c | |||
| @@ -0,0 +1,94 @@ | |||
| 1 | /* | ||
| 2 | * based on arch/arm/mach-kirkwood/cpuidle.c | ||
| 3 | * | ||
| 4 | * CPU idle support for AT91 SoC | ||
| 5 | * | ||
| 6 | * This file is licensed under the terms of the GNU General Public | ||
| 7 | * License version 2. This program is licensed "as is" without any | ||
| 8 | * warranty of any kind, whether express or implied. | ||
| 9 | * | ||
| 10 | * The cpu idle uses wait-for-interrupt and RAM self refresh in order | ||
| 11 | * to implement two idle states - | ||
| 12 | * #1 wait-for-interrupt | ||
| 13 | * #2 wait-for-interrupt and RAM self refresh | ||
| 14 | */ | ||
| 15 | |||
| 16 | #include <linux/kernel.h> | ||
| 17 | #include <linux/init.h> | ||
| 18 | #include <linux/platform_device.h> | ||
| 19 | #include <linux/cpuidle.h> | ||
| 20 | #include <asm/proc-fns.h> | ||
| 21 | #include <linux/io.h> | ||
| 22 | |||
| 23 | #include "pm.h" | ||
| 24 | |||
| 25 | #define AT91_MAX_STATES 2 | ||
| 26 | |||
| 27 | static DEFINE_PER_CPU(struct cpuidle_device, at91_cpuidle_device); | ||
| 28 | |||
| 29 | static struct cpuidle_driver at91_idle_driver = { | ||
| 30 | .name = "at91_idle", | ||
| 31 | .owner = THIS_MODULE, | ||
| 32 | }; | ||
| 33 | |||
| 34 | /* Actual code that puts the SoC in different idle states */ | ||
| 35 | static int at91_enter_idle(struct cpuidle_device *dev, | ||
| 36 | struct cpuidle_state *state) | ||
| 37 | { | ||
| 38 | struct timeval before, after; | ||
| 39 | int idle_time; | ||
| 40 | u32 saved_lpr; | ||
| 41 | |||
| 42 | local_irq_disable(); | ||
| 43 | do_gettimeofday(&before); | ||
| 44 | if (state == &dev->states[0]) | ||
| 45 | /* Wait for interrupt state */ | ||
| 46 | cpu_do_idle(); | ||
| 47 | else if (state == &dev->states[1]) { | ||
| 48 | asm("b 1f; .align 5; 1:"); | ||
| 49 | asm("mcr p15, 0, r0, c7, c10, 4"); /* drain write buffer */ | ||
| 50 | saved_lpr = sdram_selfrefresh_enable(); | ||
| 51 | cpu_do_idle(); | ||
| 52 | sdram_selfrefresh_disable(saved_lpr); | ||
| 53 | } | ||
| 54 | do_gettimeofday(&after); | ||
| 55 | local_irq_enable(); | ||
| 56 | idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC + | ||
| 57 | (after.tv_usec - before.tv_usec); | ||
| 58 | return idle_time; | ||
| 59 | } | ||
| 60 | |||
| 61 | /* Initialize CPU idle by registering the idle states */ | ||
| 62 | static int at91_init_cpuidle(void) | ||
| 63 | { | ||
| 64 | struct cpuidle_device *device; | ||
| 65 | |||
| 66 | cpuidle_register_driver(&at91_idle_driver); | ||
| 67 | |||
| 68 | device = &per_cpu(at91_cpuidle_device, smp_processor_id()); | ||
| 69 | device->state_count = AT91_MAX_STATES; | ||
| 70 | |||
| 71 | /* Wait for interrupt state */ | ||
| 72 | device->states[0].enter = at91_enter_idle; | ||
| 73 | device->states[0].exit_latency = 1; | ||
| 74 | device->states[0].target_residency = 10000; | ||
| 75 | device->states[0].flags = CPUIDLE_FLAG_TIME_VALID; | ||
| 76 | strcpy(device->states[0].name, "WFI"); | ||
| 77 | strcpy(device->states[0].desc, "Wait for interrupt"); | ||
| 78 | |||
| 79 | /* Wait for interrupt and RAM self refresh state */ | ||
| 80 | device->states[1].enter = at91_enter_idle; | ||
| 81 | device->states[1].exit_latency = 10; | ||
| 82 | device->states[1].target_residency = 10000; | ||
| 83 | device->states[1].flags = CPUIDLE_FLAG_TIME_VALID; | ||
| 84 | strcpy(device->states[1].name, "RAM_SR"); | ||
| 85 | strcpy(device->states[1].desc, "WFI and RAM Self Refresh"); | ||
| 86 | |||
| 87 | if (cpuidle_register_device(device)) { | ||
| 88 | printk(KERN_ERR "at91_init_cpuidle: Failed registering\n"); | ||
| 89 | return -EIO; | ||
| 90 | } | ||
| 91 | return 0; | ||
| 92 | } | ||
| 93 | |||
| 94 | device_initcall(at91_init_cpuidle); | ||
| diff --git a/arch/arm/mach-at91/include/mach/board.h b/arch/arm/mach-at91/include/mach/board.h index 2f4fcedc02ba..2295d80dd893 100644 --- a/arch/arm/mach-at91/include/mach/board.h +++ b/arch/arm/mach-at91/include/mach/board.h | |||
| @@ -98,6 +98,7 @@ struct at91_usbh_data { | |||
| 98 | }; | 98 | }; | 
| 99 | extern void __init at91_add_device_usbh(struct at91_usbh_data *data); | 99 | extern void __init at91_add_device_usbh(struct at91_usbh_data *data); | 
| 100 | extern void __init at91_add_device_usbh_ohci(struct at91_usbh_data *data); | 100 | extern void __init at91_add_device_usbh_ohci(struct at91_usbh_data *data); | 
| 101 | extern void __init at91_add_device_usbh_ehci(struct at91_usbh_data *data); | ||
| 101 | 102 | ||
| 102 | /* NAND / SmartMedia */ | 103 | /* NAND / SmartMedia */ | 
| 103 | struct atmel_nand_data { | 104 | struct atmel_nand_data { | 
| diff --git a/arch/arm/mach-at91/pm.c b/arch/arm/mach-at91/pm.c index 4028724d490d..615668986480 100644 --- a/arch/arm/mach-at91/pm.c +++ b/arch/arm/mach-at91/pm.c | |||
| @@ -29,62 +29,7 @@ | |||
| 29 | #include <mach/cpu.h> | 29 | #include <mach/cpu.h> | 
| 30 | 30 | ||
| 31 | #include "generic.h" | 31 | #include "generic.h" | 
| 32 | 32 | #include "pm.h" | |
| 33 | #ifdef CONFIG_ARCH_AT91RM9200 | ||
| 34 | #include <mach/at91rm9200_mc.h> | ||
| 35 | |||
| 36 | /* | ||
| 37 | * The AT91RM9200 goes into self-refresh mode with this command, and will | ||
| 38 | * terminate self-refresh automatically on the next SDRAM access. | ||
| 39 | */ | ||
| 40 | #define sdram_selfrefresh_enable() at91_sys_write(AT91_SDRAMC_SRR, 1) | ||
| 41 | #define sdram_selfrefresh_disable() do {} while (0) | ||
| 42 | |||
| 43 | #elif defined(CONFIG_ARCH_AT91CAP9) | ||
| 44 | #include <mach/at91cap9_ddrsdr.h> | ||
| 45 | |||
| 46 | static u32 saved_lpr; | ||
| 47 | |||
| 48 | static inline void sdram_selfrefresh_enable(void) | ||
| 49 | { | ||
| 50 | u32 lpr; | ||
| 51 | |||
| 52 | saved_lpr = at91_sys_read(AT91_DDRSDRC_LPR); | ||
| 53 | |||
| 54 | lpr = saved_lpr & ~AT91_DDRSDRC_LPCB; | ||
| 55 | at91_sys_write(AT91_DDRSDRC_LPR, lpr | AT91_DDRSDRC_LPCB_SELF_REFRESH); | ||
| 56 | } | ||
| 57 | |||
| 58 | #define sdram_selfrefresh_disable() at91_sys_write(AT91_DDRSDRC_LPR, saved_lpr) | ||
| 59 | |||
| 60 | #else | ||
| 61 | #include <mach/at91sam9_sdramc.h> | ||
| 62 | |||
| 63 | #ifdef CONFIG_ARCH_AT91SAM9263 | ||
| 64 | /* | ||
| 65 | * FIXME either or both the SDRAM controllers (EB0, EB1) might be in use; | ||
| 66 | * handle those cases both here and in the Suspend-To-RAM support. | ||
| 67 | */ | ||
| 68 | #define AT91_SDRAMC AT91_SDRAMC0 | ||
| 69 | #warning Assuming EB1 SDRAM controller is *NOT* used | ||
| 70 | #endif | ||
| 71 | |||
| 72 | static u32 saved_lpr; | ||
| 73 | |||
| 74 | static inline void sdram_selfrefresh_enable(void) | ||
| 75 | { | ||
| 76 | u32 lpr; | ||
| 77 | |||
| 78 | saved_lpr = at91_sys_read(AT91_SDRAMC_LPR); | ||
| 79 | |||
| 80 | lpr = saved_lpr & ~AT91_SDRAMC_LPCB; | ||
| 81 | at91_sys_write(AT91_SDRAMC_LPR, lpr | AT91_SDRAMC_LPCB_SELF_REFRESH); | ||
| 82 | } | ||
| 83 | |||
| 84 | #define sdram_selfrefresh_disable() at91_sys_write(AT91_SDRAMC_LPR, saved_lpr) | ||
| 85 | |||
| 86 | #endif | ||
| 87 | |||
| 88 | 33 | ||
| 89 | /* | 34 | /* | 
| 90 | * Show the reason for the previous system reset. | 35 | * Show the reason for the previous system reset. | 
| @@ -260,6 +205,7 @@ extern u32 at91_slow_clock_sz; | |||
| 260 | 205 | ||
| 261 | static int at91_pm_enter(suspend_state_t state) | 206 | static int at91_pm_enter(suspend_state_t state) | 
| 262 | { | 207 | { | 
| 208 | u32 saved_lpr; | ||
| 263 | at91_gpio_suspend(); | 209 | at91_gpio_suspend(); | 
| 264 | at91_irq_suspend(); | 210 | at91_irq_suspend(); | 
| 265 | 211 | ||
| @@ -315,9 +261,9 @@ static int at91_pm_enter(suspend_state_t state) | |||
| 315 | */ | 261 | */ | 
| 316 | asm("b 1f; .align 5; 1:"); | 262 | asm("b 1f; .align 5; 1:"); | 
| 317 | asm("mcr p15, 0, r0, c7, c10, 4"); /* drain write buffer */ | 263 | asm("mcr p15, 0, r0, c7, c10, 4"); /* drain write buffer */ | 
| 318 | sdram_selfrefresh_enable(); | 264 | saved_lpr = sdram_selfrefresh_enable(); | 
| 319 | asm("mcr p15, 0, r0, c7, c0, 4"); /* wait for interrupt */ | 265 | asm("mcr p15, 0, r0, c7, c0, 4"); /* wait for interrupt */ | 
| 320 | sdram_selfrefresh_disable(); | 266 | sdram_selfrefresh_disable(saved_lpr); | 
| 321 | break; | 267 | break; | 
| 322 | 268 | ||
| 323 | case PM_SUSPEND_ON: | 269 | case PM_SUSPEND_ON: | 
| diff --git a/arch/arm/mach-at91/pm.h b/arch/arm/mach-at91/pm.h new file mode 100644 index 000000000000..08322c44df1a --- /dev/null +++ b/arch/arm/mach-at91/pm.h | |||
| @@ -0,0 +1,67 @@ | |||
| 1 | #ifdef CONFIG_ARCH_AT91RM9200 | ||
| 2 | #include <mach/at91rm9200_mc.h> | ||
| 3 | |||
| 4 | /* | ||
| 5 | * The AT91RM9200 goes into self-refresh mode with this command, and will | ||
| 6 | * terminate self-refresh automatically on the next SDRAM access. | ||
| 7 | * | ||
| 8 | * Self-refresh mode is exited as soon as a memory access is made, but we don't | ||
| 9 | * know for sure when that happens. However, we need to restore the low-power | ||
| 10 | * mode if it was enabled before going idle. Restoring low-power mode while | ||
| 11 | * still in self-refresh is "not recommended", but seems to work. | ||
| 12 | */ | ||
| 13 | |||
| 14 | static inline u32 sdram_selfrefresh_enable(void) | ||
| 15 | { | ||
| 16 | u32 saved_lpr = at91_sys_read(AT91_SDRAMC_LPR); | ||
| 17 | |||
| 18 | at91_sys_write(AT91_SDRAMC_LPR, 0); | ||
| 19 | at91_sys_write(AT91_SDRAMC_SRR, 1); | ||
| 20 | return saved_lpr; | ||
| 21 | } | ||
| 22 | |||
| 23 | #define sdram_selfrefresh_disable(saved_lpr) at91_sys_write(AT91_SDRAMC_LPR, saved_lpr) | ||
| 24 | |||
| 25 | #elif defined(CONFIG_ARCH_AT91CAP9) | ||
| 26 | #include <mach/at91cap9_ddrsdr.h> | ||
| 27 | |||
| 28 | |||
| 29 | static inline u32 sdram_selfrefresh_enable(void) | ||
| 30 | { | ||
| 31 | u32 saved_lpr, lpr; | ||
| 32 | |||
| 33 | saved_lpr = at91_sys_read(AT91_DDRSDRC_LPR); | ||
| 34 | |||
| 35 | lpr = saved_lpr & ~AT91_DDRSDRC_LPCB; | ||
| 36 | at91_sys_write(AT91_DDRSDRC_LPR, lpr | AT91_DDRSDRC_LPCB_SELF_REFRESH); | ||
| 37 | return saved_lpr; | ||
| 38 | } | ||
| 39 | |||
| 40 | #define sdram_selfrefresh_disable(saved_lpr) at91_sys_write(AT91_DDRSDRC_LPR, saved_lpr) | ||
| 41 | |||
| 42 | #else | ||
| 43 | #include <mach/at91sam9_sdramc.h> | ||
| 44 | |||
| 45 | #ifdef CONFIG_ARCH_AT91SAM9263 | ||
| 46 | /* | ||
| 47 | * FIXME either or both the SDRAM controllers (EB0, EB1) might be in use; | ||
| 48 | * handle those cases both here and in the Suspend-To-RAM support. | ||
| 49 | */ | ||
| 50 | #define AT91_SDRAMC AT91_SDRAMC0 | ||
| 51 | #warning Assuming EB1 SDRAM controller is *NOT* used | ||
| 52 | #endif | ||
| 53 | |||
| 54 | static inline u32 sdram_selfrefresh_enable(void) | ||
| 55 | { | ||
| 56 | u32 saved_lpr, lpr; | ||
| 57 | |||
| 58 | saved_lpr = at91_sys_read(AT91_SDRAMC_LPR); | ||
| 59 | |||
| 60 | lpr = saved_lpr & ~AT91_SDRAMC_LPCB; | ||
| 61 | at91_sys_write(AT91_SDRAMC_LPR, lpr | AT91_SDRAMC_LPCB_SELF_REFRESH); | ||
| 62 | return saved_lpr; | ||
| 63 | } | ||
| 64 | |||
| 65 | #define sdram_selfrefresh_disable(saved_lpr) at91_sys_write(AT91_SDRAMC_LPR, saved_lpr) | ||
| 66 | |||
| 67 | #endif | ||
| diff --git a/arch/arm/mach-bcmring/include/mach/io.h b/arch/arm/mach-bcmring/include/mach/io.h index 4db0eff90357..dae5e9b166ea 100644 --- a/arch/arm/mach-bcmring/include/mach/io.h +++ b/arch/arm/mach-bcmring/include/mach/io.h | |||
| @@ -23,34 +23,11 @@ | |||
| 23 | 23 | ||
| 24 | #define IO_SPACE_LIMIT 0xffffffff | 24 | #define IO_SPACE_LIMIT 0xffffffff | 
| 25 | 25 | ||
| 26 | #define __io(a) ((void __iomem *)HW_IO_PHYS_TO_VIRT(a)) | 26 | /* | 
| 27 | 27 | * We don't actually have real ISA nor PCI buses, but there is so many | |
| 28 | /* Do not enable mem_pci for a big endian arm architecture or unexpected byteswaps will */ | 28 | * drivers out there that might just work if we fake them... | 
| 29 | /* happen in readw/writew etc. */ | 29 | */ | 
| 30 | 30 | #define __io(a) __typesafe_io(a) | |
| 31 | #define readb(c) __raw_readb(c) | 31 | #define __mem_pci(a) (a) | 
| 32 | #define readw(c) __raw_readw(c) | ||
| 33 | #define readl(c) __raw_readl(c) | ||
| 34 | #define readb_relaxed(addr) readb(addr) | ||
| 35 | #define readw_relaxed(addr) readw(addr) | ||
| 36 | #define readl_relaxed(addr) readl(addr) | ||
| 37 | |||
| 38 | #define readsb(p, d, l) __raw_readsb(p, d, l) | ||
| 39 | #define readsw(p, d, l) __raw_readsw(p, d, l) | ||
| 40 | #define readsl(p, d, l) __raw_readsl(p, d, l) | ||
| 41 | |||
| 42 | #define writeb(v, c) __raw_writeb(v, c) | ||
| 43 | #define writew(v, c) __raw_writew(v, c) | ||
| 44 | #define writel(v, c) __raw_writel(v, c) | ||
| 45 | |||
| 46 | #define writesb(p, d, l) __raw_writesb(p, d, l) | ||
| 47 | #define writesw(p, d, l) __raw_writesw(p, d, l) | ||
| 48 | #define writesl(p, d, l) __raw_writesl(p, d, l) | ||
| 49 | |||
| 50 | #define memset_io(c, v, l) _memset_io((c), (v), (l)) | ||
| 51 | #define memcpy_fromio(a, c, l) _memcpy_fromio((a), (c), (l)) | ||
| 52 | #define memcpy_toio(c, a, l) _memcpy_toio((c), (a), (l)) | ||
| 53 | |||
| 54 | #define eth_io_copy_and_sum(s, c, l, b) eth_copy_and_sum((s), (c), (l), (b)) | ||
| 55 | 32 | ||
| 56 | #endif | 33 | #endif | 
| diff --git a/arch/arm/mach-ep93xx/core.c b/arch/arm/mach-ep93xx/core.c index b4357c388d2e..1f0d66561bbe 100644 --- a/arch/arm/mach-ep93xx/core.c +++ b/arch/arm/mach-ep93xx/core.c | |||
| @@ -31,6 +31,7 @@ | |||
| 31 | 31 | ||
| 32 | #include <mach/hardware.h> | 32 | #include <mach/hardware.h> | 
| 33 | #include <mach/fb.h> | 33 | #include <mach/fb.h> | 
| 34 | #include <mach/ep93xx_keypad.h> | ||
| 34 | 35 | ||
| 35 | #include <asm/mach/map.h> | 36 | #include <asm/mach/map.h> | 
| 36 | #include <asm/mach/time.h> | 37 | #include <asm/mach/time.h> | 
| @@ -728,6 +729,82 @@ void __init ep93xx_register_fb(struct ep93xxfb_mach_info *data) | |||
| 728 | platform_device_register(&ep93xx_fb_device); | 729 | platform_device_register(&ep93xx_fb_device); | 
| 729 | } | 730 | } | 
| 730 | 731 | ||
| 732 | |||
| 733 | /************************************************************************* | ||
| 734 | * EP93xx matrix keypad peripheral handling | ||
| 735 | *************************************************************************/ | ||
| 736 | static struct resource ep93xx_keypad_resource[] = { | ||
| 737 | { | ||
| 738 | .start = EP93XX_KEY_MATRIX_PHYS_BASE, | ||
| 739 | .end = EP93XX_KEY_MATRIX_PHYS_BASE + 0x0c - 1, | ||
| 740 | .flags = IORESOURCE_MEM, | ||
| 741 | }, { | ||
| 742 | .start = IRQ_EP93XX_KEY, | ||
| 743 | .end = IRQ_EP93XX_KEY, | ||
| 744 | .flags = IORESOURCE_IRQ, | ||
| 745 | }, | ||
| 746 | }; | ||
| 747 | |||
| 748 | static struct platform_device ep93xx_keypad_device = { | ||
| 749 | .name = "ep93xx-keypad", | ||
| 750 | .id = -1, | ||
| 751 | .num_resources = ARRAY_SIZE(ep93xx_keypad_resource), | ||
| 752 | .resource = ep93xx_keypad_resource, | ||
| 753 | }; | ||
| 754 | |||
| 755 | void __init ep93xx_register_keypad(struct ep93xx_keypad_platform_data *data) | ||
| 756 | { | ||
| 757 | ep93xx_keypad_device.dev.platform_data = data; | ||
| 758 | platform_device_register(&ep93xx_keypad_device); | ||
| 759 | } | ||
| 760 | |||
| 761 | int ep93xx_keypad_acquire_gpio(struct platform_device *pdev) | ||
| 762 | { | ||
| 763 | int err; | ||
| 764 | int i; | ||
| 765 | |||
| 766 | for (i = 0; i < 8; i++) { | ||
| 767 | err = gpio_request(EP93XX_GPIO_LINE_C(i), dev_name(&pdev->dev)); | ||
| 768 | if (err) | ||
| 769 | goto fail_gpio_c; | ||
| 770 | err = gpio_request(EP93XX_GPIO_LINE_D(i), dev_name(&pdev->dev)); | ||
| 771 | if (err) | ||
| 772 | goto fail_gpio_d; | ||
| 773 | } | ||
| 774 | |||
| 775 | /* Enable the keypad controller; GPIO ports C and D used for keypad */ | ||
| 776 | ep93xx_devcfg_clear_bits(EP93XX_SYSCON_DEVCFG_KEYS | | ||
| 777 | EP93XX_SYSCON_DEVCFG_GONK); | ||
| 778 | |||
| 779 | return 0; | ||
| 780 | |||
| 781 | fail_gpio_d: | ||
| 782 | gpio_free(EP93XX_GPIO_LINE_C(i)); | ||
| 783 | fail_gpio_c: | ||
| 784 | for ( ; i >= 0; --i) { | ||
| 785 | gpio_free(EP93XX_GPIO_LINE_C(i)); | ||
| 786 | gpio_free(EP93XX_GPIO_LINE_D(i)); | ||
| 787 | } | ||
| 788 | return err; | ||
| 789 | } | ||
| 790 | EXPORT_SYMBOL(ep93xx_keypad_acquire_gpio); | ||
| 791 | |||
| 792 | void ep93xx_keypad_release_gpio(struct platform_device *pdev) | ||
| 793 | { | ||
| 794 | int i; | ||
| 795 | |||
| 796 | for (i = 0; i < 8; i++) { | ||
| 797 | gpio_free(EP93XX_GPIO_LINE_C(i)); | ||
| 798 | gpio_free(EP93XX_GPIO_LINE_D(i)); | ||
| 799 | } | ||
| 800 | |||
| 801 | /* Disable the keypad controller; GPIO ports C and D used for GPIO */ | ||
| 802 | ep93xx_devcfg_set_bits(EP93XX_SYSCON_DEVCFG_KEYS | | ||
| 803 | EP93XX_SYSCON_DEVCFG_GONK); | ||
| 804 | } | ||
| 805 | EXPORT_SYMBOL(ep93xx_keypad_release_gpio); | ||
| 806 | |||
| 807 | |||
| 731 | extern void ep93xx_gpio_init(void); | 808 | extern void ep93xx_gpio_init(void); | 
| 732 | 809 | ||
| 733 | void __init ep93xx_init_devices(void) | 810 | void __init ep93xx_init_devices(void) | 
| diff --git a/arch/arm/mach-ep93xx/include/mach/clkdev.h b/arch/arm/mach-ep93xx/include/mach/clkdev.h index 04b37a89801c..50cb991eadeb 100644 --- a/arch/arm/mach-ep93xx/include/mach/clkdev.h +++ b/arch/arm/mach-ep93xx/include/mach/clkdev.h | |||
| @@ -1,3 +1,7 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-ep93xx/include/mach/clkdev.h | ||
| 3 | */ | ||
| 4 | |||
| 1 | #ifndef __ASM_MACH_CLKDEV_H | 5 | #ifndef __ASM_MACH_CLKDEV_H | 
| 2 | #define __ASM_MACH_CLKDEV_H | 6 | #define __ASM_MACH_CLKDEV_H | 
| 3 | 7 | ||
| diff --git a/arch/arm/mach-ep93xx/include/mach/dma.h b/arch/arm/mach-ep93xx/include/mach/dma.h index ef6bd9d13148..3a5961d3f3b1 100644 --- a/arch/arm/mach-ep93xx/include/mach/dma.h +++ b/arch/arm/mach-ep93xx/include/mach/dma.h | |||
| @@ -1,3 +1,7 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-ep93xx/include/mach/dma.h | ||
| 3 | */ | ||
| 4 | |||
| 1 | #ifndef __ASM_ARCH_DMA_H | 5 | #ifndef __ASM_ARCH_DMA_H | 
| 2 | #define __ASM_ARCH_DMA_H | 6 | #define __ASM_ARCH_DMA_H | 
| 3 | 7 | ||
| diff --git a/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h b/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h index b1f937eda29c..d55194a4c093 100644 --- a/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h +++ b/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h | |||
| @@ -134,6 +134,7 @@ | |||
| 134 | #define EP93XX_UART3_PHYS_BASE EP93XX_APB_PHYS(0x000e0000) | 134 | #define EP93XX_UART3_PHYS_BASE EP93XX_APB_PHYS(0x000e0000) | 
| 135 | #define EP93XX_UART3_BASE EP93XX_APB_IOMEM(0x000e0000) | 135 | #define EP93XX_UART3_BASE EP93XX_APB_IOMEM(0x000e0000) | 
| 136 | 136 | ||
| 137 | #define EP93XX_KEY_MATRIX_PHYS_BASE EP93XX_APB_PHYS(0x000f0000) | ||
| 137 | #define EP93XX_KEY_MATRIX_BASE EP93XX_APB_IOMEM(0x000f0000) | 138 | #define EP93XX_KEY_MATRIX_BASE EP93XX_APB_IOMEM(0x000f0000) | 
| 138 | 139 | ||
| 139 | #define EP93XX_ADC_BASE EP93XX_APB_IOMEM(0x00100000) | 140 | #define EP93XX_ADC_BASE EP93XX_APB_IOMEM(0x00100000) | 
| diff --git a/arch/arm/mach-ep93xx/include/mach/hardware.h b/arch/arm/mach-ep93xx/include/mach/hardware.h index 349fa7cb72d5..5a3ce024b593 100644 --- a/arch/arm/mach-ep93xx/include/mach/hardware.h +++ b/arch/arm/mach-ep93xx/include/mach/hardware.h | |||
| @@ -1,6 +1,7 @@ | |||
| 1 | /* | 1 | /* | 
| 2 | * arch/arm/mach-ep93xx/include/mach/hardware.h | 2 | * arch/arm/mach-ep93xx/include/mach/hardware.h | 
| 3 | */ | 3 | */ | 
| 4 | |||
| 4 | #ifndef __ASM_ARCH_HARDWARE_H | 5 | #ifndef __ASM_ARCH_HARDWARE_H | 
| 5 | #define __ASM_ARCH_HARDWARE_H | 6 | #define __ASM_ARCH_HARDWARE_H | 
| 6 | 7 | ||
| diff --git a/arch/arm/mach-ep93xx/include/mach/io.h b/arch/arm/mach-ep93xx/include/mach/io.h index cebcc1c53d63..594b77f21054 100644 --- a/arch/arm/mach-ep93xx/include/mach/io.h +++ b/arch/arm/mach-ep93xx/include/mach/io.h | |||
| @@ -1,6 +1,7 @@ | |||
| 1 | /* | 1 | /* | 
| 2 | * arch/arm/mach-ep93xx/include/mach/io.h | 2 | * arch/arm/mach-ep93xx/include/mach/io.h | 
| 3 | */ | 3 | */ | 
| 4 | |||
| 4 | #ifndef __ASM_MACH_IO_H | 5 | #ifndef __ASM_MACH_IO_H | 
| 5 | #define __ASM_MACH_IO_H | 6 | #define __ASM_MACH_IO_H | 
| 6 | 7 | ||
| diff --git a/arch/arm/mach-ep93xx/include/mach/platform.h b/arch/arm/mach-ep93xx/include/mach/platform.h index 469fd968d517..c6dc14dbca18 100644 --- a/arch/arm/mach-ep93xx/include/mach/platform.h +++ b/arch/arm/mach-ep93xx/include/mach/platform.h | |||
| @@ -8,6 +8,7 @@ struct i2c_gpio_platform_data; | |||
| 8 | struct i2c_board_info; | 8 | struct i2c_board_info; | 
| 9 | struct platform_device; | 9 | struct platform_device; | 
| 10 | struct ep93xxfb_mach_info; | 10 | struct ep93xxfb_mach_info; | 
| 11 | struct ep93xx_keypad_platform_data; | ||
| 11 | 12 | ||
| 12 | struct ep93xx_eth_data | 13 | struct ep93xx_eth_data | 
| 13 | { | 14 | { | 
| @@ -39,6 +40,9 @@ void ep93xx_register_fb(struct ep93xxfb_mach_info *data); | |||
| 39 | void ep93xx_register_pwm(int pwm0, int pwm1); | 40 | void ep93xx_register_pwm(int pwm0, int pwm1); | 
| 40 | int ep93xx_pwm_acquire_gpio(struct platform_device *pdev); | 41 | int ep93xx_pwm_acquire_gpio(struct platform_device *pdev); | 
| 41 | void ep93xx_pwm_release_gpio(struct platform_device *pdev); | 42 | void ep93xx_pwm_release_gpio(struct platform_device *pdev); | 
| 43 | void ep93xx_register_keypad(struct ep93xx_keypad_platform_data *data); | ||
| 44 | int ep93xx_keypad_acquire_gpio(struct platform_device *pdev); | ||
| 45 | void ep93xx_keypad_release_gpio(struct platform_device *pdev); | ||
| 42 | 46 | ||
| 43 | void ep93xx_init_devices(void); | 47 | void ep93xx_init_devices(void); | 
| 44 | extern struct sys_timer ep93xx_timer; | 48 | extern struct sys_timer ep93xx_timer; | 
| diff --git a/arch/arm/mach-iop13xx/include/mach/memory.h b/arch/arm/mach-iop13xx/include/mach/memory.h index 42ae29b288a1..25b1da9a5035 100644 --- a/arch/arm/mach-iop13xx/include/mach/memory.h +++ b/arch/arm/mach-iop13xx/include/mach/memory.h | |||
| @@ -64,6 +64,8 @@ static inline unsigned long __lbus_to_virt(dma_addr_t x) | |||
| 64 | (dma_addr_t)page_to_phys(page); \ | 64 | (dma_addr_t)page_to_phys(page); \ | 
| 65 | }) | 65 | }) | 
| 66 | 66 | ||
| 67 | #define __arch_dma_to_page(dev, addr) phys_to_page(addr) | ||
| 68 | |||
| 67 | #endif /* CONFIG_ARCH_IOP13XX */ | 69 | #endif /* CONFIG_ARCH_IOP13XX */ | 
| 68 | #endif /* !ASSEMBLY */ | 70 | #endif /* !ASSEMBLY */ | 
| 69 | 71 | ||
| diff --git a/arch/arm/mach-ks8695/include/mach/memory.h b/arch/arm/mach-ks8695/include/mach/memory.h index 76e5308685a4..ffa19aae6e05 100644 --- a/arch/arm/mach-ks8695/include/mach/memory.h +++ b/arch/arm/mach-ks8695/include/mach/memory.h | |||
| @@ -41,6 +41,13 @@ extern struct bus_type platform_bus_type; | |||
| 41 | __dma = __dma - PHYS_OFFSET + KS8695_PCIMEM_PA; \ | 41 | __dma = __dma - PHYS_OFFSET + KS8695_PCIMEM_PA; \ | 
| 42 | __dma; }) | 42 | __dma; }) | 
| 43 | 43 | ||
| 44 | #define __arch_dma_to_page(dev, x) \ | ||
| 45 | ({ dma_addr_t __dma = x; \ | ||
| 46 | if (!is_lbus_device(dev)) \ | ||
| 47 | __dma += PHYS_OFFSET - KS8695_PCIMEM_PA; \ | ||
| 48 | phys_to_page(__dma); \ | ||
| 49 | }) | ||
| 50 | |||
| 44 | #endif | 51 | #endif | 
| 45 | 52 | ||
| 46 | #endif | 53 | #endif | 
| diff --git a/arch/arm/mach-nomadik/Kconfig b/arch/arm/mach-nomadik/Kconfig index 2a02b49c40f0..3c5e0f522e9c 100644 --- a/arch/arm/mach-nomadik/Kconfig +++ b/arch/arm/mach-nomadik/Kconfig | |||
| @@ -5,13 +5,13 @@ menu "Nomadik boards" | |||
| 5 | config MACH_NOMADIK_8815NHK | 5 | config MACH_NOMADIK_8815NHK | 
| 6 | bool "ST 8815 Nomadik Hardware Kit (evaluation board)" | 6 | bool "ST 8815 Nomadik Hardware Kit (evaluation board)" | 
| 7 | select NOMADIK_8815 | 7 | select NOMADIK_8815 | 
| 8 | select HAS_MTU | ||
| 8 | 9 | ||
| 9 | endmenu | 10 | endmenu | 
| 10 | 11 | ||
| 11 | config NOMADIK_8815 | 12 | config NOMADIK_8815 | 
| 12 | bool | 13 | bool | 
| 13 | 14 | ||
| 14 | |||
| 15 | config I2C_BITBANG_8815NHK | 15 | config I2C_BITBANG_8815NHK | 
| 16 | tristate "Driver for bit-bang busses found on the 8815 NHK" | 16 | tristate "Driver for bit-bang busses found on the 8815 NHK" | 
| 17 | depends on I2C && MACH_NOMADIK_8815NHK | 17 | depends on I2C && MACH_NOMADIK_8815NHK | 
| diff --git a/arch/arm/mach-nomadik/Makefile b/arch/arm/mach-nomadik/Makefile index 412040982a40..36f67fb207d2 100644 --- a/arch/arm/mach-nomadik/Makefile +++ b/arch/arm/mach-nomadik/Makefile | |||
| @@ -7,7 +7,7 @@ | |||
| 7 | 7 | ||
| 8 | # Object file lists. | 8 | # Object file lists. | 
| 9 | 9 | ||
| 10 | obj-y += clock.o timer.o gpio.o | 10 | obj-y += clock.o gpio.o | 
| 11 | 11 | ||
| 12 | # Cpu revision | 12 | # Cpu revision | 
| 13 | obj-$(CONFIG_NOMADIK_8815) += cpu-8815.o | 13 | obj-$(CONFIG_NOMADIK_8815) += cpu-8815.o | 
| diff --git a/arch/arm/mach-nomadik/board-nhk8815.c b/arch/arm/mach-nomadik/board-nhk8815.c index 6bfd537d5afb..116394484e71 100644 --- a/arch/arm/mach-nomadik/board-nhk8815.c +++ b/arch/arm/mach-nomadik/board-nhk8815.c | |||
| @@ -25,11 +25,18 @@ | |||
| 25 | #include <asm/mach/arch.h> | 25 | #include <asm/mach/arch.h> | 
| 26 | #include <asm/mach/irq.h> | 26 | #include <asm/mach/irq.h> | 
| 27 | #include <asm/mach/flash.h> | 27 | #include <asm/mach/flash.h> | 
| 28 | |||
| 29 | #include <plat/mtu.h> | ||
| 30 | |||
| 28 | #include <mach/setup.h> | 31 | #include <mach/setup.h> | 
| 29 | #include <mach/nand.h> | 32 | #include <mach/nand.h> | 
| 30 | #include <mach/fsmc.h> | 33 | #include <mach/fsmc.h> | 
| 31 | #include "clock.h" | 34 | #include "clock.h" | 
| 32 | 35 | ||
| 36 | /* Initial value for SRC control register: all timers use MXTAL/8 source */ | ||
| 37 | #define SRC_CR_INIT_MASK 0x00007fff | ||
| 38 | #define SRC_CR_INIT_VAL 0x2aaa8000 | ||
| 39 | |||
| 33 | /* These adresses span 16MB, so use three individual pages */ | 40 | /* These adresses span 16MB, so use three individual pages */ | 
| 34 | static struct resource nhk8815_nand_resources[] = { | 41 | static struct resource nhk8815_nand_resources[] = { | 
| 35 | { | 42 | { | 
| @@ -239,6 +246,26 @@ static struct platform_device *nhk8815_platform_devices[] __initdata = { | |||
| 239 | /* will add more devices */ | 246 | /* will add more devices */ | 
| 240 | }; | 247 | }; | 
| 241 | 248 | ||
| 249 | static void __init nomadik_timer_init(void) | ||
| 250 | { | ||
| 251 | u32 src_cr; | ||
| 252 | |||
| 253 | /* Configure timer sources in "system reset controller" ctrl reg */ | ||
| 254 | src_cr = readl(io_p2v(NOMADIK_SRC_BASE)); | ||
| 255 | src_cr &= SRC_CR_INIT_MASK; | ||
| 256 | src_cr |= SRC_CR_INIT_VAL; | ||
| 257 | writel(src_cr, io_p2v(NOMADIK_SRC_BASE)); | ||
| 258 | |||
| 259 | /* Save global pointer to mtu, used by platform timer code */ | ||
| 260 | mtu_base = io_p2v(NOMADIK_MTU0_BASE); | ||
| 261 | |||
| 262 | nmdk_timer_init(); | ||
| 263 | } | ||
| 264 | |||
| 265 | static struct sys_timer nomadik_timer = { | ||
| 266 | .init = nomadik_timer_init, | ||
| 267 | }; | ||
| 268 | |||
| 242 | static void __init nhk8815_platform_init(void) | 269 | static void __init nhk8815_platform_init(void) | 
| 243 | { | 270 | { | 
| 244 | int i; | 271 | int i; | 
| diff --git a/arch/arm/mach-nomadik/include/mach/setup.h b/arch/arm/mach-nomadik/include/mach/setup.h index a4e468cf63da..b7897edf1f35 100644 --- a/arch/arm/mach-nomadik/include/mach/setup.h +++ b/arch/arm/mach-nomadik/include/mach/setup.h | |||
| @@ -15,7 +15,7 @@ | |||
| 15 | extern void cpu8815_map_io(void); | 15 | extern void cpu8815_map_io(void); | 
| 16 | extern void cpu8815_platform_init(void); | 16 | extern void cpu8815_platform_init(void); | 
| 17 | extern void cpu8815_init_irq(void); | 17 | extern void cpu8815_init_irq(void); | 
| 18 | extern struct sys_timer nomadik_timer; | 18 | extern void nmdk_timer_init(void); | 
| 19 | 19 | ||
| 20 | #endif /* NOMADIK_8815 */ | 20 | #endif /* NOMADIK_8815 */ | 
| 21 | 21 | ||
| diff --git a/arch/arm/mach-u300/Makefile b/arch/arm/mach-u300/Makefile index 885b5c027c1e..fab46fe9a71f 100644 --- a/arch/arm/mach-u300/Makefile +++ b/arch/arm/mach-u300/Makefile | |||
| @@ -12,3 +12,4 @@ obj-$(CONFIG_MMC) += mmc.o | |||
| 12 | obj-$(CONFIG_SPI_PL022) += spi.o | 12 | obj-$(CONFIG_SPI_PL022) += spi.o | 
| 13 | obj-$(CONFIG_MACH_U300_SPIDUMMY) += dummyspichip.o | 13 | obj-$(CONFIG_MACH_U300_SPIDUMMY) += dummyspichip.o | 
| 14 | obj-$(CONFIG_I2C_STU300) += i2c.o | 14 | obj-$(CONFIG_I2C_STU300) += i2c.o | 
| 15 | obj-$(CONFIG_REGULATOR_AB3100) += regulator.o | ||
| diff --git a/arch/arm/mach-u300/i2c.c b/arch/arm/mach-u300/i2c.c index 10be1f888b27..c73ed06b6065 100644 --- a/arch/arm/mach-u300/i2c.c +++ b/arch/arm/mach-u300/i2c.c | |||
| @@ -9,13 +9,257 @@ | |||
| 9 | */ | 9 | */ | 
| 10 | #include <linux/kernel.h> | 10 | #include <linux/kernel.h> | 
| 11 | #include <linux/i2c.h> | 11 | #include <linux/i2c.h> | 
| 12 | #include <linux/mfd/ab3100.h> | ||
| 13 | #include <linux/regulator/machine.h> | ||
| 14 | #include <linux/amba/bus.h> | ||
| 12 | #include <mach/irqs.h> | 15 | #include <mach/irqs.h> | 
| 13 | 16 | ||
| 17 | /* | ||
| 18 | * Initial settings of ab3100 registers. | ||
| 19 | * Common for below LDO regulator settings are that | ||
| 20 | * bit 7-5 controls voltage. Bit 4 turns regulator ON(1) or OFF(0). | ||
| 21 | * Bit 3-2 controls sleep enable and bit 1-0 controls sleep mode. | ||
| 22 | */ | ||
| 23 | |||
| 24 | /* LDO_A 0x16: 2.75V, ON, SLEEP_A, SLEEP OFF GND */ | ||
| 25 | #define LDO_A_SETTING 0x16 | ||
| 26 | /* LDO_C 0x10: 2.65V, ON, SLEEP_A or B, SLEEP full power */ | ||
| 27 | #define LDO_C_SETTING 0x10 | ||
| 28 | /* LDO_D 0x10: 2.65V, ON, sleep mode not used */ | ||
| 29 | #define LDO_D_SETTING 0x10 | ||
| 30 | /* LDO_E 0x10: 1.8V, ON, SLEEP_A or B, SLEEP full power */ | ||
| 31 | #define LDO_E_SETTING 0x10 | ||
| 32 | /* LDO_E SLEEP 0x00: 1.8V, not used, SLEEP_A or B, not used */ | ||
| 33 | #define LDO_E_SLEEP_SETTING 0x00 | ||
| 34 | /* LDO_F 0xD0: 2.5V, ON, SLEEP_A or B, SLEEP full power */ | ||
| 35 | #define LDO_F_SETTING 0xD0 | ||
| 36 | /* LDO_G 0x00: 2.85V, OFF, SLEEP_A or B, SLEEP full power */ | ||
| 37 | #define LDO_G_SETTING 0x00 | ||
| 38 | /* LDO_H 0x18: 2.75V, ON, SLEEP_B, SLEEP full power */ | ||
| 39 | #define LDO_H_SETTING 0x18 | ||
| 40 | /* LDO_K 0x00: 2.75V, OFF, SLEEP_A or B, SLEEP full power */ | ||
| 41 | #define LDO_K_SETTING 0x00 | ||
| 42 | /* LDO_EXT 0x00: Voltage not set, OFF, not used, not used */ | ||
| 43 | #define LDO_EXT_SETTING 0x00 | ||
| 44 | /* BUCK 0x7D: 1.2V, ON, SLEEP_A and B, SLEEP low power */ | ||
| 45 | #define BUCK_SETTING 0x7D | ||
| 46 | /* BUCK SLEEP 0xAC: 1.05V, Not used, SLEEP_A and B, Not used */ | ||
| 47 | #define BUCK_SLEEP_SETTING 0xAC | ||
| 48 | |||
| 49 | static struct regulator_consumer_supply supply_ldo_c[] = { | ||
| 50 | { | ||
| 51 | .dev_name = "ab3100-codec", | ||
| 52 | .supply = "vaudio", /* Powers the codec */ | ||
| 53 | }, | ||
| 54 | }; | ||
| 55 | |||
| 56 | /* | ||
| 57 | * This one needs to be a supply so we can turn it off | ||
| 58 | * in order to shut down the system. | ||
| 59 | */ | ||
| 60 | static struct regulator_consumer_supply supply_ldo_d[] = { | ||
| 61 | { | ||
| 62 | .dev = NULL, | ||
| 63 | .supply = "vana15", /* Powers the SoC (CPU etc) */ | ||
| 64 | }, | ||
| 65 | }; | ||
| 66 | |||
| 67 | static struct regulator_consumer_supply supply_ldo_g[] = { | ||
| 68 | { | ||
| 69 | .dev_name = "mmci", | ||
| 70 | .supply = "vmmc", /* Powers MMC/SD card */ | ||
| 71 | }, | ||
| 72 | }; | ||
| 73 | |||
| 74 | static struct regulator_consumer_supply supply_ldo_h[] = { | ||
| 75 | { | ||
| 76 | .dev_name = "xgam_pdi", | ||
| 77 | .supply = "vdisp", /* Powers camera, display etc */ | ||
| 78 | }, | ||
| 79 | }; | ||
| 80 | |||
| 81 | static struct regulator_consumer_supply supply_ldo_k[] = { | ||
| 82 | { | ||
| 83 | .dev_name = "irda", | ||
| 84 | .supply = "vir", /* Power IrDA */ | ||
| 85 | }, | ||
| 86 | }; | ||
| 87 | |||
| 88 | /* | ||
| 89 | * This is a placeholder for whoever wish to use the | ||
| 90 | * external power. | ||
| 91 | */ | ||
| 92 | static struct regulator_consumer_supply supply_ldo_ext[] = { | ||
| 93 | { | ||
| 94 | .dev = NULL, | ||
| 95 | .supply = "vext", /* External power */ | ||
| 96 | }, | ||
| 97 | }; | ||
| 98 | |||
| 99 | /* Preset (hardware defined) voltages for these regulators */ | ||
| 100 | #define LDO_A_VOLTAGE 2750000 | ||
| 101 | #define LDO_C_VOLTAGE 2650000 | ||
| 102 | #define LDO_D_VOLTAGE 2650000 | ||
| 103 | |||
| 104 | static struct ab3100_platform_data ab3100_plf_data = { | ||
| 105 | .reg_constraints = { | ||
| 106 | /* LDO A routing and constraints */ | ||
| 107 | { | ||
| 108 | .constraints = { | ||
| 109 | .name = "vrad", | ||
| 110 | .min_uV = LDO_A_VOLTAGE, | ||
| 111 | .max_uV = LDO_A_VOLTAGE, | ||
| 112 | .valid_modes_mask = REGULATOR_MODE_NORMAL, | ||
| 113 | .always_on = 1, | ||
| 114 | .boot_on = 1, | ||
| 115 | }, | ||
| 116 | }, | ||
| 117 | /* LDO C routing and constraints */ | ||
| 118 | { | ||
| 119 | .constraints = { | ||
| 120 | .min_uV = LDO_C_VOLTAGE, | ||
| 121 | .max_uV = LDO_C_VOLTAGE, | ||
| 122 | .valid_modes_mask = REGULATOR_MODE_NORMAL, | ||
| 123 | }, | ||
| 124 | .num_consumer_supplies = ARRAY_SIZE(supply_ldo_c), | ||
| 125 | .consumer_supplies = supply_ldo_c, | ||
| 126 | }, | ||
| 127 | /* LDO D routing and constraints */ | ||
| 128 | { | ||
| 129 | .constraints = { | ||
| 130 | .min_uV = LDO_D_VOLTAGE, | ||
| 131 | .max_uV = LDO_D_VOLTAGE, | ||
| 132 | .valid_modes_mask = REGULATOR_MODE_NORMAL, | ||
| 133 | .valid_ops_mask = REGULATOR_CHANGE_STATUS, | ||
| 134 | /* | ||
| 135 | * Actually this is boot_on but we need | ||
| 136 | * to reference count it externally to | ||
| 137 | * be able to shut down the system. | ||
| 138 | */ | ||
| 139 | }, | ||
| 140 | .num_consumer_supplies = ARRAY_SIZE(supply_ldo_d), | ||
| 141 | .consumer_supplies = supply_ldo_d, | ||
| 142 | }, | ||
| 143 | /* LDO E routing and constraints */ | ||
| 144 | { | ||
| 145 | .constraints = { | ||
| 146 | .name = "vio", | ||
| 147 | .min_uV = 1800000, | ||
| 148 | .max_uV = 1800000, | ||
| 149 | .valid_modes_mask = REGULATOR_MODE_NORMAL, | ||
| 150 | .valid_ops_mask = | ||
| 151 | REGULATOR_CHANGE_VOLTAGE | | ||
| 152 | REGULATOR_CHANGE_STATUS, | ||
| 153 | .always_on = 1, | ||
| 154 | .boot_on = 1, | ||
| 155 | }, | ||
| 156 | }, | ||
| 157 | /* LDO F routing and constraints */ | ||
| 158 | { | ||
| 159 | .constraints = { | ||
| 160 | .name = "vana25", | ||
| 161 | .min_uV = 2500000, | ||
| 162 | .max_uV = 2500000, | ||
| 163 | .valid_modes_mask = REGULATOR_MODE_NORMAL, | ||
| 164 | .valid_ops_mask = | ||
| 165 | REGULATOR_CHANGE_VOLTAGE | | ||
| 166 | REGULATOR_CHANGE_STATUS, | ||
| 167 | .always_on = 1, | ||
| 168 | .boot_on = 1, | ||
| 169 | }, | ||
| 170 | }, | ||
| 171 | /* LDO G routing and constraints */ | ||
| 172 | { | ||
| 173 | .constraints = { | ||
| 174 | .min_uV = 1500000, | ||
| 175 | .max_uV = 2850000, | ||
| 176 | .valid_modes_mask = REGULATOR_MODE_NORMAL, | ||
| 177 | .valid_ops_mask = | ||
| 178 | REGULATOR_CHANGE_VOLTAGE | | ||
| 179 | REGULATOR_CHANGE_STATUS, | ||
| 180 | }, | ||
| 181 | .num_consumer_supplies = ARRAY_SIZE(supply_ldo_g), | ||
| 182 | .consumer_supplies = supply_ldo_g, | ||
| 183 | }, | ||
| 184 | /* LDO H routing and constraints */ | ||
| 185 | { | ||
| 186 | .constraints = { | ||
| 187 | .min_uV = 1200000, | ||
| 188 | .max_uV = 2750000, | ||
| 189 | .valid_modes_mask = REGULATOR_MODE_NORMAL, | ||
| 190 | .valid_ops_mask = | ||
| 191 | REGULATOR_CHANGE_VOLTAGE | | ||
| 192 | REGULATOR_CHANGE_STATUS, | ||
| 193 | }, | ||
| 194 | .num_consumer_supplies = ARRAY_SIZE(supply_ldo_h), | ||
| 195 | .consumer_supplies = supply_ldo_h, | ||
| 196 | }, | ||
| 197 | /* LDO K routing and constraints */ | ||
| 198 | { | ||
| 199 | .constraints = { | ||
| 200 | .min_uV = 1800000, | ||
| 201 | .max_uV = 2750000, | ||
| 202 | .valid_modes_mask = REGULATOR_MODE_NORMAL, | ||
| 203 | .valid_ops_mask = | ||
| 204 | REGULATOR_CHANGE_VOLTAGE | | ||
| 205 | REGULATOR_CHANGE_STATUS, | ||
| 206 | }, | ||
| 207 | .num_consumer_supplies = ARRAY_SIZE(supply_ldo_k), | ||
| 208 | .consumer_supplies = supply_ldo_k, | ||
| 209 | }, | ||
| 210 | /* External regulator interface. No fixed voltage specified. | ||
| 211 | * If we knew the voltage of the external regulator and it | ||
| 212 | * was connected on the board, we could add the (fixed) | ||
| 213 | * voltage for it here. | ||
| 214 | */ | ||
| 215 | { | ||
| 216 | .constraints = { | ||
| 217 | .min_uV = 0, | ||
| 218 | .max_uV = 0, | ||
| 219 | .valid_modes_mask = REGULATOR_MODE_NORMAL, | ||
| 220 | .valid_ops_mask = | ||
| 221 | REGULATOR_CHANGE_STATUS, | ||
| 222 | }, | ||
| 223 | .num_consumer_supplies = ARRAY_SIZE(supply_ldo_ext), | ||
| 224 | .consumer_supplies = supply_ldo_ext, | ||
| 225 | }, | ||
| 226 | /* Buck converter routing and constraints */ | ||
| 227 | { | ||
| 228 | .constraints = { | ||
| 229 | .name = "vcore", | ||
| 230 | .min_uV = 1200000, | ||
| 231 | .max_uV = 1800000, | ||
| 232 | .valid_modes_mask = REGULATOR_MODE_NORMAL, | ||
| 233 | .valid_ops_mask = | ||
| 234 | REGULATOR_CHANGE_VOLTAGE | | ||
| 235 | REGULATOR_CHANGE_STATUS, | ||
| 236 | .always_on = 1, | ||
| 237 | .boot_on = 1, | ||
| 238 | }, | ||
| 239 | }, | ||
| 240 | }, | ||
| 241 | .reg_initvals = { | ||
| 242 | LDO_A_SETTING, | ||
| 243 | LDO_C_SETTING, | ||
| 244 | LDO_E_SETTING, | ||
| 245 | LDO_E_SLEEP_SETTING, | ||
| 246 | LDO_F_SETTING, | ||
| 247 | LDO_G_SETTING, | ||
| 248 | LDO_H_SETTING, | ||
| 249 | LDO_K_SETTING, | ||
| 250 | LDO_EXT_SETTING, | ||
| 251 | BUCK_SETTING, | ||
| 252 | BUCK_SLEEP_SETTING, | ||
| 253 | LDO_D_SETTING, | ||
| 254 | }, | ||
| 255 | }; | ||
| 256 | |||
| 14 | static struct i2c_board_info __initdata bus0_i2c_board_info[] = { | 257 | static struct i2c_board_info __initdata bus0_i2c_board_info[] = { | 
| 15 | { | 258 | { | 
| 16 | .type = "ab3100", | 259 | .type = "ab3100", | 
| 17 | .addr = 0x48, | 260 | .addr = 0x48, | 
| 18 | .irq = IRQ_U300_IRQ0_EXT, | 261 | .irq = IRQ_U300_IRQ0_EXT, | 
| 262 | .platform_data = &ab3100_plf_data, | ||
| 19 | }, | 263 | }, | 
| 20 | }; | 264 | }; | 
| 21 | 265 | ||
| @@ -38,6 +282,11 @@ void __init u300_i2c_register_board_devices(void) | |||
| 38 | { | 282 | { | 
| 39 | i2c_register_board_info(0, bus0_i2c_board_info, | 283 | i2c_register_board_info(0, bus0_i2c_board_info, | 
| 40 | ARRAY_SIZE(bus0_i2c_board_info)); | 284 | ARRAY_SIZE(bus0_i2c_board_info)); | 
| 285 | /* | ||
| 286 | * This makes the core shut down all unused regulators | ||
| 287 | * after all the initcalls have completed. | ||
| 288 | */ | ||
| 289 | regulator_has_full_constraints(); | ||
| 41 | i2c_register_board_info(1, bus1_i2c_board_info, | 290 | i2c_register_board_info(1, bus1_i2c_board_info, | 
| 42 | ARRAY_SIZE(bus1_i2c_board_info)); | 291 | ARRAY_SIZE(bus1_i2c_board_info)); | 
| 43 | } | 292 | } | 
| diff --git a/arch/arm/mach-u300/mmc.c b/arch/arm/mach-u300/mmc.c index 7b6b016786bb..109f5a6e71c7 100644 --- a/arch/arm/mach-u300/mmc.c +++ b/arch/arm/mach-u300/mmc.c | |||
| @@ -40,64 +40,6 @@ static unsigned int mmc_status(struct device *dev) | |||
| 40 | return mmci_card->mmc_inserted; | 40 | return mmci_card->mmc_inserted; | 
| 41 | } | 41 | } | 
| 42 | 42 | ||
| 43 | /* | ||
| 44 | * Here follows a large chunk of code which will only be enabled if you | ||
| 45 | * have both the AB3100 chip mounted and the MMC subsystem activated. | ||
| 46 | */ | ||
| 47 | |||
| 48 | static u32 mmc_translate_vdd(struct device *dev, unsigned int voltage) | ||
| 49 | { | ||
| 50 | int v; | ||
| 51 | |||
| 52 | /* | ||
| 53 | * MMC Spec: | ||
| 54 | * bit 7: 1.70 - 1.95V | ||
| 55 | * bit 8 - 14: 2.0 - 2.6V | ||
| 56 | * bit 15 - 23: 2.7 - 3.6V | ||
| 57 | * | ||
| 58 | * ab3100 voltages: | ||
| 59 | * 000 - 2.85V | ||
| 60 | * 001 - 2.75V | ||
| 61 | * 010 - 1.8V | ||
| 62 | * 011 - 1.5V | ||
| 63 | */ | ||
| 64 | switch (voltage) { | ||
| 65 | case 8: | ||
| 66 | v = 3; | ||
| 67 | break; | ||
| 68 | case 9: | ||
| 69 | case 10: | ||
| 70 | case 11: | ||
| 71 | case 12: | ||
| 72 | case 13: | ||
| 73 | case 14: | ||
| 74 | case 15: | ||
| 75 | v = 1; | ||
| 76 | break; | ||
| 77 | case 16: | ||
| 78 | v = 1; | ||
| 79 | break; | ||
| 80 | case 17: | ||
| 81 | case 18: | ||
| 82 | case 19: | ||
| 83 | case 20: | ||
| 84 | case 21: | ||
| 85 | case 22: | ||
| 86 | case 23: | ||
| 87 | case 24: | ||
| 88 | v = 0; | ||
| 89 | break; | ||
| 90 | default: | ||
| 91 | v = 0; | ||
| 92 | break; | ||
| 93 | } | ||
| 94 | |||
| 95 | /* PL180 voltage register bits */ | ||
| 96 | return v << 2; | ||
| 97 | } | ||
| 98 | |||
| 99 | |||
| 100 | |||
| 101 | static int mmci_callback(void *data) | 43 | static int mmci_callback(void *data) | 
| 102 | { | 44 | { | 
| 103 | struct mmci_card_event *mmci_card = data; | 45 | struct mmci_card_event *mmci_card = data; | 
| @@ -154,9 +96,11 @@ int __devinit mmc_init(struct amba_device *adev) | |||
| 154 | if (!mmci_card) | 96 | if (!mmci_card) | 
| 155 | return -ENOMEM; | 97 | return -ENOMEM; | 
| 156 | 98 | ||
| 99 | /* | ||
| 100 | * Do not set ocr_mask or voltage translation function, | ||
| 101 | * we have a regulator we can control instead. | ||
| 102 | */ | ||
| 157 | /* Nominally 2.85V on our platform */ | 103 | /* Nominally 2.85V on our platform */ | 
| 158 | mmci_card->mmc0_plat_data.ocr_mask = MMC_VDD_28_29; | ||
| 159 | mmci_card->mmc0_plat_data.translate_vdd = mmc_translate_vdd; | ||
| 160 | mmci_card->mmc0_plat_data.status = mmc_status; | 104 | mmci_card->mmc0_plat_data.status = mmc_status; | 
| 161 | mmci_card->mmc0_plat_data.gpio_wp = -1; | 105 | mmci_card->mmc0_plat_data.gpio_wp = -1; | 
| 162 | mmci_card->mmc0_plat_data.gpio_cd = -1; | 106 | mmci_card->mmc0_plat_data.gpio_cd = -1; | 
| diff --git a/arch/arm/mach-u300/regulator.c b/arch/arm/mach-u300/regulator.c new file mode 100644 index 000000000000..9c53f01c62eb --- /dev/null +++ b/arch/arm/mach-u300/regulator.c | |||
| @@ -0,0 +1,88 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-u300/regulator.c | ||
| 3 | * | ||
| 4 | * Copyright (C) 2009 ST-Ericsson AB | ||
| 5 | * License terms: GNU General Public License (GPL) version 2 | ||
| 6 | * Handle board-bound regulators and board power not related | ||
| 7 | * to any devices. | ||
| 8 | * Author: Linus Walleij <linus.walleij@stericsson.com> | ||
| 9 | */ | ||
| 10 | #include <linux/device.h> | ||
| 11 | #include <linux/signal.h> | ||
| 12 | #include <linux/err.h> | ||
| 13 | #include <linux/regulator/consumer.h> | ||
| 14 | /* Those are just for writing in syscon */ | ||
| 15 | #include <linux/io.h> | ||
| 16 | #include <mach/hardware.h> | ||
| 17 | #include <mach/syscon.h> | ||
| 18 | |||
| 19 | /* | ||
| 20 | * Regulators that power the board and chip and which are | ||
| 21 | * not copuled to specific drivers are hogged in these | ||
| 22 | * instances. | ||
| 23 | */ | ||
| 24 | static struct regulator *main_power_15; | ||
| 25 | |||
| 26 | /* | ||
| 27 | * This function is used from pm.h to shut down the system by | ||
| 28 | * resetting all regulators in turn and then disable regulator | ||
| 29 | * LDO D (main power). | ||
| 30 | */ | ||
| 31 | void u300_pm_poweroff(void) | ||
| 32 | { | ||
| 33 | sigset_t old, all; | ||
| 34 | |||
| 35 | sigfillset(&all); | ||
| 36 | if (!sigprocmask(SIG_BLOCK, &all, &old)) { | ||
| 37 | /* Disable LDO D to shut down the system */ | ||
| 38 | if (main_power_15) | ||
| 39 | regulator_disable(main_power_15); | ||
| 40 | else | ||
| 41 | pr_err("regulator not available to shut down system\n"); | ||
| 42 | (void) sigprocmask(SIG_SETMASK, &old, NULL); | ||
| 43 | } | ||
| 44 | return; | ||
| 45 | } | ||
| 46 | |||
| 47 | /* | ||
| 48 | * Hog the regulators needed to power up the board. | ||
| 49 | */ | ||
| 50 | static int __init u300_init_boardpower(void) | ||
| 51 | { | ||
| 52 | int err; | ||
| 53 | u32 val; | ||
| 54 | |||
| 55 | pr_info("U300: setting up board power\n"); | ||
| 56 | main_power_15 = regulator_get(NULL, "vana15"); | ||
| 57 | if (IS_ERR(main_power_15)) { | ||
| 58 | pr_err("could not get vana15"); | ||
| 59 | return PTR_ERR(main_power_15); | ||
| 60 | } | ||
| 61 | err = regulator_enable(main_power_15); | ||
| 62 | if (err) { | ||
| 63 | pr_err("could not enable vana15\n"); | ||
| 64 | return err; | ||
| 65 | } | ||
| 66 | |||
| 67 | /* | ||
| 68 | * On U300 a special system controller register pulls up the DC | ||
| 69 | * until the vana15 (LDO D) regulator comes up. At this point, all | ||
| 70 | * regulators are set and we do not need power control via | ||
| 71 | * DC ON anymore. This function will likely be moved whenever | ||
| 72 | * the rest of the U300 power management is implemented. | ||
| 73 | */ | ||
| 74 | pr_info("U300: disable system controller pull-up\n"); | ||
| 75 | val = readw(U300_SYSCON_VBASE + U300_SYSCON_PMCR); | ||
| 76 | val &= ~U300_SYSCON_PMCR_DCON_ENABLE; | ||
| 77 | writew(val, U300_SYSCON_VBASE + U300_SYSCON_PMCR); | ||
| 78 | |||
| 79 | /* Register globally exported PM poweroff hook */ | ||
| 80 | pm_power_off = u300_pm_poweroff; | ||
| 81 | |||
| 82 | return 0; | ||
| 83 | } | ||
| 84 | |||
| 85 | /* | ||
| 86 | * So at module init time we hog the regulator! | ||
| 87 | */ | ||
| 88 | module_init(u300_init_boardpower); | ||
| diff --git a/arch/arm/mach-ux500/Kconfig b/arch/arm/mach-ux500/Kconfig new file mode 100644 index 000000000000..03625d744857 --- /dev/null +++ b/arch/arm/mach-ux500/Kconfig | |||
| @@ -0,0 +1,15 @@ | |||
| 1 | menu "ST-Ericsson platform type" | ||
| 2 | depends on ARCH_U8500 | ||
| 3 | |||
| 4 | comment "ST-Ericsson Multicore Mobile Platforms" | ||
| 5 | |||
| 6 | config MACH_U8500_MOP | ||
| 7 | bool "U8500 Early Development platform" | ||
| 8 | default y | ||
| 9 | select ARM_GIC | ||
| 10 | select HAS_MTU | ||
| 11 | help | ||
| 12 | Include support for mop500 development platform | ||
| 13 | based on U8500 architecture. The platform is based | ||
| 14 | on early drop silicon version of 8500. | ||
| 15 | endmenu | ||
| diff --git a/arch/arm/mach-ux500/Makefile b/arch/arm/mach-ux500/Makefile new file mode 100644 index 000000000000..95e6e24c0042 --- /dev/null +++ b/arch/arm/mach-ux500/Makefile | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | # | ||
| 2 | # Makefile for the linux kernel, U8500 machine. | ||
| 3 | # | ||
| 4 | |||
| 5 | obj-y := clock.o | ||
| 6 | obj-$(CONFIG_ARCH_U8500) += cpu-u8500.o | ||
| 7 | obj-$(CONFIG_MACH_U8500_MOP) += board-mop500.o | ||
| 8 | obj-$(CONFIG_SMP) += platsmp.o headsmp.o localtimer.o | ||
| diff --git a/arch/arm/mach-ux500/Makefile.boot b/arch/arm/mach-ux500/Makefile.boot new file mode 100644 index 000000000000..c7e75acfe6c9 --- /dev/null +++ b/arch/arm/mach-ux500/Makefile.boot | |||
| @@ -0,0 +1,4 @@ | |||
| 1 | zreladdr-y := 0x00008000 | ||
| 2 | params_phys-y := 0x00000100 | ||
| 3 | initrd_phys-y := 0x00800000 | ||
| 4 | |||
| diff --git a/arch/arm/mach-ux500/board-mop500.c b/arch/arm/mach-ux500/board-mop500.c new file mode 100644 index 000000000000..aa5afbcc90f9 --- /dev/null +++ b/arch/arm/mach-ux500/board-mop500.c | |||
| @@ -0,0 +1,158 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2008-2009 ST-Ericsson | ||
| 3 | * | ||
| 4 | * Author: Srinidhi KASAGAR <srinidhi.kasagar@stericsson.com> | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License version 2, as | ||
| 8 | * published by the Free Software Foundation. | ||
| 9 | * | ||
| 10 | */ | ||
| 11 | #include <linux/kernel.h> | ||
| 12 | #include <linux/init.h> | ||
| 13 | #include <linux/interrupt.h> | ||
| 14 | #include <linux/platform_device.h> | ||
| 15 | #include <linux/io.h> | ||
| 16 | #include <linux/amba/bus.h> | ||
| 17 | #include <linux/amba/pl022.h> | ||
| 18 | #include <linux/spi/spi.h> | ||
| 19 | |||
| 20 | #include <asm/localtimer.h> | ||
| 21 | #include <asm/mach-types.h> | ||
| 22 | #include <asm/mach/arch.h> | ||
| 23 | |||
| 24 | #include <plat/mtu.h> | ||
| 25 | |||
| 26 | #include <mach/hardware.h> | ||
| 27 | #include <mach/setup.h> | ||
| 28 | |||
| 29 | #define __MEM_4K_RESOURCE(x) \ | ||
| 30 | .res = {.start = (x), .end = (x) + SZ_4K - 1, .flags = IORESOURCE_MEM} | ||
| 31 | |||
| 32 | /* These are active devices on this board */ | ||
| 33 | static struct amba_device uart0_device = { | ||
| 34 | .dev = { .init_name = "uart0" }, | ||
| 35 | __MEM_4K_RESOURCE(U8500_UART0_BASE), | ||
| 36 | .irq = {IRQ_UART0, NO_IRQ}, | ||
| 37 | }; | ||
| 38 | |||
| 39 | static struct amba_device uart1_device = { | ||
| 40 | .dev = { .init_name = "uart1" }, | ||
| 41 | __MEM_4K_RESOURCE(U8500_UART1_BASE), | ||
| 42 | .irq = {IRQ_UART1, NO_IRQ}, | ||
| 43 | }; | ||
| 44 | |||
| 45 | static struct amba_device uart2_device = { | ||
| 46 | .dev = { .init_name = "uart2" }, | ||
| 47 | __MEM_4K_RESOURCE(U8500_UART2_BASE), | ||
| 48 | .irq = {IRQ_UART2, NO_IRQ}, | ||
| 49 | }; | ||
| 50 | |||
| 51 | static void ab4500_spi_cs_control(u32 command) | ||
| 52 | { | ||
| 53 | /* set the FRM signal, which is CS - TODO */ | ||
| 54 | } | ||
| 55 | |||
| 56 | struct pl022_config_chip ab4500_chip_info = { | ||
| 57 | .lbm = LOOPBACK_DISABLED, | ||
| 58 | .com_mode = INTERRUPT_TRANSFER, | ||
| 59 | .iface = SSP_INTERFACE_MOTOROLA_SPI, | ||
| 60 | /* we can act as master only */ | ||
| 61 | .hierarchy = SSP_MASTER, | ||
| 62 | .slave_tx_disable = 0, | ||
| 63 | .endian_rx = SSP_RX_MSB, | ||
| 64 | .endian_tx = SSP_TX_MSB, | ||
| 65 | .data_size = SSP_DATA_BITS_24, | ||
| 66 | .rx_lev_trig = SSP_RX_1_OR_MORE_ELEM, | ||
| 67 | .tx_lev_trig = SSP_TX_1_OR_MORE_EMPTY_LOC, | ||
| 68 | .clk_phase = SSP_CLK_SECOND_EDGE, | ||
| 69 | .clk_pol = SSP_CLK_POL_IDLE_HIGH, | ||
| 70 | .cs_control = ab4500_spi_cs_control, | ||
| 71 | }; | ||
| 72 | |||
| 73 | static struct spi_board_info u8500_spi_devices[] = { | ||
| 74 | { | ||
| 75 | .modalias = "ab4500", | ||
| 76 | .controller_data = &ab4500_chip_info, | ||
| 77 | .max_speed_hz = 12000000, | ||
| 78 | .bus_num = 0, | ||
| 79 | .chip_select = 0, | ||
| 80 | .mode = SPI_MODE_0, | ||
| 81 | .irq = IRQ_AB4500, | ||
| 82 | }, | ||
| 83 | }; | ||
| 84 | |||
| 85 | static struct pl022_ssp_controller ssp0_platform_data = { | ||
| 86 | .bus_id = 0, | ||
| 87 | /* pl022 not yet supports dma */ | ||
| 88 | .enable_dma = 0, | ||
| 89 | /* on this platform, gpio 31,142,144,214 & | ||
| 90 | * 224 are connected as chip selects | ||
| 91 | */ | ||
| 92 | .num_chipselect = 5, | ||
| 93 | }; | ||
| 94 | |||
| 95 | static struct amba_device pl022_device = { | ||
| 96 | .dev = { | ||
| 97 | .coherent_dma_mask = ~0, | ||
| 98 | .init_name = "pl022", | ||
| 99 | .platform_data = &ssp0_platform_data, | ||
| 100 | }, | ||
| 101 | .res = { | ||
| 102 | .start = U8500_SSP0_BASE, | ||
| 103 | .end = U8500_SSP0_BASE + SZ_4K - 1, | ||
| 104 | .flags = IORESOURCE_MEM, | ||
| 105 | }, | ||
| 106 | .irq = {IRQ_SSP0, NO_IRQ }, | ||
| 107 | /* ST-Ericsson modified id */ | ||
| 108 | .periphid = SSP_PER_ID, | ||
| 109 | }; | ||
| 110 | |||
| 111 | static struct amba_device *amba_devs[] __initdata = { | ||
| 112 | &uart0_device, | ||
| 113 | &uart1_device, | ||
| 114 | &uart2_device, | ||
| 115 | &pl022_device, | ||
| 116 | }; | ||
| 117 | |||
| 118 | static void __init u8500_timer_init(void) | ||
| 119 | { | ||
| 120 | #ifdef CONFIG_LOCAL_TIMERS | ||
| 121 | /* Setup the local timer base */ | ||
| 122 | twd_base = __io_address(U8500_TWD_BASE); | ||
| 123 | #endif | ||
| 124 | /* Setup the MTU base */ | ||
| 125 | mtu_base = __io_address(U8500_MTU0_BASE); | ||
| 126 | |||
| 127 | nmdk_timer_init(); | ||
| 128 | } | ||
| 129 | |||
| 130 | static struct sys_timer u8500_timer = { | ||
| 131 | .init = u8500_timer_init, | ||
| 132 | }; | ||
| 133 | |||
| 134 | static void __init u8500_init_machine(void) | ||
| 135 | { | ||
| 136 | int i; | ||
| 137 | |||
| 138 | /* Register the active AMBA devices on this board */ | ||
| 139 | for (i = 0; i < ARRAY_SIZE(amba_devs); i++) | ||
| 140 | amba_device_register(amba_devs[i], &iomem_resource); | ||
| 141 | |||
| 142 | spi_register_board_info(u8500_spi_devices, | ||
| 143 | ARRAY_SIZE(u8500_spi_devices)); | ||
| 144 | |||
| 145 | u8500_init_devices(); | ||
| 146 | } | ||
| 147 | |||
| 148 | MACHINE_START(U8500, "ST-Ericsson MOP500 platform") | ||
| 149 | /* Maintainer: Srinidhi Kasagar <srinidhi.kasagar@stericsson.com> */ | ||
| 150 | .phys_io = U8500_UART2_BASE, | ||
| 151 | .io_pg_offst = (IO_ADDRESS(U8500_UART2_BASE) >> 18) & 0xfffc, | ||
| 152 | .boot_params = 0x100, | ||
| 153 | .map_io = u8500_map_io, | ||
| 154 | .init_irq = u8500_init_irq, | ||
| 155 | /* we re-use nomadik timer here */ | ||
| 156 | .timer = &u8500_timer, | ||
| 157 | .init_machine = u8500_init_machine, | ||
| 158 | MACHINE_END | ||
| diff --git a/arch/arm/mach-ux500/clock.c b/arch/arm/mach-ux500/clock.c new file mode 100644 index 000000000000..20b6ebb6783a --- /dev/null +++ b/arch/arm/mach-ux500/clock.c | |||
| @@ -0,0 +1,95 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2009 ST-Ericsson | ||
| 3 | * heavily based on realview platform | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify | ||
| 6 | * it under the terms of the GNU General Public License version 2 as | ||
| 7 | * published by the Free Software Foundation. | ||
| 8 | */ | ||
| 9 | #include <linux/module.h> | ||
| 10 | #include <linux/kernel.h> | ||
| 11 | #include <linux/list.h> | ||
| 12 | #include <linux/errno.h> | ||
| 13 | #include <linux/err.h> | ||
| 14 | #include <linux/clk.h> | ||
| 15 | #include <linux/mutex.h> | ||
| 16 | |||
| 17 | #include <asm/clkdev.h> | ||
| 18 | |||
| 19 | /* currently the clk structure | ||
| 20 | * just supports rate. This would | ||
| 21 | * be extended as and when new devices are | ||
| 22 | * added - TODO | ||
| 23 | */ | ||
| 24 | struct clk { | ||
| 25 | unsigned long rate; | ||
| 26 | }; | ||
| 27 | |||
| 28 | int clk_enable(struct clk *clk) | ||
| 29 | { | ||
| 30 | return 0; | ||
| 31 | } | ||
| 32 | EXPORT_SYMBOL(clk_enable); | ||
| 33 | |||
| 34 | void clk_disable(struct clk *clk) | ||
| 35 | { | ||
| 36 | } | ||
| 37 | EXPORT_SYMBOL(clk_disable); | ||
| 38 | |||
| 39 | unsigned long clk_get_rate(struct clk *clk) | ||
| 40 | { | ||
| 41 | return clk->rate; | ||
| 42 | } | ||
| 43 | EXPORT_SYMBOL(clk_get_rate); | ||
| 44 | |||
| 45 | long clk_round_rate(struct clk *clk, unsigned long rate) | ||
| 46 | { | ||
| 47 | /*TODO*/ | ||
| 48 | return rate; | ||
| 49 | } | ||
| 50 | EXPORT_SYMBOL(clk_round_rate); | ||
| 51 | |||
| 52 | int clk_set_rate(struct clk *clk, unsigned long rate) | ||
| 53 | { | ||
| 54 | clk->rate = rate; | ||
| 55 | return 0; | ||
| 56 | } | ||
| 57 | EXPORT_SYMBOL(clk_set_rate); | ||
| 58 | |||
| 59 | /* ssp clock */ | ||
| 60 | static struct clk ssp_clk = { | ||
| 61 | .rate = 48000000, | ||
| 62 | }; | ||
| 63 | |||
| 64 | /* fixed clock */ | ||
| 65 | static struct clk f38_clk = { | ||
| 66 | .rate = 38400000, | ||
| 67 | }; | ||
| 68 | |||
| 69 | static struct clk_lookup lookups[] = { | ||
| 70 | { | ||
| 71 | /* UART0 */ | ||
| 72 | .dev_id = "uart0", | ||
| 73 | .clk = &f38_clk, | ||
| 74 | }, { /* UART1 */ | ||
| 75 | .dev_id = "uart1", | ||
| 76 | .clk = &f38_clk, | ||
| 77 | }, { /* UART2 */ | ||
| 78 | .dev_id = "uart2", | ||
| 79 | .clk = &f38_clk, | ||
| 80 | }, { /* SSP */ | ||
| 81 | .dev_id = "pl022", | ||
| 82 | .clk = &ssp_clk, | ||
| 83 | } | ||
| 84 | }; | ||
| 85 | |||
| 86 | static int __init clk_init(void) | ||
| 87 | { | ||
| 88 | int i; | ||
| 89 | |||
| 90 | /* register the clock lookups */ | ||
| 91 | for (i = 0; i < ARRAY_SIZE(lookups); i++) | ||
| 92 | clkdev_add(&lookups[i]); | ||
| 93 | return 0; | ||
| 94 | } | ||
| 95 | arch_initcall(clk_init); | ||
| diff --git a/arch/arm/mach-ux500/cpu-u8500.c b/arch/arm/mach-ux500/cpu-u8500.c new file mode 100644 index 000000000000..5f05e5850f71 --- /dev/null +++ b/arch/arm/mach-ux500/cpu-u8500.c | |||
| @@ -0,0 +1,64 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2008-2009 ST-Ericsson | ||
| 3 | * | ||
| 4 | * Author: Srinidhi KASAGAR <srinidhi.kasagar@stericsson.com> | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License version 2, as | ||
| 8 | * published by the Free Software Foundation. | ||
| 9 | * | ||
| 10 | */ | ||
| 11 | #include <linux/types.h> | ||
| 12 | #include <linux/init.h> | ||
| 13 | #include <linux/device.h> | ||
| 14 | #include <linux/amba/bus.h> | ||
| 15 | #include <linux/irq.h> | ||
| 16 | #include <linux/platform_device.h> | ||
| 17 | |||
| 18 | #include <asm/hardware/gic.h> | ||
| 19 | #include <asm/mach/map.h> | ||
| 20 | #include <mach/hardware.h> | ||
| 21 | |||
| 22 | /* add any platform devices here - TODO */ | ||
| 23 | static struct platform_device *platform_devs[] __initdata = { | ||
| 24 | /* yet to be added, add i2c0, gpio.. */ | ||
| 25 | }; | ||
| 26 | |||
| 27 | #define __IO_DEV_DESC(x, sz) { \ | ||
| 28 | .virtual = IO_ADDRESS(x), \ | ||
| 29 | .pfn = __phys_to_pfn(x), \ | ||
| 30 | .length = sz, \ | ||
| 31 | .type = MT_DEVICE, \ | ||
| 32 | } | ||
| 33 | |||
| 34 | /* minimum static i/o mapping required to boot U8500 platforms */ | ||
| 35 | static struct map_desc u8500_io_desc[] __initdata = { | ||
| 36 | __IO_DEV_DESC(U8500_GIC_CPU_BASE, SZ_4K), | ||
| 37 | __IO_DEV_DESC(U8500_GIC_DIST_BASE, SZ_4K), | ||
| 38 | __IO_DEV_DESC(U8500_MTU0_BASE, SZ_4K), | ||
| 39 | __IO_DEV_DESC(U8500_TWD_BASE, SZ_4K), | ||
| 40 | __IO_DEV_DESC(U8500_SCU_BASE, SZ_4K), | ||
| 41 | __IO_DEV_DESC(U8500_BACKUPRAM0_BASE, SZ_8K), | ||
| 42 | }; | ||
| 43 | |||
| 44 | void __init u8500_map_io(void) | ||
| 45 | { | ||
| 46 | iotable_init(u8500_io_desc, ARRAY_SIZE(u8500_io_desc)); | ||
| 47 | } | ||
| 48 | |||
| 49 | void __init u8500_init_irq(void) | ||
| 50 | { | ||
| 51 | gic_dist_init(0, __io_address(U8500_GIC_DIST_BASE), 29); | ||
| 52 | gic_cpu_init(0, __io_address(U8500_GIC_CPU_BASE)); | ||
| 53 | } | ||
| 54 | |||
| 55 | /* | ||
| 56 | * This function is called from the board init | ||
| 57 | */ | ||
| 58 | void __init u8500_init_devices(void) | ||
| 59 | { | ||
| 60 | /* Register the platform devices */ | ||
| 61 | platform_add_devices(platform_devs, ARRAY_SIZE(platform_devs)); | ||
| 62 | |||
| 63 | return ; | ||
| 64 | } | ||
| diff --git a/arch/arm/mach-ux500/headsmp.S b/arch/arm/mach-ux500/headsmp.S new file mode 100644 index 000000000000..a6be2cdf2b2f --- /dev/null +++ b/arch/arm/mach-ux500/headsmp.S | |||
| @@ -0,0 +1,38 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (c) 2009 ST-Ericsson | ||
| 3 | * This file is based ARM Realview platform | ||
| 4 | * Copyright (c) 2003 ARM Limited | ||
| 5 | * All Rights Reserved | ||
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or modify | ||
| 8 | * it under the terms of the GNU General Public License version 2 as | ||
| 9 | * published by the Free Software Foundation. | ||
| 10 | */ | ||
| 11 | #include <linux/linkage.h> | ||
| 12 | #include <linux/init.h> | ||
| 13 | |||
| 14 | __INIT | ||
| 15 | |||
| 16 | /* | ||
| 17 | * U8500 specific entry point for secondary CPUs. | ||
| 18 | */ | ||
| 19 | ENTRY(u8500_secondary_startup) | ||
| 20 | mrc p15, 0, r0, c0, c0, 5 | ||
| 21 | and r0, r0, #15 | ||
| 22 | adr r4, 1f | ||
| 23 | ldmia r4, {r5, r6} | ||
| 24 | sub r4, r4, r5 | ||
| 25 | add r6, r6, r4 | ||
| 26 | dsb | ||
| 27 | pen: ldr r7, [r6] | ||
| 28 | cmp r7, r0 | ||
| 29 | bne pen | ||
| 30 | |||
| 31 | /* | ||
| 32 | * we've been released from the holding pen: secondary_stack | ||
| 33 | * should now contain the SVC stack for this core | ||
| 34 | */ | ||
| 35 | b secondary_startup | ||
| 36 | |||
| 37 | 1: .long . | ||
| 38 | .long pen_release | ||
| diff --git a/arch/arm/mach-ux500/include/mach/clkdev.h b/arch/arm/mach-ux500/include/mach/clkdev.h new file mode 100644 index 000000000000..04b37a89801c --- /dev/null +++ b/arch/arm/mach-ux500/include/mach/clkdev.h | |||
| @@ -0,0 +1,7 @@ | |||
| 1 | #ifndef __ASM_MACH_CLKDEV_H | ||
| 2 | #define __ASM_MACH_CLKDEV_H | ||
| 3 | |||
| 4 | #define __clk_get(clk) ({ 1; }) | ||
| 5 | #define __clk_put(clk) do { } while (0) | ||
| 6 | |||
| 7 | #endif | ||
| diff --git a/arch/arm/mach-ux500/include/mach/debug-macro.S b/arch/arm/mach-ux500/include/mach/debug-macro.S new file mode 100644 index 000000000000..8f21b6a95dce --- /dev/null +++ b/arch/arm/mach-ux500/include/mach/debug-macro.S | |||
| @@ -0,0 +1,19 @@ | |||
| 1 | /* | ||
| 2 | * Debugging macro include header | ||
| 3 | * | ||
| 4 | * Copyright (C) 2009 ST-Ericsson | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License version 2 as | ||
| 8 | * published by the Free Software Foundation. | ||
| 9 | * | ||
| 10 | */ | ||
| 11 | .macro addruart,rx | ||
| 12 | mrc p15, 0, \rx, c1, c0 | ||
| 13 | tst \rx, #1 @MMU enabled? | ||
| 14 | moveq \rx, #0x80000000 @MMU off, Physical address | ||
| 15 | movne \rx, #0xF0000000 @MMU on, Virtual address | ||
| 16 | orr \rx, \rx, #0x7000 | ||
| 17 | .endm | ||
| 18 | |||
| 19 | #include <asm/hardware/debug-pl01x.S> | ||
| diff --git a/arch/arm/mach-ux500/include/mach/entry-macro.S b/arch/arm/mach-ux500/include/mach/entry-macro.S new file mode 100644 index 000000000000..eece3301fef7 --- /dev/null +++ b/arch/arm/mach-ux500/include/mach/entry-macro.S | |||
| @@ -0,0 +1,89 @@ | |||
| 1 | /* | ||
| 2 | * Low-level IRQ helper macros for U8500 platforms | ||
| 3 | * | ||
| 4 | * Copyright (C) 2009 ST-Ericsson. | ||
| 5 | * | ||
| 6 | * This file is a copy of ARM Realview platform. | ||
| 7 | * -just satisfied checkpatch script. | ||
| 8 | * | ||
| 9 | * This file is licensed under the terms of the GNU General Public | ||
| 10 | * License version 2. This program is licensed "as is" without any | ||
| 11 | * warranty of any kind, whether express or implied. | ||
| 12 | */ | ||
| 13 | #include <mach/hardware.h> | ||
| 14 | #include <asm/hardware/gic.h> | ||
| 15 | |||
| 16 | .macro disable_fiq | ||
| 17 | .endm | ||
| 18 | |||
| 19 | .macro get_irqnr_preamble, base, tmp | ||
| 20 | ldr \base, =IO_ADDRESS(U8500_GIC_CPU_BASE) | ||
| 21 | .endm | ||
| 22 | |||
| 23 | .macro arch_ret_to_user, tmp1, tmp2 | ||
| 24 | .endm | ||
| 25 | |||
| 26 | /* | ||
| 27 | * The interrupt numbering scheme is defined in the | ||
| 28 | * interrupt controller spec. To wit: | ||
| 29 | * | ||
| 30 | * Interrupts 0-15 are IPI | ||
| 31 | * 16-28 are reserved | ||
| 32 | * 29-31 are local. We allow 30 to be used for the watchdog. | ||
| 33 | * 32-1020 are global | ||
| 34 | * 1021-1022 are reserved | ||
| 35 | * 1023 is "spurious" (no interrupt) | ||
| 36 | * | ||
| 37 | * For now, we ignore all local interrupts so only return an | ||
| 38 | * interrupt if it's between 30 and 1020. The test_for_ipi | ||
| 39 | * routine below will pick up on IPIs. | ||
| 40 | * | ||
| 41 | * A simple read from the controller will tell us the number | ||
| 42 | * of the highest priority enabled interrupt. We then just | ||
| 43 | * need to check whether it is in the valid range for an | ||
| 44 | * IRQ (30-1020 inclusive). | ||
| 45 | */ | ||
| 46 | |||
| 47 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
| 48 | |||
| 49 | /* bits 12-10 = src CPU, 9-0 = int # */ | ||
| 50 | ldr \irqstat, [\base, #GIC_CPU_INTACK] | ||
| 51 | |||
| 52 | ldr \tmp, =1021 | ||
| 53 | |||
| 54 | bic \irqnr, \irqstat, #0x1c00 | ||
| 55 | |||
| 56 | cmp \irqnr, #29 | ||
| 57 | cmpcc \irqnr, \irqnr | ||
| 58 | cmpne \irqnr, \tmp | ||
| 59 | cmpcs \irqnr, \irqnr | ||
| 60 | |||
| 61 | .endm | ||
| 62 | |||
| 63 | /* We assume that irqstat (the raw value of the IRQ | ||
| 64 | * acknowledge register) is preserved from the macro above. | ||
| 65 | * If there is an IPI, we immediately signal end of | ||
| 66 | * interrupt on the controller, since this requires the | ||
| 67 | * original irqstat value which we won't easily be able | ||
| 68 | * to recreate later. | ||
| 69 | */ | ||
| 70 | |||
| 71 | .macro test_for_ipi, irqnr, irqstat, base, tmp | ||
| 72 | bic \irqnr, \irqstat, #0x1c00 | ||
| 73 | cmp \irqnr, #16 | ||
| 74 | strcc \irqstat, [\base, #GIC_CPU_EOI] | ||
| 75 | cmpcs \irqnr, \irqnr | ||
| 76 | .endm | ||
| 77 | |||
| 78 | /* As above, this assumes that irqstat and base | ||
| 79 | * are preserved.. | ||
| 80 | */ | ||
| 81 | |||
| 82 | .macro test_for_ltirq, irqnr, irqstat, base, tmp | ||
| 83 | bic \irqnr, \irqstat, #0x1c00 | ||
| 84 | mov \tmp, #0 | ||
| 85 | cmp \irqnr, #29 | ||
| 86 | moveq \tmp, #1 | ||
| 87 | streq \irqstat, [\base, #GIC_CPU_EOI] | ||
| 88 | cmp \tmp, #0 | ||
| 89 | .endm | ||
| diff --git a/arch/arm/mach-ux500/include/mach/hardware.h b/arch/arm/mach-ux500/include/mach/hardware.h new file mode 100644 index 000000000000..6da650202dc7 --- /dev/null +++ b/arch/arm/mach-ux500/include/mach/hardware.h | |||
| @@ -0,0 +1,131 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2009 ST-Ericsson. | ||
| 3 | * | ||
| 4 | * U8500 hardware definitions | ||
| 5 | * | ||
| 6 | * This file is licensed under the terms of the GNU General Public | ||
| 7 | * License version 2. This program is licensed "as is" without any | ||
| 8 | * warranty of any kind, whether express or implied. | ||
| 9 | */ | ||
| 10 | #ifndef __MACH_HARDWARE_H | ||
| 11 | #define __MACH_HARDWARE_H | ||
| 12 | |||
| 13 | /* macros to get at IO space when running virtually | ||
| 14 | * We dont map all the peripherals, let ioremap do | ||
| 15 | * this for us. We map only very basic peripherals here. | ||
| 16 | */ | ||
| 17 | #define U8500_IO_VIRTUAL 0xf0000000 | ||
| 18 | #define U8500_IO_PHYSICAL 0xa0000000 | ||
| 19 | |||
| 20 | /* this macro is used in assembly, so no cast */ | ||
| 21 | #define IO_ADDRESS(x) \ | ||
| 22 | (((x) & 0x0fffffff) + (((x) >> 4) & 0x0f000000) + U8500_IO_VIRTUAL) | ||
| 23 | |||
| 24 | /* typesafe io address */ | ||
| 25 | #define __io_address(n) __io(IO_ADDRESS(n)) | ||
| 26 | |||
| 27 | /* | ||
| 28 | * Base address definitions for U8500 Onchip IPs. All the | ||
| 29 | * peripherals are contained in a single 1 Mbyte region, with | ||
| 30 | * AHB peripherals at the bottom and APB peripherals at the | ||
| 31 | * top of the region. PER stands for PERIPHERAL region which | ||
| 32 | * itself divided into sub regions. | ||
| 33 | */ | ||
| 34 | #define U8500_PER3_BASE 0x80000000 | ||
| 35 | #define U8500_PER2_BASE 0x80110000 | ||
| 36 | #define U8500_PER1_BASE 0x80120000 | ||
| 37 | #define U8500_PER4_BASE 0x80150000 | ||
| 38 | |||
| 39 | #define U8500_PER6_BASE 0xa03c0000 | ||
| 40 | #define U8500_PER5_BASE 0xa03e0000 | ||
| 41 | #define U8500_PER7_BASE 0xa03d0000 | ||
| 42 | |||
| 43 | #define U8500_SVA_BASE 0xa0100000 | ||
| 44 | #define U8500_SIA_BASE 0xa0200000 | ||
| 45 | |||
| 46 | #define U8500_SGA_BASE 0xa0300000 | ||
| 47 | #define U8500_MCDE_BASE 0xa0350000 | ||
| 48 | #define U8500_DMA_BASE 0xa0362000 | ||
| 49 | |||
| 50 | #define U8500_SCU_BASE 0xa0410000 | ||
| 51 | #define U8500_GIC_CPU_BASE 0xa0410100 | ||
| 52 | #define U8500_TWD_BASE 0xa0410600 | ||
| 53 | #define U8500_GIC_DIST_BASE 0xa0411000 | ||
| 54 | #define U8500_L2CC_BASE 0xa0412000 | ||
| 55 | |||
| 56 | #define U8500_TWD_SIZE 0x100 | ||
| 57 | |||
| 58 | /* per7 base addressess */ | ||
| 59 | #define U8500_CR_BASE (U8500_PER7_BASE + 0x8000) | ||
| 60 | #define U8500_MTU0_BASE (U8500_PER7_BASE + 0xa000) | ||
| 61 | #define U8500_MTU1_BASE (U8500_PER7_BASE + 0xb000) | ||
| 62 | #define U8500_TZPC0_BASE (U8500_PER7_BASE + 0xc000) | ||
| 63 | #define U8500_CLKRST7_BASE (U8500_PER7_BASE + 0xf000) | ||
| 64 | |||
| 65 | /* per6 base addressess */ | ||
| 66 | #define U8500_RNG_BASE (U8500_PER6_BASE + 0x0000) | ||
| 67 | #define U8500_PKA_BASE (U8500_PER6_BASE + 0x1000) | ||
| 68 | #define U8500_PKAM_BASE (U8500_PER6_BASE + 0x2000) | ||
| 69 | #define U8500_CRYPTO0_BASE (U8500_PER6_BASE + 0xa000) | ||
| 70 | #define U8500_CRYPTO1_BASE (U8500_PER6_BASE + 0xb000) | ||
| 71 | #define U8500_CLKRST6_BASE (U8500_PER7_BASE + 0xf000) | ||
| 72 | |||
| 73 | /* per5 base addressess */ | ||
| 74 | #define U8500_USBOTG_BASE (U8500_PER5_BASE + 0x00000) | ||
| 75 | #define U8500_GPIO5_BASE (U8500_PER5_BASE + 0x1e000) | ||
| 76 | #define U8500_CLKRST5_BASE (U8500_PER7_BASE + 0x1f000) | ||
| 77 | |||
| 78 | /* per4 base addressess */ | ||
| 79 | #define U8500_BACKUPRAM0_BASE (U8500_PER4_BASE + 0x0000) | ||
| 80 | #define U8500_BACKUPRAM1_BASE (U8500_PER4_BASE + 0x1000) | ||
| 81 | #define U8500_RTT0_BASE (U8500_PER4_BASE + 0x2000) | ||
| 82 | #define U8500_RTT1_BASE (U8500_PER4_BASE + 0x3000) | ||
| 83 | #define U8500_RTC_BASE (U8500_PER4_BASE + 0x4000) | ||
| 84 | #define U8500_SCR_BASE (U8500_PER4_BASE + 0x5000) | ||
| 85 | #define U8500_DMC_BASE (U8500_PER4_BASE + 0x6000) | ||
| 86 | #define U8500_PRCMU_BASE (U8500_PER4_BASE + 0x7000) | ||
| 87 | |||
| 88 | /* per3 base addressess */ | ||
| 89 | #define U8500_FSMC_BASE (U8500_PER3_BASE + 0x0000) | ||
| 90 | #define U8500_SSP0_BASE (U8500_PER3_BASE + 0x2000) | ||
| 91 | #define U8500_SSP1_BASE (U8500_PER3_BASE + 0x3000) | ||
| 92 | #define U8500_I2C0_BASE (U8500_PER3_BASE + 0x4000) | ||
| 93 | #define U8500_SDI2_BASE (U8500_PER3_BASE + 0x5000) | ||
| 94 | #define U8500_SKE_BASE (U8500_PER3_BASE + 0x6000) | ||
| 95 | #define U8500_UART2_BASE (U8500_PER3_BASE + 0x7000) | ||
| 96 | #define U8500_SDI5_BASE (U8500_PER3_BASE + 0x8000) | ||
| 97 | #define U8500_GPIO3_BASE (U8500_PER3_BASE + 0xe000) | ||
| 98 | #define U8500_CLKRST3_BASE (U8500_PER7_BASE + 0xf000) | ||
| 99 | |||
| 100 | /* per2 base addressess */ | ||
| 101 | #define U8500_I2C3_BASE (U8500_PER2_BASE + 0x0000) | ||
| 102 | #define U8500_SPI2_BASE (U8500_PER2_BASE + 0x1000) | ||
| 103 | #define U8500_SPI1_BASE (U8500_PER2_BASE + 0x2000) | ||
| 104 | #define U8500_PWL_BASE (U8500_PER2_BASE + 0x3000) | ||
| 105 | #define U8500_SDI4_BASE (U8500_PER2_BASE + 0x4000) | ||
| 106 | #define U8500_MSP2_BASE (U8500_PER2_BASE + 0x7000) | ||
| 107 | #define U8500_SDI1_BASE (U8500_PER2_BASE + 0x8000) | ||
| 108 | #define U8500_SDI3_BASE (U8500_PER2_BASE + 0x9000) | ||
| 109 | #define U8500_SPI0_BASE (U8500_PER2_BASE + 0xa000) | ||
| 110 | #define U8500_HSIR_BASE (U8500_PER2_BASE + 0xb000) | ||
| 111 | #define U8500_HSIT_BASE (U8500_PER2_BASE + 0xc000) | ||
| 112 | #define U8500_GPIO2_BASE (U8500_PER2_BASE + 0xe000) | ||
| 113 | #define U8500_CLKRST2_BASE (U8500_PER2_BASE + 0xf000) | ||
| 114 | |||
| 115 | /* per1 base addresses */ | ||
| 116 | #define U8500_UART0_BASE (U8500_PER1_BASE + 0x0000) | ||
| 117 | #define U8500_UART1_BASE (U8500_PER1_BASE + 0x1000) | ||
| 118 | #define U8500_I2C1_BASE (U8500_PER1_BASE + 0x2000) | ||
| 119 | #define U8500_MSP0_BASE (U8500_PER1_BASE + 0x3000) | ||
| 120 | #define U8500_MSP1_BASE (U8500_PER1_BASE + 0x4000) | ||
| 121 | #define U8500_SDI0_BASE (U8500_PER1_BASE + 0x6000) | ||
| 122 | #define U8500_I2C2_BASE (U8500_PER1_BASE + 0x8000) | ||
| 123 | #define U8500_SPI3_BASE (U8500_PER1_BASE + 0x9000) | ||
| 124 | #define U8500_SLIM0_BASE (U8500_PER1_BASE + 0xa000) | ||
| 125 | #define U8500_GPIO1_BASE (U8500_PER1_BASE + 0xe000) | ||
| 126 | #define U8500_CLKRST1_BASE (U8500_PER2_BASE + 0xf000) | ||
| 127 | |||
| 128 | /* ST-Ericsson modified pl022 id */ | ||
| 129 | #define SSP_PER_ID 0x01080022 | ||
| 130 | |||
| 131 | #endif /* __MACH_HARDWARE_H */ | ||
| diff --git a/arch/arm/mach-ux500/include/mach/io.h b/arch/arm/mach-ux500/include/mach/io.h new file mode 100644 index 000000000000..1cf3f44ce5b2 --- /dev/null +++ b/arch/arm/mach-ux500/include/mach/io.h | |||
| @@ -0,0 +1,22 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-u8500/include/mach/io.h | ||
| 3 | * | ||
| 4 | * Copyright (C) 1997-1999 Russell King | ||
| 5 | * | ||
| 6 | * Modifications: | ||
| 7 | * 06-12-1997 RMK Created. | ||
| 8 | * 07-04-1999 RMK Major cleanup | ||
| 9 | */ | ||
| 10 | #ifndef __ASM_ARM_ARCH_IO_H | ||
| 11 | #define __ASM_ARM_ARCH_IO_H | ||
| 12 | |||
| 13 | #define IO_SPACE_LIMIT 0xffffffff | ||
| 14 | |||
| 15 | /* | ||
| 16 | * We don't actually have real ISA nor PCI buses, but there is so many | ||
| 17 | * drivers out there that might just work if we fake them... | ||
| 18 | */ | ||
| 19 | #define __io(a) __typesafe_io(a) | ||
| 20 | #define __mem_pci(a) (a) | ||
| 21 | |||
| 22 | #endif | ||
| diff --git a/arch/arm/mach-ux500/include/mach/irqs.h b/arch/arm/mach-ux500/include/mach/irqs.h new file mode 100644 index 000000000000..394b5dd2200f --- /dev/null +++ b/arch/arm/mach-ux500/include/mach/irqs.h | |||
| @@ -0,0 +1,71 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2008 STMicroelectronics | ||
| 3 | * Copyright (C) 2009 ST-Ericsson. | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify | ||
| 6 | * it under the terms of the GNU General Public License as published by | ||
| 7 | * the Free Software Foundation; either version 2 of the License, or | ||
| 8 | * (at your option) any later version. | ||
| 9 | */ | ||
| 10 | #ifndef ASM_ARCH_IRQS_H | ||
| 11 | #define ASM_ARCH_IRQS_H | ||
| 12 | |||
| 13 | #include <mach/hardware.h> | ||
| 14 | |||
| 15 | #define IRQ_LOCALTIMER 29 | ||
| 16 | #define IRQ_LOCALWDOG 30 | ||
| 17 | |||
| 18 | /* Shared Peripheral Interrupt (SHPI) */ | ||
| 19 | #define IRQ_SHPI_START 32 | ||
| 20 | |||
| 21 | /* Interrupt numbers generic for shared peripheral */ | ||
| 22 | #define IRQ_MTU0 (IRQ_SHPI_START + 4) | ||
| 23 | #define IRQ_SPI2 (IRQ_SHPI_START + 6) | ||
| 24 | #define IRQ_SPI0 (IRQ_SHPI_START + 8) | ||
| 25 | #define IRQ_UART0 (IRQ_SHPI_START + 11) | ||
| 26 | #define IRQ_I2C3 (IRQ_SHPI_START + 12) | ||
| 27 | #define IRQ_SSP0 (IRQ_SHPI_START + 14) | ||
| 28 | #define IRQ_MTU1 (IRQ_SHPI_START + 17) | ||
| 29 | #define IRQ_RTC_RTT (IRQ_SHPI_START + 18) | ||
| 30 | #define IRQ_UART1 (IRQ_SHPI_START + 19) | ||
| 31 | #define IRQ_I2C0 (IRQ_SHPI_START + 21) | ||
| 32 | #define IRQ_I2C1 (IRQ_SHPI_START + 22) | ||
| 33 | #define IRQ_USBOTG (IRQ_SHPI_START + 23) | ||
| 34 | #define IRQ_DMA (IRQ_SHPI_START + 25) | ||
| 35 | #define IRQ_UART2 (IRQ_SHPI_START + 26) | ||
| 36 | #define IRQ_HSIR_EXCEP (IRQ_SHPI_START + 29) | ||
| 37 | #define IRQ_MSP0 (IRQ_SHPI_START + 31) | ||
| 38 | #define IRQ_HSIR_CH0_OVRRUN (IRQ_SHPI_START + 32) | ||
| 39 | #define IRQ_HSIR_CH1_OVRRUN (IRQ_SHPI_START + 33) | ||
| 40 | #define IRQ_HSIR_CH2_OVRRUN (IRQ_SHPI_START + 34) | ||
| 41 | #define IRQ_HSIR_CH3_OVRRUN (IRQ_SHPI_START + 35) | ||
| 42 | #define IRQ_AB4500 (IRQ_SHPI_START + 40) | ||
| 43 | #define IRQ_DISP (IRQ_SHPI_START + 48) | ||
| 44 | #define IRQ_SiPI3 (IRQ_SHPI_START + 49) | ||
| 45 | #define IRQ_SSP1 (IRQ_SHPI_START + 52) | ||
| 46 | #define IRQ_I2C2 (IRQ_SHPI_START + 55) | ||
| 47 | #define IRQ_SDMMC0 (IRQ_SHPI_START + 60) | ||
| 48 | #define IRQ_MSP1 (IRQ_SHPI_START + 62) | ||
| 49 | #define IRQ_SPI1 (IRQ_SHPI_START + 96) | ||
| 50 | #define IRQ_MSP2 (IRQ_SHPI_START + 98) | ||
| 51 | #define IRQ_SDMMC4 (IRQ_SHPI_START + 99) | ||
| 52 | #define IRQ_HSIRD0 (IRQ_SHPI_START + 104) | ||
| 53 | #define IRQ_HSIRD1 (IRQ_SHPI_START + 105) | ||
| 54 | #define IRQ_HSITD0 (IRQ_SHPI_START + 106) | ||
| 55 | #define IRQ_HSITD1 (IRQ_SHPI_START + 107) | ||
| 56 | #define IRQ_GPIO0 (IRQ_SHPI_START + 119) | ||
| 57 | #define IRQ_GPIO1 (IRQ_SHPI_START + 120) | ||
| 58 | #define IRQ_GPIO2 (IRQ_SHPI_START + 121) | ||
| 59 | #define IRQ_GPIO3 (IRQ_SHPI_START + 122) | ||
| 60 | #define IRQ_GPIO4 (IRQ_SHPI_START + 123) | ||
| 61 | #define IRQ_GPIO5 (IRQ_SHPI_START + 124) | ||
| 62 | #define IRQ_GPIO6 (IRQ_SHPI_START + 125) | ||
| 63 | #define IRQ_GPIO7 (IRQ_SHPI_START + 126) | ||
| 64 | #define IRQ_GPIO8 (IRQ_SHPI_START + 127) | ||
| 65 | |||
| 66 | /* There are 128 shared peripheral interrupts assigned to | ||
| 67 | * INTID[160:32]. The first 32 interrupts are reserved. | ||
| 68 | */ | ||
| 69 | #define NR_IRQS 161 | ||
| 70 | |||
| 71 | #endif /*ASM_ARCH_IRQS_H*/ | ||
| diff --git a/arch/arm/mach-ux500/include/mach/memory.h b/arch/arm/mach-ux500/include/mach/memory.h new file mode 100644 index 000000000000..510571a59e25 --- /dev/null +++ b/arch/arm/mach-ux500/include/mach/memory.h | |||
| @@ -0,0 +1,18 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2009 ST-Ericsson | ||
| 3 | * | ||
| 4 | * This program is free software; you can redistribute it and/or modify | ||
| 5 | * it under the terms of the GNU General Public License as published by | ||
| 6 | * the Free Software Foundation; either version 2 of the License, or | ||
| 7 | * (at your option) any later version. | ||
| 8 | */ | ||
| 9 | #ifndef __ASM_ARCH_MEMORY_H | ||
| 10 | #define __ASM_ARCH_MEMORY_H | ||
| 11 | |||
| 12 | /* | ||
| 13 | * Physical DRAM offset. | ||
| 14 | */ | ||
| 15 | #define PHYS_OFFSET UL(0x00000000) | ||
| 16 | #define BUS_OFFSET UL(0x00000000) | ||
| 17 | |||
| 18 | #endif | ||
| diff --git a/arch/arm/mach-ux500/include/mach/setup.h b/arch/arm/mach-ux500/include/mach/setup.h new file mode 100644 index 000000000000..cf0ce1687f24 --- /dev/null +++ b/arch/arm/mach-ux500/include/mach/setup.h | |||
| @@ -0,0 +1,23 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2009 ST-Ericsson. | ||
| 3 | * | ||
| 4 | * This program is free software; you can redistribute it and/or modify | ||
| 5 | * it under the terms of the GNU General Public License version 2 as | ||
| 6 | * published by the Free Software Foundation. | ||
| 7 | * | ||
| 8 | * These symbols are needed for board-specific files to call their | ||
| 9 | * own cpu-specific files | ||
| 10 | */ | ||
| 11 | #ifndef __ASM_ARCH_SETUP_H | ||
| 12 | #define __ASM_ARCH_SETUP_H | ||
| 13 | |||
| 14 | #include <asm/mach/time.h> | ||
| 15 | #include <linux/init.h> | ||
| 16 | |||
| 17 | extern void u8500_map_io(void); | ||
| 18 | extern void u8500_init_devices(void); | ||
| 19 | extern void u8500_init_irq(void); | ||
| 20 | /* We re-use nomadik_timer for this platform */ | ||
| 21 | extern void nmdk_timer_init(void); | ||
| 22 | |||
| 23 | #endif /* __ASM_ARCH_SETUP_H */ | ||
| diff --git a/arch/arm/mach-ux500/include/mach/smp.h b/arch/arm/mach-ux500/include/mach/smp.h new file mode 100644 index 000000000000..b59f7bc9725d --- /dev/null +++ b/arch/arm/mach-ux500/include/mach/smp.h | |||
| @@ -0,0 +1,32 @@ | |||
| 1 | /* | ||
| 2 | * This file is based ARM realview platform. | ||
| 3 | * Copyright (C) ARM Limited. | ||
| 4 | * | ||
| 5 | * This file is licensed under the terms of the GNU General Public | ||
| 6 | * License version 2. This program is licensed "as is" without any | ||
| 7 | * warranty of any kind, whether express or implied. | ||
| 8 | */ | ||
| 9 | #ifndef ASMARM_ARCH_SMP_H | ||
| 10 | #define ASMARM_ARCH_SMP_H | ||
| 11 | |||
| 12 | #include <asm/hardware/gic.h> | ||
| 13 | |||
| 14 | /* This is required to wakeup the secondary core */ | ||
| 15 | extern void u8500_secondary_startup(void); | ||
| 16 | |||
| 17 | #define hard_smp_processor_id() \ | ||
| 18 | ({ \ | ||
| 19 | unsigned int cpunum; \ | ||
| 20 | __asm__("mrc p15, 0, %0, c0, c0, 5" \ | ||
| 21 | : "=r" (cpunum)); \ | ||
| 22 | cpunum &= 0x0F; \ | ||
| 23 | }) | ||
| 24 | |||
| 25 | /* | ||
| 26 | * We use IRQ1 as the IPI | ||
| 27 | */ | ||
| 28 | static inline void smp_cross_call(const struct cpumask *mask) | ||
| 29 | { | ||
| 30 | gic_raise_softirq(mask, 1); | ||
| 31 | } | ||
| 32 | #endif | ||
| diff --git a/arch/arm/mach-ux500/include/mach/system.h b/arch/arm/mach-ux500/include/mach/system.h new file mode 100644 index 000000000000..c0cd8006f1a2 --- /dev/null +++ b/arch/arm/mach-ux500/include/mach/system.h | |||
| @@ -0,0 +1,25 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2009 ST-Ericsson. | ||
| 3 | * | ||
| 4 | * This file is licensed under the terms of the GNU General Public | ||
| 5 | * License version 2. This program is licensed "as is" without any | ||
| 6 | * warranty of any kind, whether express or implied. | ||
| 7 | */ | ||
| 8 | #ifndef __ASM_ARCH_SYSTEM_H | ||
| 9 | #define __ASM_ARCH_SYSTEM_H | ||
| 10 | |||
| 11 | static inline void arch_idle(void) | ||
| 12 | { | ||
| 13 | /* | ||
| 14 | * This should do all the clock switching | ||
| 15 | * and wait for interrupt tricks | ||
| 16 | */ | ||
| 17 | cpu_do_idle(); | ||
| 18 | } | ||
| 19 | |||
| 20 | static inline void arch_reset(char mode, const char *cmd) | ||
| 21 | { | ||
| 22 | /* yet to be implemented - TODO */ | ||
| 23 | } | ||
| 24 | |||
| 25 | #endif | ||
| diff --git a/arch/arm/mach-ux500/include/mach/timex.h b/arch/arm/mach-ux500/include/mach/timex.h new file mode 100644 index 000000000000..d0942c174018 --- /dev/null +++ b/arch/arm/mach-ux500/include/mach/timex.h | |||
| @@ -0,0 +1,6 @@ | |||
| 1 | #ifndef __ASM_ARCH_TIMEX_H | ||
| 2 | #define __ASM_ARCH_TIMEX_H | ||
| 3 | |||
| 4 | #define CLOCK_TICK_RATE 110000000 | ||
| 5 | |||
| 6 | #endif | ||
| diff --git a/arch/arm/mach-ux500/include/mach/uncompress.h b/arch/arm/mach-ux500/include/mach/uncompress.h new file mode 100644 index 000000000000..8552eb188b50 --- /dev/null +++ b/arch/arm/mach-ux500/include/mach/uncompress.h | |||
| @@ -0,0 +1,58 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2009 ST-Ericsson | ||
| 3 | * | ||
| 4 | * This program is free software; you can redistribute it and/or modify | ||
| 5 | * it under the terms of the GNU General Public License as published by | ||
| 6 | * the Free Software Foundation; either version 2 of the License, or | ||
| 7 | * (at your option) any later version. | ||
| 8 | * | ||
| 9 | * This program is distributed in the hope that it will be useful, | ||
| 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 12 | * GNU General Public License for more details. | ||
| 13 | * | ||
| 14 | * You should have received a copy of the GNU General Public License | ||
| 15 | * along with this program; if not, write to the Free Software | ||
| 16 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 17 | */ | ||
| 18 | #ifndef __ASM_ARCH_UNCOMPRESS_H | ||
| 19 | #define __ASM_ARCH_UNCOMPRESS_H | ||
| 20 | |||
| 21 | #include <asm/setup.h> | ||
| 22 | #include <linux/io.h> | ||
| 23 | #include <mach/hardware.h> | ||
| 24 | |||
| 25 | #define U8500_UART_DR 0x80007000 | ||
| 26 | #define U8500_UART_LCRH 0x8000702c | ||
| 27 | #define U8500_UART_CR 0x80007030 | ||
| 28 | #define U8500_UART_FR 0x80007018 | ||
| 29 | |||
| 30 | static void putc(const char c) | ||
| 31 | { | ||
| 32 | /* Do nothing if the UART is not enabled. */ | ||
| 33 | if (!(readb(U8500_UART_CR) & 0x1)) | ||
| 34 | return; | ||
| 35 | |||
| 36 | if (c == '\n') | ||
| 37 | putc('\r'); | ||
| 38 | |||
| 39 | while (readb(U8500_UART_FR) & (1 << 5)) | ||
| 40 | barrier(); | ||
| 41 | writeb(c, U8500_UART_DR); | ||
| 42 | } | ||
| 43 | |||
| 44 | static void flush(void) | ||
| 45 | { | ||
| 46 | if (!(readb(U8500_UART_CR) & 0x1)) | ||
| 47 | return; | ||
| 48 | while (readb(U8500_UART_FR) & (1 << 3)) | ||
| 49 | barrier(); | ||
| 50 | } | ||
| 51 | |||
| 52 | static inline void arch_decomp_setup(void) | ||
| 53 | { | ||
| 54 | } | ||
| 55 | |||
| 56 | #define arch_decomp_wdog() /* nothing to do here */ | ||
| 57 | |||
| 58 | #endif /* __ASM_ARCH_UNCOMPRESS_H */ | ||
| diff --git a/arch/arm/mach-ux500/include/mach/vmalloc.h b/arch/arm/mach-ux500/include/mach/vmalloc.h new file mode 100644 index 000000000000..86cdbbce1842 --- /dev/null +++ b/arch/arm/mach-ux500/include/mach/vmalloc.h | |||
| @@ -0,0 +1,18 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2009 ST-Ericsson | ||
| 3 | * | ||
| 4 | * This program is free software; you can redistribute it and/or modify | ||
| 5 | * it under the terms of the GNU General Public License as published by | ||
| 6 | * the Free Software Foundation; either version 2 of the License, or | ||
| 7 | * (at your option) any later version. | ||
| 8 | * | ||
| 9 | * This program is distributed in the hope that it will be useful, | ||
| 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 12 | * GNU General Public License for more details. | ||
| 13 | * | ||
| 14 | * You should have received a copy of the GNU General Public License | ||
| 15 | * along with this program; if not, write to the Free Software | ||
| 16 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 17 | */ | ||
| 18 | #define VMALLOC_END 0xf0000000 | ||
| diff --git a/arch/arm/mach-ux500/localtimer.c b/arch/arm/mach-ux500/localtimer.c new file mode 100644 index 000000000000..2288f6a7c518 --- /dev/null +++ b/arch/arm/mach-ux500/localtimer.c | |||
| @@ -0,0 +1,28 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2008-2009 ST-Ericsson | ||
| 3 | * Srinidhi Kasagar <srinidhi.kasagar@stericsson.com> | ||
| 4 | * | ||
| 5 | * This file is heavily based on relaview platform, almost a copy. | ||
| 6 | * | ||
| 7 | * Copyright (C) 2002 ARM Ltd. | ||
| 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 | #include <linux/init.h> | ||
| 14 | #include <linux/smp.h> | ||
| 15 | #include <linux/clockchips.h> | ||
| 16 | |||
| 17 | #include <asm/irq.h> | ||
| 18 | #include <asm/smp_twd.h> | ||
| 19 | #include <asm/localtimer.h> | ||
| 20 | |||
| 21 | /* | ||
| 22 | * Setup the local clock events for a CPU. | ||
| 23 | */ | ||
| 24 | void __cpuinit local_timer_setup(struct clock_event_device *evt) | ||
| 25 | { | ||
| 26 | evt->irq = IRQ_LOCALTIMER; | ||
| 27 | twd_timer_setup(evt); | ||
| 28 | } | ||
| diff --git a/arch/arm/mach-ux500/platsmp.c b/arch/arm/mach-ux500/platsmp.c new file mode 100644 index 000000000000..8dfe7ca245d8 --- /dev/null +++ b/arch/arm/mach-ux500/platsmp.c | |||
| @@ -0,0 +1,177 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2002 ARM Ltd. | ||
| 3 | * Copyright (C) 2008 STMicroelctronics. | ||
| 4 | * Copyright (C) 2009 ST-Ericsson. | ||
| 5 | * Author: Srinidhi Kasagar <srinidhi.kasagar@stericsson.com> | ||
| 6 | * | ||
| 7 | * This file is based on arm realview platform | ||
| 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 | #include <linux/init.h> | ||
| 14 | #include <linux/errno.h> | ||
| 15 | #include <linux/delay.h> | ||
| 16 | #include <linux/device.h> | ||
| 17 | #include <linux/smp.h> | ||
| 18 | #include <linux/io.h> | ||
| 19 | |||
| 20 | #include <asm/cacheflush.h> | ||
| 21 | #include <asm/localtimer.h> | ||
| 22 | #include <asm/smp_scu.h> | ||
| 23 | #include <mach/hardware.h> | ||
| 24 | |||
| 25 | /* | ||
| 26 | * control for which core is the next to come out of the secondary | ||
| 27 | * boot "holding pen" | ||
| 28 | */ | ||
| 29 | volatile int __cpuinitdata pen_release = -1; | ||
| 30 | |||
| 31 | static unsigned int __init get_core_count(void) | ||
| 32 | { | ||
| 33 | return scu_get_core_count(__io_address(U8500_SCU_BASE)); | ||
| 34 | } | ||
| 35 | |||
| 36 | static DEFINE_SPINLOCK(boot_lock); | ||
| 37 | |||
| 38 | void __cpuinit platform_secondary_init(unsigned int cpu) | ||
| 39 | { | ||
| 40 | trace_hardirqs_off(); | ||
| 41 | |||
| 42 | /* | ||
| 43 | * if any interrupts are already enabled for the primary | ||
| 44 | * core (e.g. timer irq), then they will not have been enabled | ||
| 45 | * for us: do so | ||
| 46 | */ | ||
| 47 | gic_cpu_init(0, __io_address(U8500_GIC_CPU_BASE)); | ||
| 48 | |||
| 49 | /* | ||
| 50 | * let the primary processor know we're out of the | ||
| 51 | * pen, then head off into the C entry point | ||
| 52 | */ | ||
| 53 | pen_release = -1; | ||
| 54 | |||
| 55 | /* | ||
| 56 | * Synchronise with the boot thread. | ||
| 57 | */ | ||
| 58 | spin_lock(&boot_lock); | ||
| 59 | spin_unlock(&boot_lock); | ||
| 60 | } | ||
| 61 | |||
| 62 | int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle) | ||
| 63 | { | ||
| 64 | unsigned long timeout; | ||
| 65 | |||
| 66 | /* | ||
| 67 | * set synchronisation state between this boot processor | ||
| 68 | * and the secondary one | ||
| 69 | */ | ||
| 70 | spin_lock(&boot_lock); | ||
| 71 | |||
| 72 | /* | ||
| 73 | * The secondary processor is waiting to be released from | ||
| 74 | * the holding pen - release it, then wait for it to flag | ||
| 75 | * that it has been released by resetting pen_release. | ||
| 76 | */ | ||
| 77 | pen_release = cpu; | ||
| 78 | flush_cache_all(); | ||
| 79 | |||
| 80 | timeout = jiffies + (1 * HZ); | ||
| 81 | while (time_before(jiffies, timeout)) { | ||
| 82 | if (pen_release == -1) | ||
| 83 | break; | ||
| 84 | } | ||
| 85 | |||
| 86 | /* | ||
| 87 | * now the secondary core is starting up let it run its | ||
| 88 | * calibrations, then wait for it to finish | ||
| 89 | */ | ||
| 90 | spin_unlock(&boot_lock); | ||
| 91 | |||
| 92 | return pen_release != -1 ? -ENOSYS : 0; | ||
| 93 | } | ||
| 94 | |||
| 95 | static void __init wakeup_secondary(void) | ||
| 96 | { | ||
| 97 | /* nobody is to be released from the pen yet */ | ||
| 98 | pen_release = -1; | ||
| 99 | |||
| 100 | /* | ||
| 101 | * write the address of secondary startup into the backup ram register | ||
| 102 | * at offset 0x1FF4, then write the magic number 0xA1FEED01 to the | ||
| 103 | * backup ram register at offset 0x1FF0, which is what boot rom code | ||
| 104 | * is waiting for. This would wake up the secondary core from WFE | ||
| 105 | */ | ||
| 106 | #define U8500_CPU1_JUMPADDR_OFFSET 0x1FF4 | ||
| 107 | __raw_writel(virt_to_phys(u8500_secondary_startup), | ||
| 108 | (void __iomem *)IO_ADDRESS(U8500_BACKUPRAM0_BASE) + | ||
| 109 | U8500_CPU1_JUMPADDR_OFFSET); | ||
| 110 | |||
| 111 | #define U8500_CPU1_WAKEMAGIC_OFFSET 0x1FF0 | ||
| 112 | __raw_writel(0xA1FEED01, | ||
| 113 | (void __iomem *)IO_ADDRESS(U8500_BACKUPRAM0_BASE) + | ||
| 114 | U8500_CPU1_WAKEMAGIC_OFFSET); | ||
| 115 | |||
| 116 | /* make sure write buffer is drained */ | ||
| 117 | mb(); | ||
| 118 | } | ||
| 119 | |||
| 120 | /* | ||
| 121 | * Initialise the CPU possible map early - this describes the CPUs | ||
| 122 | * which may be present or become present in the system. | ||
| 123 | */ | ||
| 124 | void __init smp_init_cpus(void) | ||
| 125 | { | ||
| 126 | unsigned int i, ncores = get_core_count(); | ||
| 127 | |||
| 128 | for (i = 0; i < ncores; i++) | ||
| 129 | set_cpu_possible(i, true); | ||
| 130 | } | ||
| 131 | |||
| 132 | void __init smp_prepare_cpus(unsigned int max_cpus) | ||
| 133 | { | ||
| 134 | unsigned int ncores = get_core_count(); | ||
| 135 | unsigned int cpu = smp_processor_id(); | ||
| 136 | int i; | ||
| 137 | |||
| 138 | /* sanity check */ | ||
| 139 | if (ncores == 0) { | ||
| 140 | printk(KERN_ERR | ||
| 141 | "U8500: strange CM count of 0? Default to 1\n"); | ||
| 142 | ncores = 1; | ||
| 143 | } | ||
| 144 | |||
| 145 | if (ncores > num_possible_cpus()) { | ||
| 146 | printk(KERN_WARNING | ||
| 147 | "U8500: no. of cores (%d) greater than configured " | ||
| 148 | "maximum of %d - clipping\n", | ||
| 149 | ncores, num_possible_cpus()); | ||
| 150 | ncores = num_possible_cpus(); | ||
| 151 | } | ||
| 152 | |||
| 153 | smp_store_cpu_info(cpu); | ||
| 154 | |||
| 155 | /* | ||
| 156 | * are we trying to boot more cores than exist? | ||
| 157 | */ | ||
| 158 | if (max_cpus > ncores) | ||
| 159 | max_cpus = ncores; | ||
| 160 | |||
| 161 | /* | ||
| 162 | * Initialise the present map, which describes the set of CPUs | ||
| 163 | * actually populated at the present time. | ||
| 164 | */ | ||
| 165 | for (i = 0; i < max_cpus; i++) | ||
| 166 | set_cpu_present(i, true); | ||
| 167 | |||
| 168 | if (max_cpus > 1) { | ||
| 169 | /* | ||
| 170 | * Enable the local timer or broadcast device for the | ||
| 171 | * boot CPU, but only if we have more than one CPU. | ||
| 172 | */ | ||
| 173 | percpu_timer_setup(); | ||
| 174 | scu_enable(__io_address(U8500_SCU_BASE)); | ||
| 175 | wakeup_secondary(); | ||
| 176 | } | ||
| 177 | } | ||
| diff --git a/arch/arm/mach-w90x900/dev.c b/arch/arm/mach-w90x900/dev.c index 2a6f98de48d2..51f17b753348 100644 --- a/arch/arm/mach-w90x900/dev.c +++ b/arch/arm/mach-w90x900/dev.c | |||
| @@ -32,6 +32,7 @@ | |||
| 32 | #include <asm/mach-types.h> | 32 | #include <asm/mach-types.h> | 
| 33 | 33 | ||
| 34 | #include <mach/regs-serial.h> | 34 | #include <mach/regs-serial.h> | 
| 35 | #include <mach/nuc900_spi.h> | ||
| 35 | #include <mach/map.h> | 36 | #include <mach/map.h> | 
| 36 | 37 | ||
| 37 | #include "cpu.h" | 38 | #include "cpu.h" | 
| @@ -196,6 +197,18 @@ static struct platform_device nuc900_device_emc = { | |||
| 196 | 197 | ||
| 197 | /* SPI device */ | 198 | /* SPI device */ | 
| 198 | 199 | ||
| 200 | static struct w90p910_spi_info nuc900_spiflash_data = { | ||
| 201 | .num_cs = 1, | ||
| 202 | .lsb = 0, | ||
| 203 | .txneg = 1, | ||
| 204 | .rxneg = 0, | ||
| 205 | .divider = 24, | ||
| 206 | .sleep = 0, | ||
| 207 | .txnum = 0, | ||
| 208 | .txbitlen = 1, | ||
| 209 | .bus_num = 0, | ||
| 210 | }; | ||
| 211 | |||
| 199 | static struct resource nuc900_spi_resource[] = { | 212 | static struct resource nuc900_spi_resource[] = { | 
| 200 | [0] = { | 213 | [0] = { | 
| 201 | .start = W90X900_PA_I2C + SPIOFFSET, | 214 | .start = W90X900_PA_I2C + SPIOFFSET, | 
| @@ -214,6 +227,9 @@ static struct platform_device nuc900_device_spi = { | |||
| 214 | .id = -1, | 227 | .id = -1, | 
| 215 | .num_resources = ARRAY_SIZE(nuc900_spi_resource), | 228 | .num_resources = ARRAY_SIZE(nuc900_spi_resource), | 
| 216 | .resource = nuc900_spi_resource, | 229 | .resource = nuc900_spi_resource, | 
| 230 | .dev = { | ||
| 231 | .platform_data = &nuc900_spiflash_data, | ||
| 232 | } | ||
| 217 | }; | 233 | }; | 
| 218 | 234 | ||
| 219 | /* spi device, spi flash info */ | 235 | /* spi device, spi flash info */ | 
| diff --git a/arch/arm/mm/Kconfig b/arch/arm/mm/Kconfig index 9264d814cd7a..7b7d4c36c11c 100644 --- a/arch/arm/mm/Kconfig +++ b/arch/arm/mm/Kconfig | |||
| @@ -774,5 +774,5 @@ config CACHE_XSC3L2 | |||
| 774 | 774 | ||
| 775 | config ARM_L1_CACHE_SHIFT | 775 | config ARM_L1_CACHE_SHIFT | 
| 776 | int | 776 | int | 
| 777 | default 6 if ARCH_OMAP3 | 777 | default 6 if ARCH_OMAP3 || ARCH_S5PC1XX | 
| 778 | default 5 | 778 | default 5 | 
| diff --git a/arch/arm/mm/Makefile b/arch/arm/mm/Makefile index 055cb2aa8134..42352e75742b 100644 --- a/arch/arm/mm/Makefile +++ b/arch/arm/mm/Makefile | |||
| @@ -6,7 +6,7 @@ obj-y := dma-mapping.o extable.o fault.o init.o \ | |||
| 6 | iomap.o | 6 | iomap.o | 
| 7 | 7 | ||
| 8 | obj-$(CONFIG_MMU) += fault-armv.o flush.o ioremap.o mmap.o \ | 8 | obj-$(CONFIG_MMU) += fault-armv.o flush.o ioremap.o mmap.o \ | 
| 9 | pgd.o mmu.o | 9 | pgd.o mmu.o vmregion.o | 
| 10 | 10 | ||
| 11 | ifneq ($(CONFIG_MMU),y) | 11 | ifneq ($(CONFIG_MMU),y) | 
| 12 | obj-y += nommu.o | 12 | obj-y += nommu.o | 
| diff --git a/arch/arm/mm/cache-l2x0.c b/arch/arm/mm/cache-l2x0.c index b480f1d3591f..747f9a9021bb 100644 --- a/arch/arm/mm/cache-l2x0.c +++ b/arch/arm/mm/cache-l2x0.c | |||
| @@ -99,18 +99,25 @@ void __init l2x0_init(void __iomem *base, __u32 aux_val, __u32 aux_mask) | |||
| 99 | 99 | ||
| 100 | l2x0_base = base; | 100 | l2x0_base = base; | 
| 101 | 101 | ||
| 102 | /* disable L2X0 */ | 102 | /* | 
| 103 | writel(0, l2x0_base + L2X0_CTRL); | 103 | * Check if l2x0 controller is already enabled. | 
| 104 | * If you are booting from non-secure mode | ||
| 105 | * accessing the below registers will fault. | ||
| 106 | */ | ||
| 107 | if (!(readl(l2x0_base + L2X0_CTRL) & 1)) { | ||
| 104 | 108 | ||
| 105 | aux = readl(l2x0_base + L2X0_AUX_CTRL); | 109 | /* l2x0 controller is disabled */ | 
| 106 | aux &= aux_mask; | ||
| 107 | aux |= aux_val; | ||
| 108 | writel(aux, l2x0_base + L2X0_AUX_CTRL); | ||
| 109 | 110 | ||
| 110 | l2x0_inv_all(); | 111 | aux = readl(l2x0_base + L2X0_AUX_CTRL); | 
| 112 | aux &= aux_mask; | ||
| 113 | aux |= aux_val; | ||
| 114 | writel(aux, l2x0_base + L2X0_AUX_CTRL); | ||
| 111 | 115 | ||
| 112 | /* enable L2X0 */ | 116 | l2x0_inv_all(); | 
| 113 | writel(1, l2x0_base + L2X0_CTRL); | 117 | |
| 118 | /* enable L2X0 */ | ||
| 119 | writel(1, l2x0_base + L2X0_CTRL); | ||
| 120 | } | ||
| 114 | 121 | ||
| 115 | outer_cache.inv_range = l2x0_inv_range; | 122 | outer_cache.inv_range = l2x0_inv_range; | 
| 116 | outer_cache.clean_range = l2x0_clean_range; | 123 | outer_cache.clean_range = l2x0_clean_range; | 
| diff --git a/arch/arm/mm/copypage-v6.c b/arch/arm/mm/copypage-v6.c index 4127a7bddfe5..841f355319bf 100644 --- a/arch/arm/mm/copypage-v6.c +++ b/arch/arm/mm/copypage-v6.c | |||
| @@ -41,6 +41,14 @@ static void v6_copy_user_highpage_nonaliasing(struct page *to, | |||
| 41 | kfrom = kmap_atomic(from, KM_USER0); | 41 | kfrom = kmap_atomic(from, KM_USER0); | 
| 42 | kto = kmap_atomic(to, KM_USER1); | 42 | kto = kmap_atomic(to, KM_USER1); | 
| 43 | copy_page(kto, kfrom); | 43 | copy_page(kto, kfrom); | 
| 44 | #ifdef CONFIG_HIGHMEM | ||
| 45 | /* | ||
| 46 | * kmap_atomic() doesn't set the page virtual address, and | ||
| 47 | * kunmap_atomic() takes care of cache flushing already. | ||
| 48 | */ | ||
| 49 | if (page_address(to) != NULL) | ||
| 50 | #endif | ||
| 51 | __cpuc_flush_dcache_page(kto); | ||
| 44 | kunmap_atomic(kto, KM_USER1); | 52 | kunmap_atomic(kto, KM_USER1); | 
| 45 | kunmap_atomic(kfrom, KM_USER0); | 53 | kunmap_atomic(kfrom, KM_USER0); | 
| 46 | } | 54 | } | 
| diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c index b9590a7085ca..26325cb5d368 100644 --- a/arch/arm/mm/dma-mapping.c +++ b/arch/arm/mm/dma-mapping.c | |||
| @@ -63,194 +63,152 @@ static u64 get_coherent_dma_mask(struct device *dev) | |||
| 63 | return mask; | 63 | return mask; | 
| 64 | } | 64 | } | 
| 65 | 65 | ||
| 66 | #ifdef CONFIG_MMU | ||
| 67 | /* | 66 | /* | 
| 68 | * These are the page tables (2MB each) covering uncached, DMA consistent allocations | 67 | * Allocate a DMA buffer for 'dev' of size 'size' using the | 
| 68 | * specified gfp mask. Note that 'size' must be page aligned. | ||
| 69 | */ | 69 | */ | 
| 70 | static pte_t *consistent_pte[NUM_CONSISTENT_PTES]; | 70 | static struct page *__dma_alloc_buffer(struct device *dev, size_t size, gfp_t gfp) | 
| 71 | static DEFINE_SPINLOCK(consistent_lock); | 71 | { | 
| 72 | unsigned long order = get_order(size); | ||
| 73 | struct page *page, *p, *e; | ||
| 74 | void *ptr; | ||
| 75 | u64 mask = get_coherent_dma_mask(dev); | ||
| 72 | 76 | ||
| 73 | /* | 77 | #ifdef CONFIG_DMA_API_DEBUG | 
| 74 | * VM region handling support. | 78 | u64 limit = (mask + 1) & ~mask; | 
| 75 | * | 79 | if (limit && size >= limit) { | 
| 76 | * This should become something generic, handling VM region allocations for | 80 | dev_warn(dev, "coherent allocation too big (requested %#x mask %#llx)\n", | 
| 77 | * vmalloc and similar (ioremap, module space, etc). | 81 | size, mask); | 
| 78 | * | 82 | return NULL; | 
| 79 | * I envisage vmalloc()'s supporting vm_struct becoming: | 83 | } | 
| 80 | * | 84 | #endif | 
| 81 | * struct vm_struct { | ||
| 82 | * struct vm_region region; | ||
| 83 | * unsigned long flags; | ||
| 84 | * struct page **pages; | ||
| 85 | * unsigned int nr_pages; | ||
| 86 | * unsigned long phys_addr; | ||
| 87 | * }; | ||
| 88 | * | ||
| 89 | * get_vm_area() would then call vm_region_alloc with an appropriate | ||
| 90 | * struct vm_region head (eg): | ||
| 91 | * | ||
| 92 | * struct vm_region vmalloc_head = { | ||
| 93 | * .vm_list = LIST_HEAD_INIT(vmalloc_head.vm_list), | ||
| 94 | * .vm_start = VMALLOC_START, | ||
| 95 | * .vm_end = VMALLOC_END, | ||
| 96 | * }; | ||
| 97 | * | ||
| 98 | * However, vmalloc_head.vm_start is variable (typically, it is dependent on | ||
| 99 | * the amount of RAM found at boot time.) I would imagine that get_vm_area() | ||
| 100 | * would have to initialise this each time prior to calling vm_region_alloc(). | ||
| 101 | */ | ||
| 102 | struct arm_vm_region { | ||
| 103 | struct list_head vm_list; | ||
| 104 | unsigned long vm_start; | ||
| 105 | unsigned long vm_end; | ||
| 106 | struct page *vm_pages; | ||
| 107 | int vm_active; | ||
| 108 | }; | ||
| 109 | 85 | ||
| 110 | static struct arm_vm_region consistent_head = { | 86 | if (!mask) | 
| 111 | .vm_list = LIST_HEAD_INIT(consistent_head.vm_list), | 87 | return NULL; | 
| 112 | .vm_start = CONSISTENT_BASE, | ||
| 113 | .vm_end = CONSISTENT_END, | ||
| 114 | }; | ||
| 115 | 88 | ||
| 116 | static struct arm_vm_region * | 89 | if (mask < 0xffffffffULL) | 
| 117 | arm_vm_region_alloc(struct arm_vm_region *head, size_t size, gfp_t gfp) | 90 | gfp |= GFP_DMA; | 
| 118 | { | 91 | |
| 119 | unsigned long addr = head->vm_start, end = head->vm_end - size; | 92 | page = alloc_pages(gfp, order); | 
| 120 | unsigned long flags; | 93 | if (!page) | 
| 121 | struct arm_vm_region *c, *new; | 94 | return NULL; | 
| 122 | |||
| 123 | new = kmalloc(sizeof(struct arm_vm_region), gfp); | ||
| 124 | if (!new) | ||
| 125 | goto out; | ||
| 126 | |||
| 127 | spin_lock_irqsave(&consistent_lock, flags); | ||
| 128 | |||
| 129 | list_for_each_entry(c, &head->vm_list, vm_list) { | ||
| 130 | if ((addr + size) < addr) | ||
| 131 | goto nospc; | ||
| 132 | if ((addr + size) <= c->vm_start) | ||
| 133 | goto found; | ||
| 134 | addr = c->vm_end; | ||
| 135 | if (addr > end) | ||
| 136 | goto nospc; | ||
| 137 | } | ||
| 138 | 95 | ||
| 139 | found: | ||
| 140 | /* | 96 | /* | 
| 141 | * Insert this entry _before_ the one we found. | 97 | * Now split the huge page and free the excess pages | 
| 142 | */ | 98 | */ | 
| 143 | list_add_tail(&new->vm_list, &c->vm_list); | 99 | split_page(page, order); | 
| 144 | new->vm_start = addr; | 100 | for (p = page + (size >> PAGE_SHIFT), e = page + (1 << order); p < e; p++) | 
| 145 | new->vm_end = addr + size; | 101 | __free_page(p); | 
| 146 | new->vm_active = 1; | 102 | |
| 147 | 103 | /* | |
| 148 | spin_unlock_irqrestore(&consistent_lock, flags); | 104 | * Ensure that the allocated pages are zeroed, and that any data | 
| 149 | return new; | 105 | * lurking in the kernel direct-mapped region is invalidated. | 
| 150 | 106 | */ | |
| 151 | nospc: | 107 | ptr = page_address(page); | 
| 152 | spin_unlock_irqrestore(&consistent_lock, flags); | 108 | memset(ptr, 0, size); | 
| 153 | kfree(new); | 109 | dmac_flush_range(ptr, ptr + size); | 
| 154 | out: | 110 | outer_flush_range(__pa(ptr), __pa(ptr) + size); | 
| 155 | return NULL; | 111 | |
| 112 | return page; | ||
| 156 | } | 113 | } | 
| 157 | 114 | ||
| 158 | static struct arm_vm_region *arm_vm_region_find(struct arm_vm_region *head, unsigned long addr) | 115 | /* | 
| 116 | * Free a DMA buffer. 'size' must be page aligned. | ||
| 117 | */ | ||
| 118 | static void __dma_free_buffer(struct page *page, size_t size) | ||
| 159 | { | 119 | { | 
| 160 | struct arm_vm_region *c; | 120 | struct page *e = page + (size >> PAGE_SHIFT); | 
| 161 | 121 | ||
| 162 | list_for_each_entry(c, &head->vm_list, vm_list) { | 122 | while (page < e) { | 
| 163 | if (c->vm_active && c->vm_start == addr) | 123 | __free_page(page); | 
| 164 | goto out; | 124 | page++; | 
| 165 | } | 125 | } | 
| 166 | c = NULL; | ||
| 167 | out: | ||
| 168 | return c; | ||
| 169 | } | 126 | } | 
| 170 | 127 | ||
| 128 | #ifdef CONFIG_MMU | ||
| 129 | /* | ||
| 130 | * These are the page tables (2MB each) covering uncached, DMA consistent allocations | ||
| 131 | */ | ||
| 132 | static pte_t *consistent_pte[NUM_CONSISTENT_PTES]; | ||
| 133 | |||
| 134 | #include "vmregion.h" | ||
| 135 | |||
| 136 | static struct arm_vmregion_head consistent_head = { | ||
| 137 | .vm_lock = __SPIN_LOCK_UNLOCKED(&consistent_head.vm_lock), | ||
| 138 | .vm_list = LIST_HEAD_INIT(consistent_head.vm_list), | ||
| 139 | .vm_start = CONSISTENT_BASE, | ||
| 140 | .vm_end = CONSISTENT_END, | ||
| 141 | }; | ||
| 142 | |||
| 171 | #ifdef CONFIG_HUGETLB_PAGE | 143 | #ifdef CONFIG_HUGETLB_PAGE | 
| 172 | #error ARM Coherent DMA allocator does not (yet) support huge TLB | 144 | #error ARM Coherent DMA allocator does not (yet) support huge TLB | 
| 173 | #endif | 145 | #endif | 
| 174 | 146 | ||
| 175 | static void * | 147 | /* | 
| 176 | __dma_alloc(struct device *dev, size_t size, dma_addr_t *handle, gfp_t gfp, | 148 | * Initialise the consistent memory allocation. | 
| 177 | pgprot_t prot) | 149 | */ | 
| 150 | static int __init consistent_init(void) | ||
| 178 | { | 151 | { | 
| 179 | struct page *page; | 152 | int ret = 0; | 
| 180 | struct arm_vm_region *c; | 153 | pgd_t *pgd; | 
| 181 | unsigned long order; | 154 | pmd_t *pmd; | 
| 182 | u64 mask = get_coherent_dma_mask(dev); | 155 | pte_t *pte; | 
| 183 | u64 limit; | 156 | int i = 0; | 
| 157 | u32 base = CONSISTENT_BASE; | ||
| 184 | 158 | ||
| 185 | if (!consistent_pte[0]) { | 159 | do { | 
| 186 | printk(KERN_ERR "%s: not initialised\n", __func__); | 160 | pgd = pgd_offset(&init_mm, base); | 
| 187 | dump_stack(); | 161 | pmd = pmd_alloc(&init_mm, pgd, base); | 
| 188 | return NULL; | 162 | if (!pmd) { | 
| 189 | } | 163 | printk(KERN_ERR "%s: no pmd tables\n", __func__); | 
| 164 | ret = -ENOMEM; | ||
| 165 | break; | ||
| 166 | } | ||
| 167 | WARN_ON(!pmd_none(*pmd)); | ||
| 190 | 168 | ||
| 191 | if (!mask) | 169 | pte = pte_alloc_kernel(pmd, base); | 
| 192 | goto no_page; | 170 | if (!pte) { | 
| 171 | printk(KERN_ERR "%s: no pte tables\n", __func__); | ||
| 172 | ret = -ENOMEM; | ||
| 173 | break; | ||
| 174 | } | ||
| 193 | 175 | ||
| 194 | /* | 176 | consistent_pte[i++] = pte; | 
| 195 | * Sanity check the allocation size. | 177 | base += (1 << PGDIR_SHIFT); | 
| 196 | */ | 178 | } while (base < CONSISTENT_END); | 
| 197 | size = PAGE_ALIGN(size); | ||
| 198 | limit = (mask + 1) & ~mask; | ||
| 199 | if ((limit && size >= limit) || | ||
| 200 | size >= (CONSISTENT_END - CONSISTENT_BASE)) { | ||
| 201 | printk(KERN_WARNING "coherent allocation too big " | ||
| 202 | "(requested %#x mask %#llx)\n", size, mask); | ||
| 203 | goto no_page; | ||
| 204 | } | ||
| 205 | 179 | ||
| 206 | order = get_order(size); | 180 | return ret; | 
| 181 | } | ||
| 207 | 182 | ||
| 208 | if (mask < 0xffffffffULL) | 183 | core_initcall(consistent_init); | 
| 209 | gfp |= GFP_DMA; | ||
| 210 | 184 | ||
| 211 | page = alloc_pages(gfp, order); | 185 | static void * | 
| 212 | if (!page) | 186 | __dma_alloc_remap(struct page *page, size_t size, gfp_t gfp, pgprot_t prot) | 
| 213 | goto no_page; | 187 | { | 
| 188 | struct arm_vmregion *c; | ||
| 214 | 189 | ||
| 215 | /* | 190 | if (!consistent_pte[0]) { | 
| 216 | * Invalidate any data that might be lurking in the | 191 | printk(KERN_ERR "%s: not initialised\n", __func__); | 
| 217 | * kernel direct-mapped region for device DMA. | 192 | dump_stack(); | 
| 218 | */ | 193 | return NULL; | 
| 219 | { | ||
| 220 | void *ptr = page_address(page); | ||
| 221 | memset(ptr, 0, size); | ||
| 222 | dmac_flush_range(ptr, ptr + size); | ||
| 223 | outer_flush_range(__pa(ptr), __pa(ptr) + size); | ||
| 224 | } | 194 | } | 
| 225 | 195 | ||
| 226 | /* | 196 | /* | 
| 227 | * Allocate a virtual address in the consistent mapping region. | 197 | * Allocate a virtual address in the consistent mapping region. | 
| 228 | */ | 198 | */ | 
| 229 | c = arm_vm_region_alloc(&consistent_head, size, | 199 | c = arm_vmregion_alloc(&consistent_head, size, | 
| 230 | gfp & ~(__GFP_DMA | __GFP_HIGHMEM)); | 200 | gfp & ~(__GFP_DMA | __GFP_HIGHMEM)); | 
| 231 | if (c) { | 201 | if (c) { | 
| 232 | pte_t *pte; | 202 | pte_t *pte; | 
| 233 | struct page *end = page + (1 << order); | ||
| 234 | int idx = CONSISTENT_PTE_INDEX(c->vm_start); | 203 | int idx = CONSISTENT_PTE_INDEX(c->vm_start); | 
| 235 | u32 off = CONSISTENT_OFFSET(c->vm_start) & (PTRS_PER_PTE-1); | 204 | u32 off = CONSISTENT_OFFSET(c->vm_start) & (PTRS_PER_PTE-1); | 
| 236 | 205 | ||
| 237 | pte = consistent_pte[idx] + off; | 206 | pte = consistent_pte[idx] + off; | 
| 238 | c->vm_pages = page; | 207 | c->vm_pages = page; | 
| 239 | 208 | ||
| 240 | split_page(page, order); | ||
| 241 | |||
| 242 | /* | ||
| 243 | * Set the "dma handle" | ||
| 244 | */ | ||
| 245 | *handle = page_to_dma(dev, page); | ||
| 246 | |||
| 247 | do { | 209 | do { | 
| 248 | BUG_ON(!pte_none(*pte)); | 210 | BUG_ON(!pte_none(*pte)); | 
| 249 | 211 | ||
| 250 | /* | ||
| 251 | * x86 does not mark the pages reserved... | ||
| 252 | */ | ||
| 253 | SetPageReserved(page); | ||
| 254 | set_pte_ext(pte, mk_pte(page, prot), 0); | 212 | set_pte_ext(pte, mk_pte(page, prot), 0); | 
| 255 | page++; | 213 | page++; | 
| 256 | pte++; | 214 | pte++; | 
| @@ -261,48 +219,90 @@ __dma_alloc(struct device *dev, size_t size, dma_addr_t *handle, gfp_t gfp, | |||
| 261 | } | 219 | } | 
| 262 | } while (size -= PAGE_SIZE); | 220 | } while (size -= PAGE_SIZE); | 
| 263 | 221 | ||
| 264 | /* | ||
| 265 | * Free the otherwise unused pages. | ||
| 266 | */ | ||
| 267 | while (page < end) { | ||
| 268 | __free_page(page); | ||
| 269 | page++; | ||
| 270 | } | ||
| 271 | |||
| 272 | return (void *)c->vm_start; | 222 | return (void *)c->vm_start; | 
| 273 | } | 223 | } | 
| 274 | |||
| 275 | if (page) | ||
| 276 | __free_pages(page, order); | ||
| 277 | no_page: | ||
| 278 | *handle = ~0; | ||
| 279 | return NULL; | 224 | return NULL; | 
| 280 | } | 225 | } | 
| 226 | |||
| 227 | static void __dma_free_remap(void *cpu_addr, size_t size) | ||
| 228 | { | ||
| 229 | struct arm_vmregion *c; | ||
| 230 | unsigned long addr; | ||
| 231 | pte_t *ptep; | ||
| 232 | int idx; | ||
| 233 | u32 off; | ||
| 234 | |||
| 235 | c = arm_vmregion_find_remove(&consistent_head, (unsigned long)cpu_addr); | ||
| 236 | if (!c) { | ||
| 237 | printk(KERN_ERR "%s: trying to free invalid coherent area: %p\n", | ||
| 238 | __func__, cpu_addr); | ||
| 239 | dump_stack(); | ||
| 240 | return; | ||
| 241 | } | ||
| 242 | |||
| 243 | if ((c->vm_end - c->vm_start) != size) { | ||
| 244 | printk(KERN_ERR "%s: freeing wrong coherent size (%ld != %d)\n", | ||
| 245 | __func__, c->vm_end - c->vm_start, size); | ||
| 246 | dump_stack(); | ||
| 247 | size = c->vm_end - c->vm_start; | ||
| 248 | } | ||
| 249 | |||
| 250 | idx = CONSISTENT_PTE_INDEX(c->vm_start); | ||
| 251 | off = CONSISTENT_OFFSET(c->vm_start) & (PTRS_PER_PTE-1); | ||
| 252 | ptep = consistent_pte[idx] + off; | ||
| 253 | addr = c->vm_start; | ||
| 254 | do { | ||
| 255 | pte_t pte = ptep_get_and_clear(&init_mm, addr, ptep); | ||
| 256 | |||
| 257 | ptep++; | ||
| 258 | addr += PAGE_SIZE; | ||
| 259 | off++; | ||
| 260 | if (off >= PTRS_PER_PTE) { | ||
| 261 | off = 0; | ||
| 262 | ptep = consistent_pte[++idx]; | ||
| 263 | } | ||
| 264 | |||
| 265 | if (pte_none(pte) || !pte_present(pte)) | ||
| 266 | printk(KERN_CRIT "%s: bad page in kernel page table\n", | ||
| 267 | __func__); | ||
| 268 | } while (size -= PAGE_SIZE); | ||
| 269 | |||
| 270 | flush_tlb_kernel_range(c->vm_start, c->vm_end); | ||
| 271 | |||
| 272 | arm_vmregion_free(&consistent_head, c); | ||
| 273 | } | ||
| 274 | |||
| 281 | #else /* !CONFIG_MMU */ | 275 | #else /* !CONFIG_MMU */ | 
| 276 | |||
| 277 | #define __dma_alloc_remap(page, size, gfp, prot) page_address(page) | ||
| 278 | #define __dma_free_remap(addr, size) do { } while (0) | ||
| 279 | |||
| 280 | #endif /* CONFIG_MMU */ | ||
| 281 | |||
| 282 | static void * | 282 | static void * | 
| 283 | __dma_alloc(struct device *dev, size_t size, dma_addr_t *handle, gfp_t gfp, | 283 | __dma_alloc(struct device *dev, size_t size, dma_addr_t *handle, gfp_t gfp, | 
| 284 | pgprot_t prot) | 284 | pgprot_t prot) | 
| 285 | { | 285 | { | 
| 286 | void *virt; | 286 | struct page *page; | 
| 287 | u64 mask = get_coherent_dma_mask(dev); | 287 | void *addr; | 
| 288 | 288 | ||
| 289 | if (!mask) | 289 | *handle = ~0; | 
| 290 | goto error; | 290 | size = PAGE_ALIGN(size); | 
| 291 | 291 | ||
| 292 | if (mask < 0xffffffffULL) | 292 | page = __dma_alloc_buffer(dev, size, gfp); | 
| 293 | gfp |= GFP_DMA; | 293 | if (!page) | 
| 294 | virt = kmalloc(size, gfp); | 294 | return NULL; | 
| 295 | if (!virt) | ||
| 296 | goto error; | ||
| 297 | 295 | ||
| 298 | *handle = virt_to_dma(dev, virt); | 296 | if (!arch_is_coherent()) | 
| 299 | return virt; | 297 | addr = __dma_alloc_remap(page, size, gfp, prot); | 
| 298 | else | ||
| 299 | addr = page_address(page); | ||
| 300 | 300 | ||
| 301 | error: | 301 | if (addr) | 
| 302 | *handle = ~0; | 302 | *handle = page_to_dma(dev, page); | 
| 303 | return NULL; | 303 | |
| 304 | return addr; | ||
| 304 | } | 305 | } | 
| 305 | #endif /* CONFIG_MMU */ | ||
| 306 | 306 | ||
| 307 | /* | 307 | /* | 
| 308 | * Allocate DMA-coherent memory space and return both the kernel remapped | 308 | * Allocate DMA-coherent memory space and return both the kernel remapped | 
| @@ -316,19 +316,8 @@ dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *handle, gfp_t gf | |||
| 316 | if (dma_alloc_from_coherent(dev, size, handle, &memory)) | 316 | if (dma_alloc_from_coherent(dev, size, handle, &memory)) | 
| 317 | return memory; | 317 | return memory; | 
| 318 | 318 | ||
| 319 | if (arch_is_coherent()) { | ||
| 320 | void *virt; | ||
| 321 | |||
| 322 | virt = kmalloc(size, gfp); | ||
| 323 | if (!virt) | ||
| 324 | return NULL; | ||
| 325 | *handle = virt_to_dma(dev, virt); | ||
| 326 | |||
| 327 | return virt; | ||
| 328 | } | ||
| 329 | |||
| 330 | return __dma_alloc(dev, size, handle, gfp, | 319 | return __dma_alloc(dev, size, handle, gfp, | 
| 331 | pgprot_noncached(pgprot_kernel)); | 320 | pgprot_dmacoherent(pgprot_kernel)); | 
| 332 | } | 321 | } | 
| 333 | EXPORT_SYMBOL(dma_alloc_coherent); | 322 | EXPORT_SYMBOL(dma_alloc_coherent); | 
| 334 | 323 | ||
| @@ -349,15 +338,12 @@ static int dma_mmap(struct device *dev, struct vm_area_struct *vma, | |||
| 349 | { | 338 | { | 
| 350 | int ret = -ENXIO; | 339 | int ret = -ENXIO; | 
| 351 | #ifdef CONFIG_MMU | 340 | #ifdef CONFIG_MMU | 
| 352 | unsigned long flags, user_size, kern_size; | 341 | unsigned long user_size, kern_size; | 
| 353 | struct arm_vm_region *c; | 342 | struct arm_vmregion *c; | 
| 354 | 343 | ||
| 355 | user_size = (vma->vm_end - vma->vm_start) >> PAGE_SHIFT; | 344 | user_size = (vma->vm_end - vma->vm_start) >> PAGE_SHIFT; | 
| 356 | 345 | ||
| 357 | spin_lock_irqsave(&consistent_lock, flags); | 346 | c = arm_vmregion_find(&consistent_head, (unsigned long)cpu_addr); | 
| 358 | c = arm_vm_region_find(&consistent_head, (unsigned long)cpu_addr); | ||
| 359 | spin_unlock_irqrestore(&consistent_lock, flags); | ||
| 360 | |||
| 361 | if (c) { | 347 | if (c) { | 
| 362 | unsigned long off = vma->vm_pgoff; | 348 | unsigned long off = vma->vm_pgoff; | 
| 363 | 349 | ||
| @@ -379,7 +365,7 @@ static int dma_mmap(struct device *dev, struct vm_area_struct *vma, | |||
| 379 | int dma_mmap_coherent(struct device *dev, struct vm_area_struct *vma, | 365 | int dma_mmap_coherent(struct device *dev, struct vm_area_struct *vma, | 
| 380 | void *cpu_addr, dma_addr_t dma_addr, size_t size) | 366 | void *cpu_addr, dma_addr_t dma_addr, size_t size) | 
| 381 | { | 367 | { | 
| 382 | vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); | 368 | vma->vm_page_prot = pgprot_dmacoherent(vma->vm_page_prot); | 
| 383 | return dma_mmap(dev, vma, cpu_addr, dma_addr, size); | 369 | return dma_mmap(dev, vma, cpu_addr, dma_addr, size); | 
| 384 | } | 370 | } | 
| 385 | EXPORT_SYMBOL(dma_mmap_coherent); | 371 | EXPORT_SYMBOL(dma_mmap_coherent); | 
| @@ -396,144 +382,23 @@ EXPORT_SYMBOL(dma_mmap_writecombine); | |||
| 396 | * free a page as defined by the above mapping. | 382 | * free a page as defined by the above mapping. | 
| 397 | * Must not be called with IRQs disabled. | 383 | * Must not be called with IRQs disabled. | 
| 398 | */ | 384 | */ | 
| 399 | #ifdef CONFIG_MMU | ||
| 400 | void dma_free_coherent(struct device *dev, size_t size, void *cpu_addr, dma_addr_t handle) | 385 | void dma_free_coherent(struct device *dev, size_t size, void *cpu_addr, dma_addr_t handle) | 
| 401 | { | 386 | { | 
| 402 | struct arm_vm_region *c; | ||
| 403 | unsigned long flags, addr; | ||
| 404 | pte_t *ptep; | ||
| 405 | int idx; | ||
| 406 | u32 off; | ||
| 407 | |||
| 408 | WARN_ON(irqs_disabled()); | 387 | WARN_ON(irqs_disabled()); | 
| 409 | 388 | ||
| 410 | if (dma_release_from_coherent(dev, get_order(size), cpu_addr)) | 389 | if (dma_release_from_coherent(dev, get_order(size), cpu_addr)) | 
| 411 | return; | 390 | return; | 
| 412 | 391 | ||
| 413 | if (arch_is_coherent()) { | ||
| 414 | kfree(cpu_addr); | ||
| 415 | return; | ||
| 416 | } | ||
| 417 | |||
| 418 | size = PAGE_ALIGN(size); | 392 | size = PAGE_ALIGN(size); | 
| 419 | 393 | ||
| 420 | spin_lock_irqsave(&consistent_lock, flags); | 394 | if (!arch_is_coherent()) | 
| 421 | c = arm_vm_region_find(&consistent_head, (unsigned long)cpu_addr); | 395 | __dma_free_remap(cpu_addr, size); | 
| 422 | if (!c) | ||
| 423 | goto no_area; | ||
| 424 | |||
| 425 | c->vm_active = 0; | ||
| 426 | spin_unlock_irqrestore(&consistent_lock, flags); | ||
| 427 | |||
| 428 | if ((c->vm_end - c->vm_start) != size) { | ||
| 429 | printk(KERN_ERR "%s: freeing wrong coherent size (%ld != %d)\n", | ||
| 430 | __func__, c->vm_end - c->vm_start, size); | ||
| 431 | dump_stack(); | ||
| 432 | size = c->vm_end - c->vm_start; | ||
| 433 | } | ||
| 434 | |||
| 435 | idx = CONSISTENT_PTE_INDEX(c->vm_start); | ||
| 436 | off = CONSISTENT_OFFSET(c->vm_start) & (PTRS_PER_PTE-1); | ||
| 437 | ptep = consistent_pte[idx] + off; | ||
| 438 | addr = c->vm_start; | ||
| 439 | do { | ||
| 440 | pte_t pte = ptep_get_and_clear(&init_mm, addr, ptep); | ||
| 441 | unsigned long pfn; | ||
| 442 | |||
| 443 | ptep++; | ||
| 444 | addr += PAGE_SIZE; | ||
| 445 | off++; | ||
| 446 | if (off >= PTRS_PER_PTE) { | ||
| 447 | off = 0; | ||
| 448 | ptep = consistent_pte[++idx]; | ||
| 449 | } | ||
| 450 | |||
| 451 | if (!pte_none(pte) && pte_present(pte)) { | ||
| 452 | pfn = pte_pfn(pte); | ||
| 453 | |||
| 454 | if (pfn_valid(pfn)) { | ||
| 455 | struct page *page = pfn_to_page(pfn); | ||
| 456 | |||
| 457 | /* | ||
| 458 | * x86 does not mark the pages reserved... | ||
| 459 | */ | ||
| 460 | ClearPageReserved(page); | ||
| 461 | |||
| 462 | __free_page(page); | ||
| 463 | continue; | ||
| 464 | } | ||
| 465 | } | ||
| 466 | |||
| 467 | printk(KERN_CRIT "%s: bad page in kernel page table\n", | ||
| 468 | __func__); | ||
| 469 | } while (size -= PAGE_SIZE); | ||
| 470 | |||
| 471 | flush_tlb_kernel_range(c->vm_start, c->vm_end); | ||
| 472 | |||
| 473 | spin_lock_irqsave(&consistent_lock, flags); | ||
| 474 | list_del(&c->vm_list); | ||
| 475 | spin_unlock_irqrestore(&consistent_lock, flags); | ||
| 476 | |||
| 477 | kfree(c); | ||
| 478 | return; | ||
| 479 | 396 | ||
| 480 | no_area: | 397 | __dma_free_buffer(dma_to_page(dev, handle), size); | 
| 481 | spin_unlock_irqrestore(&consistent_lock, flags); | ||
| 482 | printk(KERN_ERR "%s: trying to free invalid coherent area: %p\n", | ||
| 483 | __func__, cpu_addr); | ||
| 484 | dump_stack(); | ||
| 485 | } | 398 | } | 
| 486 | #else /* !CONFIG_MMU */ | ||
| 487 | void dma_free_coherent(struct device *dev, size_t size, void *cpu_addr, dma_addr_t handle) | ||
| 488 | { | ||
| 489 | if (dma_release_from_coherent(dev, get_order(size), cpu_addr)) | ||
| 490 | return; | ||
| 491 | kfree(cpu_addr); | ||
| 492 | } | ||
| 493 | #endif /* CONFIG_MMU */ | ||
| 494 | EXPORT_SYMBOL(dma_free_coherent); | 399 | EXPORT_SYMBOL(dma_free_coherent); | 
| 495 | 400 | ||
| 496 | /* | 401 | /* | 
| 497 | * Initialise the consistent memory allocation. | ||
| 498 | */ | ||
| 499 | static int __init consistent_init(void) | ||
| 500 | { | ||
| 501 | int ret = 0; | ||
| 502 | #ifdef CONFIG_MMU | ||
| 503 | pgd_t *pgd; | ||
| 504 | pmd_t *pmd; | ||
| 505 | pte_t *pte; | ||
| 506 | int i = 0; | ||
| 507 | u32 base = CONSISTENT_BASE; | ||
| 508 | |||
| 509 | do { | ||
| 510 | pgd = pgd_offset(&init_mm, base); | ||
| 511 | pmd = pmd_alloc(&init_mm, pgd, base); | ||
| 512 | if (!pmd) { | ||
| 513 | printk(KERN_ERR "%s: no pmd tables\n", __func__); | ||
| 514 | ret = -ENOMEM; | ||
| 515 | break; | ||
| 516 | } | ||
| 517 | WARN_ON(!pmd_none(*pmd)); | ||
| 518 | |||
| 519 | pte = pte_alloc_kernel(pmd, base); | ||
| 520 | if (!pte) { | ||
| 521 | printk(KERN_ERR "%s: no pte tables\n", __func__); | ||
| 522 | ret = -ENOMEM; | ||
| 523 | break; | ||
| 524 | } | ||
| 525 | |||
| 526 | consistent_pte[i++] = pte; | ||
| 527 | base += (1 << PGDIR_SHIFT); | ||
| 528 | } while (base < CONSISTENT_END); | ||
| 529 | #endif /* !CONFIG_MMU */ | ||
| 530 | |||
| 531 | return ret; | ||
| 532 | } | ||
| 533 | |||
| 534 | core_initcall(consistent_init); | ||
| 535 | |||
| 536 | /* | ||
| 537 | * Make an area consistent for devices. | 402 | * Make an area consistent for devices. | 
| 538 | * Note: Drivers should NOT use this function directly, as it will break | 403 | * Note: Drivers should NOT use this function directly, as it will break | 
| 539 | * platforms with CONFIG_DMABOUNCE. | 404 | * platforms with CONFIG_DMABOUNCE. | 
| diff --git a/arch/arm/mm/fault-armv.c b/arch/arm/mm/fault-armv.c index d0d17b6a3703..729602291958 100644 --- a/arch/arm/mm/fault-armv.c +++ b/arch/arm/mm/fault-armv.c | |||
| @@ -23,6 +23,8 @@ | |||
| 23 | #include <asm/pgtable.h> | 23 | #include <asm/pgtable.h> | 
| 24 | #include <asm/tlbflush.h> | 24 | #include <asm/tlbflush.h> | 
| 25 | 25 | ||
| 26 | #include "mm.h" | ||
| 27 | |||
| 26 | static unsigned long shared_pte_mask = L_PTE_MT_BUFFERABLE; | 28 | static unsigned long shared_pte_mask = L_PTE_MT_BUFFERABLE; | 
| 27 | 29 | ||
| 28 | /* | 30 | /* | 
| @@ -151,7 +153,14 @@ void update_mmu_cache(struct vm_area_struct *vma, unsigned long addr, pte_t pte) | |||
| 151 | if (!pfn_valid(pfn)) | 153 | if (!pfn_valid(pfn)) | 
| 152 | return; | 154 | return; | 
| 153 | 155 | ||
| 156 | /* | ||
| 157 | * The zero page is never written to, so never has any dirty | ||
| 158 | * cache lines, and therefore never needs to be flushed. | ||
| 159 | */ | ||
| 154 | page = pfn_to_page(pfn); | 160 | page = pfn_to_page(pfn); | 
| 161 | if (page == ZERO_PAGE(0)) | ||
| 162 | return; | ||
| 163 | |||
| 155 | mapping = page_mapping(page); | 164 | mapping = page_mapping(page); | 
| 156 | #ifndef CONFIG_SMP | 165 | #ifndef CONFIG_SMP | 
| 157 | if (test_and_clear_bit(PG_dcache_dirty, &page->flags)) | 166 | if (test_and_clear_bit(PG_dcache_dirty, &page->flags)) | 
| diff --git a/arch/arm/mm/flush.c b/arch/arm/mm/flush.c index 7f294f307c83..329594e760cd 100644 --- a/arch/arm/mm/flush.c +++ b/arch/arm/mm/flush.c | |||
| @@ -35,14 +35,12 @@ static void flush_pfn_alias(unsigned long pfn, unsigned long vaddr) | |||
| 35 | : | 35 | : | 
| 36 | : "r" (to), "r" (to + PAGE_SIZE - L1_CACHE_BYTES), "r" (zero) | 36 | : "r" (to), "r" (to + PAGE_SIZE - L1_CACHE_BYTES), "r" (zero) | 
| 37 | : "cc"); | 37 | : "cc"); | 
| 38 | __flush_icache_all(); | ||
| 39 | } | 38 | } | 
| 40 | 39 | ||
| 41 | void flush_cache_mm(struct mm_struct *mm) | 40 | void flush_cache_mm(struct mm_struct *mm) | 
| 42 | { | 41 | { | 
| 43 | if (cache_is_vivt()) { | 42 | if (cache_is_vivt()) { | 
| 44 | if (cpumask_test_cpu(smp_processor_id(), mm_cpumask(mm))) | 43 | vivt_flush_cache_mm(mm); | 
| 45 | __cpuc_flush_user_all(); | ||
| 46 | return; | 44 | return; | 
| 47 | } | 45 | } | 
| 48 | 46 | ||
| @@ -52,16 +50,13 @@ void flush_cache_mm(struct mm_struct *mm) | |||
| 52 | : | 50 | : | 
| 53 | : "r" (0) | 51 | : "r" (0) | 
| 54 | : "cc"); | 52 | : "cc"); | 
| 55 | __flush_icache_all(); | ||
| 56 | } | 53 | } | 
| 57 | } | 54 | } | 
| 58 | 55 | ||
| 59 | void flush_cache_range(struct vm_area_struct *vma, unsigned long start, unsigned long end) | 56 | void flush_cache_range(struct vm_area_struct *vma, unsigned long start, unsigned long end) | 
| 60 | { | 57 | { | 
| 61 | if (cache_is_vivt()) { | 58 | if (cache_is_vivt()) { | 
| 62 | if (cpumask_test_cpu(smp_processor_id(), mm_cpumask(vma->vm_mm))) | 59 | vivt_flush_cache_range(vma, start, end); | 
| 63 | __cpuc_flush_user_range(start & PAGE_MASK, PAGE_ALIGN(end), | ||
| 64 | vma->vm_flags); | ||
| 65 | return; | 60 | return; | 
| 66 | } | 61 | } | 
| 67 | 62 | ||
| @@ -71,22 +66,26 @@ void flush_cache_range(struct vm_area_struct *vma, unsigned long start, unsigned | |||
| 71 | : | 66 | : | 
| 72 | : "r" (0) | 67 | : "r" (0) | 
| 73 | : "cc"); | 68 | : "cc"); | 
| 74 | __flush_icache_all(); | ||
| 75 | } | 69 | } | 
| 70 | |||
| 71 | if (vma->vm_flags & VM_EXEC) | ||
| 72 | __flush_icache_all(); | ||
| 76 | } | 73 | } | 
| 77 | 74 | ||
| 78 | void flush_cache_page(struct vm_area_struct *vma, unsigned long user_addr, unsigned long pfn) | 75 | void flush_cache_page(struct vm_area_struct *vma, unsigned long user_addr, unsigned long pfn) | 
| 79 | { | 76 | { | 
| 80 | if (cache_is_vivt()) { | 77 | if (cache_is_vivt()) { | 
| 81 | if (cpumask_test_cpu(smp_processor_id(), mm_cpumask(vma->vm_mm))) { | 78 | vivt_flush_cache_page(vma, user_addr, pfn); | 
| 82 | unsigned long addr = user_addr & PAGE_MASK; | ||
| 83 | __cpuc_flush_user_range(addr, addr + PAGE_SIZE, vma->vm_flags); | ||
| 84 | } | ||
| 85 | return; | 79 | return; | 
| 86 | } | 80 | } | 
| 87 | 81 | ||
| 88 | if (cache_is_vipt_aliasing()) | 82 | if (cache_is_vipt_aliasing()) { | 
| 89 | flush_pfn_alias(pfn, user_addr); | 83 | flush_pfn_alias(pfn, user_addr); | 
| 84 | __flush_icache_all(); | ||
| 85 | } | ||
| 86 | |||
| 87 | if (vma->vm_flags & VM_EXEC && icache_is_vivt_asid_tagged()) | ||
| 88 | __flush_icache_all(); | ||
| 90 | } | 89 | } | 
| 91 | 90 | ||
| 92 | void flush_ptrace_access(struct vm_area_struct *vma, struct page *page, | 91 | void flush_ptrace_access(struct vm_area_struct *vma, struct page *page, | 
| @@ -94,15 +93,13 @@ void flush_ptrace_access(struct vm_area_struct *vma, struct page *page, | |||
| 94 | unsigned long len, int write) | 93 | unsigned long len, int write) | 
| 95 | { | 94 | { | 
| 96 | if (cache_is_vivt()) { | 95 | if (cache_is_vivt()) { | 
| 97 | if (cpumask_test_cpu(smp_processor_id(), mm_cpumask(vma->vm_mm))) { | 96 | vivt_flush_ptrace_access(vma, page, uaddr, kaddr, len, write); | 
| 98 | unsigned long addr = (unsigned long)kaddr; | ||
| 99 | __cpuc_coherent_kern_range(addr, addr + len); | ||
| 100 | } | ||
| 101 | return; | 97 | return; | 
| 102 | } | 98 | } | 
| 103 | 99 | ||
| 104 | if (cache_is_vipt_aliasing()) { | 100 | if (cache_is_vipt_aliasing()) { | 
| 105 | flush_pfn_alias(page_to_pfn(page), uaddr); | 101 | flush_pfn_alias(page_to_pfn(page), uaddr); | 
| 102 | __flush_icache_all(); | ||
| 106 | return; | 103 | return; | 
| 107 | } | 104 | } | 
| 108 | 105 | ||
| @@ -120,6 +117,8 @@ void flush_ptrace_access(struct vm_area_struct *vma, struct page *page, | |||
| 120 | 117 | ||
| 121 | void __flush_dcache_page(struct address_space *mapping, struct page *page) | 118 | void __flush_dcache_page(struct address_space *mapping, struct page *page) | 
| 122 | { | 119 | { | 
| 120 | void *addr = page_address(page); | ||
| 121 | |||
| 123 | /* | 122 | /* | 
| 124 | * Writeback any data associated with the kernel mapping of this | 123 | * Writeback any data associated with the kernel mapping of this | 
| 125 | * page. This ensures that data in the physical page is mutually | 124 | * page. This ensures that data in the physical page is mutually | 
| @@ -130,9 +129,9 @@ void __flush_dcache_page(struct address_space *mapping, struct page *page) | |||
| 130 | * kmap_atomic() doesn't set the page virtual address, and | 129 | * kmap_atomic() doesn't set the page virtual address, and | 
| 131 | * kunmap_atomic() takes care of cache flushing already. | 130 | * kunmap_atomic() takes care of cache flushing already. | 
| 132 | */ | 131 | */ | 
| 133 | if (page_address(page)) | 132 | if (addr) | 
| 134 | #endif | 133 | #endif | 
| 135 | __cpuc_flush_dcache_page(page_address(page)); | 134 | __cpuc_flush_dcache_page(addr); | 
| 136 | 135 | ||
| 137 | /* | 136 | /* | 
| 138 | * If this is a page cache page, and we have an aliasing VIPT cache, | 137 | * If this is a page cache page, and we have an aliasing VIPT cache, | 
| @@ -196,7 +195,16 @@ static void __flush_dcache_aliases(struct address_space *mapping, struct page *p | |||
| 196 | */ | 195 | */ | 
| 197 | void flush_dcache_page(struct page *page) | 196 | void flush_dcache_page(struct page *page) | 
| 198 | { | 197 | { | 
| 199 | struct address_space *mapping = page_mapping(page); | 198 | struct address_space *mapping; | 
| 199 | |||
| 200 | /* | ||
| 201 | * The zero page is never written to, so never has any dirty | ||
| 202 | * cache lines, and therefore never needs to be flushed. | ||
| 203 | */ | ||
| 204 | if (page == ZERO_PAGE(0)) | ||
| 205 | return; | ||
| 206 | |||
| 207 | mapping = page_mapping(page); | ||
| 200 | 208 | ||
| 201 | #ifndef CONFIG_SMP | 209 | #ifndef CONFIG_SMP | 
| 202 | if (!PageHighMem(page) && mapping && !mapping_mapped(mapping)) | 210 | if (!PageHighMem(page) && mapping && !mapping_mapped(mapping)) | 
| @@ -242,6 +250,7 @@ void __flush_anon_page(struct vm_area_struct *vma, struct page *page, unsigned l | |||
| 242 | * userspace address only. | 250 | * userspace address only. | 
| 243 | */ | 251 | */ | 
| 244 | flush_pfn_alias(pfn, vmaddr); | 252 | flush_pfn_alias(pfn, vmaddr); | 
| 253 | __flush_icache_all(); | ||
| 245 | } | 254 | } | 
| 246 | 255 | ||
| 247 | /* | 256 | /* | 
| diff --git a/arch/arm/mm/mm.h b/arch/arm/mm/mm.h index c4f6f05198e0..a888363398f8 100644 --- a/arch/arm/mm/mm.h +++ b/arch/arm/mm/mm.h | |||
| @@ -24,6 +24,8 @@ struct mem_type { | |||
| 24 | 24 | ||
| 25 | const struct mem_type *get_mem_type(unsigned int type); | 25 | const struct mem_type *get_mem_type(unsigned int type); | 
| 26 | 26 | ||
| 27 | extern void __flush_dcache_page(struct address_space *mapping, struct page *page); | ||
| 28 | |||
| 27 | #endif | 29 | #endif | 
| 28 | 30 | ||
| 29 | struct map_desc; | 31 | struct map_desc; | 
| diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c index ea67be0223ac..2427cdcd9098 100644 --- a/arch/arm/mm/mmu.c +++ b/arch/arm/mm/mmu.c | |||
| @@ -1036,7 +1036,7 @@ void __init paging_init(struct machine_desc *mdesc) | |||
| 1036 | */ | 1036 | */ | 
| 1037 | zero_page = alloc_bootmem_low_pages(PAGE_SIZE); | 1037 | zero_page = alloc_bootmem_low_pages(PAGE_SIZE); | 
| 1038 | empty_zero_page = virt_to_page(zero_page); | 1038 | empty_zero_page = virt_to_page(zero_page); | 
| 1039 | flush_dcache_page(empty_zero_page); | 1039 | __flush_dcache_page(NULL, empty_zero_page); | 
| 1040 | } | 1040 | } | 
| 1041 | 1041 | ||
| 1042 | /* | 1042 | /* | 
| diff --git a/arch/arm/mm/vmregion.c b/arch/arm/mm/vmregion.c new file mode 100644 index 000000000000..19e09bdb1b8a --- /dev/null +++ b/arch/arm/mm/vmregion.c | |||
| @@ -0,0 +1,131 @@ | |||
| 1 | #include <linux/spinlock.h> | ||
| 2 | #include <linux/list.h> | ||
| 3 | #include <linux/slab.h> | ||
| 4 | |||
| 5 | #include "vmregion.h" | ||
| 6 | |||
| 7 | /* | ||
| 8 | * VM region handling support. | ||
| 9 | * | ||
| 10 | * This should become something generic, handling VM region allocations for | ||
| 11 | * vmalloc and similar (ioremap, module space, etc). | ||
| 12 | * | ||
| 13 | * I envisage vmalloc()'s supporting vm_struct becoming: | ||
| 14 | * | ||
| 15 | * struct vm_struct { | ||
| 16 | * struct vmregion region; | ||
| 17 | * unsigned long flags; | ||
| 18 | * struct page **pages; | ||
| 19 | * unsigned int nr_pages; | ||
| 20 | * unsigned long phys_addr; | ||
| 21 | * }; | ||
| 22 | * | ||
| 23 | * get_vm_area() would then call vmregion_alloc with an appropriate | ||
| 24 | * struct vmregion head (eg): | ||
| 25 | * | ||
| 26 | * struct vmregion vmalloc_head = { | ||
| 27 | * .vm_list = LIST_HEAD_INIT(vmalloc_head.vm_list), | ||
| 28 | * .vm_start = VMALLOC_START, | ||
| 29 | * .vm_end = VMALLOC_END, | ||
| 30 | * }; | ||
| 31 | * | ||
| 32 | * However, vmalloc_head.vm_start is variable (typically, it is dependent on | ||
| 33 | * the amount of RAM found at boot time.) I would imagine that get_vm_area() | ||
| 34 | * would have to initialise this each time prior to calling vmregion_alloc(). | ||
| 35 | */ | ||
| 36 | |||
| 37 | struct arm_vmregion * | ||
| 38 | arm_vmregion_alloc(struct arm_vmregion_head *head, size_t size, gfp_t gfp) | ||
| 39 | { | ||
| 40 | unsigned long addr = head->vm_start, end = head->vm_end - size; | ||
| 41 | unsigned long flags; | ||
| 42 | struct arm_vmregion *c, *new; | ||
| 43 | |||
| 44 | if (head->vm_end - head->vm_start < size) { | ||
| 45 | printk(KERN_WARNING "%s: allocation too big (requested %#x)\n", | ||
| 46 | __func__, size); | ||
| 47 | goto out; | ||
| 48 | } | ||
| 49 | |||
| 50 | new = kmalloc(sizeof(struct arm_vmregion), gfp); | ||
| 51 | if (!new) | ||
| 52 | goto out; | ||
| 53 | |||
| 54 | spin_lock_irqsave(&head->vm_lock, flags); | ||
| 55 | |||
| 56 | list_for_each_entry(c, &head->vm_list, vm_list) { | ||
| 57 | if ((addr + size) < addr) | ||
| 58 | goto nospc; | ||
| 59 | if ((addr + size) <= c->vm_start) | ||
| 60 | goto found; | ||
| 61 | addr = c->vm_end; | ||
| 62 | if (addr > end) | ||
| 63 | goto nospc; | ||
| 64 | } | ||
| 65 | |||
| 66 | found: | ||
| 67 | /* | ||
| 68 | * Insert this entry _before_ the one we found. | ||
| 69 | */ | ||
| 70 | list_add_tail(&new->vm_list, &c->vm_list); | ||
| 71 | new->vm_start = addr; | ||
| 72 | new->vm_end = addr + size; | ||
| 73 | new->vm_active = 1; | ||
| 74 | |||
| 75 | spin_unlock_irqrestore(&head->vm_lock, flags); | ||
| 76 | return new; | ||
| 77 | |||
| 78 | nospc: | ||
| 79 | spin_unlock_irqrestore(&head->vm_lock, flags); | ||
| 80 | kfree(new); | ||
| 81 | out: | ||
| 82 | return NULL; | ||
| 83 | } | ||
| 84 | |||
| 85 | static struct arm_vmregion *__arm_vmregion_find(struct arm_vmregion_head *head, unsigned long addr) | ||
| 86 | { | ||
| 87 | struct arm_vmregion *c; | ||
| 88 | |||
| 89 | list_for_each_entry(c, &head->vm_list, vm_list) { | ||
| 90 | if (c->vm_active && c->vm_start == addr) | ||
| 91 | goto out; | ||
| 92 | } | ||
| 93 | c = NULL; | ||
| 94 | out: | ||
| 95 | return c; | ||
| 96 | } | ||
| 97 | |||
| 98 | struct arm_vmregion *arm_vmregion_find(struct arm_vmregion_head *head, unsigned long addr) | ||
| 99 | { | ||
| 100 | struct arm_vmregion *c; | ||
| 101 | unsigned long flags; | ||
| 102 | |||
| 103 | spin_lock_irqsave(&head->vm_lock, flags); | ||
| 104 | c = __arm_vmregion_find(head, addr); | ||
| 105 | spin_unlock_irqrestore(&head->vm_lock, flags); | ||
| 106 | return c; | ||
| 107 | } | ||
| 108 | |||
| 109 | struct arm_vmregion *arm_vmregion_find_remove(struct arm_vmregion_head *head, unsigned long addr) | ||
| 110 | { | ||
| 111 | struct arm_vmregion *c; | ||
| 112 | unsigned long flags; | ||
| 113 | |||
| 114 | spin_lock_irqsave(&head->vm_lock, flags); | ||
| 115 | c = __arm_vmregion_find(head, addr); | ||
| 116 | if (c) | ||
| 117 | c->vm_active = 0; | ||
| 118 | spin_unlock_irqrestore(&head->vm_lock, flags); | ||
| 119 | return c; | ||
| 120 | } | ||
| 121 | |||
| 122 | void arm_vmregion_free(struct arm_vmregion_head *head, struct arm_vmregion *c) | ||
| 123 | { | ||
| 124 | unsigned long flags; | ||
| 125 | |||
| 126 | spin_lock_irqsave(&head->vm_lock, flags); | ||
| 127 | list_del(&c->vm_list); | ||
| 128 | spin_unlock_irqrestore(&head->vm_lock, flags); | ||
| 129 | |||
| 130 | kfree(c); | ||
| 131 | } | ||
| diff --git a/arch/arm/mm/vmregion.h b/arch/arm/mm/vmregion.h new file mode 100644 index 000000000000..6b2cdbdf3a85 --- /dev/null +++ b/arch/arm/mm/vmregion.h | |||
| @@ -0,0 +1,29 @@ | |||
| 1 | #ifndef VMREGION_H | ||
| 2 | #define VMREGION_H | ||
| 3 | |||
| 4 | #include <linux/spinlock.h> | ||
| 5 | #include <linux/list.h> | ||
| 6 | |||
| 7 | struct page; | ||
| 8 | |||
| 9 | struct arm_vmregion_head { | ||
| 10 | spinlock_t vm_lock; | ||
| 11 | struct list_head vm_list; | ||
| 12 | unsigned long vm_start; | ||
| 13 | unsigned long vm_end; | ||
| 14 | }; | ||
| 15 | |||
| 16 | struct arm_vmregion { | ||
| 17 | struct list_head vm_list; | ||
| 18 | unsigned long vm_start; | ||
| 19 | unsigned long vm_end; | ||
| 20 | struct page *vm_pages; | ||
| 21 | int vm_active; | ||
| 22 | }; | ||
| 23 | |||
| 24 | struct arm_vmregion *arm_vmregion_alloc(struct arm_vmregion_head *, size_t, gfp_t); | ||
| 25 | struct arm_vmregion *arm_vmregion_find(struct arm_vmregion_head *, unsigned long); | ||
| 26 | struct arm_vmregion *arm_vmregion_find_remove(struct arm_vmregion_head *, unsigned long); | ||
| 27 | void arm_vmregion_free(struct arm_vmregion_head *, struct arm_vmregion *); | ||
| 28 | |||
| 29 | #endif | ||
| diff --git a/arch/arm/plat-nomadik/Kconfig b/arch/arm/plat-nomadik/Kconfig new file mode 100644 index 000000000000..159daf583f85 --- /dev/null +++ b/arch/arm/plat-nomadik/Kconfig | |||
| @@ -0,0 +1,22 @@ | |||
| 1 | # We keep common IP's here for Nomadik and other similar | ||
| 2 | # familiy of processors from ST-Ericsson. At the moment we have | ||
| 3 | # just MTU, others to follow soon. | ||
| 4 | |||
| 5 | config PLAT_NOMADIK | ||
| 6 | bool | ||
| 7 | depends on ARCH_NOMADIK || ARCH_U8500 | ||
| 8 | default y | ||
| 9 | help | ||
| 10 | Common platform code for Nomadik and other ST-Ericsson | ||
| 11 | platforms. | ||
| 12 | |||
| 13 | if PLAT_NOMADIK | ||
| 14 | |||
| 15 | config HAS_MTU | ||
| 16 | bool | ||
| 17 | help | ||
| 18 | Support for Multi Timer Unit. MTU provides access | ||
| 19 | to multiple interrupt generating programmable | ||
| 20 | 32-bit free running decrementing counters. | ||
| 21 | |||
| 22 | endif | ||
| diff --git a/arch/arm/plat-nomadik/Makefile b/arch/arm/plat-nomadik/Makefile new file mode 100644 index 000000000000..37c7cdd0f8f0 --- /dev/null +++ b/arch/arm/plat-nomadik/Makefile | |||
| @@ -0,0 +1,5 @@ | |||
| 1 | # arch/arm/plat-nomadik/Makefile | ||
| 2 | # Copyright 2009 ST-Ericsson | ||
| 3 | # Licensed under GPLv2 | ||
| 4 | |||
| 5 | obj-$(CONFIG_HAS_MTU) += timer.o | ||
| diff --git a/arch/arm/mach-nomadik/include/mach/mtu.h b/arch/arm/plat-nomadik/include/plat/mtu.h index 76da7f085330..42c907258b14 100644 --- a/arch/arm/mach-nomadik/include/mach/mtu.h +++ b/arch/arm/plat-nomadik/include/plat/mtu.h | |||
| @@ -1,5 +1,8 @@ | |||
| 1 | #ifndef __ASM_ARCH_MTU_H | 1 | #ifndef __PLAT_MTU_H | 
| 2 | #define __ASM_ARCH_MTU_H | 2 | #define __PLAT_MTU_H | 
| 3 | |||
| 4 | /* should be set by the platform code */ | ||
| 5 | extern void __iomem *mtu_base; | ||
| 3 | 6 | ||
| 4 | /* | 7 | /* | 
| 5 | * The MTU device hosts four different counters, with 4 set of | 8 | * The MTU device hosts four different counters, with 4 set of | 
| @@ -41,5 +44,5 @@ | |||
| 41 | #define MTU_PCELL2 0xff8 | 44 | #define MTU_PCELL2 0xff8 | 
| 42 | #define MTU_PCELL3 0xffC | 45 | #define MTU_PCELL3 0xffC | 
| 43 | 46 | ||
| 44 | #endif /* __ASM_ARCH_MTU_H */ | 47 | #endif /* __PLAT_MTU_H */ | 
| 45 | 48 | ||
| diff --git a/arch/arm/mach-nomadik/timer.c b/arch/arm/plat-nomadik/timer.c index d1738e7061d4..62f18ad43a28 100644 --- a/arch/arm/mach-nomadik/timer.c +++ b/arch/arm/plat-nomadik/timer.c | |||
| @@ -15,19 +15,14 @@ | |||
| 15 | #include <linux/clockchips.h> | 15 | #include <linux/clockchips.h> | 
| 16 | #include <linux/jiffies.h> | 16 | #include <linux/jiffies.h> | 
| 17 | #include <asm/mach/time.h> | 17 | #include <asm/mach/time.h> | 
| 18 | #include <mach/mtu.h> | ||
| 19 | 18 | ||
| 20 | #define TIMER_CTRL 0x80 /* No divisor */ | 19 | #include <plat/mtu.h> | 
| 21 | #define TIMER_PERIODIC 0x40 | ||
| 22 | #define TIMER_SZ32BIT 0x02 | ||
| 23 | |||
| 24 | /* Initial value for SRC control register: all timers use MXTAL/8 source */ | ||
| 25 | #define SRC_CR_INIT_MASK 0x00007fff | ||
| 26 | #define SRC_CR_INIT_VAL 0x2aaa8000 | ||
| 27 | 20 | ||
| 28 | static u32 nmdk_count; /* accumulated count */ | 21 | static u32 nmdk_count; /* accumulated count */ | 
| 29 | static u32 nmdk_cycle; /* write-once */ | 22 | static u32 nmdk_cycle; /* write-once */ | 
| 30 | static __iomem void *mtu_base; | 23 | |
| 24 | /* setup by the platform code */ | ||
| 25 | void __iomem *mtu_base; | ||
| 31 | 26 | ||
| 32 | /* | 27 | /* | 
| 33 | * clocksource: the MTU device is a decrementing counters, so we negate | 28 | * clocksource: the MTU device is a decrementing counters, so we negate | 
| @@ -93,7 +88,7 @@ static struct clock_event_device nmdk_clkevt = { | |||
| 93 | static irqreturn_t nmdk_timer_interrupt(int irq, void *dev_id) | 88 | static irqreturn_t nmdk_timer_interrupt(int irq, void *dev_id) | 
| 94 | { | 89 | { | 
| 95 | /* ack: "interrupt clear register" */ | 90 | /* ack: "interrupt clear register" */ | 
| 96 | writel( 1 << 0, mtu_base + MTU_ICR); | 91 | writel(1 << 0, mtu_base + MTU_ICR); | 
| 97 | 92 | ||
| 98 | /* we can't count lost ticks, unfortunately */ | 93 | /* we can't count lost ticks, unfortunately */ | 
| 99 | nmdk_count += nmdk_cycle; | 94 | nmdk_count += nmdk_cycle; | 
| @@ -125,24 +120,14 @@ static void nmdk_timer_reset(void) | |||
| 125 | writel(cr | MTU_CRn_ENA, mtu_base + MTU_CR(0)); | 120 | writel(cr | MTU_CRn_ENA, mtu_base + MTU_CR(0)); | 
| 126 | } | 121 | } | 
| 127 | 122 | ||
| 128 | static void __init nmdk_timer_init(void) | 123 | void __init nmdk_timer_init(void) | 
| 129 | { | 124 | { | 
| 130 | u32 src_cr; | ||
| 131 | unsigned long rate; | 125 | unsigned long rate; | 
| 132 | int bits; | 126 | int bits; | 
| 133 | 127 | ||
| 134 | rate = CLOCK_TICK_RATE; /* 2.4MHz */ | 128 | rate = CLOCK_TICK_RATE; /* 2.4MHz */ | 
| 135 | nmdk_cycle = (rate + HZ/2) / HZ; | 129 | nmdk_cycle = (rate + HZ/2) / HZ; | 
| 136 | 130 | ||
| 137 | /* Configure timer sources in "system reset controller" ctrl reg */ | ||
| 138 | src_cr = readl(io_p2v(NOMADIK_SRC_BASE)); | ||
| 139 | src_cr &= SRC_CR_INIT_MASK; | ||
| 140 | src_cr |= SRC_CR_INIT_VAL; | ||
| 141 | writel(src_cr, io_p2v(NOMADIK_SRC_BASE)); | ||
| 142 | |||
| 143 | /* Save global pointer to mtu, used by functions above */ | ||
| 144 | mtu_base = io_p2v(NOMADIK_MTU0_BASE); | ||
| 145 | |||
| 146 | /* Init the timer and register clocksource */ | 131 | /* Init the timer and register clocksource */ | 
| 147 | nmdk_timer_reset(); | 132 | nmdk_timer_reset(); | 
| 148 | 133 | ||
| @@ -150,7 +135,9 @@ static void __init nmdk_timer_init(void) | |||
| 150 | bits = 8*sizeof(nmdk_count); | 135 | bits = 8*sizeof(nmdk_count); | 
| 151 | nmdk_clksrc.mask = CLOCKSOURCE_MASK(bits); | 136 | nmdk_clksrc.mask = CLOCKSOURCE_MASK(bits); | 
| 152 | 137 | ||
| 153 | clocksource_register(&nmdk_clksrc); | 138 | if (clocksource_register(&nmdk_clksrc)) | 
| 139 | printk(KERN_ERR "timer: failed to initialize clock " | ||
| 140 | "source %s\n", nmdk_clksrc.name); | ||
| 154 | 141 | ||
| 155 | /* Register irq and clockevents */ | 142 | /* Register irq and clockevents */ | 
| 156 | setup_irq(IRQ_MTU0, &nmdk_timer_irq); | 143 | setup_irq(IRQ_MTU0, &nmdk_timer_irq); | 
| @@ -158,7 +145,3 @@ static void __init nmdk_timer_init(void) | |||
| 158 | nmdk_clkevt.cpumask = cpumask_of(0); | 145 | nmdk_clkevt.cpumask = cpumask_of(0); | 
| 159 | clockevents_register_device(&nmdk_clkevt); | 146 | clockevents_register_device(&nmdk_clkevt); | 
| 160 | } | 147 | } | 
| 161 | |||
| 162 | struct sys_timer nomadik_timer = { | ||
| 163 | .init = nmdk_timer_init, | ||
| 164 | }; | ||
| diff --git a/arch/arm/plat-omap/include/mach/memory.h b/arch/arm/plat-omap/include/mach/memory.h index 9ad41dc484c1..3325f7b49eaa 100644 --- a/arch/arm/plat-omap/include/mach/memory.h +++ b/arch/arm/plat-omap/include/mach/memory.h | |||
| @@ -68,6 +68,13 @@ | |||
| 68 | __dma = __dma - PHYS_OFFSET + OMAP1510_LB_OFFSET; \ | 68 | __dma = __dma - PHYS_OFFSET + OMAP1510_LB_OFFSET; \ | 
| 69 | __dma; }) | 69 | __dma; }) | 
| 70 | 70 | ||
| 71 | #define __arch_dma_to_page(dev, addr) \ | ||
| 72 | ({ dma_addr_t __dma = addr; \ | ||
| 73 | if (is_lbus_device(dev)) \ | ||
| 74 | __dma += PHYS_OFFSET - OMAP1510_LB_OFFSET; \ | ||
| 75 | phys_to_page(__dma); \ | ||
| 76 | }) | ||
| 77 | |||
| 71 | #define __arch_dma_to_virt(dev, addr) ({ (void *) (is_lbus_device(dev) ? \ | 78 | #define __arch_dma_to_virt(dev, addr) ({ (void *) (is_lbus_device(dev) ? \ | 
| 72 | lbus_to_virt(addr) : \ | 79 | lbus_to_virt(addr) : \ | 
| 73 | __phys_to_virt(addr)); }) | 80 | __phys_to_virt(addr)); }) | 
| diff --git a/drivers/dma/Kconfig b/drivers/dma/Kconfig index b401dadad4a8..eb140ff38c27 100644 --- a/drivers/dma/Kconfig +++ b/drivers/dma/Kconfig | |||
| @@ -54,7 +54,7 @@ config DW_DMAC | |||
| 54 | 54 | ||
| 55 | config AT_HDMAC | 55 | config AT_HDMAC | 
| 56 | tristate "Atmel AHB DMA support" | 56 | tristate "Atmel AHB DMA support" | 
| 57 | depends on ARCH_AT91SAM9RL | 57 | depends on ARCH_AT91SAM9RL || ARCH_AT91SAM9G45 | 
| 58 | select DMA_ENGINE | 58 | select DMA_ENGINE | 
| 59 | help | 59 | help | 
| 60 | Support the Atmel AHB DMA controller. This can be integrated in | 60 | Support the Atmel AHB DMA controller. This can be integrated in | 
| diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c index 705a5894a6bb..90d168ad03b6 100644 --- a/drivers/mmc/host/mmci.c +++ b/drivers/mmc/host/mmci.c | |||
| @@ -56,7 +56,7 @@ static void mmci_set_clkreg(struct mmci_host *host, unsigned int desired) | |||
| 56 | clk = 255; | 56 | clk = 255; | 
| 57 | host->cclk = host->mclk / (2 * (clk + 1)); | 57 | host->cclk = host->mclk / (2 * (clk + 1)); | 
| 58 | } | 58 | } | 
| 59 | if (host->hw_designer == 0x80) | 59 | if (host->hw_designer == AMBA_VENDOR_ST) | 
| 60 | clk |= MCI_FCEN; /* Bug fix in ST IP block */ | 60 | clk |= MCI_FCEN; /* Bug fix in ST IP block */ | 
| 61 | clk |= MCI_CLK_ENABLE; | 61 | clk |= MCI_CLK_ENABLE; | 
| 62 | /* This hasn't proven to be worthwhile */ | 62 | /* This hasn't proven to be worthwhile */ | 
