diff options
132 files changed, 4968 insertions, 838 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index a44c6da9bf83..85016313bd11 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
| @@ -324,6 +324,12 @@ config ARCH_NS9XXX | |||
| 324 | 324 | ||
| 325 | <http://www.digi.com/products/microprocessors/index.jsp> | 325 | <http://www.digi.com/products/microprocessors/index.jsp> |
| 326 | 326 | ||
| 327 | config ARCH_MXC | ||
| 328 | bool "Freescale MXC/iMX-based" | ||
| 329 | select ARCH_MTD_XIP | ||
| 330 | help | ||
| 331 | Support for Freescale MXC/iMX-based family of processors | ||
| 332 | |||
| 327 | config ARCH_PNX4008 | 333 | config ARCH_PNX4008 |
| 328 | bool "Philips Nexperia PNX4008 Mobile" | 334 | bool "Philips Nexperia PNX4008 Mobile" |
| 329 | help | 335 | help |
| @@ -432,6 +438,7 @@ source "arch/arm/mach-omap1/Kconfig" | |||
| 432 | source "arch/arm/mach-omap2/Kconfig" | 438 | source "arch/arm/mach-omap2/Kconfig" |
| 433 | 439 | ||
| 434 | source "arch/arm/plat-s3c24xx/Kconfig" | 440 | source "arch/arm/plat-s3c24xx/Kconfig" |
| 441 | source "arch/arm/plat-s3c/Kconfig" | ||
| 435 | 442 | ||
| 436 | if ARCH_S3C2410 | 443 | if ARCH_S3C2410 |
| 437 | source "arch/arm/mach-s3c2400/Kconfig" | 444 | source "arch/arm/mach-s3c2400/Kconfig" |
| @@ -456,6 +463,8 @@ source "arch/arm/mach-realview/Kconfig" | |||
| 456 | 463 | ||
| 457 | source "arch/arm/mach-at91/Kconfig" | 464 | source "arch/arm/mach-at91/Kconfig" |
| 458 | 465 | ||
| 466 | source "arch/arm/plat-mxc/Kconfig" | ||
| 467 | |||
| 459 | source "arch/arm/mach-netx/Kconfig" | 468 | source "arch/arm/mach-netx/Kconfig" |
| 460 | 469 | ||
| 461 | source "arch/arm/mach-ns9xxx/Kconfig" | 470 | source "arch/arm/mach-ns9xxx/Kconfig" |
diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug index 40c5eb1f55c7..18101f5f5f24 100644 --- a/arch/arm/Kconfig.debug +++ b/arch/arm/Kconfig.debug | |||
| @@ -82,24 +82,24 @@ config DEBUG_CLPS711X_UART2 | |||
| 82 | output to the second serial port on these devices. Saying N will | 82 | output to the second serial port on these devices. Saying N will |
| 83 | cause the debug messages to appear on the first serial port. | 83 | cause the debug messages to appear on the first serial port. |
| 84 | 84 | ||
| 85 | config DEBUG_S3C2410_PORT | 85 | config DEBUG_S3C_PORT |
| 86 | depends on DEBUG_LL && ARCH_S3C2410 | 86 | depends on DEBUG_LL && PLAT_S3C |
| 87 | bool "Kernel low-level debugging messages via S3C2410 UART" | 87 | bool "Kernel low-level debugging messages via S3C UART" |
| 88 | help | 88 | help |
| 89 | Say Y here if you want debug print routines to go to one of the | 89 | Say Y here if you want debug print routines to go to one of the |
| 90 | S3C2410 internal UARTs. The chosen UART must have been configured | 90 | S3C internal UARTs. The chosen UART must have been configured |
| 91 | before it is used. | 91 | before it is used. |
| 92 | 92 | ||
| 93 | config DEBUG_S3C2410_UART | 93 | config DEBUG_S3C_UART |
| 94 | depends on ARCH_S3C2410 | 94 | depends on PLAT_S3C |
| 95 | int "S3C2410 UART to use for low-level debug" | 95 | int "S3C UART to use for low-level debug" |
| 96 | default "0" | 96 | default "0" |
| 97 | help | 97 | help |
| 98 | Choice for UART for kernel low-level using S3C2410 UARTS, | 98 | Choice for UART for kernel low-level using S3C UARTS, |
| 99 | should be between zero and two. The port must have been | 99 | should be between zero and two. The port must have been |
| 100 | initialised by the boot-loader before use. | 100 | initialised by the boot-loader before use. |
| 101 | 101 | ||
| 102 | The uncompressor code port configuration is now handled | 102 | The uncompressor code port configuration is now handled |
| 103 | by CONFIG_S3C2410_LOWLEVEL_UART_PORT. | 103 | by CONFIG_S3C_LOWLEVEL_UART_PORT. |
| 104 | 104 | ||
| 105 | endmenu | 105 | endmenu |
diff --git a/arch/arm/Makefile b/arch/arm/Makefile index cbd5010d3bc3..fa4ea9ff0797 100644 --- a/arch/arm/Makefile +++ b/arch/arm/Makefile | |||
| @@ -137,6 +137,8 @@ endif | |||
| 137 | textofs-$(CONFIG_ARCH_NS9XXX) := 0x00108000 | 137 | textofs-$(CONFIG_ARCH_NS9XXX) := 0x00108000 |
| 138 | machine-$(CONFIG_ARCH_DAVINCI) := davinci | 138 | machine-$(CONFIG_ARCH_DAVINCI) := davinci |
| 139 | machine-$(CONFIG_ARCH_KS8695) := ks8695 | 139 | machine-$(CONFIG_ARCH_KS8695) := ks8695 |
| 140 | incdir-$(CONFIG_ARCH_MXC) := mxc | ||
| 141 | machine-$(CONFIG_ARCH_MX3) := mx3 | ||
| 140 | 142 | ||
| 141 | ifeq ($(CONFIG_ARCH_EBSA110),y) | 143 | ifeq ($(CONFIG_ARCH_EBSA110),y) |
| 142 | # This is what happens if you forget the IOCS16 line. | 144 | # This is what happens if you forget the IOCS16 line. |
| @@ -183,6 +185,7 @@ core-$(CONFIG_VFP) += arch/arm/vfp/ | |||
| 183 | core-$(CONFIG_PLAT_IOP) += arch/arm/plat-iop/ | 185 | core-$(CONFIG_PLAT_IOP) += arch/arm/plat-iop/ |
| 184 | core-$(CONFIG_ARCH_OMAP) += arch/arm/plat-omap/ | 186 | core-$(CONFIG_ARCH_OMAP) += arch/arm/plat-omap/ |
| 185 | core-$(CONFIG_PLAT_S3C24XX) += arch/arm/plat-s3c24xx/ | 187 | core-$(CONFIG_PLAT_S3C24XX) += arch/arm/plat-s3c24xx/ |
| 188 | core-$(CONFIG_ARCH_MXC) += arch/arm/plat-mxc/ | ||
| 186 | 189 | ||
| 187 | drivers-$(CONFIG_OPROFILE) += arch/arm/oprofile/ | 190 | drivers-$(CONFIG_OPROFILE) += arch/arm/oprofile/ |
| 188 | drivers-$(CONFIG_ARCH_CLPS7500) += drivers/acorn/char/ | 191 | drivers-$(CONFIG_ARCH_CLPS7500) += drivers/acorn/char/ |
diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S index d7fb5ee1637e..b9b03eda70e5 100644 --- a/arch/arm/boot/compressed/head.S +++ b/arch/arm/boot/compressed/head.S | |||
| @@ -55,7 +55,7 @@ | |||
| 55 | #elif defined(CONFIG_ARCH_S3C2410) | 55 | #elif defined(CONFIG_ARCH_S3C2410) |
| 56 | .macro loadsp, rb | 56 | .macro loadsp, rb |
| 57 | mov \rb, #0x50000000 | 57 | mov \rb, #0x50000000 |
| 58 | add \rb, \rb, #0x4000 * CONFIG_S3C2410_LOWLEVEL_UART_PORT | 58 | add \rb, \rb, #0x4000 * CONFIG_S3C_LOWLEVEL_UART_PORT |
| 59 | .endm | 59 | .endm |
| 60 | #else | 60 | #else |
| 61 | .macro loadsp, rb | 61 | .macro loadsp, rb |
diff --git a/arch/arm/configs/em_x270_defconfig b/arch/arm/configs/em_x270_defconfig new file mode 100644 index 000000000000..6bea0901bdf0 --- /dev/null +++ b/arch/arm/configs/em_x270_defconfig | |||
| @@ -0,0 +1,1265 @@ | |||
| 1 | # | ||
| 2 | # Automatically generated make config: don't edit | ||
| 3 | # Linux kernel version: 2.6.22 | ||
| 4 | # Mon Jul 9 15:18:20 2007 | ||
| 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 is not set | ||
| 11 | CONFIG_MMU=y | ||
| 12 | # CONFIG_NO_IOPORT is not set | ||
| 13 | CONFIG_GENERIC_HARDIRQS=y | ||
| 14 | CONFIG_STACKTRACE_SUPPORT=y | ||
| 15 | CONFIG_LOCKDEP_SUPPORT=y | ||
| 16 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y | ||
| 17 | CONFIG_HARDIRQS_SW_RESEND=y | ||
| 18 | CONFIG_GENERIC_IRQ_PROBE=y | ||
| 19 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | ||
| 20 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set | ||
| 21 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set | ||
| 22 | CONFIG_GENERIC_HWEIGHT=y | ||
| 23 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
| 24 | CONFIG_ZONE_DMA=y | ||
| 25 | CONFIG_ARCH_MTD_XIP=y | ||
| 26 | CONFIG_VECTORS_BASE=0xffff0000 | ||
| 27 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||
| 28 | |||
| 29 | # | ||
| 30 | # Code maturity level options | ||
| 31 | # | ||
| 32 | CONFIG_EXPERIMENTAL=y | ||
| 33 | CONFIG_BROKEN_ON_SMP=y | ||
| 34 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
| 35 | |||
| 36 | # | ||
| 37 | # General setup | ||
| 38 | # | ||
| 39 | CONFIG_LOCALVERSION="-em-x270" | ||
| 40 | # CONFIG_LOCALVERSION_AUTO is not set | ||
| 41 | CONFIG_SWAP=y | ||
| 42 | CONFIG_SYSVIPC=y | ||
| 43 | # CONFIG_IPC_NS is not set | ||
| 44 | CONFIG_SYSVIPC_SYSCTL=y | ||
| 45 | # CONFIG_POSIX_MQUEUE is not set | ||
| 46 | # CONFIG_BSD_PROCESS_ACCT is not set | ||
| 47 | # CONFIG_TASKSTATS is not set | ||
| 48 | # CONFIG_UTS_NS is not set | ||
| 49 | # CONFIG_AUDIT is not set | ||
| 50 | CONFIG_IKCONFIG=y | ||
| 51 | CONFIG_IKCONFIG_PROC=y | ||
| 52 | CONFIG_LOG_BUF_SHIFT=17 | ||
| 53 | CONFIG_SYSFS_DEPRECATED=y | ||
| 54 | # CONFIG_RELAY is not set | ||
| 55 | CONFIG_BLK_DEV_INITRD=y | ||
| 56 | CONFIG_INITRAMFS_SOURCE="" | ||
| 57 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
| 58 | CONFIG_SYSCTL=y | ||
| 59 | CONFIG_EMBEDDED=y | ||
| 60 | CONFIG_UID16=y | ||
| 61 | CONFIG_SYSCTL_SYSCALL=y | ||
| 62 | CONFIG_KALLSYMS=y | ||
| 63 | # CONFIG_KALLSYMS_ALL is not set | ||
| 64 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | ||
| 65 | CONFIG_HOTPLUG=y | ||
| 66 | CONFIG_PRINTK=y | ||
| 67 | CONFIG_BUG=y | ||
| 68 | CONFIG_ELF_CORE=y | ||
| 69 | CONFIG_BASE_FULL=y | ||
| 70 | CONFIG_FUTEX=y | ||
| 71 | CONFIG_ANON_INODES=y | ||
| 72 | CONFIG_EPOLL=y | ||
| 73 | CONFIG_SIGNALFD=y | ||
| 74 | CONFIG_TIMERFD=y | ||
| 75 | CONFIG_EVENTFD=y | ||
| 76 | CONFIG_SHMEM=y | ||
| 77 | CONFIG_VM_EVENT_COUNTERS=y | ||
| 78 | CONFIG_SLAB=y | ||
| 79 | # CONFIG_SLUB is not set | ||
| 80 | # CONFIG_SLOB is not set | ||
| 81 | CONFIG_RT_MUTEXES=y | ||
| 82 | # CONFIG_TINY_SHMEM is not set | ||
| 83 | CONFIG_BASE_SMALL=0 | ||
| 84 | |||
| 85 | # | ||
| 86 | # Loadable module support | ||
| 87 | # | ||
| 88 | CONFIG_MODULES=y | ||
| 89 | CONFIG_MODULE_UNLOAD=y | ||
| 90 | CONFIG_MODULE_FORCE_UNLOAD=y | ||
| 91 | # CONFIG_MODVERSIONS is not set | ||
| 92 | # CONFIG_MODULE_SRCVERSION_ALL is not set | ||
| 93 | CONFIG_KMOD=y | ||
| 94 | |||
| 95 | # | ||
| 96 | # Block layer | ||
| 97 | # | ||
| 98 | CONFIG_BLOCK=y | ||
| 99 | # CONFIG_LBD is not set | ||
| 100 | # CONFIG_BLK_DEV_IO_TRACE is not set | ||
| 101 | # CONFIG_LSF is not set | ||
| 102 | |||
| 103 | # | ||
| 104 | # IO Schedulers | ||
| 105 | # | ||
| 106 | CONFIG_IOSCHED_NOOP=y | ||
| 107 | CONFIG_IOSCHED_AS=y | ||
| 108 | CONFIG_IOSCHED_DEADLINE=y | ||
| 109 | CONFIG_IOSCHED_CFQ=y | ||
| 110 | CONFIG_DEFAULT_AS=y | ||
| 111 | # CONFIG_DEFAULT_DEADLINE is not set | ||
| 112 | # CONFIG_DEFAULT_CFQ is not set | ||
| 113 | # CONFIG_DEFAULT_NOOP is not set | ||
| 114 | CONFIG_DEFAULT_IOSCHED="anticipatory" | ||
| 115 | |||
| 116 | # | ||
| 117 | # System Type | ||
| 118 | # | ||
| 119 | # CONFIG_ARCH_AAEC2000 is not set | ||
| 120 | # CONFIG_ARCH_INTEGRATOR is not set | ||
| 121 | # CONFIG_ARCH_REALVIEW is not set | ||
| 122 | # CONFIG_ARCH_VERSATILE is not set | ||
| 123 | # CONFIG_ARCH_AT91 is not set | ||
| 124 | # CONFIG_ARCH_CLPS7500 is not set | ||
| 125 | # CONFIG_ARCH_CLPS711X is not set | ||
| 126 | # CONFIG_ARCH_CO285 is not set | ||
| 127 | # CONFIG_ARCH_EBSA110 is not set | ||
| 128 | # CONFIG_ARCH_EP93XX is not set | ||
| 129 | # CONFIG_ARCH_FOOTBRIDGE is not set | ||
| 130 | # CONFIG_ARCH_NETX is not set | ||
| 131 | # CONFIG_ARCH_H720X is not set | ||
| 132 | # CONFIG_ARCH_IMX is not set | ||
| 133 | # CONFIG_ARCH_IOP13XX is not set | ||
| 134 | # CONFIG_ARCH_IOP32X is not set | ||
| 135 | # CONFIG_ARCH_IOP33X is not set | ||
| 136 | # CONFIG_ARCH_IXP23XX is not set | ||
| 137 | # CONFIG_ARCH_IXP2000 is not set | ||
| 138 | # CONFIG_ARCH_IXP4XX is not set | ||
| 139 | # CONFIG_ARCH_L7200 is not set | ||
| 140 | # CONFIG_ARCH_KS8695 is not set | ||
| 141 | # CONFIG_ARCH_NS9XXX is not set | ||
| 142 | # CONFIG_ARCH_PNX4008 is not set | ||
| 143 | CONFIG_ARCH_PXA=y | ||
| 144 | # CONFIG_ARCH_RPC is not set | ||
| 145 | # CONFIG_ARCH_SA1100 is not set | ||
| 146 | # CONFIG_ARCH_S3C2410 is not set | ||
| 147 | # CONFIG_ARCH_SHARK is not set | ||
| 148 | # CONFIG_ARCH_LH7A40X is not set | ||
| 149 | # CONFIG_ARCH_DAVINCI is not set | ||
| 150 | # CONFIG_ARCH_OMAP is not set | ||
| 151 | |||
| 152 | # | ||
| 153 | # Intel PXA2xx Implementations | ||
| 154 | # | ||
| 155 | # CONFIG_ARCH_LUBBOCK is not set | ||
| 156 | # CONFIG_MACH_LOGICPD_PXA270 is not set | ||
| 157 | # CONFIG_MACH_MAINSTONE is not set | ||
| 158 | # CONFIG_ARCH_PXA_IDP is not set | ||
| 159 | # CONFIG_PXA_SHARPSL is not set | ||
| 160 | # CONFIG_MACH_TRIZEPS4 is not set | ||
| 161 | CONFIG_MACH_EM_X270=y | ||
| 162 | CONFIG_PXA27x=y | ||
| 163 | |||
| 164 | # | ||
| 165 | # Processor Type | ||
| 166 | # | ||
| 167 | CONFIG_CPU_32=y | ||
| 168 | CONFIG_CPU_XSCALE=y | ||
| 169 | CONFIG_CPU_32v5=y | ||
| 170 | CONFIG_CPU_ABRT_EV5T=y | ||
| 171 | CONFIG_CPU_CACHE_VIVT=y | ||
| 172 | CONFIG_CPU_TLB_V4WBI=y | ||
| 173 | CONFIG_CPU_CP15=y | ||
| 174 | CONFIG_CPU_CP15_MMU=y | ||
| 175 | |||
| 176 | # | ||
| 177 | # Processor Features | ||
| 178 | # | ||
| 179 | CONFIG_ARM_THUMB=y | ||
| 180 | # CONFIG_CPU_DCACHE_DISABLE is not set | ||
| 181 | # CONFIG_OUTER_CACHE is not set | ||
| 182 | CONFIG_IWMMXT=y | ||
| 183 | CONFIG_XSCALE_PMU=y | ||
| 184 | |||
| 185 | # | ||
| 186 | # Bus support | ||
| 187 | # | ||
| 188 | # CONFIG_ARCH_SUPPORTS_MSI is not set | ||
| 189 | |||
| 190 | # | ||
| 191 | # PCCARD (PCMCIA/CardBus) support | ||
| 192 | # | ||
| 193 | # CONFIG_PCCARD is not set | ||
| 194 | |||
| 195 | # | ||
| 196 | # Kernel Features | ||
| 197 | # | ||
| 198 | # CONFIG_TICK_ONESHOT is not set | ||
| 199 | # CONFIG_PREEMPT is not set | ||
| 200 | # CONFIG_NO_IDLE_HZ is not set | ||
| 201 | CONFIG_HZ=100 | ||
| 202 | CONFIG_AEABI=y | ||
| 203 | CONFIG_OABI_COMPAT=y | ||
| 204 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set | ||
| 205 | CONFIG_SELECT_MEMORY_MODEL=y | ||
| 206 | CONFIG_FLATMEM_MANUAL=y | ||
| 207 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
| 208 | # CONFIG_SPARSEMEM_MANUAL is not set | ||
| 209 | CONFIG_FLATMEM=y | ||
| 210 | CONFIG_FLAT_NODE_MEM_MAP=y | ||
| 211 | # CONFIG_SPARSEMEM_STATIC is not set | ||
| 212 | CONFIG_SPLIT_PTLOCK_CPUS=4096 | ||
| 213 | # CONFIG_RESOURCES_64BIT is not set | ||
| 214 | CONFIG_ZONE_DMA_FLAG=1 | ||
| 215 | CONFIG_ALIGNMENT_TRAP=y | ||
| 216 | |||
| 217 | # | ||
| 218 | # Boot options | ||
| 219 | # | ||
| 220 | CONFIG_ZBOOT_ROM_TEXT=0x0 | ||
| 221 | CONFIG_ZBOOT_ROM_BSS=0x0 | ||
| 222 | CONFIG_CMDLINE="" | ||
| 223 | # CONFIG_XIP_KERNEL is not set | ||
| 224 | # CONFIG_KEXEC is not set | ||
| 225 | |||
| 226 | # | ||
| 227 | # Floating point emulation | ||
| 228 | # | ||
| 229 | |||
| 230 | # | ||
| 231 | # At least one emulation must be selected | ||
| 232 | # | ||
| 233 | CONFIG_FPE_NWFPE=y | ||
| 234 | # CONFIG_FPE_NWFPE_XP is not set | ||
| 235 | # CONFIG_FPE_FASTFPE is not set | ||
| 236 | |||
| 237 | # | ||
| 238 | # Userspace binary formats | ||
| 239 | # | ||
| 240 | CONFIG_BINFMT_ELF=y | ||
| 241 | # CONFIG_BINFMT_AOUT is not set | ||
| 242 | # CONFIG_BINFMT_MISC is not set | ||
| 243 | |||
| 244 | # | ||
| 245 | # Power management options | ||
| 246 | # | ||
| 247 | CONFIG_PM=y | ||
| 248 | CONFIG_PM_LEGACY=y | ||
| 249 | # CONFIG_PM_DEBUG is not set | ||
| 250 | # CONFIG_PM_SYSFS_DEPRECATED is not set | ||
| 251 | CONFIG_APM_EMULATION=m | ||
| 252 | |||
| 253 | # | ||
| 254 | # Networking | ||
| 255 | # | ||
| 256 | CONFIG_NET=y | ||
| 257 | |||
| 258 | # | ||
| 259 | # Networking options | ||
| 260 | # | ||
| 261 | CONFIG_PACKET=y | ||
| 262 | # CONFIG_PACKET_MMAP is not set | ||
| 263 | CONFIG_UNIX=y | ||
| 264 | CONFIG_XFRM=y | ||
| 265 | # CONFIG_XFRM_USER is not set | ||
| 266 | # CONFIG_XFRM_SUB_POLICY is not set | ||
| 267 | # CONFIG_XFRM_MIGRATE is not set | ||
| 268 | # CONFIG_NET_KEY is not set | ||
| 269 | CONFIG_INET=y | ||
| 270 | # CONFIG_IP_MULTICAST is not set | ||
| 271 | # CONFIG_IP_ADVANCED_ROUTER is not set | ||
| 272 | CONFIG_IP_FIB_HASH=y | ||
| 273 | CONFIG_IP_PNP=y | ||
| 274 | CONFIG_IP_PNP_DHCP=y | ||
| 275 | CONFIG_IP_PNP_BOOTP=y | ||
| 276 | # CONFIG_IP_PNP_RARP is not set | ||
| 277 | # CONFIG_NET_IPIP is not set | ||
| 278 | # CONFIG_NET_IPGRE is not set | ||
| 279 | # CONFIG_ARPD is not set | ||
| 280 | # CONFIG_SYN_COOKIES is not set | ||
| 281 | # CONFIG_INET_AH is not set | ||
| 282 | # CONFIG_INET_ESP is not set | ||
| 283 | # CONFIG_INET_IPCOMP is not set | ||
| 284 | # CONFIG_INET_XFRM_TUNNEL is not set | ||
| 285 | # CONFIG_INET_TUNNEL is not set | ||
| 286 | CONFIG_INET_XFRM_MODE_TRANSPORT=y | ||
| 287 | CONFIG_INET_XFRM_MODE_TUNNEL=y | ||
| 288 | CONFIG_INET_XFRM_MODE_BEET=y | ||
| 289 | CONFIG_INET_DIAG=y | ||
| 290 | CONFIG_INET_TCP_DIAG=y | ||
| 291 | # CONFIG_TCP_CONG_ADVANCED is not set | ||
| 292 | CONFIG_TCP_CONG_CUBIC=y | ||
| 293 | CONFIG_DEFAULT_TCP_CONG="cubic" | ||
| 294 | # CONFIG_TCP_MD5SIG is not set | ||
| 295 | # CONFIG_IPV6 is not set | ||
| 296 | # CONFIG_INET6_XFRM_TUNNEL is not set | ||
| 297 | # CONFIG_INET6_TUNNEL is not set | ||
| 298 | # CONFIG_NETWORK_SECMARK is not set | ||
| 299 | # CONFIG_NETFILTER is not set | ||
| 300 | # CONFIG_IP_DCCP is not set | ||
| 301 | # CONFIG_IP_SCTP is not set | ||
| 302 | # CONFIG_TIPC is not set | ||
| 303 | # CONFIG_ATM is not set | ||
| 304 | # CONFIG_BRIDGE is not set | ||
| 305 | # CONFIG_VLAN_8021Q is not set | ||
| 306 | # CONFIG_DECNET is not set | ||
| 307 | # CONFIG_LLC2 is not set | ||
| 308 | # CONFIG_IPX is not set | ||
| 309 | # CONFIG_ATALK is not set | ||
| 310 | # CONFIG_X25 is not set | ||
| 311 | # CONFIG_LAPB is not set | ||
| 312 | # CONFIG_ECONET is not set | ||
| 313 | # CONFIG_WAN_ROUTER is not set | ||
| 314 | |||
| 315 | # | ||
| 316 | # QoS and/or fair queueing | ||
| 317 | # | ||
| 318 | # CONFIG_NET_SCHED is not set | ||
| 319 | |||
| 320 | # | ||
| 321 | # Network testing | ||
| 322 | # | ||
| 323 | # CONFIG_NET_PKTGEN is not set | ||
| 324 | # CONFIG_HAMRADIO is not set | ||
| 325 | # CONFIG_IRDA is not set | ||
| 326 | CONFIG_BT=m | ||
| 327 | CONFIG_BT_L2CAP=m | ||
| 328 | CONFIG_BT_SCO=m | ||
| 329 | CONFIG_BT_RFCOMM=m | ||
| 330 | # CONFIG_BT_RFCOMM_TTY is not set | ||
| 331 | CONFIG_BT_BNEP=m | ||
| 332 | # CONFIG_BT_BNEP_MC_FILTER is not set | ||
| 333 | # CONFIG_BT_BNEP_PROTO_FILTER is not set | ||
| 334 | CONFIG_BT_HIDP=m | ||
| 335 | |||
| 336 | # | ||
| 337 | # Bluetooth device drivers | ||
| 338 | # | ||
| 339 | CONFIG_BT_HCIUSB=m | ||
| 340 | # CONFIG_BT_HCIUSB_SCO is not set | ||
| 341 | CONFIG_BT_HCIUART=m | ||
| 342 | # CONFIG_BT_HCIUART_H4 is not set | ||
| 343 | # CONFIG_BT_HCIUART_BCSP is not set | ||
| 344 | CONFIG_BT_HCIBCM203X=m | ||
| 345 | CONFIG_BT_HCIBPA10X=m | ||
| 346 | CONFIG_BT_HCIBFUSB=m | ||
| 347 | # CONFIG_BT_HCIVHCI is not set | ||
| 348 | # CONFIG_AF_RXRPC is not set | ||
| 349 | |||
| 350 | # | ||
| 351 | # Wireless | ||
| 352 | # | ||
| 353 | # CONFIG_CFG80211 is not set | ||
| 354 | # CONFIG_WIRELESS_EXT is not set | ||
| 355 | # CONFIG_MAC80211 is not set | ||
| 356 | CONFIG_IEEE80211=m | ||
| 357 | # CONFIG_IEEE80211_DEBUG is not set | ||
| 358 | CONFIG_IEEE80211_CRYPT_WEP=m | ||
| 359 | CONFIG_IEEE80211_CRYPT_CCMP=m | ||
| 360 | # CONFIG_IEEE80211_CRYPT_TKIP is not set | ||
| 361 | # CONFIG_IEEE80211_SOFTMAC is not set | ||
| 362 | # CONFIG_RFKILL is not set | ||
| 363 | |||
| 364 | # | ||
| 365 | # Device Drivers | ||
| 366 | # | ||
| 367 | |||
| 368 | # | ||
| 369 | # Generic Driver Options | ||
| 370 | # | ||
| 371 | CONFIG_STANDALONE=y | ||
| 372 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
| 373 | CONFIG_FW_LOADER=y | ||
| 374 | # CONFIG_DEBUG_DRIVER is not set | ||
| 375 | # CONFIG_DEBUG_DEVRES is not set | ||
| 376 | # CONFIG_SYS_HYPERVISOR is not set | ||
| 377 | |||
| 378 | # | ||
| 379 | # Connector - unified userspace <-> kernelspace linker | ||
| 380 | # | ||
| 381 | # CONFIG_CONNECTOR is not set | ||
| 382 | CONFIG_MTD=y | ||
| 383 | # CONFIG_MTD_DEBUG is not set | ||
| 384 | CONFIG_MTD_CONCAT=y | ||
| 385 | CONFIG_MTD_PARTITIONS=y | ||
| 386 | # CONFIG_MTD_REDBOOT_PARTS is not set | ||
| 387 | # CONFIG_MTD_CMDLINE_PARTS is not set | ||
| 388 | # CONFIG_MTD_AFS_PARTS is not set | ||
| 389 | |||
| 390 | # | ||
| 391 | # User Modules And Translation Layers | ||
| 392 | # | ||
| 393 | CONFIG_MTD_CHAR=y | ||
| 394 | CONFIG_MTD_BLKDEVS=y | ||
| 395 | CONFIG_MTD_BLOCK=y | ||
| 396 | # CONFIG_FTL is not set | ||
| 397 | # CONFIG_NFTL is not set | ||
| 398 | # CONFIG_INFTL is not set | ||
| 399 | # CONFIG_RFD_FTL is not set | ||
| 400 | # CONFIG_SSFDC is not set | ||
| 401 | |||
| 402 | # | ||
| 403 | # RAM/ROM/Flash chip drivers | ||
| 404 | # | ||
| 405 | # CONFIG_MTD_CFI is not set | ||
| 406 | # CONFIG_MTD_JEDECPROBE is not set | ||
| 407 | # CONFIG_MTD_CFI_NOSWAP is not set | ||
| 408 | # CONFIG_MTD_CFI_BE_BYTE_SWAP is not set | ||
| 409 | # CONFIG_MTD_CFI_LE_BYTE_SWAP is not set | ||
| 410 | CONFIG_MTD_MAP_BANK_WIDTH_1=y | ||
| 411 | CONFIG_MTD_MAP_BANK_WIDTH_2=y | ||
| 412 | CONFIG_MTD_MAP_BANK_WIDTH_4=y | ||
| 413 | # CONFIG_MTD_MAP_BANK_WIDTH_8 is not set | ||
| 414 | # CONFIG_MTD_MAP_BANK_WIDTH_16 is not set | ||
| 415 | # CONFIG_MTD_MAP_BANK_WIDTH_32 is not set | ||
| 416 | CONFIG_MTD_CFI_I1=y | ||
| 417 | CONFIG_MTD_CFI_I2=y | ||
| 418 | # CONFIG_MTD_CFI_I4 is not set | ||
| 419 | # CONFIG_MTD_CFI_I8 is not set | ||
| 420 | # CONFIG_MTD_RAM is not set | ||
| 421 | # CONFIG_MTD_ROM is not set | ||
| 422 | # CONFIG_MTD_ABSENT is not set | ||
| 423 | |||
| 424 | # | ||
| 425 | # Mapping drivers for chip access | ||
| 426 | # | ||
| 427 | # CONFIG_MTD_COMPLEX_MAPPINGS is not set | ||
| 428 | # CONFIG_MTD_SHARP_SL is not set | ||
| 429 | # CONFIG_MTD_PLATRAM is not set | ||
| 430 | |||
| 431 | # | ||
| 432 | # Self-contained MTD device drivers | ||
| 433 | # | ||
| 434 | # CONFIG_MTD_SLRAM is not set | ||
| 435 | # CONFIG_MTD_PHRAM is not set | ||
| 436 | # CONFIG_MTD_MTDRAM is not set | ||
| 437 | # CONFIG_MTD_BLOCK2MTD is not set | ||
| 438 | |||
| 439 | # | ||
| 440 | # Disk-On-Chip Device Drivers | ||
| 441 | # | ||
| 442 | # CONFIG_MTD_DOC2000 is not set | ||
| 443 | # CONFIG_MTD_DOC2001 is not set | ||
| 444 | # CONFIG_MTD_DOC2001PLUS is not set | ||
| 445 | CONFIG_MTD_NAND=y | ||
| 446 | # CONFIG_MTD_NAND_VERIFY_WRITE is not set | ||
| 447 | # CONFIG_MTD_NAND_ECC_SMC is not set | ||
| 448 | # CONFIG_MTD_NAND_MUSEUM_IDS is not set | ||
| 449 | # CONFIG_MTD_NAND_H1900 is not set | ||
| 450 | CONFIG_MTD_NAND_IDS=y | ||
| 451 | # CONFIG_MTD_NAND_DISKONCHIP is not set | ||
| 452 | # CONFIG_MTD_NAND_SHARPSL is not set | ||
| 453 | # CONFIG_MTD_NAND_NANDSIM is not set | ||
| 454 | CONFIG_MTD_NAND_PLATFORM=y | ||
| 455 | # CONFIG_MTD_ONENAND is not set | ||
| 456 | |||
| 457 | # | ||
| 458 | # UBI - Unsorted block images | ||
| 459 | # | ||
| 460 | # CONFIG_MTD_UBI is not set | ||
| 461 | |||
| 462 | # | ||
| 463 | # Parallel port support | ||
| 464 | # | ||
| 465 | # CONFIG_PARPORT is not set | ||
| 466 | |||
| 467 | # | ||
| 468 | # Plug and Play support | ||
| 469 | # | ||
| 470 | # CONFIG_PNPACPI is not set | ||
| 471 | |||
| 472 | # | ||
| 473 | # Block devices | ||
| 474 | # | ||
| 475 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
| 476 | CONFIG_BLK_DEV_LOOP=y | ||
| 477 | # CONFIG_BLK_DEV_CRYPTOLOOP is not set | ||
| 478 | # CONFIG_BLK_DEV_NBD is not set | ||
| 479 | # CONFIG_BLK_DEV_UB is not set | ||
| 480 | CONFIG_BLK_DEV_RAM=y | ||
| 481 | CONFIG_BLK_DEV_RAM_COUNT=16 | ||
| 482 | CONFIG_BLK_DEV_RAM_SIZE=12000 | ||
| 483 | CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 | ||
| 484 | # CONFIG_CDROM_PKTCDVD is not set | ||
| 485 | # CONFIG_ATA_OVER_ETH is not set | ||
| 486 | # CONFIG_IDE is not set | ||
| 487 | |||
| 488 | # | ||
| 489 | # SCSI device support | ||
| 490 | # | ||
| 491 | # CONFIG_RAID_ATTRS is not set | ||
| 492 | CONFIG_SCSI=y | ||
| 493 | # CONFIG_SCSI_TGT is not set | ||
| 494 | # CONFIG_SCSI_NETLINK is not set | ||
| 495 | # CONFIG_SCSI_PROC_FS is not set | ||
| 496 | |||
| 497 | # | ||
| 498 | # SCSI support type (disk, tape, CD-ROM) | ||
| 499 | # | ||
| 500 | CONFIG_BLK_DEV_SD=y | ||
| 501 | # CONFIG_CHR_DEV_ST is not set | ||
| 502 | # CONFIG_CHR_DEV_OSST is not set | ||
| 503 | # CONFIG_BLK_DEV_SR is not set | ||
| 504 | # CONFIG_CHR_DEV_SG is not set | ||
| 505 | # CONFIG_CHR_DEV_SCH is not set | ||
| 506 | |||
| 507 | # | ||
| 508 | # Some SCSI devices (e.g. CD jukebox) support multiple LUNs | ||
| 509 | # | ||
| 510 | # CONFIG_SCSI_MULTI_LUN is not set | ||
| 511 | # CONFIG_SCSI_CONSTANTS is not set | ||
| 512 | # CONFIG_SCSI_LOGGING is not set | ||
| 513 | # CONFIG_SCSI_SCAN_ASYNC is not set | ||
| 514 | CONFIG_SCSI_WAIT_SCAN=m | ||
| 515 | |||
| 516 | # | ||
| 517 | # SCSI Transports | ||
| 518 | # | ||
| 519 | # CONFIG_SCSI_SPI_ATTRS is not set | ||
| 520 | # CONFIG_SCSI_FC_ATTRS is not set | ||
| 521 | # CONFIG_SCSI_ISCSI_ATTRS is not set | ||
| 522 | # CONFIG_SCSI_SAS_ATTRS is not set | ||
| 523 | # CONFIG_SCSI_SAS_LIBSAS is not set | ||
| 524 | |||
| 525 | # | ||
| 526 | # SCSI low-level drivers | ||
| 527 | # | ||
| 528 | # CONFIG_ISCSI_TCP is not set | ||
| 529 | # CONFIG_SCSI_DEBUG is not set | ||
| 530 | # CONFIG_ATA is not set | ||
| 531 | |||
| 532 | # | ||
| 533 | # Multi-device support (RAID and LVM) | ||
| 534 | # | ||
| 535 | # CONFIG_MD is not set | ||
| 536 | |||
| 537 | # | ||
| 538 | # Network device support | ||
| 539 | # | ||
| 540 | CONFIG_NETDEVICES=y | ||
| 541 | # CONFIG_DUMMY is not set | ||
| 542 | # CONFIG_BONDING is not set | ||
| 543 | # CONFIG_EQUALIZER is not set | ||
| 544 | # CONFIG_TUN is not set | ||
| 545 | # CONFIG_PHYLIB is not set | ||
| 546 | |||
| 547 | # | ||
| 548 | # Ethernet (10 or 100Mbit) | ||
| 549 | # | ||
| 550 | CONFIG_NET_ETHERNET=y | ||
| 551 | CONFIG_MII=y | ||
| 552 | # CONFIG_SMC91X is not set | ||
| 553 | CONFIG_DM9000=y | ||
| 554 | # CONFIG_SMC911X is not set | ||
| 555 | # CONFIG_NETDEV_1000 is not set | ||
| 556 | # CONFIG_NETDEV_10000 is not set | ||
| 557 | |||
| 558 | # | ||
| 559 | # Wireless LAN | ||
| 560 | # | ||
| 561 | # CONFIG_WLAN_PRE80211 is not set | ||
| 562 | # CONFIG_WLAN_80211 is not set | ||
| 563 | |||
| 564 | # | ||
| 565 | # USB Network Adapters | ||
| 566 | # | ||
| 567 | # CONFIG_USB_CATC is not set | ||
| 568 | # CONFIG_USB_KAWETH is not set | ||
| 569 | # CONFIG_USB_PEGASUS is not set | ||
| 570 | # CONFIG_USB_RTL8150 is not set | ||
| 571 | # CONFIG_USB_USBNET_MII is not set | ||
| 572 | # CONFIG_USB_USBNET is not set | ||
| 573 | # CONFIG_WAN is not set | ||
| 574 | # CONFIG_PPP is not set | ||
| 575 | # CONFIG_SLIP is not set | ||
| 576 | # CONFIG_SHAPER is not set | ||
| 577 | # CONFIG_NETCONSOLE is not set | ||
| 578 | # CONFIG_NETPOLL is not set | ||
| 579 | # CONFIG_NET_POLL_CONTROLLER is not set | ||
| 580 | |||
| 581 | # | ||
| 582 | # ISDN subsystem | ||
| 583 | # | ||
| 584 | # CONFIG_ISDN is not set | ||
| 585 | |||
| 586 | # | ||
| 587 | # Input device support | ||
| 588 | # | ||
| 589 | CONFIG_INPUT=y | ||
| 590 | # CONFIG_INPUT_FF_MEMLESS is not set | ||
| 591 | # CONFIG_INPUT_POLLDEV is not set | ||
| 592 | |||
| 593 | # | ||
| 594 | # Userland interfaces | ||
| 595 | # | ||
| 596 | CONFIG_INPUT_MOUSEDEV=y | ||
| 597 | # CONFIG_INPUT_MOUSEDEV_PSAUX is not set | ||
| 598 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 | ||
| 599 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | ||
| 600 | # CONFIG_INPUT_JOYDEV is not set | ||
| 601 | # CONFIG_INPUT_TSDEV is not set | ||
| 602 | CONFIG_INPUT_EVDEV=y | ||
| 603 | # CONFIG_INPUT_EVBUG is not set | ||
| 604 | |||
| 605 | # | ||
| 606 | # Input Device Drivers | ||
| 607 | # | ||
| 608 | CONFIG_INPUT_KEYBOARD=y | ||
| 609 | # CONFIG_KEYBOARD_ATKBD is not set | ||
| 610 | # CONFIG_KEYBOARD_SUNKBD is not set | ||
| 611 | # CONFIG_KEYBOARD_LKKBD is not set | ||
| 612 | # CONFIG_KEYBOARD_XTKBD is not set | ||
| 613 | # CONFIG_KEYBOARD_NEWTON is not set | ||
| 614 | # CONFIG_KEYBOARD_STOWAWAY is not set | ||
| 615 | CONFIG_KEYBOARD_PXA27x=m | ||
| 616 | # CONFIG_KEYBOARD_GPIO is not set | ||
| 617 | # CONFIG_INPUT_MOUSE is not set | ||
| 618 | # CONFIG_INPUT_JOYSTICK is not set | ||
| 619 | # CONFIG_INPUT_TABLET is not set | ||
| 620 | CONFIG_INPUT_TOUCHSCREEN=y | ||
| 621 | # CONFIG_TOUCHSCREEN_GUNZE is not set | ||
| 622 | # CONFIG_TOUCHSCREEN_ELO is not set | ||
| 623 | # CONFIG_TOUCHSCREEN_MTOUCH is not set | ||
| 624 | # CONFIG_TOUCHSCREEN_MK712 is not set | ||
| 625 | # CONFIG_TOUCHSCREEN_PENMOUNT is not set | ||
| 626 | # CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set | ||
| 627 | # CONFIG_TOUCHSCREEN_TOUCHWIN is not set | ||
| 628 | # CONFIG_TOUCHSCREEN_UCB1400 is not set | ||
| 629 | # CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set | ||
| 630 | # CONFIG_INPUT_MISC is not set | ||
| 631 | |||
| 632 | # | ||
| 633 | # Hardware I/O ports | ||
| 634 | # | ||
| 635 | CONFIG_SERIO=y | ||
| 636 | # CONFIG_SERIO_SERPORT is not set | ||
| 637 | CONFIG_SERIO_LIBPS2=y | ||
| 638 | # CONFIG_SERIO_RAW is not set | ||
| 639 | # CONFIG_GAMEPORT is not set | ||
| 640 | |||
| 641 | # | ||
| 642 | # Character devices | ||
| 643 | # | ||
| 644 | CONFIG_VT=y | ||
| 645 | CONFIG_VT_CONSOLE=y | ||
| 646 | CONFIG_HW_CONSOLE=y | ||
| 647 | # CONFIG_VT_HW_CONSOLE_BINDING is not set | ||
| 648 | # CONFIG_SERIAL_NONSTANDARD is not set | ||
| 649 | |||
| 650 | # | ||
| 651 | # Serial drivers | ||
| 652 | # | ||
| 653 | # CONFIG_SERIAL_8250 is not set | ||
| 654 | |||
| 655 | # | ||
| 656 | # Non-8250 serial port support | ||
| 657 | # | ||
| 658 | CONFIG_SERIAL_PXA=y | ||
| 659 | CONFIG_SERIAL_PXA_CONSOLE=y | ||
| 660 | CONFIG_SERIAL_CORE=y | ||
| 661 | CONFIG_SERIAL_CORE_CONSOLE=y | ||
| 662 | CONFIG_UNIX98_PTYS=y | ||
| 663 | CONFIG_LEGACY_PTYS=y | ||
| 664 | CONFIG_LEGACY_PTY_COUNT=256 | ||
| 665 | |||
| 666 | # | ||
| 667 | # IPMI | ||
| 668 | # | ||
| 669 | # CONFIG_IPMI_HANDLER is not set | ||
| 670 | # CONFIG_WATCHDOG is not set | ||
| 671 | CONFIG_HW_RANDOM=m | ||
| 672 | # CONFIG_NVRAM is not set | ||
| 673 | # CONFIG_R3964 is not set | ||
| 674 | # CONFIG_RAW_DRIVER is not set | ||
| 675 | |||
| 676 | # | ||
| 677 | # TPM devices | ||
| 678 | # | ||
| 679 | # CONFIG_TCG_TPM is not set | ||
| 680 | # CONFIG_I2C is not set | ||
| 681 | |||
| 682 | # | ||
| 683 | # SPI support | ||
| 684 | # | ||
| 685 | # CONFIG_SPI is not set | ||
| 686 | # CONFIG_SPI_MASTER is not set | ||
| 687 | |||
| 688 | # | ||
| 689 | # Dallas's 1-wire bus | ||
| 690 | # | ||
| 691 | # CONFIG_W1 is not set | ||
| 692 | # CONFIG_HWMON is not set | ||
| 693 | |||
| 694 | # | ||
| 695 | # Misc devices | ||
| 696 | # | ||
| 697 | |||
| 698 | # | ||
| 699 | # Multifunction device drivers | ||
| 700 | # | ||
| 701 | # CONFIG_MFD_SM501 is not set | ||
| 702 | |||
| 703 | # | ||
| 704 | # LED devices | ||
| 705 | # | ||
| 706 | # CONFIG_NEW_LEDS is not set | ||
| 707 | |||
| 708 | # | ||
| 709 | # LED drivers | ||
| 710 | # | ||
| 711 | |||
| 712 | # | ||
| 713 | # LED Triggers | ||
| 714 | # | ||
| 715 | |||
| 716 | # | ||
| 717 | # Multimedia devices | ||
| 718 | # | ||
| 719 | # CONFIG_VIDEO_DEV is not set | ||
| 720 | # CONFIG_DVB_CORE is not set | ||
| 721 | # CONFIG_DAB is not set | ||
| 722 | |||
| 723 | # | ||
| 724 | # Graphics support | ||
| 725 | # | ||
| 726 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | ||
| 727 | |||
| 728 | # | ||
| 729 | # Display device support | ||
| 730 | # | ||
| 731 | # CONFIG_DISPLAY_SUPPORT is not set | ||
| 732 | # CONFIG_VGASTATE is not set | ||
| 733 | CONFIG_FB=y | ||
| 734 | # CONFIG_FIRMWARE_EDID is not set | ||
| 735 | # CONFIG_FB_DDC is not set | ||
| 736 | CONFIG_FB_CFB_FILLRECT=y | ||
| 737 | CONFIG_FB_CFB_COPYAREA=y | ||
| 738 | CONFIG_FB_CFB_IMAGEBLIT=y | ||
| 739 | # CONFIG_FB_SYS_FILLRECT is not set | ||
| 740 | # CONFIG_FB_SYS_COPYAREA is not set | ||
| 741 | # CONFIG_FB_SYS_IMAGEBLIT is not set | ||
| 742 | # CONFIG_FB_SYS_FOPS is not set | ||
| 743 | CONFIG_FB_DEFERRED_IO=y | ||
| 744 | # CONFIG_FB_SVGALIB is not set | ||
| 745 | # CONFIG_FB_MACMODES is not set | ||
| 746 | # CONFIG_FB_BACKLIGHT is not set | ||
| 747 | # CONFIG_FB_MODE_HELPERS is not set | ||
| 748 | # CONFIG_FB_TILEBLITTING is not set | ||
| 749 | |||
| 750 | # | ||
| 751 | # Frame buffer hardware drivers | ||
| 752 | # | ||
| 753 | # CONFIG_FB_S1D13XXX is not set | ||
| 754 | CONFIG_FB_PXA=y | ||
| 755 | # CONFIG_FB_PXA_PARAMETERS is not set | ||
| 756 | # CONFIG_FB_MBX is not set | ||
| 757 | # CONFIG_FB_VIRTUAL is not set | ||
| 758 | |||
| 759 | # | ||
| 760 | # Console display driver support | ||
| 761 | # | ||
| 762 | # CONFIG_VGA_CONSOLE is not set | ||
| 763 | CONFIG_DUMMY_CONSOLE=y | ||
| 764 | CONFIG_FRAMEBUFFER_CONSOLE=y | ||
| 765 | # CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set | ||
| 766 | # CONFIG_FONTS is not set | ||
| 767 | CONFIG_FONT_8x8=y | ||
| 768 | CONFIG_FONT_8x16=y | ||
| 769 | CONFIG_LOGO=y | ||
| 770 | CONFIG_LOGO_LINUX_MONO=y | ||
| 771 | CONFIG_LOGO_LINUX_VGA16=y | ||
| 772 | CONFIG_LOGO_LINUX_CLUT224=y | ||
| 773 | |||
| 774 | # | ||
| 775 | # Sound | ||
| 776 | # | ||
| 777 | CONFIG_SOUND=m | ||
| 778 | |||
| 779 | # | ||
| 780 | # Advanced Linux Sound Architecture | ||
| 781 | # | ||
| 782 | CONFIG_SND=m | ||
| 783 | CONFIG_SND_TIMER=m | ||
| 784 | CONFIG_SND_PCM=m | ||
| 785 | # CONFIG_SND_SEQUENCER is not set | ||
| 786 | CONFIG_SND_OSSEMUL=y | ||
| 787 | CONFIG_SND_MIXER_OSS=m | ||
| 788 | CONFIG_SND_PCM_OSS=m | ||
| 789 | CONFIG_SND_PCM_OSS_PLUGINS=y | ||
| 790 | # CONFIG_SND_DYNAMIC_MINORS is not set | ||
| 791 | CONFIG_SND_SUPPORT_OLD_API=y | ||
| 792 | CONFIG_SND_VERBOSE_PROCFS=y | ||
| 793 | # CONFIG_SND_VERBOSE_PRINTK is not set | ||
| 794 | # CONFIG_SND_DEBUG is not set | ||
| 795 | |||
| 796 | # | ||
| 797 | # Generic devices | ||
| 798 | # | ||
| 799 | CONFIG_SND_AC97_CODEC=m | ||
| 800 | # CONFIG_SND_DUMMY is not set | ||
| 801 | # CONFIG_SND_MTPAV is not set | ||
| 802 | # CONFIG_SND_SERIAL_U16550 is not set | ||
| 803 | # CONFIG_SND_MPU401 is not set | ||
| 804 | |||
| 805 | # | ||
| 806 | # ALSA ARM devices | ||
| 807 | # | ||
| 808 | CONFIG_SND_PXA2XX_PCM=m | ||
| 809 | CONFIG_SND_PXA2XX_AC97=m | ||
| 810 | |||
| 811 | # | ||
| 812 | # USB devices | ||
| 813 | # | ||
| 814 | # CONFIG_SND_USB_AUDIO is not set | ||
| 815 | # CONFIG_SND_USB_CAIAQ is not set | ||
| 816 | |||
| 817 | # | ||
| 818 | # System on Chip audio support | ||
| 819 | # | ||
| 820 | # CONFIG_SND_SOC is not set | ||
| 821 | |||
| 822 | # | ||
| 823 | # Open Sound System | ||
| 824 | # | ||
| 825 | # CONFIG_SOUND_PRIME is not set | ||
| 826 | CONFIG_AC97_BUS=m | ||
| 827 | |||
| 828 | # | ||
| 829 | # HID Devices | ||
| 830 | # | ||
| 831 | CONFIG_HID=y | ||
| 832 | # CONFIG_HID_DEBUG is not set | ||
| 833 | |||
| 834 | # | ||
| 835 | # USB Input Devices | ||
| 836 | # | ||
| 837 | CONFIG_USB_HID=y | ||
| 838 | # CONFIG_USB_HIDINPUT_POWERBOOK is not set | ||
| 839 | # CONFIG_HID_FF is not set | ||
| 840 | # CONFIG_USB_HIDDEV is not set | ||
| 841 | |||
| 842 | # | ||
| 843 | # USB support | ||
| 844 | # | ||
| 845 | CONFIG_USB_ARCH_HAS_HCD=y | ||
| 846 | CONFIG_USB_ARCH_HAS_OHCI=y | ||
| 847 | # CONFIG_USB_ARCH_HAS_EHCI is not set | ||
| 848 | CONFIG_USB=y | ||
| 849 | # CONFIG_USB_DEBUG is not set | ||
| 850 | |||
| 851 | # | ||
| 852 | # Miscellaneous USB options | ||
| 853 | # | ||
| 854 | CONFIG_USB_DEVICEFS=y | ||
| 855 | # CONFIG_USB_DEVICE_CLASS is not set | ||
| 856 | # CONFIG_USB_DYNAMIC_MINORS is not set | ||
| 857 | # CONFIG_USB_SUSPEND is not set | ||
| 858 | # CONFIG_USB_OTG is not set | ||
| 859 | |||
| 860 | # | ||
| 861 | # USB Host Controller Drivers | ||
| 862 | # | ||
| 863 | # CONFIG_USB_ISP116X_HCD is not set | ||
| 864 | CONFIG_USB_OHCI_HCD=y | ||
| 865 | # CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set | ||
| 866 | # CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set | ||
| 867 | CONFIG_USB_OHCI_LITTLE_ENDIAN=y | ||
| 868 | # CONFIG_USB_SL811_HCD is not set | ||
| 869 | |||
| 870 | # | ||
| 871 | # USB Device Class drivers | ||
| 872 | # | ||
| 873 | # CONFIG_USB_ACM is not set | ||
| 874 | # CONFIG_USB_PRINTER is not set | ||
| 875 | |||
| 876 | # | ||
| 877 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | ||
| 878 | # | ||
| 879 | |||
| 880 | # | ||
| 881 | # may also be needed; see USB_STORAGE Help for more information | ||
| 882 | # | ||
| 883 | CONFIG_USB_STORAGE=y | ||
| 884 | # CONFIG_USB_STORAGE_DEBUG is not set | ||
| 885 | # CONFIG_USB_STORAGE_DATAFAB is not set | ||
| 886 | # CONFIG_USB_STORAGE_FREECOM is not set | ||
| 887 | # CONFIG_USB_STORAGE_DPCM is not set | ||
| 888 | # CONFIG_USB_STORAGE_USBAT is not set | ||
| 889 | # CONFIG_USB_STORAGE_SDDR09 is not set | ||
| 890 | # CONFIG_USB_STORAGE_SDDR55 is not set | ||
| 891 | # CONFIG_USB_STORAGE_JUMPSHOT is not set | ||
| 892 | # CONFIG_USB_STORAGE_ALAUDA is not set | ||
| 893 | # CONFIG_USB_STORAGE_KARMA is not set | ||
| 894 | # CONFIG_USB_LIBUSUAL is not set | ||
| 895 | |||
| 896 | # | ||
| 897 | # USB Imaging devices | ||
| 898 | # | ||
| 899 | # CONFIG_USB_MDC800 is not set | ||
| 900 | # CONFIG_USB_MICROTEK is not set | ||
| 901 | # CONFIG_USB_MON is not set | ||
| 902 | |||
| 903 | # | ||
| 904 | # USB port drivers | ||
| 905 | # | ||
| 906 | |||
| 907 | # | ||
| 908 | # USB Serial Converter support | ||
| 909 | # | ||
| 910 | # CONFIG_USB_SERIAL is not set | ||
| 911 | |||
| 912 | # | ||
| 913 | # USB Miscellaneous drivers | ||
| 914 | # | ||
| 915 | # CONFIG_USB_EMI62 is not set | ||
| 916 | # CONFIG_USB_EMI26 is not set | ||
| 917 | # CONFIG_USB_ADUTUX is not set | ||
| 918 | # CONFIG_USB_AUERSWALD is not set | ||
| 919 | # CONFIG_USB_RIO500 is not set | ||
| 920 | # CONFIG_USB_LEGOTOWER is not set | ||
| 921 | # CONFIG_USB_LCD is not set | ||
| 922 | # CONFIG_USB_BERRY_CHARGE is not set | ||
| 923 | # CONFIG_USB_LED is not set | ||
| 924 | # CONFIG_USB_CYPRESS_CY7C63 is not set | ||
| 925 | # CONFIG_USB_CYTHERM is not set | ||
| 926 | # CONFIG_USB_PHIDGET is not set | ||
| 927 | # CONFIG_USB_IDMOUSE is not set | ||
| 928 | # CONFIG_USB_FTDI_ELAN is not set | ||
| 929 | # CONFIG_USB_APPLEDISPLAY is not set | ||
| 930 | # CONFIG_USB_LD is not set | ||
| 931 | # CONFIG_USB_TRANCEVIBRATOR is not set | ||
| 932 | # CONFIG_USB_IOWARRIOR is not set | ||
| 933 | # CONFIG_USB_TEST is not set | ||
| 934 | |||
| 935 | # | ||
| 936 | # USB DSL modem support | ||
| 937 | # | ||
| 938 | |||
| 939 | # | ||
| 940 | # USB Gadget Support | ||
| 941 | # | ||
| 942 | # CONFIG_USB_GADGET is not set | ||
| 943 | CONFIG_MMC=m | ||
| 944 | # CONFIG_MMC_DEBUG is not set | ||
| 945 | # CONFIG_MMC_UNSAFE_RESUME is not set | ||
| 946 | |||
| 947 | # | ||
| 948 | # MMC/SD Card Drivers | ||
| 949 | # | ||
| 950 | CONFIG_MMC_BLOCK=m | ||
| 951 | |||
| 952 | # | ||
| 953 | # MMC/SD Host Controller Drivers | ||
| 954 | # | ||
| 955 | CONFIG_MMC_PXA=m | ||
| 956 | |||
| 957 | # | ||
| 958 | # Real Time Clock | ||
| 959 | # | ||
| 960 | CONFIG_RTC_LIB=y | ||
| 961 | CONFIG_RTC_CLASS=m | ||
| 962 | |||
| 963 | # | ||
| 964 | # RTC interfaces | ||
| 965 | # | ||
| 966 | CONFIG_RTC_INTF_SYSFS=y | ||
| 967 | CONFIG_RTC_INTF_PROC=y | ||
| 968 | CONFIG_RTC_INTF_DEV=y | ||
| 969 | # CONFIG_RTC_INTF_DEV_UIE_EMUL is not set | ||
| 970 | # CONFIG_RTC_DRV_TEST is not set | ||
| 971 | |||
| 972 | # | ||
| 973 | # I2C RTC drivers | ||
| 974 | # | ||
| 975 | |||
| 976 | # | ||
| 977 | # SPI RTC drivers | ||
| 978 | # | ||
| 979 | |||
| 980 | # | ||
| 981 | # Platform RTC drivers | ||
| 982 | # | ||
| 983 | # CONFIG_RTC_DRV_CMOS is not set | ||
| 984 | # CONFIG_RTC_DRV_DS1553 is not set | ||
| 985 | # CONFIG_RTC_DRV_DS1742 is not set | ||
| 986 | # CONFIG_RTC_DRV_M48T86 is not set | ||
| 987 | CONFIG_RTC_DRV_V3020=m | ||
| 988 | |||
| 989 | # | ||
| 990 | # on-CPU RTC drivers | ||
| 991 | # | ||
| 992 | CONFIG_RTC_DRV_SA1100=m | ||
| 993 | |||
| 994 | # | ||
| 995 | # File systems | ||
| 996 | # | ||
| 997 | CONFIG_EXT2_FS=y | ||
| 998 | # CONFIG_EXT2_FS_XATTR is not set | ||
| 999 | # CONFIG_EXT2_FS_XIP is not set | ||
| 1000 | CONFIG_EXT3_FS=y | ||
| 1001 | CONFIG_EXT3_FS_XATTR=y | ||
| 1002 | # CONFIG_EXT3_FS_POSIX_ACL is not set | ||
| 1003 | # CONFIG_EXT3_FS_SECURITY is not set | ||
| 1004 | # CONFIG_EXT4DEV_FS is not set | ||
| 1005 | CONFIG_JBD=y | ||
| 1006 | # CONFIG_JBD_DEBUG is not set | ||
| 1007 | CONFIG_FS_MBCACHE=y | ||
| 1008 | # CONFIG_REISERFS_FS is not set | ||
| 1009 | # CONFIG_JFS_FS is not set | ||
| 1010 | # CONFIG_FS_POSIX_ACL is not set | ||
| 1011 | # CONFIG_XFS_FS is not set | ||
| 1012 | # CONFIG_GFS2_FS is not set | ||
| 1013 | # CONFIG_OCFS2_FS is not set | ||
| 1014 | # CONFIG_MINIX_FS is not set | ||
| 1015 | # CONFIG_ROMFS_FS is not set | ||
| 1016 | CONFIG_INOTIFY=y | ||
| 1017 | CONFIG_INOTIFY_USER=y | ||
| 1018 | # CONFIG_QUOTA is not set | ||
| 1019 | CONFIG_DNOTIFY=y | ||
| 1020 | # CONFIG_AUTOFS_FS is not set | ||
| 1021 | # CONFIG_AUTOFS4_FS is not set | ||
| 1022 | # CONFIG_FUSE_FS is not set | ||
| 1023 | |||
| 1024 | # | ||
| 1025 | # CD-ROM/DVD Filesystems | ||
| 1026 | # | ||
| 1027 | # CONFIG_ISO9660_FS is not set | ||
| 1028 | # CONFIG_UDF_FS is not set | ||
| 1029 | |||
| 1030 | # | ||
| 1031 | # DOS/FAT/NT Filesystems | ||
| 1032 | # | ||
| 1033 | CONFIG_FAT_FS=y | ||
| 1034 | CONFIG_MSDOS_FS=y | ||
| 1035 | CONFIG_VFAT_FS=y | ||
| 1036 | CONFIG_FAT_DEFAULT_CODEPAGE=437 | ||
| 1037 | CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | ||
| 1038 | # CONFIG_NTFS_FS is not set | ||
| 1039 | |||
| 1040 | # | ||
| 1041 | # Pseudo filesystems | ||
| 1042 | # | ||
| 1043 | CONFIG_PROC_FS=y | ||
| 1044 | CONFIG_PROC_SYSCTL=y | ||
| 1045 | CONFIG_SYSFS=y | ||
| 1046 | CONFIG_TMPFS=y | ||
| 1047 | # CONFIG_TMPFS_POSIX_ACL is not set | ||
| 1048 | # CONFIG_HUGETLB_PAGE is not set | ||
| 1049 | CONFIG_RAMFS=y | ||
| 1050 | # CONFIG_CONFIGFS_FS is not set | ||
| 1051 | |||
| 1052 | # | ||
| 1053 | # Miscellaneous filesystems | ||
| 1054 | # | ||
| 1055 | # CONFIG_ADFS_FS is not set | ||
| 1056 | # CONFIG_AFFS_FS is not set | ||
| 1057 | # CONFIG_HFS_FS is not set | ||
| 1058 | # CONFIG_HFSPLUS_FS is not set | ||
| 1059 | # CONFIG_BEFS_FS is not set | ||
| 1060 | # CONFIG_BFS_FS is not set | ||
| 1061 | # CONFIG_EFS_FS is not set | ||
| 1062 | CONFIG_JFFS2_FS=y | ||
| 1063 | CONFIG_JFFS2_FS_DEBUG=0 | ||
| 1064 | CONFIG_JFFS2_FS_WRITEBUFFER=y | ||
| 1065 | CONFIG_JFFS2_SUMMARY=y | ||
| 1066 | # CONFIG_JFFS2_FS_XATTR is not set | ||
| 1067 | # CONFIG_JFFS2_COMPRESSION_OPTIONS is not set | ||
| 1068 | CONFIG_JFFS2_ZLIB=y | ||
| 1069 | CONFIG_JFFS2_RTIME=y | ||
| 1070 | # CONFIG_JFFS2_RUBIN is not set | ||
| 1071 | # CONFIG_CRAMFS is not set | ||
| 1072 | # CONFIG_VXFS_FS is not set | ||
| 1073 | # CONFIG_HPFS_FS is not set | ||
| 1074 | # CONFIG_QNX4FS_FS is not set | ||
| 1075 | # CONFIG_SYSV_FS is not set | ||
| 1076 | # CONFIG_UFS_FS is not set | ||
| 1077 | |||
| 1078 | # | ||
| 1079 | # Network File Systems | ||
| 1080 | # | ||
| 1081 | CONFIG_NFS_FS=y | ||
| 1082 | CONFIG_NFS_V3=y | ||
| 1083 | # CONFIG_NFS_V3_ACL is not set | ||
| 1084 | # CONFIG_NFS_V4 is not set | ||
| 1085 | # CONFIG_NFS_DIRECTIO is not set | ||
| 1086 | # CONFIG_NFSD is not set | ||
| 1087 | CONFIG_ROOT_NFS=y | ||
| 1088 | CONFIG_LOCKD=y | ||
| 1089 | CONFIG_LOCKD_V4=y | ||
| 1090 | CONFIG_NFS_COMMON=y | ||
| 1091 | CONFIG_SUNRPC=y | ||
| 1092 | # CONFIG_SUNRPC_BIND34 is not set | ||
| 1093 | # CONFIG_RPCSEC_GSS_KRB5 is not set | ||
| 1094 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | ||
| 1095 | CONFIG_SMB_FS=y | ||
| 1096 | # CONFIG_SMB_NLS_DEFAULT is not set | ||
| 1097 | # CONFIG_CIFS is not set | ||
| 1098 | # CONFIG_NCP_FS is not set | ||
| 1099 | # CONFIG_CODA_FS is not set | ||
| 1100 | # CONFIG_AFS_FS is not set | ||
| 1101 | # CONFIG_9P_FS is not set | ||
| 1102 | |||
| 1103 | # | ||
| 1104 | # Partition Types | ||
| 1105 | # | ||
| 1106 | # CONFIG_PARTITION_ADVANCED is not set | ||
| 1107 | CONFIG_MSDOS_PARTITION=y | ||
| 1108 | |||
| 1109 | # | ||
| 1110 | # Native Language Support | ||
| 1111 | # | ||
| 1112 | CONFIG_NLS=y | ||
| 1113 | CONFIG_NLS_DEFAULT="iso8859-1" | ||
| 1114 | CONFIG_NLS_CODEPAGE_437=y | ||
| 1115 | # CONFIG_NLS_CODEPAGE_737 is not set | ||
| 1116 | # CONFIG_NLS_CODEPAGE_775 is not set | ||
| 1117 | # CONFIG_NLS_CODEPAGE_850 is not set | ||
| 1118 | # CONFIG_NLS_CODEPAGE_852 is not set | ||
| 1119 | # CONFIG_NLS_CODEPAGE_855 is not set | ||
| 1120 | # CONFIG_NLS_CODEPAGE_857 is not set | ||
| 1121 | # CONFIG_NLS_CODEPAGE_860 is not set | ||
| 1122 | # CONFIG_NLS_CODEPAGE_861 is not set | ||
| 1123 | # CONFIG_NLS_CODEPAGE_862 is not set | ||
| 1124 | # CONFIG_NLS_CODEPAGE_863 is not set | ||
| 1125 | # CONFIG_NLS_CODEPAGE_864 is not set | ||
| 1126 | # CONFIG_NLS_CODEPAGE_865 is not set | ||
| 1127 | # CONFIG_NLS_CODEPAGE_866 is not set | ||
| 1128 | # CONFIG_NLS_CODEPAGE_869 is not set | ||
| 1129 | # CONFIG_NLS_CODEPAGE_936 is not set | ||
| 1130 | # CONFIG_NLS_CODEPAGE_950 is not set | ||
| 1131 | # CONFIG_NLS_CODEPAGE_932 is not set | ||
| 1132 | # CONFIG_NLS_CODEPAGE_949 is not set | ||
| 1133 | # CONFIG_NLS_CODEPAGE_874 is not set | ||
| 1134 | # CONFIG_NLS_ISO8859_8 is not set | ||
| 1135 | # CONFIG_NLS_CODEPAGE_1250 is not set | ||
| 1136 | # CONFIG_NLS_CODEPAGE_1251 is not set | ||
| 1137 | # CONFIG_NLS_ASCII is not set | ||
| 1138 | CONFIG_NLS_ISO8859_1=y | ||
| 1139 | # CONFIG_NLS_ISO8859_2 is not set | ||
| 1140 | # CONFIG_NLS_ISO8859_3 is not set | ||
| 1141 | # CONFIG_NLS_ISO8859_4 is not set | ||
| 1142 | # CONFIG_NLS_ISO8859_5 is not set | ||
| 1143 | # CONFIG_NLS_ISO8859_6 is not set | ||
| 1144 | # CONFIG_NLS_ISO8859_7 is not set | ||
| 1145 | # CONFIG_NLS_ISO8859_9 is not set | ||
| 1146 | # CONFIG_NLS_ISO8859_13 is not set | ||
| 1147 | # CONFIG_NLS_ISO8859_14 is not set | ||
| 1148 | # CONFIG_NLS_ISO8859_15 is not set | ||
| 1149 | # CONFIG_NLS_KOI8_R is not set | ||
| 1150 | # CONFIG_NLS_KOI8_U is not set | ||
| 1151 | CONFIG_NLS_UTF8=y | ||
| 1152 | |||
| 1153 | # | ||
| 1154 | # Distributed Lock Manager | ||
| 1155 | # | ||
| 1156 | # CONFIG_DLM is not set | ||
| 1157 | |||
| 1158 | # | ||
| 1159 | # Profiling support | ||
| 1160 | # | ||
| 1161 | # CONFIG_PROFILING is not set | ||
| 1162 | |||
| 1163 | # | ||
| 1164 | # Kernel hacking | ||
| 1165 | # | ||
| 1166 | # CONFIG_PRINTK_TIME is not set | ||
| 1167 | CONFIG_ENABLE_MUST_CHECK=y | ||
| 1168 | CONFIG_MAGIC_SYSRQ=y | ||
| 1169 | # CONFIG_UNUSED_SYMBOLS is not set | ||
| 1170 | # CONFIG_DEBUG_FS is not set | ||
| 1171 | # CONFIG_HEADERS_CHECK is not set | ||
| 1172 | CONFIG_DEBUG_KERNEL=y | ||
| 1173 | # CONFIG_DEBUG_SHIRQ is not set | ||
| 1174 | # CONFIG_DETECT_SOFTLOCKUP is not set | ||
| 1175 | # CONFIG_SCHEDSTATS is not set | ||
| 1176 | # CONFIG_TIMER_STATS is not set | ||
| 1177 | # CONFIG_DEBUG_SLAB is not set | ||
| 1178 | # CONFIG_DEBUG_RT_MUTEXES is not set | ||
| 1179 | # CONFIG_RT_MUTEX_TESTER is not set | ||
| 1180 | # CONFIG_DEBUG_SPINLOCK is not set | ||
| 1181 | # CONFIG_DEBUG_MUTEXES is not set | ||
| 1182 | # CONFIG_DEBUG_LOCK_ALLOC is not set | ||
| 1183 | # CONFIG_PROVE_LOCKING is not set | ||
| 1184 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | ||
| 1185 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | ||
| 1186 | # CONFIG_DEBUG_KOBJECT is not set | ||
| 1187 | # CONFIG_DEBUG_BUGVERBOSE is not set | ||
| 1188 | CONFIG_DEBUG_INFO=y | ||
| 1189 | # CONFIG_DEBUG_VM is not set | ||
| 1190 | # CONFIG_DEBUG_LIST is not set | ||
| 1191 | CONFIG_FRAME_POINTER=y | ||
| 1192 | CONFIG_FORCED_INLINING=y | ||
| 1193 | # CONFIG_RCU_TORTURE_TEST is not set | ||
| 1194 | # CONFIG_FAULT_INJECTION is not set | ||
| 1195 | CONFIG_DEBUG_USER=y | ||
| 1196 | CONFIG_DEBUG_ERRORS=y | ||
| 1197 | CONFIG_DEBUG_LL=y | ||
| 1198 | # CONFIG_DEBUG_ICEDCC is not set | ||
| 1199 | |||
| 1200 | # | ||
| 1201 | # Security options | ||
| 1202 | # | ||
| 1203 | # CONFIG_KEYS is not set | ||
| 1204 | # CONFIG_SECURITY is not set | ||
| 1205 | |||
| 1206 | # | ||
| 1207 | # Cryptographic options | ||
| 1208 | # | ||
| 1209 | CONFIG_CRYPTO=y | ||
| 1210 | CONFIG_CRYPTO_ALGAPI=m | ||
| 1211 | CONFIG_CRYPTO_BLKCIPHER=m | ||
| 1212 | CONFIG_CRYPTO_MANAGER=m | ||
| 1213 | # CONFIG_CRYPTO_HMAC is not set | ||
| 1214 | # CONFIG_CRYPTO_XCBC is not set | ||
| 1215 | # CONFIG_CRYPTO_NULL is not set | ||
| 1216 | # CONFIG_CRYPTO_MD4 is not set | ||
| 1217 | # CONFIG_CRYPTO_MD5 is not set | ||
| 1218 | # CONFIG_CRYPTO_SHA1 is not set | ||
| 1219 | # CONFIG_CRYPTO_SHA256 is not set | ||
| 1220 | # CONFIG_CRYPTO_SHA512 is not set | ||
| 1221 | # CONFIG_CRYPTO_WP512 is not set | ||
| 1222 | # CONFIG_CRYPTO_TGR192 is not set | ||
| 1223 | # CONFIG_CRYPTO_GF128MUL is not set | ||
| 1224 | CONFIG_CRYPTO_ECB=m | ||
| 1225 | CONFIG_CRYPTO_CBC=m | ||
| 1226 | CONFIG_CRYPTO_PCBC=m | ||
| 1227 | # CONFIG_CRYPTO_LRW is not set | ||
| 1228 | # CONFIG_CRYPTO_CRYPTD is not set | ||
| 1229 | # CONFIG_CRYPTO_DES is not set | ||
| 1230 | # CONFIG_CRYPTO_FCRYPT is not set | ||
| 1231 | # CONFIG_CRYPTO_BLOWFISH is not set | ||
| 1232 | # CONFIG_CRYPTO_TWOFISH is not set | ||
| 1233 | # CONFIG_CRYPTO_SERPENT is not set | ||
| 1234 | CONFIG_CRYPTO_AES=m | ||
| 1235 | # CONFIG_CRYPTO_CAST5 is not set | ||
| 1236 | # CONFIG_CRYPTO_CAST6 is not set | ||
| 1237 | # CONFIG_CRYPTO_TEA is not set | ||
| 1238 | CONFIG_CRYPTO_ARC4=m | ||
| 1239 | # CONFIG_CRYPTO_KHAZAD is not set | ||
| 1240 | # CONFIG_CRYPTO_ANUBIS is not set | ||
| 1241 | # CONFIG_CRYPTO_DEFLATE is not set | ||
| 1242 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | ||
| 1243 | # CONFIG_CRYPTO_CRC32C is not set | ||
| 1244 | # CONFIG_CRYPTO_CAMELLIA is not set | ||
| 1245 | # CONFIG_CRYPTO_TEST is not set | ||
| 1246 | |||
| 1247 | # | ||
| 1248 | # Hardware crypto devices | ||
| 1249 | # | ||
| 1250 | |||
| 1251 | # | ||
| 1252 | # Library routines | ||
| 1253 | # | ||
| 1254 | CONFIG_BITREVERSE=y | ||
| 1255 | # CONFIG_CRC_CCITT is not set | ||
| 1256 | # CONFIG_CRC16 is not set | ||
| 1257 | # CONFIG_CRC_ITU_T is not set | ||
| 1258 | CONFIG_CRC32=y | ||
| 1259 | # CONFIG_LIBCRC32C is not set | ||
| 1260 | CONFIG_ZLIB_INFLATE=y | ||
| 1261 | CONFIG_ZLIB_DEFLATE=y | ||
| 1262 | CONFIG_PLIST=y | ||
| 1263 | CONFIG_HAS_IOMEM=y | ||
| 1264 | CONFIG_HAS_IOPORT=y | ||
| 1265 | CONFIG_HAS_DMA=y | ||
diff --git a/arch/arm/configs/s3c2410_defconfig b/arch/arm/configs/s3c2410_defconfig index 1d5150e4d6b3..f8a1645b3d4a 100644 --- a/arch/arm/configs/s3c2410_defconfig +++ b/arch/arm/configs/s3c2410_defconfig | |||
| @@ -138,11 +138,11 @@ CONFIG_ARCH_S3C2410=y | |||
| 138 | CONFIG_PLAT_S3C24XX=y | 138 | CONFIG_PLAT_S3C24XX=y |
| 139 | CONFIG_CPU_S3C244X=y | 139 | CONFIG_CPU_S3C244X=y |
| 140 | CONFIG_PM_SIMTEC=y | 140 | CONFIG_PM_SIMTEC=y |
| 141 | # CONFIG_S3C2410_BOOT_WATCHDOG is not set | 141 | # CONFIG_S3C_BOOT_WATCHDOG is not set |
| 142 | # CONFIG_S3C2410_BOOT_ERROR_RESET is not set | 142 | # CONFIG_S3C_BOOT_ERROR_RESET is not set |
| 143 | # CONFIG_S3C2410_PM_DEBUG is not set | 143 | # CONFIG_S3C2410_PM_DEBUG is not set |
| 144 | # CONFIG_S3C2410_PM_CHECK is not set | 144 | # CONFIG_S3C2410_PM_CHECK is not set |
| 145 | CONFIG_S3C2410_LOWLEVEL_UART_PORT=0 | 145 | CONFIG_S3C_LOWLEVEL_UART_PORT=0 |
| 146 | CONFIG_S3C2410_DMA=y | 146 | CONFIG_S3C2410_DMA=y |
| 147 | # CONFIG_S3C2410_DMA_DEBUG is not set | 147 | # CONFIG_S3C2410_DMA_DEBUG is not set |
| 148 | CONFIG_MACH_SMDK=y | 148 | CONFIG_MACH_SMDK=y |
| @@ -1392,8 +1392,8 @@ CONFIG_DEBUG_USER=y | |||
| 1392 | # CONFIG_DEBUG_ERRORS is not set | 1392 | # CONFIG_DEBUG_ERRORS is not set |
| 1393 | CONFIG_DEBUG_LL=y | 1393 | CONFIG_DEBUG_LL=y |
| 1394 | # CONFIG_DEBUG_ICEDCC is not set | 1394 | # CONFIG_DEBUG_ICEDCC is not set |
| 1395 | CONFIG_DEBUG_S3C2410_PORT=y | 1395 | CONFIG_DEBUG_S3C_PORT=y |
| 1396 | CONFIG_DEBUG_S3C2410_UART=0 | 1396 | CONFIG_DEBUG_S3C_UART=0 |
| 1397 | 1397 | ||
| 1398 | # | 1398 | # |
| 1399 | # Security options | 1399 | # Security options |
diff --git a/arch/arm/mach-at91/at91rm9200_devices.c b/arch/arm/mach-at91/at91rm9200_devices.c index 70599bcf451c..0417c165d50d 100644 --- a/arch/arm/mach-at91/at91rm9200_devices.c +++ b/arch/arm/mach-at91/at91rm9200_devices.c | |||
| @@ -477,7 +477,7 @@ void __init at91_add_device_i2c(void) {} | |||
| 477 | * SPI | 477 | * SPI |
| 478 | * -------------------------------------------------------------------- */ | 478 | * -------------------------------------------------------------------- */ |
| 479 | 479 | ||
| 480 | #if defined(CONFIG_SPI_AT91) || defined(CONFIG_SPI_AT91_MODULE) || defined(CONFIG_AT91_SPI) || defined(CONFIG_AT91_SPI_MODULE) | 480 | #if defined(CONFIG_SPI_ATMEL) || defined(CONFIG_SPI_ATMEL_MODULE) |
| 481 | static u64 spi_dmamask = 0xffffffffUL; | 481 | static u64 spi_dmamask = 0xffffffffUL; |
| 482 | 482 | ||
| 483 | static struct resource spi_resources[] = { | 483 | static struct resource spi_resources[] = { |
| @@ -494,7 +494,7 @@ static struct resource spi_resources[] = { | |||
| 494 | }; | 494 | }; |
| 495 | 495 | ||
| 496 | static struct platform_device at91rm9200_spi_device = { | 496 | static struct platform_device at91rm9200_spi_device = { |
| 497 | .name = "at91_spi", | 497 | .name = "atmel_spi", |
| 498 | .id = 0, | 498 | .id = 0, |
| 499 | .dev = { | 499 | .dev = { |
| 500 | .dma_mask = &spi_dmamask, | 500 | .dma_mask = &spi_dmamask, |
| @@ -522,18 +522,14 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices) | |||
| 522 | else | 522 | else |
| 523 | cs_pin = spi_standard_cs[devices[i].chip_select]; | 523 | cs_pin = spi_standard_cs[devices[i].chip_select]; |
| 524 | 524 | ||
| 525 | #ifdef CONFIG_SPI_AT91_MANUAL_CS | 525 | /* enable chip-select pin */ |
| 526 | at91_set_gpio_output(cs_pin, 1); | 526 | at91_set_gpio_output(cs_pin, 1); |
| 527 | #else | ||
| 528 | at91_set_A_periph(cs_pin, 0); | ||
| 529 | #endif | ||
| 530 | 527 | ||
| 531 | /* pass chip-select pin to driver */ | 528 | /* pass chip-select pin to driver */ |
| 532 | devices[i].controller_data = (void *) cs_pin; | 529 | devices[i].controller_data = (void *) cs_pin; |
| 533 | } | 530 | } |
| 534 | 531 | ||
| 535 | spi_register_board_info(devices, nr_devices); | 532 | spi_register_board_info(devices, nr_devices); |
| 536 | at91_clock_associate("spi_clk", &at91rm9200_spi_device.dev, "spi"); | ||
| 537 | platform_device_register(&at91rm9200_spi_device); | 533 | platform_device_register(&at91rm9200_spi_device); |
| 538 | } | 534 | } |
| 539 | #else | 535 | #else |
diff --git a/arch/arm/mach-iop32x/Kconfig b/arch/arm/mach-iop32x/Kconfig index 9bb02b6d7ae1..dbe07c9472ed 100644 --- a/arch/arm/mach-iop32x/Kconfig +++ b/arch/arm/mach-iop32x/Kconfig | |||
| @@ -42,6 +42,13 @@ config IOP3XX_ATU | |||
| 42 | Say N if the IOP is an add in card, the host system owns the PCI | 42 | Say N if the IOP is an add in card, the host system owns the PCI |
| 43 | bus in this case. | 43 | bus in this case. |
| 44 | 44 | ||
| 45 | config MACH_EM7210 | ||
| 46 | bool "Enable support for the Lanner EM7210" | ||
| 47 | help | ||
| 48 | Say Y here if you want to run your kernel on the Lanner EM7210 | ||
| 49 | board. Say also Y here if you have a SS4000e Baxter Creek NAS | ||
| 50 | appliance." | ||
| 51 | |||
| 45 | endmenu | 52 | endmenu |
| 46 | 53 | ||
| 47 | endif | 54 | endif |
diff --git a/arch/arm/mach-iop32x/Makefile b/arch/arm/mach-iop32x/Makefile index 7b05b37e1f94..cfdf8a137c2b 100644 --- a/arch/arm/mach-iop32x/Makefile +++ b/arch/arm/mach-iop32x/Makefile | |||
| @@ -11,3 +11,4 @@ obj-$(CONFIG_MACH_GLANTANK) += glantank.o | |||
| 11 | obj-$(CONFIG_ARCH_IQ80321) += iq80321.o | 11 | obj-$(CONFIG_ARCH_IQ80321) += iq80321.o |
| 12 | obj-$(CONFIG_ARCH_IQ31244) += iq31244.o | 12 | obj-$(CONFIG_ARCH_IQ31244) += iq31244.o |
| 13 | obj-$(CONFIG_MACH_N2100) += n2100.o | 13 | obj-$(CONFIG_MACH_N2100) += n2100.o |
| 14 | obj-$(CONFIG_MACH_EM7210) += em7210.o | ||
diff --git a/arch/arm/mach-iop32x/em7210.c b/arch/arm/mach-iop32x/em7210.c new file mode 100644 index 000000000000..c947152f9a3c --- /dev/null +++ b/arch/arm/mach-iop32x/em7210.c | |||
| @@ -0,0 +1,215 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-iop32x/em7210.c | ||
| 3 | * | ||
| 4 | * Board support code for the Lanner EM7210 platforms. | ||
| 5 | * | ||
| 6 | * Based on arch/arm/mach-iop32x/iq31244.c file. | ||
| 7 | * | ||
| 8 | * Copyright (C) 2007 Arnaud Patard <arnaud.patard@rtp-net.org> | ||
| 9 | * | ||
| 10 | * This program is free software; you can redistribute it and/or modify | ||
| 11 | * it under the terms of the GNU General Public License version 2 as | ||
| 12 | * published by the Free Software Foundation. | ||
| 13 | * | ||
| 14 | */ | ||
| 15 | |||
| 16 | #include <linux/mm.h> | ||
| 17 | #include <linux/init.h> | ||
| 18 | #include <linux/kernel.h> | ||
| 19 | #include <linux/pci.h> | ||
| 20 | #include <linux/pm.h> | ||
| 21 | #include <linux/serial_core.h> | ||
| 22 | #include <linux/serial_8250.h> | ||
| 23 | #include <linux/mtd/physmap.h> | ||
| 24 | #include <linux/platform_device.h> | ||
| 25 | #include <linux/i2c.h> | ||
| 26 | #include <asm/hardware.h> | ||
| 27 | #include <linux/io.h> | ||
| 28 | #include <linux/irq.h> | ||
| 29 | #include <asm/mach/arch.h> | ||
| 30 | #include <asm/mach/map.h> | ||
| 31 | #include <asm/mach/pci.h> | ||
| 32 | #include <asm/mach/time.h> | ||
| 33 | #include <asm/mach-types.h> | ||
| 34 | #include <asm/arch/time.h> | ||
| 35 | |||
| 36 | static void __init em7210_timer_init(void) | ||
| 37 | { | ||
| 38 | /* http://www.kwaak.net/fotos/fotos-nas/slide_24.html */ | ||
| 39 | /* 33.333 MHz crystal. */ | ||
| 40 | iop_init_time(200000000); | ||
| 41 | } | ||
| 42 | |||
| 43 | static struct sys_timer em7210_timer = { | ||
| 44 | .init = em7210_timer_init, | ||
| 45 | .offset = iop_gettimeoffset, | ||
| 46 | }; | ||
| 47 | |||
| 48 | /* | ||
| 49 | * EM7210 RTC | ||
| 50 | */ | ||
| 51 | static struct i2c_board_info __initdata em7210_i2c_devices[] = { | ||
| 52 | { | ||
| 53 | I2C_BOARD_INFO("rtc-rs5c372", 0x32), | ||
| 54 | .type = "rs5c372a", | ||
| 55 | }, | ||
| 56 | }; | ||
| 57 | |||
| 58 | /* | ||
| 59 | * EM7210 I/O | ||
| 60 | */ | ||
| 61 | static struct map_desc em7210_io_desc[] __initdata = { | ||
| 62 | { /* on-board devices */ | ||
| 63 | .virtual = IQ31244_UART, | ||
| 64 | .pfn = __phys_to_pfn(IQ31244_UART), | ||
| 65 | .length = 0x00100000, | ||
| 66 | .type = MT_DEVICE, | ||
| 67 | }, | ||
| 68 | }; | ||
| 69 | |||
| 70 | void __init em7210_map_io(void) | ||
| 71 | { | ||
| 72 | iop3xx_map_io(); | ||
| 73 | iotable_init(em7210_io_desc, ARRAY_SIZE(em7210_io_desc)); | ||
| 74 | } | ||
| 75 | |||
| 76 | |||
| 77 | /* | ||
| 78 | * EM7210 PCI | ||
| 79 | */ | ||
| 80 | #define INTA IRQ_IOP32X_XINT0 | ||
| 81 | #define INTB IRQ_IOP32X_XINT1 | ||
| 82 | #define INTC IRQ_IOP32X_XINT2 | ||
| 83 | #define INTD IRQ_IOP32X_XINT3 | ||
| 84 | |||
| 85 | static int __init | ||
| 86 | em7210_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin) | ||
| 87 | { | ||
| 88 | static int pci_irq_table[][4] = { | ||
| 89 | /* | ||
| 90 | * PCI IDSEL/INTPIN->INTLINE | ||
| 91 | * A B C D | ||
| 92 | */ | ||
| 93 | {INTB, INTB, INTB, INTB}, /* console / uart */ | ||
| 94 | {INTA, INTA, INTA, INTA}, /* 1st 82541 */ | ||
| 95 | {INTD, INTD, INTD, INTD}, /* 2nd 82541 */ | ||
| 96 | {INTC, INTC, INTC, INTC}, /* GD31244 */ | ||
| 97 | {INTD, INTA, INTA, INTA}, /* mini-PCI */ | ||
| 98 | {INTD, INTC, INTA, INTA}, /* NEC USB */ | ||
| 99 | }; | ||
| 100 | |||
| 101 | if (pin < 1 || pin > 4) | ||
| 102 | return -1; | ||
| 103 | |||
| 104 | return pci_irq_table[slot % 6][pin - 1]; | ||
| 105 | } | ||
| 106 | |||
| 107 | static struct hw_pci em7210_pci __initdata = { | ||
| 108 | .swizzle = pci_std_swizzle, | ||
| 109 | .nr_controllers = 1, | ||
| 110 | .setup = iop3xx_pci_setup, | ||
| 111 | .preinit = iop3xx_pci_preinit, | ||
| 112 | .scan = iop3xx_pci_scan_bus, | ||
| 113 | .map_irq = em7210_pci_map_irq, | ||
| 114 | }; | ||
| 115 | |||
| 116 | static int __init em7210_pci_init(void) | ||
| 117 | { | ||
| 118 | if (machine_is_em7210()) | ||
| 119 | pci_common_init(&em7210_pci); | ||
| 120 | |||
| 121 | return 0; | ||
| 122 | } | ||
| 123 | |||
| 124 | subsys_initcall(em7210_pci_init); | ||
| 125 | |||
| 126 | |||
| 127 | /* | ||
| 128 | * EM7210 Flash | ||
| 129 | */ | ||
| 130 | static struct physmap_flash_data em7210_flash_data = { | ||
| 131 | .width = 2, | ||
| 132 | }; | ||
| 133 | |||
| 134 | static struct resource em7210_flash_resource = { | ||
| 135 | .start = 0xf0000000, | ||
| 136 | .end = 0xf1ffffff, | ||
| 137 | .flags = IORESOURCE_MEM, | ||
| 138 | }; | ||
| 139 | |||
| 140 | static struct platform_device em7210_flash_device = { | ||
| 141 | .name = "physmap-flash", | ||
| 142 | .id = 0, | ||
| 143 | .dev = { | ||
| 144 | .platform_data = &em7210_flash_data, | ||
| 145 | }, | ||
| 146 | .num_resources = 1, | ||
| 147 | .resource = &em7210_flash_resource, | ||
| 148 | }; | ||
| 149 | |||
| 150 | |||
| 151 | /* | ||
| 152 | * EM7210 UART | ||
| 153 | * The physical address of the serial port is 0xfe800000, | ||
| 154 | * so it can be used for physical and virtual address. | ||
| 155 | */ | ||
| 156 | static struct plat_serial8250_port em7210_serial_port[] = { | ||
| 157 | { | ||
| 158 | .mapbase = IQ31244_UART, | ||
| 159 | .membase = (char *)IQ31244_UART, | ||
| 160 | .irq = IRQ_IOP32X_XINT1, | ||
| 161 | .flags = UPF_SKIP_TEST, | ||
| 162 | .iotype = UPIO_MEM, | ||
| 163 | .regshift = 0, | ||
| 164 | .uartclk = 1843200, | ||
| 165 | }, | ||
| 166 | { }, | ||
| 167 | }; | ||
| 168 | |||
| 169 | static struct resource em7210_uart_resource = { | ||
| 170 | .start = IQ31244_UART, | ||
| 171 | .end = IQ31244_UART + 7, | ||
| 172 | .flags = IORESOURCE_MEM, | ||
| 173 | }; | ||
| 174 | |||
| 175 | static struct platform_device em7210_serial_device = { | ||
| 176 | .name = "serial8250", | ||
| 177 | .id = PLAT8250_DEV_PLATFORM, | ||
| 178 | .dev = { | ||
| 179 | .platform_data = em7210_serial_port, | ||
| 180 | }, | ||
| 181 | .num_resources = 1, | ||
| 182 | .resource = &em7210_uart_resource, | ||
| 183 | }; | ||
| 184 | |||
| 185 | void em7210_power_off(void) | ||
| 186 | { | ||
| 187 | *IOP3XX_GPOE &= 0xfe; | ||
| 188 | *IOP3XX_GPOD |= 0x01; | ||
| 189 | } | ||
| 190 | |||
| 191 | static void __init em7210_init_machine(void) | ||
| 192 | { | ||
| 193 | platform_device_register(&em7210_serial_device); | ||
| 194 | platform_device_register(&iop3xx_i2c0_device); | ||
| 195 | platform_device_register(&iop3xx_i2c1_device); | ||
| 196 | platform_device_register(&em7210_flash_device); | ||
| 197 | platform_device_register(&iop3xx_dma_0_channel); | ||
| 198 | platform_device_register(&iop3xx_dma_1_channel); | ||
| 199 | |||
| 200 | i2c_register_board_info(0, em7210_i2c_devices, | ||
| 201 | ARRAY_SIZE(em7210_i2c_devices)); | ||
| 202 | |||
| 203 | |||
| 204 | pm_power_off = em7210_power_off; | ||
| 205 | } | ||
| 206 | |||
| 207 | MACHINE_START(EM7210, "Lanner EM7210") | ||
| 208 | .phys_io = IQ31244_UART, | ||
| 209 | .io_pg_offst = ((IQ31244_UART) >> 18) & 0xfffc, | ||
| 210 | .boot_params = 0xa0000100, | ||
| 211 | .map_io = em7210_map_io, | ||
| 212 | .init_irq = iop32x_init_irq, | ||
| 213 | .timer = &em7210_timer, | ||
| 214 | .init_machine = em7210_init_machine, | ||
| 215 | MACHINE_END | ||
diff --git a/arch/arm/mach-iop32x/irq.c b/arch/arm/mach-iop32x/irq.c index c971171c2905..55cf0162e8c1 100644 --- a/arch/arm/mach-iop32x/irq.c +++ b/arch/arm/mach-iop32x/irq.c | |||
| @@ -63,7 +63,8 @@ void __init iop32x_init_irq(void) | |||
| 63 | if (machine_is_glantank() || | 63 | if (machine_is_glantank() || |
| 64 | machine_is_iq80321() || | 64 | machine_is_iq80321() || |
| 65 | machine_is_iq31244() || | 65 | machine_is_iq31244() || |
| 66 | machine_is_n2100()) | 66 | machine_is_n2100() || |
| 67 | machine_is_em7210()) | ||
| 67 | *IOP3XX_PCIIRSR = 0x0f; | 68 | *IOP3XX_PCIIRSR = 0x0f; |
| 68 | 69 | ||
| 69 | for (i = 0; i < NR_IRQS; i++) { | 70 | for (i = 0; i < NR_IRQS; i++) { |
diff --git a/arch/arm/mach-ixp4xx/common.c b/arch/arm/mach-ixp4xx/common.c index 8112f726ffa0..4c54a86eda3a 100644 --- a/arch/arm/mach-ixp4xx/common.c +++ b/arch/arm/mach-ixp4xx/common.c | |||
| @@ -188,7 +188,7 @@ static int ixp4xx_set_irq_type(unsigned int irq, unsigned int type) | |||
| 188 | *int_reg |= (int_style << (line * IXP4XX_GPIO_STYLE_SIZE)); | 188 | *int_reg |= (int_style << (line * IXP4XX_GPIO_STYLE_SIZE)); |
| 189 | 189 | ||
| 190 | /* Configure the line as an input */ | 190 | /* Configure the line as an input */ |
| 191 | gpio_line_config(line, IXP4XX_GPIO_IN); | 191 | gpio_line_config(irq2gpio[irq], IXP4XX_GPIO_IN); |
| 192 | 192 | ||
| 193 | return 0; | 193 | return 0; |
| 194 | } | 194 | } |
diff --git a/arch/arm/mach-ks8695/irq.c b/arch/arm/mach-ks8695/irq.c index 2407bba00547..4c3ab43e1046 100644 --- a/arch/arm/mach-ks8695/irq.c +++ b/arch/arm/mach-ks8695/irq.c | |||
| @@ -23,7 +23,6 @@ | |||
| 23 | #include <linux/module.h> | 23 | #include <linux/module.h> |
| 24 | #include <linux/interrupt.h> | 24 | #include <linux/interrupt.h> |
| 25 | #include <linux/ioport.h> | 25 | #include <linux/ioport.h> |
| 26 | #include <linux/ptrace.h> | ||
| 27 | #include <linux/sysdev.h> | 26 | #include <linux/sysdev.h> |
| 28 | 27 | ||
| 29 | #include <asm/hardware.h> | 28 | #include <asm/hardware.h> |
diff --git a/arch/arm/mach-mx3/Kconfig b/arch/arm/mach-mx3/Kconfig new file mode 100644 index 000000000000..5fe8606cac08 --- /dev/null +++ b/arch/arm/mach-mx3/Kconfig | |||
| @@ -0,0 +1,12 @@ | |||
| 1 | menu "MX3 Options" | ||
| 2 | depends on ARCH_MX3 | ||
| 3 | |||
| 4 | config MACH_MX31ADS | ||
| 5 | bool "Support MX31ADS platforms" | ||
| 6 | default y | ||
| 7 | help | ||
| 8 | Include support for MX31ADS platform. This includes specific | ||
| 9 | configurations for the board and its peripherals. | ||
| 10 | |||
| 11 | endmenu | ||
| 12 | |||
diff --git a/arch/arm/mach-mx3/Makefile b/arch/arm/mach-mx3/Makefile new file mode 100644 index 000000000000..cbec997f332a --- /dev/null +++ b/arch/arm/mach-mx3/Makefile | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | # | ||
| 2 | # Makefile for the linux kernel. | ||
| 3 | # | ||
| 4 | |||
| 5 | # Object file lists. | ||
| 6 | |||
| 7 | obj-y := mm.o time.o | ||
| 8 | obj-$(CONFIG_MACH_MX31ADS) += mx31ads.o | ||
diff --git a/arch/arm/mach-mx3/Makefile.boot b/arch/arm/mach-mx3/Makefile.boot new file mode 100644 index 000000000000..e1dd366f836b --- /dev/null +++ b/arch/arm/mach-mx3/Makefile.boot | |||
| @@ -0,0 +1,3 @@ | |||
| 1 | zreladdr-y := 0x80008000 | ||
| 2 | params_phys-y := 0x80000100 | ||
| 3 | initrd_phys-y := 0x80800000 | ||
diff --git a/arch/arm/mach-mx3/mm.c b/arch/arm/mach-mx3/mm.c new file mode 100644 index 000000000000..41dad485ded9 --- /dev/null +++ b/arch/arm/mach-mx3/mm.c | |||
| @@ -0,0 +1,64 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 1999,2000 Arm Limited | ||
| 3 | * Copyright (C) 2000 Deep Blue Solutions Ltd | ||
| 4 | * Copyright (C) 2002 Shane Nay (shane@minirl.com) | ||
| 5 | * Copyright 2005-2007 Freescale Semiconductor, Inc. All Rights Reserved. | ||
| 6 | * - add MX31 specific definitions | ||
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or modify | ||
| 9 | * it under the terms of the GNU General Public License as published by | ||
| 10 | * the Free Software Foundation; either version 2 of the License, or | ||
| 11 | * (at your option) any later version. | ||
| 12 | * | ||
| 13 | * This program is distributed in the hope that it will be useful, | ||
| 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 16 | * GNU General Public License for more details. | ||
| 17 | * | ||
| 18 | * You should have received a copy of the GNU General Public License | ||
| 19 | * along with this program; if not, write to the Free Software | ||
| 20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 21 | */ | ||
| 22 | |||
| 23 | #include <linux/mm.h> | ||
| 24 | #include <linux/init.h> | ||
| 25 | #include <asm/hardware.h> | ||
| 26 | #include <asm/pgtable.h> | ||
| 27 | #include <asm/mach/map.h> | ||
| 28 | #include <asm/arch/common.h> | ||
| 29 | |||
| 30 | /*! | ||
| 31 | * @file mm.c | ||
| 32 | * | ||
| 33 | * @brief This file creates static virtual to physical mappings, common to all MX3 boards. | ||
| 34 | * | ||
| 35 | * @ingroup Memory | ||
| 36 | */ | ||
| 37 | |||
| 38 | /*! | ||
| 39 | * This table defines static virtual address mappings for I/O regions. | ||
| 40 | * These are the mappings common across all MX3 boards. | ||
| 41 | */ | ||
| 42 | static struct map_desc mxc_io_desc[] __initdata = { | ||
| 43 | { | ||
| 44 | .virtual = X_MEMC_BASE_ADDR_VIRT, | ||
| 45 | .pfn = __phys_to_pfn(X_MEMC_BASE_ADDR), | ||
| 46 | .length = X_MEMC_SIZE, | ||
| 47 | .type = MT_DEVICE | ||
| 48 | }, { | ||
| 49 | .virtual = AVIC_BASE_ADDR_VIRT, | ||
| 50 | .pfn = __phys_to_pfn(AVIC_BASE_ADDR), | ||
| 51 | .length = AVIC_SIZE, | ||
| 52 | .type = MT_NONSHARED_DEVICE | ||
| 53 | }, | ||
| 54 | }; | ||
| 55 | |||
| 56 | /*! | ||
| 57 | * This function initializes the memory map. It is called during the | ||
| 58 | * system startup to create static physical to virtual memory mappings | ||
| 59 | * for the IO modules. | ||
| 60 | */ | ||
| 61 | void __init mxc_map_io(void) | ||
| 62 | { | ||
| 63 | iotable_init(mxc_io_desc, ARRAY_SIZE(mxc_io_desc)); | ||
| 64 | } | ||
diff --git a/arch/arm/mach-mx3/mx31ads.c b/arch/arm/mach-mx3/mx31ads.c new file mode 100644 index 000000000000..7e89bdc23a9f --- /dev/null +++ b/arch/arm/mach-mx3/mx31ads.c | |||
| @@ -0,0 +1,142 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2000 Deep Blue Solutions Ltd | ||
| 3 | * Copyright (C) 2002 Shane Nay (shane@minirl.com) | ||
| 4 | * Copyright 2005-2007 Freescale Semiconductor, Inc. All Rights Reserved. | ||
| 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 as published by | ||
| 8 | * the Free Software Foundation; either version 2 of the License, or | ||
| 9 | * (at your option) any later version. | ||
| 10 | * | ||
| 11 | * This program is distributed in the hope that it will be useful, | ||
| 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 14 | * GNU General Public License for more details. | ||
| 15 | * | ||
| 16 | * You should have received a copy of the GNU General Public License | ||
| 17 | * along with this program; if not, write to the Free Software | ||
| 18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 19 | */ | ||
| 20 | |||
| 21 | #include <linux/types.h> | ||
| 22 | #include <linux/init.h> | ||
| 23 | #include <linux/clk.h> | ||
| 24 | #include <linux/serial_8250.h> | ||
| 25 | |||
| 26 | #include <asm/hardware.h> | ||
| 27 | #include <asm/mach-types.h> | ||
| 28 | #include <asm/mach/arch.h> | ||
| 29 | #include <asm/memory.h> | ||
| 30 | #include <asm/mach/map.h> | ||
| 31 | #include <asm/arch/common.h> | ||
| 32 | |||
| 33 | /*! | ||
| 34 | * @file mx31ads.c | ||
| 35 | * | ||
| 36 | * @brief This file contains the board-specific initialization routines. | ||
| 37 | * | ||
| 38 | * @ingroup System | ||
| 39 | */ | ||
| 40 | |||
| 41 | #if defined(CONFIG_SERIAL_8250) || defined(CONFIG_SERIAL_8250_MODULE) | ||
| 42 | /*! | ||
| 43 | * The serial port definition structure. | ||
| 44 | */ | ||
| 45 | static struct plat_serial8250_port serial_platform_data[] = { | ||
| 46 | { | ||
| 47 | .membase = (void *)(PBC_BASE_ADDRESS + PBC_SC16C652_UARTA), | ||
| 48 | .mapbase = (unsigned long)(CS4_BASE_ADDR + PBC_SC16C652_UARTA), | ||
| 49 | .irq = EXPIO_INT_XUART_INTA, | ||
| 50 | .uartclk = 14745600, | ||
| 51 | .regshift = 0, | ||
| 52 | .iotype = UPIO_MEM, | ||
| 53 | .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_AUTO_IRQ, | ||
| 54 | }, { | ||
| 55 | .membase = (void *)(PBC_BASE_ADDRESS + PBC_SC16C652_UARTB), | ||
| 56 | .mapbase = (unsigned long)(CS4_BASE_ADDR + PBC_SC16C652_UARTB), | ||
| 57 | .irq = EXPIO_INT_XUART_INTB, | ||
| 58 | .uartclk = 14745600, | ||
| 59 | .regshift = 0, | ||
| 60 | .iotype = UPIO_MEM, | ||
| 61 | .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_AUTO_IRQ, | ||
| 62 | }, | ||
| 63 | {}, | ||
| 64 | }; | ||
| 65 | |||
| 66 | static struct platform_device serial_device = { | ||
| 67 | .name = "serial8250", | ||
| 68 | .id = 0, | ||
| 69 | .dev = { | ||
| 70 | .platform_data = serial_platform_data, | ||
| 71 | }, | ||
| 72 | }; | ||
| 73 | |||
| 74 | static int __init mxc_init_extuart(void) | ||
| 75 | { | ||
| 76 | return platform_device_register(&serial_device); | ||
| 77 | } | ||
| 78 | #else | ||
| 79 | static inline int mxc_init_extuart(void) | ||
| 80 | { | ||
| 81 | return 0; | ||
| 82 | } | ||
| 83 | #endif | ||
| 84 | |||
| 85 | /*! | ||
| 86 | * This structure defines static mappings for the i.MX31ADS board. | ||
| 87 | */ | ||
| 88 | static struct map_desc mx31ads_io_desc[] __initdata = { | ||
| 89 | { | ||
| 90 | .virtual = AIPS1_BASE_ADDR_VIRT, | ||
| 91 | .pfn = __phys_to_pfn(AIPS1_BASE_ADDR), | ||
| 92 | .length = AIPS1_SIZE, | ||
| 93 | .type = MT_NONSHARED_DEVICE | ||
| 94 | }, { | ||
| 95 | .virtual = SPBA0_BASE_ADDR_VIRT, | ||
| 96 | .pfn = __phys_to_pfn(SPBA0_BASE_ADDR), | ||
| 97 | .length = SPBA0_SIZE, | ||
| 98 | .type = MT_NONSHARED_DEVICE | ||
| 99 | }, { | ||
| 100 | .virtual = AIPS2_BASE_ADDR_VIRT, | ||
| 101 | .pfn = __phys_to_pfn(AIPS2_BASE_ADDR), | ||
| 102 | .length = AIPS2_SIZE, | ||
| 103 | .type = MT_NONSHARED_DEVICE | ||
| 104 | }, { | ||
| 105 | .virtual = CS4_BASE_ADDR_VIRT, | ||
| 106 | .pfn = __phys_to_pfn(CS4_BASE_ADDR), | ||
| 107 | .length = CS4_SIZE / 2, | ||
| 108 | .type = MT_DEVICE | ||
| 109 | }, | ||
| 110 | }; | ||
| 111 | |||
| 112 | /*! | ||
| 113 | * Set up static virtual mappings. | ||
| 114 | */ | ||
| 115 | void __init mx31ads_map_io(void) | ||
| 116 | { | ||
| 117 | mxc_map_io(); | ||
| 118 | iotable_init(mx31ads_io_desc, ARRAY_SIZE(mx31ads_io_desc)); | ||
| 119 | } | ||
| 120 | |||
| 121 | /*! | ||
| 122 | * Board specific initialization. | ||
| 123 | */ | ||
| 124 | static void __init mxc_board_init(void) | ||
| 125 | { | ||
| 126 | mxc_init_extuart(); | ||
| 127 | } | ||
| 128 | |||
| 129 | /* | ||
| 130 | * The following uses standard kernel macros defined in arch.h in order to | ||
| 131 | * initialize __mach_desc_MX31ADS data structure. | ||
| 132 | */ | ||
| 133 | MACHINE_START(MX31ADS, "Freescale MX31ADS") | ||
| 134 | /* Maintainer: Freescale Semiconductor, Inc. */ | ||
| 135 | .phys_io = AIPS1_BASE_ADDR, | ||
| 136 | .io_pg_offst = ((AIPS1_BASE_ADDR_VIRT) >> 18) & 0xfffc, | ||
| 137 | .boot_params = PHYS_OFFSET + 0x100, | ||
| 138 | .map_io = mx31ads_map_io, | ||
| 139 | .init_irq = mxc_init_irq, | ||
| 140 | .init_machine = mxc_board_init, | ||
| 141 | .timer = &mxc_timer, | ||
| 142 | MACHINE_END | ||
diff --git a/arch/arm/mach-mx3/time.c b/arch/arm/mach-mx3/time.c new file mode 100644 index 000000000000..e81fb5c5d7c3 --- /dev/null +++ b/arch/arm/mach-mx3/time.c | |||
| @@ -0,0 +1,152 @@ | |||
| 1 | /* | ||
| 2 | * System Timer Interrupt reconfigured to run in free-run mode. | ||
| 3 | * Author: Vitaly Wool | ||
| 4 | * Copyright 2004 MontaVista Software Inc. | ||
| 5 | * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved. | ||
| 6 | */ | ||
| 7 | |||
| 8 | /* | ||
| 9 | * This program is free software; you can redistribute it and/or modify | ||
| 10 | * it under the terms of the GNU General Public License version 2 as | ||
| 11 | * published by the Free Software Foundation. | ||
| 12 | */ | ||
| 13 | |||
| 14 | /*! | ||
| 15 | * @file time.c | ||
| 16 | * @brief This file contains OS tick and wdog timer implementations. | ||
| 17 | * | ||
| 18 | * This file contains OS tick and wdog timer implementations. | ||
| 19 | * | ||
| 20 | * @ingroup Timers | ||
| 21 | */ | ||
| 22 | |||
| 23 | #include <linux/module.h> | ||
| 24 | #include <linux/init.h> | ||
| 25 | #include <linux/interrupt.h> | ||
| 26 | #include <linux/irq.h> | ||
| 27 | #include <asm/hardware.h> | ||
| 28 | #include <asm/mach/time.h> | ||
| 29 | #include <asm/io.h> | ||
| 30 | #include <asm/arch/common.h> | ||
| 31 | |||
| 32 | /*! | ||
| 33 | * This is the timer interrupt service routine to do required tasks. | ||
| 34 | * It also services the WDOG timer at the frequency of twice per WDOG | ||
| 35 | * timeout value. For example, if the WDOG's timeout value is 4 (2 | ||
| 36 | * seconds since the WDOG runs at 0.5Hz), it will be serviced once | ||
| 37 | * every 2/2=1 second. | ||
| 38 | * | ||
| 39 | * @param irq GPT interrupt source number (not used) | ||
| 40 | * @param dev_id this parameter is not used | ||
| 41 | * @return always returns \b IRQ_HANDLED as defined in | ||
| 42 | * include/linux/interrupt.h. | ||
| 43 | */ | ||
| 44 | static irqreturn_t mxc_timer_interrupt(int irq, void *dev_id) | ||
| 45 | { | ||
| 46 | unsigned int next_match; | ||
| 47 | |||
| 48 | write_seqlock(&xtime_lock); | ||
| 49 | |||
| 50 | if (__raw_readl(MXC_GPT_GPTSR) & GPTSR_OF1) { | ||
| 51 | do { | ||
| 52 | timer_tick(); | ||
| 53 | next_match = __raw_readl(MXC_GPT_GPTOCR1) + LATCH; | ||
| 54 | __raw_writel(GPTSR_OF1, MXC_GPT_GPTSR); | ||
| 55 | __raw_writel(next_match, MXC_GPT_GPTOCR1); | ||
| 56 | } while ((signed long)(next_match - | ||
| 57 | __raw_readl(MXC_GPT_GPTCNT)) <= 0); | ||
| 58 | } | ||
| 59 | |||
| 60 | write_sequnlock(&xtime_lock); | ||
| 61 | |||
| 62 | return IRQ_HANDLED; | ||
| 63 | } | ||
| 64 | |||
| 65 | /*! | ||
| 66 | * This function is used to obtain the number of microseconds since the last | ||
| 67 | * timer interrupt. Note that interrupts is disabled by do_gettimeofday(). | ||
| 68 | * | ||
| 69 | * @return the number of microseconds since the last timer interrupt. | ||
| 70 | */ | ||
| 71 | static unsigned long mxc_gettimeoffset(void) | ||
| 72 | { | ||
| 73 | unsigned long ticks_to_match, elapsed, usec, tick_usec, i; | ||
| 74 | |||
| 75 | /* Get ticks before next timer match */ | ||
| 76 | ticks_to_match = | ||
| 77 | __raw_readl(MXC_GPT_GPTOCR1) - __raw_readl(MXC_GPT_GPTCNT); | ||
| 78 | |||
| 79 | /* We need elapsed ticks since last match */ | ||
| 80 | elapsed = LATCH - ticks_to_match; | ||
| 81 | |||
| 82 | /* Now convert them to usec */ | ||
| 83 | /* Insure no overflow when calculating the usec below */ | ||
| 84 | for (i = 1, tick_usec = tick_nsec / 1000;; i *= 2) { | ||
| 85 | tick_usec /= i; | ||
| 86 | if ((0xFFFFFFFF / tick_usec) > elapsed) | ||
| 87 | break; | ||
| 88 | } | ||
| 89 | usec = (unsigned long)(elapsed * tick_usec) / (LATCH / i); | ||
| 90 | |||
| 91 | return usec; | ||
| 92 | } | ||
| 93 | |||
| 94 | /*! | ||
| 95 | * The OS tick timer interrupt structure. | ||
| 96 | */ | ||
| 97 | static struct irqaction timer_irq = { | ||
| 98 | .name = "MXC Timer Tick", | ||
| 99 | .flags = IRQF_DISABLED | IRQF_TIMER, | ||
| 100 | .handler = mxc_timer_interrupt | ||
| 101 | }; | ||
| 102 | |||
| 103 | /*! | ||
| 104 | * This function is used to initialize the GPT to produce an interrupt | ||
| 105 | * based on HZ. It is called by start_kernel() during system startup. | ||
| 106 | */ | ||
| 107 | void __init mxc_init_time(void) | ||
| 108 | { | ||
| 109 | u32 reg, v; | ||
| 110 | reg = __raw_readl(MXC_GPT_GPTCR); | ||
| 111 | reg &= ~GPTCR_ENABLE; | ||
| 112 | __raw_writel(reg, MXC_GPT_GPTCR); | ||
| 113 | reg |= GPTCR_SWR; | ||
| 114 | __raw_writel(reg, MXC_GPT_GPTCR); | ||
| 115 | |||
| 116 | while ((__raw_readl(MXC_GPT_GPTCR) & GPTCR_SWR) != 0) | ||
| 117 | cpu_relax(); | ||
| 118 | |||
| 119 | reg = GPTCR_FRR | GPTCR_CLKSRC_HIGHFREQ; | ||
| 120 | __raw_writel(reg, MXC_GPT_GPTCR); | ||
| 121 | |||
| 122 | /* TODO: get timer rate from clk driver */ | ||
| 123 | v = 66500000; | ||
| 124 | |||
| 125 | __raw_writel((v / CLOCK_TICK_RATE) - 1, MXC_GPT_GPTPR); | ||
| 126 | |||
| 127 | if ((v % CLOCK_TICK_RATE) != 0) { | ||
| 128 | pr_info("\nWARNING: Can't generate CLOCK_TICK_RATE at %d Hz\n", | ||
| 129 | CLOCK_TICK_RATE); | ||
| 130 | } | ||
| 131 | pr_info("Actual CLOCK_TICK_RATE is %d Hz\n", | ||
| 132 | v / ((__raw_readl(MXC_GPT_GPTPR) & 0xFFF) + 1)); | ||
| 133 | |||
| 134 | reg = __raw_readl(MXC_GPT_GPTCNT); | ||
| 135 | reg += LATCH; | ||
| 136 | __raw_writel(reg, MXC_GPT_GPTOCR1); | ||
| 137 | |||
| 138 | setup_irq(MXC_INT_GPT, &timer_irq); | ||
| 139 | |||
| 140 | reg = __raw_readl(MXC_GPT_GPTCR); | ||
| 141 | reg = | ||
| 142 | GPTCR_FRR | GPTCR_CLKSRC_HIGHFREQ | GPTCR_STOPEN | GPTCR_DOZEN | | ||
| 143 | GPTCR_WAITEN | GPTCR_ENMOD | GPTCR_ENABLE; | ||
| 144 | __raw_writel(reg, MXC_GPT_GPTCR); | ||
| 145 | |||
| 146 | __raw_writel(GPTIR_OF1IE, MXC_GPT_GPTIR); | ||
| 147 | } | ||
| 148 | |||
| 149 | struct sys_timer mxc_timer = { | ||
| 150 | .init = mxc_init_time, | ||
| 151 | .offset = mxc_gettimeoffset, | ||
| 152 | }; | ||
diff --git a/arch/arm/mach-ns9xxx/Makefile b/arch/arm/mach-ns9xxx/Makefile index 53213a69f601..4476411b8140 100644 --- a/arch/arm/mach-ns9xxx/Makefile +++ b/arch/arm/mach-ns9xxx/Makefile | |||
| @@ -1,6 +1,7 @@ | |||
| 1 | obj-y := irq.o time.o generic.o | 1 | obj-y := irq.o time.o generic.o |
| 2 | 2 | ||
| 3 | obj-$(CONFIG_MACH_CC9P9360DEV) += mach-cc9p9360dev.o | 3 | obj-$(CONFIG_MACH_CC9P9360DEV) += mach-cc9p9360dev.o |
| 4 | obj-$(CONFIG_MACH_CC9P9360JS) += mach-cc9p9360js.o | ||
| 4 | 5 | ||
| 5 | obj-$(CONFIG_BOARD_A9M9750DEV) += board-a9m9750dev.o | 6 | obj-$(CONFIG_BOARD_A9M9750DEV) += board-a9m9750dev.o |
| 6 | obj-$(CONFIG_BOARD_JSCC9P9360) += board-jscc9p9360.o | 7 | obj-$(CONFIG_BOARD_JSCC9P9360) += board-jscc9p9360.o |
diff --git a/arch/arm/mach-ns9xxx/board-a9m9750dev.c b/arch/arm/mach-ns9xxx/board-a9m9750dev.c index 25289884a607..925048e7adfe 100644 --- a/arch/arm/mach-ns9xxx/board-a9m9750dev.c +++ b/arch/arm/mach-ns9xxx/board-a9m9750dev.c | |||
| @@ -77,7 +77,7 @@ static void a9m9750dev_fpga_demux_handler(unsigned int irq, | |||
| 77 | 77 | ||
| 78 | desc = irq_desc + FPGA_IRQ(irqno); | 78 | desc = irq_desc + FPGA_IRQ(irqno); |
| 79 | 79 | ||
| 80 | desc_handle_irq(irqno, desc); | 80 | desc_handle_irq(FPGA_IRQ(irqno), desc); |
| 81 | } | 81 | } |
| 82 | } | 82 | } |
| 83 | 83 | ||
| @@ -91,7 +91,7 @@ void __init board_a9m9750dev_init_irq(void) | |||
| 91 | * use GPIO 11, because GPIO 32 is used for the LCD | 91 | * use GPIO 11, because GPIO 32 is used for the LCD |
| 92 | */ | 92 | */ |
| 93 | /* XXX: proper GPIO handling */ | 93 | /* XXX: proper GPIO handling */ |
| 94 | BBU_GC(2) &= ~0x2000; | 94 | BBU_GCONFb1(1) &= ~0x2000; |
| 95 | 95 | ||
| 96 | for (i = FPGA_IRQ(0); i <= FPGA_IRQ(7); ++i) { | 96 | for (i = FPGA_IRQ(0); i <= FPGA_IRQ(7); ++i) { |
| 97 | set_irq_chip(i, &a9m9750dev_fpga_chip); | 97 | set_irq_chip(i, &a9m9750dev_fpga_chip); |
| @@ -178,7 +178,7 @@ void __init board_a9m9750dev_init_machine(void) | |||
| 178 | 178 | ||
| 179 | /* setup static CS0: memory configuration */ | 179 | /* setup static CS0: memory configuration */ |
| 180 | reg = MEM_SMC(0); | 180 | reg = MEM_SMC(0); |
| 181 | REGSET(reg, MEM_SMC, WSMC, OFF); | 181 | REGSET(reg, MEM_SMC, PSMC, OFF); |
| 182 | REGSET(reg, MEM_SMC, BSMC, OFF); | 182 | REGSET(reg, MEM_SMC, BSMC, OFF); |
| 183 | REGSET(reg, MEM_SMC, EW, OFF); | 183 | REGSET(reg, MEM_SMC, EW, OFF); |
| 184 | REGSET(reg, MEM_SMC, PB, 1); | 184 | REGSET(reg, MEM_SMC, PB, 1); |
| @@ -196,4 +196,3 @@ void __init board_a9m9750dev_init_machine(void) | |||
| 196 | platform_add_devices(board_a9m9750dev_devices, | 196 | platform_add_devices(board_a9m9750dev_devices, |
| 197 | ARRAY_SIZE(board_a9m9750dev_devices)); | 197 | ARRAY_SIZE(board_a9m9750dev_devices)); |
| 198 | } | 198 | } |
| 199 | |||
diff --git a/arch/arm/mach-ns9xxx/generic.c b/arch/arm/mach-ns9xxx/generic.c index 83e2b6532b22..d742c921e34d 100644 --- a/arch/arm/mach-ns9xxx/generic.c +++ b/arch/arm/mach-ns9xxx/generic.c | |||
| @@ -18,6 +18,8 @@ | |||
| 18 | #include <asm/arch-ns9xxx/regs-mem.h> | 18 | #include <asm/arch-ns9xxx/regs-mem.h> |
| 19 | #include <asm/arch-ns9xxx/board.h> | 19 | #include <asm/arch-ns9xxx/board.h> |
| 20 | 20 | ||
| 21 | #include "generic.h" | ||
| 22 | |||
| 21 | static struct map_desc standard_io_desc[] __initdata = { | 23 | static struct map_desc standard_io_desc[] __initdata = { |
| 22 | { /* BBus */ | 24 | { /* BBus */ |
| 23 | .virtual = io_p2v(0x90000000), | 25 | .virtual = io_p2v(0x90000000), |
diff --git a/arch/arm/mach-ns9xxx/irq.c b/arch/arm/mach-ns9xxx/irq.c index 83d92724a971..b8c7b00522e6 100644 --- a/arch/arm/mach-ns9xxx/irq.c +++ b/arch/arm/mach-ns9xxx/irq.c | |||
| @@ -21,6 +21,15 @@ static void ns9xxx_ack_irq_timer(unsigned int irq) | |||
| 21 | { | 21 | { |
| 22 | u32 tc = SYS_TC(irq - IRQ_TIMER0); | 22 | u32 tc = SYS_TC(irq - IRQ_TIMER0); |
| 23 | 23 | ||
| 24 | /* | ||
| 25 | * If the timer is programmed to halt on terminal count, the | ||
| 26 | * timer must be disabled before clearing the interrupt. | ||
| 27 | */ | ||
| 28 | if (REGGET(tc, SYS_TCx, REN) == 0) { | ||
| 29 | REGSET(tc, SYS_TCx, TEN, DIS); | ||
| 30 | SYS_TC(irq - IRQ_TIMER0) = tc; | ||
| 31 | } | ||
| 32 | |||
| 24 | REGSET(tc, SYS_TCx, INTC, SET); | 33 | REGSET(tc, SYS_TCx, INTC, SET); |
| 25 | SYS_TC(irq - IRQ_TIMER0) = tc; | 34 | SYS_TC(irq - IRQ_TIMER0) = tc; |
| 26 | 35 | ||
| @@ -28,7 +37,7 @@ static void ns9xxx_ack_irq_timer(unsigned int irq) | |||
| 28 | SYS_TC(irq - IRQ_TIMER0) = tc; | 37 | SYS_TC(irq - IRQ_TIMER0) = tc; |
| 29 | } | 38 | } |
| 30 | 39 | ||
| 31 | void (*ns9xxx_ack_irq_functions[NR_IRQS])(unsigned int) = { | 40 | static void (*ns9xxx_ack_irq_functions[NR_IRQS])(unsigned int) = { |
| 32 | [IRQ_TIMER0] = ns9xxx_ack_irq_timer, | 41 | [IRQ_TIMER0] = ns9xxx_ack_irq_timer, |
| 33 | [IRQ_TIMER1] = ns9xxx_ack_irq_timer, | 42 | [IRQ_TIMER1] = ns9xxx_ack_irq_timer, |
| 34 | [IRQ_TIMER2] = ns9xxx_ack_irq_timer, | 43 | [IRQ_TIMER2] = ns9xxx_ack_irq_timer, |
diff --git a/arch/arm/mach-ns9xxx/mach-cc9p9360js.c b/arch/arm/mach-ns9xxx/mach-cc9p9360js.c index d09d5fa5620a..85c8b41105c9 100644 --- a/arch/arm/mach-ns9xxx/mach-cc9p9360js.c +++ b/arch/arm/mach-ns9xxx/mach-cc9p9360js.c | |||
| @@ -20,7 +20,7 @@ static void __init mach_cc9p9360js_init_machine(void) | |||
| 20 | board_jscc9p9360_init_machine(); | 20 | board_jscc9p9360_init_machine(); |
| 21 | } | 21 | } |
| 22 | 22 | ||
| 23 | MACHINE_START(CC9P9360DEV, "Digi ConnectCore 9P 9360 on an JSCC9P9360 Devboard") | 23 | MACHINE_START(CC9P9360JS, "Digi ConnectCore 9P 9360 on an JSCC9P9360 Devboard") |
| 24 | .map_io = ns9xxx_map_io, | 24 | .map_io = ns9xxx_map_io, |
| 25 | .init_irq = ns9xxx_init_irq, | 25 | .init_irq = ns9xxx_init_irq, |
| 26 | .init_machine = mach_cc9p9360js_init_machine, | 26 | .init_machine = mach_cc9p9360js_init_machine, |
diff --git a/arch/arm/mach-pxa/Kconfig b/arch/arm/mach-pxa/Kconfig index 5c0a10041cd1..5ebec6d88b51 100644 --- a/arch/arm/mach-pxa/Kconfig +++ b/arch/arm/mach-pxa/Kconfig | |||
| @@ -37,6 +37,10 @@ config MACH_TRIZEPS4 | |||
| 37 | bool "Keith und Koep Trizeps4 DIMM-Module" | 37 | bool "Keith und Koep Trizeps4 DIMM-Module" |
| 38 | select PXA27x | 38 | select PXA27x |
| 39 | 39 | ||
| 40 | config MACH_EM_X270 | ||
| 41 | bool "CompuLab EM-x270 platform" | ||
| 42 | select PXA27x | ||
| 43 | |||
| 40 | endchoice | 44 | endchoice |
| 41 | 45 | ||
| 42 | if PXA_SHARPSL | 46 | if PXA_SHARPSL |
diff --git a/arch/arm/mach-pxa/Makefile b/arch/arm/mach-pxa/Makefile index 9093eb1c94eb..7d6ab5c59ab9 100644 --- a/arch/arm/mach-pxa/Makefile +++ b/arch/arm/mach-pxa/Makefile | |||
| @@ -18,6 +18,7 @@ obj-$(CONFIG_PXA_SHARP_Cxx00) += spitz.o corgi_ssp.o corgi_lcd.o sharpsl_pm.o sp | |||
| 18 | obj-$(CONFIG_MACH_AKITA) += akita-ioexp.o | 18 | obj-$(CONFIG_MACH_AKITA) += akita-ioexp.o |
| 19 | obj-$(CONFIG_MACH_POODLE) += poodle.o corgi_ssp.o | 19 | obj-$(CONFIG_MACH_POODLE) += poodle.o corgi_ssp.o |
| 20 | obj-$(CONFIG_MACH_TOSA) += tosa.o | 20 | obj-$(CONFIG_MACH_TOSA) += tosa.o |
| 21 | obj-$(CONFIG_MACH_EM_X270) += em-x270.o | ||
| 21 | 22 | ||
| 22 | # Support for blinky lights | 23 | # Support for blinky lights |
| 23 | led-y := leds.o | 24 | led-y := leds.o |
diff --git a/arch/arm/mach-pxa/devices.h b/arch/arm/mach-pxa/devices.h index 9a6faff8e5a7..636fdb1c049c 100644 --- a/arch/arm/mach-pxa/devices.h +++ b/arch/arm/mach-pxa/devices.h | |||
| @@ -1,11 +1,11 @@ | |||
| 1 | extern struct platform_device pxamci_device; | 1 | extern struct platform_device pxa_device_mci; |
| 2 | extern struct platform_device pxaudc_device; | 2 | extern struct platform_device pxa_device_udc; |
| 3 | extern struct platform_device pxafb_device; | 3 | extern struct platform_device pxa_device_fb; |
| 4 | extern struct platform_device ffuart_device; | 4 | extern struct platform_device pxa_device_ffuart; |
| 5 | extern struct platform_device btuart_device; | 5 | extern struct platform_device pxa_device_btuart; |
| 6 | extern struct platform_device stuart_device; | 6 | extern struct platform_device pxa_device_stuart; |
| 7 | extern struct platform_device hwuart_device; | 7 | extern struct platform_device pxa_device_hwuart; |
| 8 | extern struct platform_device pxai2c_device; | 8 | extern struct platform_device pxa_device_i2c; |
| 9 | extern struct platform_device pxai2s_device; | 9 | extern struct platform_device pxa_device_i2s; |
| 10 | extern struct platform_device pxaficp_device; | 10 | extern struct platform_device pxa_device_ficp; |
| 11 | extern struct platform_device pxartc_device; | 11 | extern struct platform_device pxa_device_rtc; |
diff --git a/arch/arm/mach-pxa/em-x270.c b/arch/arm/mach-pxa/em-x270.c new file mode 100644 index 000000000000..3d0ad5065ee5 --- /dev/null +++ b/arch/arm/mach-pxa/em-x270.c | |||
| @@ -0,0 +1,354 @@ | |||
| 1 | /* | ||
| 2 | * Support for CompuLab EM-x270 platform | ||
| 3 | * | ||
| 4 | * Copyright (C) 2007 CompuLab, Ltd. | ||
| 5 | * Author: Mike Rapoport <mike@compulab.co.il> | ||
| 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 | |||
| 12 | #include <linux/irq.h> | ||
| 13 | #include <linux/platform_device.h> | ||
| 14 | |||
| 15 | #include <linux/dm9000.h> | ||
| 16 | #include <linux/rtc-v3020.h> | ||
| 17 | |||
| 18 | #include <linux/mtd/nand.h> | ||
| 19 | #include <linux/mtd/partitions.h> | ||
| 20 | |||
| 21 | #include <asm/mach-types.h> | ||
| 22 | |||
| 23 | #include <asm/mach/arch.h> | ||
| 24 | |||
| 25 | #include <asm/arch/pxa-regs.h> | ||
| 26 | #include <asm/arch/pxafb.h> | ||
| 27 | #include <asm/arch/ohci.h> | ||
| 28 | #include <asm/arch/mmc.h> | ||
| 29 | #include <asm/arch/bitfield.h> | ||
| 30 | |||
| 31 | #include "generic.h" | ||
| 32 | |||
| 33 | /* GPIO IRQ usage */ | ||
| 34 | #define EM_X270_MMC_PD (105) | ||
| 35 | #define EM_X270_ETHIRQ IRQ_GPIO(41) | ||
| 36 | #define EM_X270_MMC_IRQ IRQ_GPIO(13) | ||
| 37 | |||
| 38 | static struct resource em_x270_dm9k_resource[] = { | ||
| 39 | [0] = { | ||
| 40 | .start = PXA_CS2_PHYS, | ||
| 41 | .end = PXA_CS2_PHYS + 3, | ||
| 42 | .flags = IORESOURCE_MEM, | ||
| 43 | }, | ||
| 44 | [1] = { | ||
| 45 | .start = PXA_CS2_PHYS + 8, | ||
| 46 | .end = PXA_CS2_PHYS + 8 + 0x3f, | ||
| 47 | .flags = IORESOURCE_MEM, | ||
| 48 | }, | ||
| 49 | [2] = { | ||
| 50 | .start = EM_X270_ETHIRQ, | ||
| 51 | .end = EM_X270_ETHIRQ, | ||
| 52 | .flags = IORESOURCE_IRQ, | ||
| 53 | } | ||
| 54 | }; | ||
| 55 | |||
| 56 | /* for the moment we limit ourselves to 32bit IO until some | ||
| 57 | * better IO routines can be written and tested | ||
| 58 | */ | ||
| 59 | static struct dm9000_plat_data em_x270_dm9k_platdata = { | ||
| 60 | .flags = DM9000_PLATF_32BITONLY, | ||
| 61 | }; | ||
| 62 | |||
| 63 | /* Ethernet device */ | ||
| 64 | static struct platform_device em_x270_dm9k = { | ||
| 65 | .name = "dm9000", | ||
| 66 | .id = 0, | ||
| 67 | .num_resources = ARRAY_SIZE(em_x270_dm9k_resource), | ||
| 68 | .resource = em_x270_dm9k_resource, | ||
| 69 | .dev = { | ||
| 70 | .platform_data = &em_x270_dm9k_platdata, | ||
| 71 | } | ||
| 72 | }; | ||
| 73 | |||
| 74 | /* audio device */ | ||
| 75 | static struct platform_device em_x270_audio = { | ||
| 76 | .name = "pxa2xx-ac97", | ||
| 77 | .id = -1, | ||
| 78 | }; | ||
| 79 | |||
| 80 | /* WM9712 touchscreen controller. Hopefully the driver will make it to | ||
| 81 | * the mainstream sometime */ | ||
| 82 | static struct platform_device em_x270_ts = { | ||
| 83 | .name = "wm97xx-ts", | ||
| 84 | .id = -1, | ||
| 85 | }; | ||
| 86 | |||
| 87 | /* RTC */ | ||
| 88 | static struct resource em_x270_v3020_resource[] = { | ||
| 89 | [0] = { | ||
| 90 | .start = PXA_CS4_PHYS, | ||
| 91 | .end = PXA_CS4_PHYS + 3, | ||
| 92 | .flags = IORESOURCE_MEM, | ||
| 93 | }, | ||
| 94 | }; | ||
| 95 | |||
| 96 | static struct v3020_platform_data em_x270_v3020_platdata = { | ||
| 97 | .leftshift = 0, | ||
| 98 | }; | ||
| 99 | |||
| 100 | static struct platform_device em_x270_rtc = { | ||
| 101 | .name = "v3020", | ||
| 102 | .num_resources = ARRAY_SIZE(em_x270_v3020_resource), | ||
| 103 | .resource = em_x270_v3020_resource, | ||
| 104 | .id = -1, | ||
| 105 | .dev = { | ||
| 106 | .platform_data = &em_x270_v3020_platdata, | ||
| 107 | } | ||
| 108 | }; | ||
| 109 | |||
| 110 | /* NAND flash */ | ||
| 111 | #define GPIO_NAND_CS (11) | ||
| 112 | #define GPIO_NAND_RB (56) | ||
| 113 | |||
| 114 | static inline void nand_cs_on(void) | ||
| 115 | { | ||
| 116 | GPCR(GPIO_NAND_CS) = GPIO_bit(GPIO_NAND_CS); | ||
| 117 | } | ||
| 118 | |||
| 119 | static void nand_cs_off(void) | ||
| 120 | { | ||
| 121 | dsb(); | ||
| 122 | |||
| 123 | GPSR(GPIO_NAND_CS) = GPIO_bit(GPIO_NAND_CS); | ||
| 124 | } | ||
| 125 | |||
| 126 | /* hardware specific access to control-lines */ | ||
| 127 | static void em_x270_nand_cmd_ctl(struct mtd_info *mtd, int dat, | ||
| 128 | unsigned int ctrl) | ||
| 129 | { | ||
| 130 | struct nand_chip *this = mtd->priv; | ||
| 131 | unsigned long nandaddr = (unsigned long)this->IO_ADDR_W; | ||
| 132 | |||
| 133 | dsb(); | ||
| 134 | |||
| 135 | if (ctrl & NAND_CTRL_CHANGE) { | ||
| 136 | if (ctrl & NAND_ALE) | ||
| 137 | nandaddr |= (1 << 3); | ||
| 138 | else | ||
| 139 | nandaddr &= ~(1 << 3); | ||
| 140 | if (ctrl & NAND_CLE) | ||
| 141 | nandaddr |= (1 << 2); | ||
| 142 | else | ||
| 143 | nandaddr &= ~(1 << 2); | ||
| 144 | if (ctrl & NAND_NCE) | ||
| 145 | nand_cs_on(); | ||
| 146 | else | ||
| 147 | nand_cs_off(); | ||
| 148 | } | ||
| 149 | |||
| 150 | dsb(); | ||
| 151 | this->IO_ADDR_W = (void __iomem *)nandaddr; | ||
| 152 | if (dat != NAND_CMD_NONE) | ||
| 153 | writel(dat, this->IO_ADDR_W); | ||
| 154 | |||
| 155 | dsb(); | ||
| 156 | } | ||
| 157 | |||
| 158 | /* read device ready pin */ | ||
| 159 | static int em_x270_nand_device_ready(struct mtd_info *mtd) | ||
| 160 | { | ||
| 161 | dsb(); | ||
| 162 | |||
| 163 | return GPLR(GPIO_NAND_RB) & GPIO_bit(GPIO_NAND_RB); | ||
| 164 | } | ||
| 165 | |||
| 166 | static struct mtd_partition em_x270_partition_info[] = { | ||
| 167 | [0] = { | ||
| 168 | .name = "em_x270-0", | ||
| 169 | .offset = 0, | ||
| 170 | .size = SZ_4M, | ||
| 171 | }, | ||
| 172 | [1] = { | ||
| 173 | .name = "em_x270-1", | ||
| 174 | .offset = MTDPART_OFS_APPEND, | ||
| 175 | .size = MTDPART_SIZ_FULL | ||
| 176 | }, | ||
| 177 | }; | ||
| 178 | |||
| 179 | static const char *em_x270_part_probes[] = { "cmdlinepart", NULL }; | ||
| 180 | |||
| 181 | struct platform_nand_data em_x270_nand_platdata = { | ||
| 182 | .chip = { | ||
| 183 | .nr_chips = 1, | ||
| 184 | .chip_offset = 0, | ||
| 185 | .nr_partitions = ARRAY_SIZE(em_x270_partition_info), | ||
| 186 | .partitions = em_x270_partition_info, | ||
| 187 | .chip_delay = 20, | ||
| 188 | .part_probe_types = em_x270_part_probes, | ||
| 189 | }, | ||
| 190 | .ctrl = { | ||
| 191 | .hwcontrol = 0, | ||
| 192 | .dev_ready = em_x270_nand_device_ready, | ||
| 193 | .select_chip = 0, | ||
| 194 | .cmd_ctrl = em_x270_nand_cmd_ctl, | ||
| 195 | }, | ||
| 196 | }; | ||
| 197 | |||
| 198 | static struct resource em_x270_nand_resource[] = { | ||
| 199 | [0] = { | ||
| 200 | .start = PXA_CS1_PHYS, | ||
| 201 | .end = PXA_CS1_PHYS + 12, | ||
| 202 | .flags = IORESOURCE_MEM, | ||
| 203 | }, | ||
| 204 | }; | ||
| 205 | |||
| 206 | static struct platform_device em_x270_nand = { | ||
| 207 | .name = "gen_nand", | ||
| 208 | .num_resources = ARRAY_SIZE(em_x270_nand_resource), | ||
| 209 | .resource = em_x270_nand_resource, | ||
| 210 | .id = -1, | ||
| 211 | .dev = { | ||
| 212 | .platform_data = &em_x270_nand_platdata, | ||
| 213 | } | ||
| 214 | }; | ||
| 215 | |||
| 216 | /* platform devices */ | ||
| 217 | static struct platform_device *platform_devices[] __initdata = { | ||
| 218 | &em_x270_dm9k, | ||
| 219 | &em_x270_audio, | ||
| 220 | &em_x270_ts, | ||
| 221 | &em_x270_rtc, | ||
| 222 | &em_x270_nand, | ||
| 223 | }; | ||
| 224 | |||
| 225 | |||
| 226 | /* PXA27x OHCI controller setup */ | ||
| 227 | static int em_x270_ohci_init(struct device *dev) | ||
| 228 | { | ||
| 229 | /* Set the Power Control Polarity Low */ | ||
| 230 | UHCHR = (UHCHR | UHCHR_PCPL) & | ||
| 231 | ~(UHCHR_SSEP1 | UHCHR_SSEP2 | UHCHR_SSE); | ||
| 232 | |||
| 233 | /* enable port 2 transiever */ | ||
| 234 | UP2OCR = UP2OCR_HXS | UP2OCR_HXOE; | ||
| 235 | |||
| 236 | return 0; | ||
| 237 | } | ||
| 238 | |||
| 239 | static struct pxaohci_platform_data em_x270_ohci_platform_data = { | ||
| 240 | .port_mode = PMM_PERPORT_MODE, | ||
| 241 | .init = em_x270_ohci_init, | ||
| 242 | }; | ||
| 243 | |||
| 244 | |||
| 245 | static int em_x270_mci_init(struct device *dev, | ||
| 246 | irq_handler_t em_x270_detect_int, | ||
| 247 | void *data) | ||
| 248 | { | ||
| 249 | int err; | ||
| 250 | |||
| 251 | /* setup GPIO for PXA27x MMC controller */ | ||
| 252 | pxa_gpio_mode(GPIO32_MMCCLK_MD); | ||
| 253 | pxa_gpio_mode(GPIO112_MMCCMD_MD); | ||
| 254 | pxa_gpio_mode(GPIO92_MMCDAT0_MD); | ||
| 255 | pxa_gpio_mode(GPIO109_MMCDAT1_MD); | ||
| 256 | pxa_gpio_mode(GPIO110_MMCDAT2_MD); | ||
| 257 | pxa_gpio_mode(GPIO111_MMCDAT3_MD); | ||
| 258 | |||
| 259 | /* EM-X270 uses GPIO13 as SD power enable */ | ||
| 260 | pxa_gpio_mode(EM_X270_MMC_PD | GPIO_OUT); | ||
| 261 | |||
| 262 | err = request_irq(EM_X270_MMC_IRQ, em_x270_detect_int, | ||
| 263 | IRQF_DISABLED | IRQF_TRIGGER_FALLING, | ||
| 264 | "MMC card detect", data); | ||
| 265 | if (err) { | ||
| 266 | printk(KERN_ERR "%s: can't request MMC card detect IRQ: %d\n", | ||
| 267 | __FUNCTION__, err); | ||
| 268 | return err; | ||
| 269 | } | ||
| 270 | |||
| 271 | return 0; | ||
| 272 | } | ||
| 273 | |||
| 274 | static void em_x270_mci_setpower(struct device *dev, unsigned int vdd) | ||
| 275 | { | ||
| 276 | /* | ||
| 277 | FIXME: current hardware implementation does not allow to | ||
| 278 | enable/disable MMC power. This will be fixed in next HW releases, | ||
| 279 | and we'll need to add implmentation here. | ||
| 280 | */ | ||
| 281 | return; | ||
| 282 | } | ||
| 283 | |||
| 284 | static void em_x270_mci_exit(struct device *dev, void *data) | ||
| 285 | { | ||
| 286 | free_irq(EM_X270_MMC_IRQ, data); | ||
| 287 | } | ||
| 288 | |||
| 289 | static struct pxamci_platform_data em_x270_mci_platform_data = { | ||
| 290 | .ocr_mask = MMC_VDD_28_29|MMC_VDD_29_30|MMC_VDD_30_31, | ||
| 291 | .init = em_x270_mci_init, | ||
| 292 | .setpower = em_x270_mci_setpower, | ||
| 293 | .exit = em_x270_mci_exit, | ||
| 294 | }; | ||
| 295 | |||
| 296 | /* LCD 480x640 */ | ||
| 297 | static struct pxafb_mode_info em_x270_lcd_mode = { | ||
| 298 | .pixclock = 50000, | ||
| 299 | .bpp = 16, | ||
| 300 | .xres = 480, | ||
| 301 | .yres = 640, | ||
| 302 | .hsync_len = 8, | ||
| 303 | .vsync_len = 2, | ||
| 304 | .left_margin = 8, | ||
| 305 | .upper_margin = 0, | ||
| 306 | .right_margin = 24, | ||
| 307 | .lower_margin = 4, | ||
| 308 | .cmap_greyscale = 0, | ||
| 309 | }; | ||
| 310 | |||
| 311 | static struct pxafb_mach_info em_x270_lcd = { | ||
| 312 | .modes = &em_x270_lcd_mode, | ||
| 313 | .num_modes = 1, | ||
| 314 | .cmap_inverse = 0, | ||
| 315 | .cmap_static = 0, | ||
| 316 | .lccr0 = LCCR0_PAS, | ||
| 317 | .lccr3 = LCCR3_PixClkDiv(0x01) | LCCR3_Acb(0xff), | ||
| 318 | }; | ||
| 319 | |||
| 320 | static void __init em_x270_init(void) | ||
| 321 | { | ||
| 322 | /* setup LCD */ | ||
| 323 | set_pxa_fb_info(&em_x270_lcd); | ||
| 324 | |||
| 325 | /* register EM-X270 platform devices */ | ||
| 326 | platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices)); | ||
| 327 | |||
| 328 | /* set MCI and OHCI platform parameters */ | ||
| 329 | pxa_set_mci_info(&em_x270_mci_platform_data); | ||
| 330 | pxa_set_ohci_info(&em_x270_ohci_platform_data); | ||
| 331 | |||
| 332 | /* setup STUART GPIOs */ | ||
| 333 | pxa_gpio_mode(GPIO46_STRXD_MD); | ||
| 334 | pxa_gpio_mode(GPIO47_STTXD_MD); | ||
| 335 | |||
| 336 | /* setup BTUART GPIOs */ | ||
| 337 | pxa_gpio_mode(GPIO42_BTRXD_MD); | ||
| 338 | pxa_gpio_mode(GPIO43_BTTXD_MD); | ||
| 339 | pxa_gpio_mode(GPIO44_BTCTS_MD); | ||
| 340 | pxa_gpio_mode(GPIO45_BTRTS_MD); | ||
| 341 | |||
| 342 | /* Setup interrupt for dm9000 */ | ||
| 343 | set_irq_type(EM_X270_ETHIRQ, IRQT_RISING); | ||
| 344 | } | ||
| 345 | |||
| 346 | MACHINE_START(EM_X270, "Compulab EM-x270") | ||
| 347 | .boot_params = 0xa0000100, | ||
| 348 | .phys_io = 0x40000000, | ||
| 349 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, | ||
| 350 | .map_io = pxa_map_io, | ||
| 351 | .init_irq = pxa27x_init_irq, | ||
| 352 | .timer = &pxa_timer, | ||
| 353 | .init_machine = em_x270_init, | ||
| 354 | MACHINE_END | ||
diff --git a/arch/arm/mach-pxa/generic.c b/arch/arm/mach-pxa/generic.c index 296539b6359c..5510f6fdce55 100644 --- a/arch/arm/mach-pxa/generic.c +++ b/arch/arm/mach-pxa/generic.c | |||
| @@ -243,7 +243,7 @@ static struct resource pxamci_resources[] = { | |||
| 243 | 243 | ||
| 244 | static u64 pxamci_dmamask = 0xffffffffUL; | 244 | static u64 pxamci_dmamask = 0xffffffffUL; |
| 245 | 245 | ||
| 246 | struct platform_device pxamci_device = { | 246 | struct platform_device pxa_device_mci = { |
| 247 | .name = "pxa2xx-mci", | 247 | .name = "pxa2xx-mci", |
| 248 | .id = -1, | 248 | .id = -1, |
| 249 | .dev = { | 249 | .dev = { |
| @@ -256,7 +256,7 @@ struct platform_device pxamci_device = { | |||
| 256 | 256 | ||
| 257 | void __init pxa_set_mci_info(struct pxamci_platform_data *info) | 257 | void __init pxa_set_mci_info(struct pxamci_platform_data *info) |
| 258 | { | 258 | { |
| 259 | pxamci_device.dev.platform_data = info; | 259 | pxa_device_mci.dev.platform_data = info; |
| 260 | } | 260 | } |
| 261 | 261 | ||
| 262 | 262 | ||
| @@ -282,7 +282,7 @@ static struct resource pxa2xx_udc_resources[] = { | |||
| 282 | 282 | ||
| 283 | static u64 udc_dma_mask = ~(u32)0; | 283 | static u64 udc_dma_mask = ~(u32)0; |
| 284 | 284 | ||
| 285 | struct platform_device pxaudc_device = { | 285 | struct platform_device pxa_device_udc = { |
| 286 | .name = "pxa2xx-udc", | 286 | .name = "pxa2xx-udc", |
| 287 | .id = -1, | 287 | .id = -1, |
| 288 | .resource = pxa2xx_udc_resources, | 288 | .resource = pxa2xx_udc_resources, |
| @@ -308,7 +308,7 @@ static struct resource pxafb_resources[] = { | |||
| 308 | 308 | ||
| 309 | static u64 fb_dma_mask = ~(u64)0; | 309 | static u64 fb_dma_mask = ~(u64)0; |
| 310 | 310 | ||
| 311 | struct platform_device pxafb_device = { | 311 | struct platform_device pxa_device_fb = { |
| 312 | .name = "pxa2xx-fb", | 312 | .name = "pxa2xx-fb", |
| 313 | .id = -1, | 313 | .id = -1, |
| 314 | .dev = { | 314 | .dev = { |
| @@ -321,27 +321,27 @@ struct platform_device pxafb_device = { | |||
| 321 | 321 | ||
| 322 | void __init set_pxa_fb_info(struct pxafb_mach_info *info) | 322 | void __init set_pxa_fb_info(struct pxafb_mach_info *info) |
| 323 | { | 323 | { |
| 324 | pxafb_device.dev.platform_data = info; | 324 | pxa_device_fb.dev.platform_data = info; |
| 325 | } | 325 | } |
| 326 | 326 | ||
| 327 | void __init set_pxa_fb_parent(struct device *parent_dev) | 327 | void __init set_pxa_fb_parent(struct device *parent_dev) |
| 328 | { | 328 | { |
| 329 | pxafb_device.dev.parent = parent_dev; | 329 | pxa_device_fb.dev.parent = parent_dev; |
| 330 | } | 330 | } |
| 331 | 331 | ||
| 332 | struct platform_device ffuart_device = { | 332 | struct platform_device pxa_device_ffuart= { |
| 333 | .name = "pxa2xx-uart", | 333 | .name = "pxa2xx-uart", |
| 334 | .id = 0, | 334 | .id = 0, |
| 335 | }; | 335 | }; |
| 336 | struct platform_device btuart_device = { | 336 | struct platform_device pxa_device_btuart = { |
| 337 | .name = "pxa2xx-uart", | 337 | .name = "pxa2xx-uart", |
| 338 | .id = 1, | 338 | .id = 1, |
| 339 | }; | 339 | }; |
| 340 | struct platform_device stuart_device = { | 340 | struct platform_device pxa_device_stuart = { |
| 341 | .name = "pxa2xx-uart", | 341 | .name = "pxa2xx-uart", |
| 342 | .id = 2, | 342 | .id = 2, |
| 343 | }; | 343 | }; |
| 344 | struct platform_device hwuart_device = { | 344 | struct platform_device pxa_device_hwuart = { |
| 345 | .name = "pxa2xx-uart", | 345 | .name = "pxa2xx-uart", |
| 346 | .id = 3, | 346 | .id = 3, |
| 347 | }; | 347 | }; |
| @@ -358,7 +358,7 @@ static struct resource pxai2c_resources[] = { | |||
| 358 | }, | 358 | }, |
| 359 | }; | 359 | }; |
| 360 | 360 | ||
| 361 | struct platform_device pxai2c_device = { | 361 | struct platform_device pxa_device_i2c = { |
| 362 | .name = "pxa2xx-i2c", | 362 | .name = "pxa2xx-i2c", |
| 363 | .id = 0, | 363 | .id = 0, |
| 364 | .resource = pxai2c_resources, | 364 | .resource = pxai2c_resources, |
| @@ -367,7 +367,7 @@ struct platform_device pxai2c_device = { | |||
| 367 | 367 | ||
| 368 | void __init pxa_set_i2c_info(struct i2c_pxa_platform_data *info) | 368 | void __init pxa_set_i2c_info(struct i2c_pxa_platform_data *info) |
| 369 | { | 369 | { |
| 370 | pxai2c_device.dev.platform_data = info; | 370 | pxa_device_i2c.dev.platform_data = info; |
| 371 | } | 371 | } |
| 372 | 372 | ||
| 373 | static struct resource pxai2s_resources[] = { | 373 | static struct resource pxai2s_resources[] = { |
| @@ -382,7 +382,7 @@ static struct resource pxai2s_resources[] = { | |||
| 382 | }, | 382 | }, |
| 383 | }; | 383 | }; |
| 384 | 384 | ||
| 385 | struct platform_device pxai2s_device = { | 385 | struct platform_device pxa_device_i2s = { |
| 386 | .name = "pxa2xx-i2s", | 386 | .name = "pxa2xx-i2s", |
| 387 | .id = -1, | 387 | .id = -1, |
| 388 | .resource = pxai2s_resources, | 388 | .resource = pxai2s_resources, |
| @@ -391,7 +391,7 @@ struct platform_device pxai2s_device = { | |||
| 391 | 391 | ||
| 392 | static u64 pxaficp_dmamask = ~(u32)0; | 392 | static u64 pxaficp_dmamask = ~(u32)0; |
| 393 | 393 | ||
| 394 | struct platform_device pxaficp_device = { | 394 | struct platform_device pxa_device_ficp = { |
| 395 | .name = "pxa2xx-ir", | 395 | .name = "pxa2xx-ir", |
| 396 | .id = -1, | 396 | .id = -1, |
| 397 | .dev = { | 397 | .dev = { |
| @@ -402,10 +402,10 @@ struct platform_device pxaficp_device = { | |||
| 402 | 402 | ||
| 403 | void __init pxa_set_ficp_info(struct pxaficp_platform_data *info) | 403 | void __init pxa_set_ficp_info(struct pxaficp_platform_data *info) |
| 404 | { | 404 | { |
| 405 | pxaficp_device.dev.platform_data = info; | 405 | pxa_device_ficp.dev.platform_data = info; |
| 406 | } | 406 | } |
| 407 | 407 | ||
| 408 | struct platform_device pxartc_device = { | 408 | struct platform_device pxa_device_rtc = { |
| 409 | .name = "sa1100-rtc", | 409 | .name = "sa1100-rtc", |
| 410 | .id = -1, | 410 | .id = -1, |
| 411 | }; | 411 | }; |
diff --git a/arch/arm/mach-pxa/pm.c b/arch/arm/mach-pxa/pm.c index e66dbc26add1..b59a81a8e7d3 100644 --- a/arch/arm/mach-pxa/pm.c +++ b/arch/arm/mach-pxa/pm.c | |||
| @@ -24,61 +24,13 @@ | |||
| 24 | #include <asm/arch/lubbock.h> | 24 | #include <asm/arch/lubbock.h> |
| 25 | #include <asm/mach/time.h> | 25 | #include <asm/mach/time.h> |
| 26 | 26 | ||
| 27 | 27 | struct pxa_cpu_pm_fns *pxa_cpu_pm_fns; | |
| 28 | /* | 28 | static unsigned long *sleep_save; |
| 29 | * Debug macros | ||
| 30 | */ | ||
| 31 | #undef DEBUG | ||
| 32 | |||
| 33 | #define SAVE(x) sleep_save[SLEEP_SAVE_##x] = x | ||
| 34 | #define RESTORE(x) x = sleep_save[SLEEP_SAVE_##x] | ||
| 35 | |||
| 36 | #define RESTORE_GPLEVEL(n) do { \ | ||
| 37 | GPSR##n = sleep_save[SLEEP_SAVE_GPLR##n]; \ | ||
| 38 | GPCR##n = ~sleep_save[SLEEP_SAVE_GPLR##n]; \ | ||
| 39 | } while (0) | ||
| 40 | |||
| 41 | /* | ||
| 42 | * List of global PXA peripheral registers to preserve. | ||
| 43 | * More ones like CP and general purpose register values are preserved | ||
| 44 | * with the stack pointer in sleep.S. | ||
| 45 | */ | ||
| 46 | enum { SLEEP_SAVE_START = 0, | ||
| 47 | |||
| 48 | SLEEP_SAVE_GPLR0, SLEEP_SAVE_GPLR1, SLEEP_SAVE_GPLR2, SLEEP_SAVE_GPLR3, | ||
| 49 | SLEEP_SAVE_GPDR0, SLEEP_SAVE_GPDR1, SLEEP_SAVE_GPDR2, SLEEP_SAVE_GPDR3, | ||
| 50 | SLEEP_SAVE_GRER0, SLEEP_SAVE_GRER1, SLEEP_SAVE_GRER2, SLEEP_SAVE_GRER3, | ||
| 51 | SLEEP_SAVE_GFER0, SLEEP_SAVE_GFER1, SLEEP_SAVE_GFER2, SLEEP_SAVE_GFER3, | ||
| 52 | SLEEP_SAVE_PGSR0, SLEEP_SAVE_PGSR1, SLEEP_SAVE_PGSR2, SLEEP_SAVE_PGSR3, | ||
| 53 | |||
| 54 | SLEEP_SAVE_GAFR0_L, SLEEP_SAVE_GAFR0_U, | ||
| 55 | SLEEP_SAVE_GAFR1_L, SLEEP_SAVE_GAFR1_U, | ||
| 56 | SLEEP_SAVE_GAFR2_L, SLEEP_SAVE_GAFR2_U, | ||
| 57 | SLEEP_SAVE_GAFR3_L, SLEEP_SAVE_GAFR3_U, | ||
| 58 | |||
| 59 | SLEEP_SAVE_PSTR, | ||
| 60 | |||
| 61 | SLEEP_SAVE_ICMR, | ||
| 62 | SLEEP_SAVE_CKEN, | ||
| 63 | |||
| 64 | #ifdef CONFIG_PXA27x | ||
| 65 | SLEEP_SAVE_MDREFR, | ||
| 66 | SLEEP_SAVE_PWER, SLEEP_SAVE_PCFR, SLEEP_SAVE_PRER, | ||
| 67 | SLEEP_SAVE_PFER, SLEEP_SAVE_PKWR, | ||
| 68 | #endif | ||
| 69 | |||
| 70 | SLEEP_SAVE_CKSUM, | ||
| 71 | |||
| 72 | SLEEP_SAVE_SIZE | ||
| 73 | }; | ||
| 74 | |||
| 75 | 29 | ||
| 76 | int pxa_pm_enter(suspend_state_t state) | 30 | int pxa_pm_enter(suspend_state_t state) |
| 77 | { | 31 | { |
| 78 | unsigned long sleep_save[SLEEP_SAVE_SIZE]; | 32 | unsigned long sleep_save_checksum = 0, checksum = 0; |
| 79 | unsigned long checksum = 0; | ||
| 80 | int i; | 33 | int i; |
| 81 | extern void pxa_cpu_pm_enter(suspend_state_t state); | ||
| 82 | 34 | ||
| 83 | #ifdef CONFIG_IWMMXT | 35 | #ifdef CONFIG_IWMMXT |
| 84 | /* force any iWMMXt context to ram **/ | 36 | /* force any iWMMXt context to ram **/ |
| @@ -86,100 +38,35 @@ int pxa_pm_enter(suspend_state_t state) | |||
| 86 | iwmmxt_task_disable(NULL); | 38 | iwmmxt_task_disable(NULL); |
| 87 | #endif | 39 | #endif |
| 88 | 40 | ||
| 89 | SAVE(GPLR0); SAVE(GPLR1); SAVE(GPLR2); | 41 | pxa_cpu_pm_fns->save(sleep_save); |
| 90 | SAVE(GPDR0); SAVE(GPDR1); SAVE(GPDR2); | ||
| 91 | SAVE(GRER0); SAVE(GRER1); SAVE(GRER2); | ||
| 92 | SAVE(GFER0); SAVE(GFER1); SAVE(GFER2); | ||
| 93 | SAVE(PGSR0); SAVE(PGSR1); SAVE(PGSR2); | ||
| 94 | |||
| 95 | SAVE(GAFR0_L); SAVE(GAFR0_U); | ||
| 96 | SAVE(GAFR1_L); SAVE(GAFR1_U); | ||
| 97 | SAVE(GAFR2_L); SAVE(GAFR2_U); | ||
| 98 | |||
| 99 | #ifdef CONFIG_PXA27x | ||
| 100 | SAVE(MDREFR); | ||
| 101 | SAVE(GPLR3); SAVE(GPDR3); SAVE(GRER3); SAVE(GFER3); SAVE(PGSR3); | ||
| 102 | SAVE(GAFR3_L); SAVE(GAFR3_U); | ||
| 103 | SAVE(PWER); SAVE(PCFR); SAVE(PRER); | ||
| 104 | SAVE(PFER); SAVE(PKWR); | ||
| 105 | #endif | ||
| 106 | |||
| 107 | SAVE(ICMR); | ||
| 108 | ICMR = 0; | ||
| 109 | |||
| 110 | SAVE(CKEN); | ||
| 111 | SAVE(PSTR); | ||
| 112 | |||
| 113 | /* Note: wake up source are set up in each machine specific files */ | ||
| 114 | |||
| 115 | /* clear GPIO transition detect bits */ | ||
| 116 | GEDR0 = GEDR0; GEDR1 = GEDR1; GEDR2 = GEDR2; | ||
| 117 | #ifdef CONFIG_PXA27x | ||
| 118 | GEDR3 = GEDR3; | ||
| 119 | #endif | ||
| 120 | 42 | ||
| 121 | /* Clear sleep reset status */ | 43 | /* Clear sleep reset status */ |
| 122 | RCSR = RCSR_SMR; | 44 | RCSR = RCSR_SMR; |
| 123 | 45 | ||
| 124 | /* before sleeping, calculate and save a checksum */ | 46 | /* before sleeping, calculate and save a checksum */ |
| 125 | for (i = 0; i < SLEEP_SAVE_SIZE - 1; i++) | 47 | for (i = 0; i < pxa_cpu_pm_fns->save_size - 1; i++) |
| 126 | checksum += sleep_save[i]; | 48 | sleep_save_checksum += sleep_save[i]; |
| 127 | sleep_save[SLEEP_SAVE_CKSUM] = checksum; | ||
| 128 | 49 | ||
| 129 | /* *** go zzz *** */ | 50 | /* *** go zzz *** */ |
| 130 | pxa_cpu_pm_enter(state); | 51 | pxa_cpu_pm_fns->enter(state); |
| 131 | |||
| 132 | cpu_init(); | 52 | cpu_init(); |
| 133 | 53 | ||
| 134 | /* after sleeping, validate the checksum */ | 54 | /* after sleeping, validate the checksum */ |
| 135 | checksum = 0; | 55 | for (i = 0; i < pxa_cpu_pm_fns->save_size - 1; i++) |
| 136 | for (i = 0; i < SLEEP_SAVE_SIZE - 1; i++) | ||
| 137 | checksum += sleep_save[i]; | 56 | checksum += sleep_save[i]; |
| 138 | 57 | ||
| 139 | /* if invalid, display message and wait for a hardware reset */ | 58 | /* if invalid, display message and wait for a hardware reset */ |
| 140 | if (checksum != sleep_save[SLEEP_SAVE_CKSUM]) { | 59 | if (checksum != sleep_save_checksum) { |
| 141 | #ifdef CONFIG_ARCH_LUBBOCK | 60 | #ifdef CONFIG_ARCH_LUBBOCK |
| 142 | LUB_HEXLED = 0xbadbadc5; | 61 | LUB_HEXLED = 0xbadbadc5; |
| 143 | #endif | 62 | #endif |
| 144 | while (1) | 63 | while (1) |
| 145 | pxa_cpu_pm_enter(state); | 64 | pxa_cpu_pm_fns->enter(state); |
| 146 | } | 65 | } |
| 147 | 66 | ||
| 148 | /* ensure not to come back here if it wasn't intended */ | 67 | pxa_cpu_pm_fns->restore(sleep_save); |
| 149 | PSPR = 0; | ||
| 150 | |||
| 151 | /* restore registers */ | ||
| 152 | RESTORE_GPLEVEL(0); RESTORE_GPLEVEL(1); RESTORE_GPLEVEL(2); | ||
| 153 | RESTORE(GPDR0); RESTORE(GPDR1); RESTORE(GPDR2); | ||
| 154 | RESTORE(GAFR0_L); RESTORE(GAFR0_U); | ||
| 155 | RESTORE(GAFR1_L); RESTORE(GAFR1_U); | ||
| 156 | RESTORE(GAFR2_L); RESTORE(GAFR2_U); | ||
| 157 | RESTORE(GRER0); RESTORE(GRER1); RESTORE(GRER2); | ||
| 158 | RESTORE(GFER0); RESTORE(GFER1); RESTORE(GFER2); | ||
| 159 | RESTORE(PGSR0); RESTORE(PGSR1); RESTORE(PGSR2); | ||
| 160 | |||
| 161 | #ifdef CONFIG_PXA27x | ||
| 162 | RESTORE(MDREFR); | ||
| 163 | RESTORE_GPLEVEL(3); RESTORE(GPDR3); | ||
| 164 | RESTORE(GAFR3_L); RESTORE(GAFR3_U); | ||
| 165 | RESTORE(GRER3); RESTORE(GFER3); RESTORE(PGSR3); | ||
| 166 | RESTORE(PWER); RESTORE(PCFR); RESTORE(PRER); | ||
| 167 | RESTORE(PFER); RESTORE(PKWR); | ||
| 168 | #endif | ||
| 169 | |||
| 170 | PSSR = PSSR_RDH | PSSR_PH; | ||
| 171 | |||
| 172 | RESTORE(CKEN); | ||
| 173 | |||
| 174 | ICLR = 0; | ||
| 175 | ICCR = 1; | ||
| 176 | RESTORE(ICMR); | ||
| 177 | 68 | ||
| 178 | RESTORE(PSTR); | 69 | pr_debug("*** made it back from resume\n"); |
| 179 | |||
| 180 | #ifdef DEBUG | ||
| 181 | printk(KERN_DEBUG "*** made it back from resume\n"); | ||
| 182 | #endif | ||
| 183 | 70 | ||
| 184 | return 0; | 71 | return 0; |
| 185 | } | 72 | } |
| @@ -190,3 +77,35 @@ unsigned long sleep_phys_sp(void *sp) | |||
| 190 | { | 77 | { |
| 191 | return virt_to_phys(sp); | 78 | return virt_to_phys(sp); |
| 192 | } | 79 | } |
| 80 | |||
| 81 | static int pxa_pm_valid(suspend_state_t state) | ||
| 82 | { | ||
| 83 | if (pxa_cpu_pm_fns) | ||
| 84 | return pxa_cpu_pm_fns->valid(state); | ||
| 85 | |||
| 86 | return -EINVAL; | ||
| 87 | } | ||
| 88 | |||
| 89 | static struct pm_ops pxa_pm_ops = { | ||
| 90 | .valid = pxa_pm_valid, | ||
| 91 | .enter = pxa_pm_enter, | ||
| 92 | }; | ||
| 93 | |||
| 94 | static int __init pxa_pm_init(void) | ||
| 95 | { | ||
| 96 | if (!pxa_cpu_pm_fns) { | ||
| 97 | printk(KERN_ERR "no valid pxa_cpu_pm_fns defined\n"); | ||
| 98 | return -EINVAL; | ||
| 99 | } | ||
| 100 | |||
| 101 | sleep_save = kmalloc(pxa_cpu_pm_fns->save_size, GFP_KERNEL); | ||
| 102 | if (!sleep_save) { | ||
| 103 | printk(KERN_ERR "failed to alloc memory for pm save\n"); | ||
| 104 | return -ENOMEM; | ||
| 105 | } | ||
| 106 | |||
| 107 | pm_set_ops(&pxa_pm_ops); | ||
| 108 | return 0; | ||
| 109 | } | ||
| 110 | |||
| 111 | device_initcall(pxa_pm_init); | ||
diff --git a/arch/arm/mach-pxa/pxa25x.c b/arch/arm/mach-pxa/pxa25x.c index f36ca448338e..6dfcca72e90f 100644 --- a/arch/arm/mach-pxa/pxa25x.c +++ b/arch/arm/mach-pxa/pxa25x.c | |||
| @@ -110,26 +110,99 @@ EXPORT_SYMBOL(get_lcdclk_frequency_10khz); | |||
| 110 | 110 | ||
| 111 | #ifdef CONFIG_PM | 111 | #ifdef CONFIG_PM |
| 112 | 112 | ||
| 113 | void pxa_cpu_pm_enter(suspend_state_t state) | 113 | #define SAVE(x) sleep_save[SLEEP_SAVE_##x] = x |
| 114 | #define RESTORE(x) x = sleep_save[SLEEP_SAVE_##x] | ||
| 115 | |||
| 116 | #define RESTORE_GPLEVEL(n) do { \ | ||
| 117 | GPSR##n = sleep_save[SLEEP_SAVE_GPLR##n]; \ | ||
| 118 | GPCR##n = ~sleep_save[SLEEP_SAVE_GPLR##n]; \ | ||
| 119 | } while (0) | ||
| 120 | |||
| 121 | /* | ||
| 122 | * List of global PXA peripheral registers to preserve. | ||
| 123 | * More ones like CP and general purpose register values are preserved | ||
| 124 | * with the stack pointer in sleep.S. | ||
| 125 | */ | ||
| 126 | enum { SLEEP_SAVE_START = 0, | ||
| 127 | |||
| 128 | SLEEP_SAVE_GPLR0, SLEEP_SAVE_GPLR1, SLEEP_SAVE_GPLR2, | ||
| 129 | SLEEP_SAVE_GPDR0, SLEEP_SAVE_GPDR1, SLEEP_SAVE_GPDR2, | ||
| 130 | SLEEP_SAVE_GRER0, SLEEP_SAVE_GRER1, SLEEP_SAVE_GRER2, | ||
| 131 | SLEEP_SAVE_GFER0, SLEEP_SAVE_GFER1, SLEEP_SAVE_GFER2, | ||
| 132 | SLEEP_SAVE_PGSR0, SLEEP_SAVE_PGSR1, SLEEP_SAVE_PGSR2, | ||
| 133 | |||
| 134 | SLEEP_SAVE_GAFR0_L, SLEEP_SAVE_GAFR0_U, | ||
| 135 | SLEEP_SAVE_GAFR1_L, SLEEP_SAVE_GAFR1_U, | ||
| 136 | SLEEP_SAVE_GAFR2_L, SLEEP_SAVE_GAFR2_U, | ||
| 137 | |||
| 138 | SLEEP_SAVE_PSTR, | ||
| 139 | |||
| 140 | SLEEP_SAVE_ICMR, | ||
| 141 | SLEEP_SAVE_CKEN, | ||
| 142 | |||
| 143 | SLEEP_SAVE_SIZE | ||
| 144 | }; | ||
| 145 | |||
| 146 | |||
| 147 | static void pxa25x_cpu_pm_save(unsigned long *sleep_save) | ||
| 148 | { | ||
| 149 | SAVE(GPLR0); SAVE(GPLR1); SAVE(GPLR2); | ||
| 150 | SAVE(GPDR0); SAVE(GPDR1); SAVE(GPDR2); | ||
| 151 | SAVE(GRER0); SAVE(GRER1); SAVE(GRER2); | ||
| 152 | SAVE(GFER0); SAVE(GFER1); SAVE(GFER2); | ||
| 153 | SAVE(PGSR0); SAVE(PGSR1); SAVE(PGSR2); | ||
| 154 | |||
| 155 | SAVE(GAFR0_L); SAVE(GAFR0_U); | ||
| 156 | SAVE(GAFR1_L); SAVE(GAFR1_U); | ||
| 157 | SAVE(GAFR2_L); SAVE(GAFR2_U); | ||
| 158 | |||
| 159 | SAVE(ICMR); | ||
| 160 | SAVE(CKEN); | ||
| 161 | SAVE(PSTR); | ||
| 162 | } | ||
| 163 | |||
| 164 | static void pxa25x_cpu_pm_restore(unsigned long *sleep_save) | ||
| 114 | { | 165 | { |
| 115 | extern void pxa_cpu_suspend(unsigned int); | 166 | /* restore registers */ |
| 116 | extern void pxa_cpu_resume(void); | 167 | RESTORE_GPLEVEL(0); RESTORE_GPLEVEL(1); RESTORE_GPLEVEL(2); |
| 168 | RESTORE(GPDR0); RESTORE(GPDR1); RESTORE(GPDR2); | ||
| 169 | RESTORE(GAFR0_L); RESTORE(GAFR0_U); | ||
| 170 | RESTORE(GAFR1_L); RESTORE(GAFR1_U); | ||
| 171 | RESTORE(GAFR2_L); RESTORE(GAFR2_U); | ||
| 172 | RESTORE(GRER0); RESTORE(GRER1); RESTORE(GRER2); | ||
| 173 | RESTORE(GFER0); RESTORE(GFER1); RESTORE(GFER2); | ||
| 174 | RESTORE(PGSR0); RESTORE(PGSR1); RESTORE(PGSR2); | ||
| 175 | |||
| 176 | RESTORE(CKEN); | ||
| 177 | RESTORE(ICMR); | ||
| 178 | RESTORE(PSTR); | ||
| 179 | } | ||
| 117 | 180 | ||
| 181 | static void pxa25x_cpu_pm_enter(suspend_state_t state) | ||
| 182 | { | ||
| 118 | CKEN = 0; | 183 | CKEN = 0; |
| 119 | 184 | ||
| 120 | switch (state) { | 185 | switch (state) { |
| 121 | case PM_SUSPEND_MEM: | 186 | case PM_SUSPEND_MEM: |
| 122 | /* set resume return address */ | 187 | /* set resume return address */ |
| 123 | PSPR = virt_to_phys(pxa_cpu_resume); | 188 | PSPR = virt_to_phys(pxa_cpu_resume); |
| 124 | pxa_cpu_suspend(PWRMODE_SLEEP); | 189 | pxa25x_cpu_suspend(PWRMODE_SLEEP); |
| 125 | break; | 190 | break; |
| 126 | } | 191 | } |
| 127 | } | 192 | } |
| 128 | 193 | ||
| 129 | static struct pm_ops pxa25x_pm_ops = { | 194 | static struct pxa_cpu_pm_fns pxa25x_cpu_pm_fns = { |
| 130 | .enter = pxa_pm_enter, | 195 | .save_size = SLEEP_SAVE_SIZE, |
| 131 | .valid = pm_valid_only_mem, | 196 | .valid = pm_valid_only_mem, |
| 197 | .save = pxa25x_cpu_pm_save, | ||
| 198 | .restore = pxa25x_cpu_pm_restore, | ||
| 199 | .enter = pxa25x_cpu_pm_enter, | ||
| 132 | }; | 200 | }; |
| 201 | |||
| 202 | static void __init pxa25x_init_pm(void) | ||
| 203 | { | ||
| 204 | pxa_cpu_pm_fns = &pxa25x_cpu_pm_fns; | ||
| 205 | } | ||
| 133 | #endif | 206 | #endif |
| 134 | 207 | ||
| 135 | void __init pxa25x_init_irq(void) | 208 | void __init pxa25x_init_irq(void) |
| @@ -139,16 +212,16 @@ void __init pxa25x_init_irq(void) | |||
| 139 | } | 212 | } |
| 140 | 213 | ||
| 141 | static struct platform_device *pxa25x_devices[] __initdata = { | 214 | static struct platform_device *pxa25x_devices[] __initdata = { |
| 142 | &pxamci_device, | 215 | &pxa_device_mci, |
| 143 | &pxaudc_device, | 216 | &pxa_device_udc, |
| 144 | &pxafb_device, | 217 | &pxa_device_fb, |
| 145 | &ffuart_device, | 218 | &pxa_device_ffuart, |
| 146 | &btuart_device, | 219 | &pxa_device_btuart, |
| 147 | &stuart_device, | 220 | &pxa_device_stuart, |
| 148 | &pxai2c_device, | 221 | &pxa_device_i2c, |
| 149 | &pxai2s_device, | 222 | &pxa_device_i2s, |
| 150 | &pxaficp_device, | 223 | &pxa_device_ficp, |
| 151 | &pxartc_device, | 224 | &pxa_device_rtc, |
| 152 | }; | 225 | }; |
| 153 | 226 | ||
| 154 | static int __init pxa25x_init(void) | 227 | static int __init pxa25x_init(void) |
| @@ -159,14 +232,14 @@ static int __init pxa25x_init(void) | |||
| 159 | if ((ret = pxa_init_dma(16))) | 232 | if ((ret = pxa_init_dma(16))) |
| 160 | return ret; | 233 | return ret; |
| 161 | #ifdef CONFIG_PM | 234 | #ifdef CONFIG_PM |
| 162 | pm_set_ops(&pxa25x_pm_ops); | 235 | pxa25x_init_pm(); |
| 163 | #endif | 236 | #endif |
| 164 | ret = platform_add_devices(pxa25x_devices, | 237 | ret = platform_add_devices(pxa25x_devices, |
| 165 | ARRAY_SIZE(pxa25x_devices)); | 238 | ARRAY_SIZE(pxa25x_devices)); |
| 166 | } | 239 | } |
| 167 | /* Only add HWUART for PXA255/26x; PXA210/250/27x do not have it. */ | 240 | /* Only add HWUART for PXA255/26x; PXA210/250/27x do not have it. */ |
| 168 | if (cpu_is_pxa25x()) | 241 | if (cpu_is_pxa25x()) |
| 169 | ret = platform_device_register(&hwuart_device); | 242 | ret = platform_device_register(&pxa_device_hwuart); |
| 170 | 243 | ||
| 171 | return ret; | 244 | return ret; |
| 172 | } | 245 | } |
diff --git a/arch/arm/mach-pxa/pxa27x.c b/arch/arm/mach-pxa/pxa27x.c index aa5bb02c897b..203371ab19db 100644 --- a/arch/arm/mach-pxa/pxa27x.c +++ b/arch/arm/mach-pxa/pxa27x.c | |||
| @@ -126,14 +126,107 @@ EXPORT_SYMBOL(get_lcdclk_frequency_10khz); | |||
| 126 | 126 | ||
| 127 | #ifdef CONFIG_PM | 127 | #ifdef CONFIG_PM |
| 128 | 128 | ||
| 129 | void pxa_cpu_pm_enter(suspend_state_t state) | 129 | #define SAVE(x) sleep_save[SLEEP_SAVE_##x] = x |
| 130 | #define RESTORE(x) x = sleep_save[SLEEP_SAVE_##x] | ||
| 131 | |||
| 132 | #define RESTORE_GPLEVEL(n) do { \ | ||
| 133 | GPSR##n = sleep_save[SLEEP_SAVE_GPLR##n]; \ | ||
| 134 | GPCR##n = ~sleep_save[SLEEP_SAVE_GPLR##n]; \ | ||
| 135 | } while (0) | ||
| 136 | |||
| 137 | /* | ||
| 138 | * List of global PXA peripheral registers to preserve. | ||
| 139 | * More ones like CP and general purpose register values are preserved | ||
| 140 | * with the stack pointer in sleep.S. | ||
| 141 | */ | ||
| 142 | enum { SLEEP_SAVE_START = 0, | ||
| 143 | |||
| 144 | SLEEP_SAVE_GPLR0, SLEEP_SAVE_GPLR1, SLEEP_SAVE_GPLR2, SLEEP_SAVE_GPLR3, | ||
| 145 | SLEEP_SAVE_GPDR0, SLEEP_SAVE_GPDR1, SLEEP_SAVE_GPDR2, SLEEP_SAVE_GPDR3, | ||
| 146 | SLEEP_SAVE_GRER0, SLEEP_SAVE_GRER1, SLEEP_SAVE_GRER2, SLEEP_SAVE_GRER3, | ||
| 147 | SLEEP_SAVE_GFER0, SLEEP_SAVE_GFER1, SLEEP_SAVE_GFER2, SLEEP_SAVE_GFER3, | ||
| 148 | SLEEP_SAVE_PGSR0, SLEEP_SAVE_PGSR1, SLEEP_SAVE_PGSR2, SLEEP_SAVE_PGSR3, | ||
| 149 | |||
| 150 | SLEEP_SAVE_GAFR0_L, SLEEP_SAVE_GAFR0_U, | ||
| 151 | SLEEP_SAVE_GAFR1_L, SLEEP_SAVE_GAFR1_U, | ||
| 152 | SLEEP_SAVE_GAFR2_L, SLEEP_SAVE_GAFR2_U, | ||
| 153 | SLEEP_SAVE_GAFR3_L, SLEEP_SAVE_GAFR3_U, | ||
| 154 | |||
| 155 | SLEEP_SAVE_PSTR, | ||
| 156 | |||
| 157 | SLEEP_SAVE_ICMR, | ||
| 158 | SLEEP_SAVE_CKEN, | ||
| 159 | |||
| 160 | SLEEP_SAVE_MDREFR, | ||
| 161 | SLEEP_SAVE_PWER, SLEEP_SAVE_PCFR, SLEEP_SAVE_PRER, | ||
| 162 | SLEEP_SAVE_PFER, SLEEP_SAVE_PKWR, | ||
| 163 | |||
| 164 | SLEEP_SAVE_SIZE | ||
| 165 | }; | ||
| 166 | |||
| 167 | void pxa27x_cpu_pm_save(unsigned long *sleep_save) | ||
| 168 | { | ||
| 169 | SAVE(GPLR0); SAVE(GPLR1); SAVE(GPLR2); SAVE(GPLR3); | ||
| 170 | SAVE(GPDR0); SAVE(GPDR1); SAVE(GPDR2); SAVE(GPDR3); | ||
| 171 | SAVE(GRER0); SAVE(GRER1); SAVE(GRER2); SAVE(GRER3); | ||
| 172 | SAVE(GFER0); SAVE(GFER1); SAVE(GFER2); SAVE(GFER3); | ||
| 173 | SAVE(PGSR0); SAVE(PGSR1); SAVE(PGSR2); SAVE(PGSR3); | ||
| 174 | |||
| 175 | SAVE(GAFR0_L); SAVE(GAFR0_U); | ||
| 176 | SAVE(GAFR1_L); SAVE(GAFR1_U); | ||
| 177 | SAVE(GAFR2_L); SAVE(GAFR2_U); | ||
| 178 | SAVE(GAFR3_L); SAVE(GAFR3_U); | ||
| 179 | |||
| 180 | SAVE(MDREFR); | ||
| 181 | SAVE(PWER); SAVE(PCFR); SAVE(PRER); | ||
| 182 | SAVE(PFER); SAVE(PKWR); | ||
| 183 | |||
| 184 | SAVE(ICMR); ICMR = 0; | ||
| 185 | SAVE(CKEN); | ||
| 186 | SAVE(PSTR); | ||
| 187 | |||
| 188 | /* Clear GPIO transition detect bits */ | ||
| 189 | GEDR0 = GEDR0; GEDR1 = GEDR1; GEDR2 = GEDR2; GEDR3 = GEDR3; | ||
| 190 | } | ||
| 191 | |||
| 192 | void pxa27x_cpu_pm_restore(unsigned long *sleep_save) | ||
| 193 | { | ||
| 194 | /* ensure not to come back here if it wasn't intended */ | ||
| 195 | PSPR = 0; | ||
| 196 | |||
| 197 | /* restore registers */ | ||
| 198 | RESTORE_GPLEVEL(0); RESTORE_GPLEVEL(1); | ||
| 199 | RESTORE_GPLEVEL(2); RESTORE_GPLEVEL(3); | ||
| 200 | RESTORE(GPDR0); RESTORE(GPDR1); RESTORE(GPDR2); RESTORE(GPDR3); | ||
| 201 | RESTORE(GAFR0_L); RESTORE(GAFR0_U); | ||
| 202 | RESTORE(GAFR1_L); RESTORE(GAFR1_U); | ||
| 203 | RESTORE(GAFR2_L); RESTORE(GAFR2_U); | ||
| 204 | RESTORE(GAFR3_L); RESTORE(GAFR3_U); | ||
| 205 | RESTORE(GRER0); RESTORE(GRER1); RESTORE(GRER2); RESTORE(GRER3); | ||
| 206 | RESTORE(GFER0); RESTORE(GFER1); RESTORE(GFER2); RESTORE(GFER3); | ||
| 207 | RESTORE(PGSR0); RESTORE(PGSR1); RESTORE(PGSR2); RESTORE(PGSR3); | ||
| 208 | |||
| 209 | RESTORE(MDREFR); | ||
| 210 | RESTORE(PWER); RESTORE(PCFR); RESTORE(PRER); | ||
| 211 | RESTORE(PFER); RESTORE(PKWR); | ||
| 212 | |||
| 213 | PSSR = PSSR_RDH | PSSR_PH; | ||
| 214 | |||
| 215 | RESTORE(CKEN); | ||
| 216 | |||
| 217 | ICLR = 0; | ||
| 218 | ICCR = 1; | ||
| 219 | RESTORE(ICMR); | ||
| 220 | RESTORE(PSTR); | ||
| 221 | } | ||
| 222 | |||
| 223 | void pxa27x_cpu_pm_enter(suspend_state_t state) | ||
| 130 | { | 224 | { |
| 131 | extern void pxa_cpu_standby(void); | 225 | extern void pxa_cpu_standby(void); |
| 132 | extern void pxa_cpu_suspend(unsigned int); | ||
| 133 | extern void pxa_cpu_resume(void); | ||
| 134 | 226 | ||
| 135 | if (state == PM_SUSPEND_STANDBY) | 227 | if (state == PM_SUSPEND_STANDBY) |
| 136 | CKEN = (1 << CKEN_MEMC) | (1 << CKEN_OSTIMER) | (1 << CKEN_LCD) | (1 << CKEN_PWM0); | 228 | CKEN = (1 << CKEN_MEMC) | (1 << CKEN_OSTIMER) | |
| 229 | (1 << CKEN_LCD) | (1 << CKEN_PWM0); | ||
| 137 | else | 230 | else |
| 138 | CKEN = (1 << CKEN_MEMC) | (1 << CKEN_OSTIMER); | 231 | CKEN = (1 << CKEN_MEMC) | (1 << CKEN_OSTIMER); |
| 139 | 232 | ||
| @@ -150,20 +243,28 @@ void pxa_cpu_pm_enter(suspend_state_t state) | |||
| 150 | case PM_SUSPEND_MEM: | 243 | case PM_SUSPEND_MEM: |
| 151 | /* set resume return address */ | 244 | /* set resume return address */ |
| 152 | PSPR = virt_to_phys(pxa_cpu_resume); | 245 | PSPR = virt_to_phys(pxa_cpu_resume); |
| 153 | pxa_cpu_suspend(PWRMODE_SLEEP); | 246 | pxa27x_cpu_suspend(PWRMODE_SLEEP); |
| 154 | break; | 247 | break; |
| 155 | } | 248 | } |
| 156 | } | 249 | } |
| 157 | 250 | ||
| 158 | static int pxa27x_pm_valid(suspend_state_t state) | 251 | static int pxa27x_cpu_pm_valid(suspend_state_t state) |
| 159 | { | 252 | { |
| 160 | return state == PM_SUSPEND_MEM || state == PM_SUSPEND_STANDBY; | 253 | return state == PM_SUSPEND_MEM || state == PM_SUSPEND_STANDBY; |
| 161 | } | 254 | } |
| 162 | 255 | ||
| 163 | static struct pm_ops pxa27x_pm_ops = { | 256 | static struct pxa_cpu_pm_fns pxa27x_cpu_pm_fns = { |
| 164 | .enter = pxa_pm_enter, | 257 | .save_size = SLEEP_SAVE_SIZE, |
| 165 | .valid = pxa27x_pm_valid, | 258 | .save = pxa27x_cpu_pm_save, |
| 259 | .restore = pxa27x_cpu_pm_restore, | ||
| 260 | .valid = pxa27x_cpu_pm_valid, | ||
| 261 | .enter = pxa27x_cpu_pm_enter, | ||
| 166 | }; | 262 | }; |
| 263 | |||
| 264 | static void __init pxa27x_init_pm(void) | ||
| 265 | { | ||
| 266 | pxa_cpu_pm_fns = &pxa27x_cpu_pm_fns; | ||
| 267 | } | ||
| 167 | #endif | 268 | #endif |
| 168 | 269 | ||
| 169 | /* | 270 | /* |
| @@ -185,7 +286,7 @@ static struct resource pxa27x_ohci_resources[] = { | |||
| 185 | }, | 286 | }, |
| 186 | }; | 287 | }; |
| 187 | 288 | ||
| 188 | static struct platform_device pxaohci_device = { | 289 | static struct platform_device pxa27x_device_ohci = { |
| 189 | .name = "pxa27x-ohci", | 290 | .name = "pxa27x-ohci", |
| 190 | .id = -1, | 291 | .id = -1, |
| 191 | .dev = { | 292 | .dev = { |
| @@ -198,7 +299,7 @@ static struct platform_device pxaohci_device = { | |||
| 198 | 299 | ||
| 199 | void __init pxa_set_ohci_info(struct pxaohci_platform_data *info) | 300 | void __init pxa_set_ohci_info(struct pxaohci_platform_data *info) |
| 200 | { | 301 | { |
| 201 | pxaohci_device.dev.platform_data = info; | 302 | pxa27x_device_ohci.dev.platform_data = info; |
| 202 | } | 303 | } |
| 203 | 304 | ||
| 204 | static struct resource i2c_power_resources[] = { | 305 | static struct resource i2c_power_resources[] = { |
| @@ -213,7 +314,7 @@ static struct resource i2c_power_resources[] = { | |||
| 213 | }, | 314 | }, |
| 214 | }; | 315 | }; |
| 215 | 316 | ||
| 216 | static struct platform_device pxai2c_power_device = { | 317 | static struct platform_device pxa27x_device_i2c_power = { |
| 217 | .name = "pxa2xx-i2c", | 318 | .name = "pxa2xx-i2c", |
| 218 | .id = 1, | 319 | .id = 1, |
| 219 | .resource = i2c_power_resources, | 320 | .resource = i2c_power_resources, |
| @@ -221,18 +322,18 @@ static struct platform_device pxai2c_power_device = { | |||
| 221 | }; | 322 | }; |
| 222 | 323 | ||
| 223 | static struct platform_device *devices[] __initdata = { | 324 | static struct platform_device *devices[] __initdata = { |
| 224 | &pxamci_device, | 325 | &pxa_device_mci, |
| 225 | &pxaudc_device, | 326 | &pxa_device_udc, |
| 226 | &pxafb_device, | 327 | &pxa_device_fb, |
| 227 | &ffuart_device, | 328 | &pxa_device_ffuart, |
| 228 | &btuart_device, | 329 | &pxa_device_btuart, |
| 229 | &stuart_device, | 330 | &pxa_device_stuart, |
| 230 | &pxai2c_device, | 331 | &pxa_device_i2c, |
| 231 | &pxai2c_power_device, | 332 | &pxa_device_i2s, |
| 232 | &pxai2s_device, | 333 | &pxa_device_ficp, |
| 233 | &pxaficp_device, | 334 | &pxa_device_rtc, |
| 234 | &pxartc_device, | 335 | &pxa27x_device_i2c_power, |
| 235 | &pxaohci_device, | 336 | &pxa27x_device_ohci, |
| 236 | }; | 337 | }; |
| 237 | 338 | ||
| 238 | void __init pxa27x_init_irq(void) | 339 | void __init pxa27x_init_irq(void) |
| @@ -249,7 +350,7 @@ static int __init pxa27x_init(void) | |||
| 249 | if ((ret = pxa_init_dma(32))) | 350 | if ((ret = pxa_init_dma(32))) |
| 250 | return ret; | 351 | return ret; |
| 251 | #ifdef CONFIG_PM | 352 | #ifdef CONFIG_PM |
| 252 | pm_set_ops(&pxa27x_pm_ops); | 353 | pxa27x_init_pm(); |
| 253 | #endif | 354 | #endif |
| 254 | ret = platform_add_devices(devices, ARRAY_SIZE(devices)); | 355 | ret = platform_add_devices(devices, ARRAY_SIZE(devices)); |
| 255 | } | 356 | } |
diff --git a/arch/arm/mach-pxa/sleep.S b/arch/arm/mach-pxa/sleep.S index 15874b360e51..aff71fec618a 100644 --- a/arch/arm/mach-pxa/sleep.S +++ b/arch/arm/mach-pxa/sleep.S | |||
| @@ -17,28 +17,12 @@ | |||
| 17 | 17 | ||
| 18 | #include <asm/arch/pxa-regs.h> | 18 | #include <asm/arch/pxa-regs.h> |
| 19 | 19 | ||
| 20 | #ifdef CONFIG_PXA27x // workaround for Errata 50 | ||
| 21 | #define MDREFR_KDIV 0x200a4000 // all banks | 20 | #define MDREFR_KDIV 0x200a4000 // all banks |
| 22 | #define CCCR_SLEEP 0x00000107 // L=7 2N=2 A=0 PPDIS=0 CPDIS=0 | 21 | #define CCCR_SLEEP 0x00000107 // L=7 2N=2 A=0 PPDIS=0 CPDIS=0 |
| 23 | #endif | ||
| 24 | 22 | ||
| 25 | .text | 23 | .text |
| 26 | 24 | ||
| 27 | /* | 25 | pxa_cpu_save_cp: |
| 28 | * pxa_cpu_suspend() | ||
| 29 | * | ||
| 30 | * Forces CPU into sleep state. | ||
| 31 | * | ||
| 32 | * r0 = value for PWRMODE M field for desired sleep state | ||
| 33 | */ | ||
| 34 | |||
| 35 | ENTRY(pxa_cpu_suspend) | ||
| 36 | |||
| 37 | #ifndef CONFIG_IWMMXT | ||
| 38 | mra r2, r3, acc0 | ||
| 39 | #endif | ||
| 40 | stmfd sp!, {r2 - r12, lr} @ save registers on stack | ||
| 41 | |||
| 42 | @ get coprocessor registers | 26 | @ get coprocessor registers |
| 43 | mrc p14, 0, r3, c6, c0, 0 @ clock configuration, for turbo mode | 27 | mrc p14, 0, r3, c6, c0, 0 @ clock configuration, for turbo mode |
| 44 | mrc p15, 0, r4, c15, c1, 0 @ CP access reg | 28 | mrc p15, 0, r4, c15, c1, 0 @ CP access reg |
| @@ -54,12 +38,36 @@ ENTRY(pxa_cpu_suspend) | |||
| 54 | mov r10, sp | 38 | mov r10, sp |
| 55 | stmfd sp!, {r3 - r10} | 39 | stmfd sp!, {r3 - r10} |
| 56 | 40 | ||
| 57 | mov r5, r0 @ save sleep mode | 41 | mov pc, lr |
| 42 | |||
| 43 | pxa_cpu_save_sp: | ||
| 58 | @ preserve phys address of stack | 44 | @ preserve phys address of stack |
| 59 | mov r0, sp | 45 | mov r0, sp |
| 46 | mov r2, lr | ||
| 60 | bl sleep_phys_sp | 47 | bl sleep_phys_sp |
| 61 | ldr r1, =sleep_save_sp | 48 | ldr r1, =sleep_save_sp |
| 62 | str r0, [r1] | 49 | str r0, [r1] |
| 50 | mov pc, r2 | ||
| 51 | |||
| 52 | /* | ||
| 53 | * pxa27x_cpu_suspend() | ||
| 54 | * | ||
| 55 | * Forces CPU into sleep state. | ||
| 56 | * | ||
| 57 | * r0 = value for PWRMODE M field for desired sleep state | ||
| 58 | */ | ||
| 59 | |||
| 60 | ENTRY(pxa27x_cpu_suspend) | ||
| 61 | |||
| 62 | #ifndef CONFIG_IWMMXT | ||
| 63 | mra r2, r3, acc0 | ||
| 64 | #endif | ||
| 65 | stmfd sp!, {r2 - r12, lr} @ save registers on stack | ||
| 66 | |||
| 67 | bl pxa_cpu_save_cp | ||
| 68 | |||
| 69 | mov r5, r0 @ save sleep mode | ||
| 70 | bl pxa_cpu_save_sp | ||
| 63 | 71 | ||
| 64 | @ clean data cache | 72 | @ clean data cache |
| 65 | bl xscale_flush_kern_cache_all | 73 | bl xscale_flush_kern_cache_all |
| @@ -80,13 +88,55 @@ ENTRY(pxa_cpu_suspend) | |||
| 80 | @ enable SDRAM self-refresh mode | 88 | @ enable SDRAM self-refresh mode |
| 81 | orr r5, r5, #MDREFR_SLFRSH | 89 | orr r5, r5, #MDREFR_SLFRSH |
| 82 | 90 | ||
| 83 | #ifdef CONFIG_PXA27x | ||
| 84 | @ set SDCLKx divide-by-2 bits (this is part of a workaround for Errata 50) | 91 | @ set SDCLKx divide-by-2 bits (this is part of a workaround for Errata 50) |
| 85 | ldr r6, =MDREFR_KDIV | 92 | ldr r6, =MDREFR_KDIV |
| 86 | orr r5, r5, r6 | 93 | orr r5, r5, r6 |
| 87 | #endif | ||
| 88 | 94 | ||
| 89 | #ifdef CONFIG_PXA25x | 95 | @ Intel PXA270 Specification Update notes problems sleeping |
| 96 | @ with core operating above 91 MHz | ||
| 97 | @ (see Errata 50, ...processor does not exit from sleep...) | ||
| 98 | |||
| 99 | ldr r6, =CCCR | ||
| 100 | ldr r8, [r6] @ keep original value for resume | ||
| 101 | |||
| 102 | ldr r7, =CCCR_SLEEP @ prepare CCCR sleep value | ||
| 103 | mov r0, #0x2 @ prepare value for CLKCFG | ||
| 104 | |||
| 105 | @ align execution to a cache line | ||
| 106 | b pxa_cpu_do_suspend | ||
| 107 | |||
| 108 | /* | ||
| 109 | * pxa27x_cpu_suspend() | ||
| 110 | * | ||
| 111 | * Forces CPU into sleep state. | ||
| 112 | * | ||
| 113 | * r0 = value for PWRMODE M field for desired sleep state | ||
| 114 | */ | ||
| 115 | |||
| 116 | ENTRY(pxa25x_cpu_suspend) | ||
| 117 | stmfd sp!, {r2 - r12, lr} @ save registers on stack | ||
| 118 | |||
| 119 | bl pxa_cpu_save_cp | ||
| 120 | |||
| 121 | mov r5, r0 @ save sleep mode | ||
| 122 | bl pxa_cpu_save_sp | ||
| 123 | |||
| 124 | @ clean data cache | ||
| 125 | bl xscale_flush_kern_cache_all | ||
| 126 | |||
| 127 | @ prepare value for sleep mode | ||
| 128 | mov r1, r5 @ sleep mode | ||
| 129 | |||
| 130 | @ prepare pointer to physical address 0 (virtual mapping in generic.c) | ||
| 131 | mov r2, #UNCACHED_PHYS_0 | ||
| 132 | |||
| 133 | @ prepare SDRAM refresh settings | ||
| 134 | ldr r4, =MDREFR | ||
| 135 | ldr r5, [r4] | ||
| 136 | |||
| 137 | @ enable SDRAM self-refresh mode | ||
| 138 | orr r5, r5, #MDREFR_SLFRSH | ||
| 139 | |||
| 90 | @ Intel PXA255 Specification Update notes problems | 140 | @ Intel PXA255 Specification Update notes problems |
| 91 | @ about suspending with PXBus operating above 133MHz | 141 | @ about suspending with PXBus operating above 133MHz |
| 92 | @ (see Errata 31, GPIO output signals, ... unpredictable in sleep | 142 | @ (see Errata 31, GPIO output signals, ... unpredictable in sleep |
| @@ -118,30 +168,15 @@ ENTRY(pxa_cpu_suspend) | |||
| 118 | mov r0, #0 | 168 | mov r0, #0 |
| 119 | mcr p14, 0, r0, c6, c0, 0 | 169 | mcr p14, 0, r0, c6, c0, 0 |
| 120 | orr r0, r0, #2 @ initiate change bit | 170 | orr r0, r0, #2 @ initiate change bit |
| 121 | #endif | 171 | b pxa_cpu_do_suspend |
| 122 | #ifdef CONFIG_PXA27x | ||
| 123 | @ Intel PXA270 Specification Update notes problems sleeping | ||
| 124 | @ with core operating above 91 MHz | ||
| 125 | @ (see Errata 50, ...processor does not exit from sleep...) | ||
| 126 | |||
| 127 | ldr r6, =CCCR | ||
| 128 | ldr r8, [r6] @ keep original value for resume | ||
| 129 | |||
| 130 | ldr r7, =CCCR_SLEEP @ prepare CCCR sleep value | ||
| 131 | mov r0, #0x2 @ prepare value for CLKCFG | ||
| 132 | #endif | ||
| 133 | |||
| 134 | @ align execution to a cache line | ||
| 135 | b 1f | ||
| 136 | 172 | ||
| 137 | .ltorg | 173 | .ltorg |
| 138 | .align 5 | 174 | .align 5 |
| 139 | 1: | 175 | pxa_cpu_do_suspend: |
| 140 | 176 | ||
| 141 | @ All needed values are now in registers. | 177 | @ All needed values are now in registers. |
| 142 | @ These last instructions should be in cache | 178 | @ These last instructions should be in cache |
| 143 | 179 | ||
| 144 | #if defined(CONFIG_PXA25x) || defined(CONFIG_PXA27x) | ||
| 145 | @ initiate the frequency change... | 180 | @ initiate the frequency change... |
| 146 | str r7, [r6] | 181 | str r7, [r6] |
| 147 | mcr p14, 0, r0, c6, c0, 0 | 182 | mcr p14, 0, r0, c6, c0, 0 |
| @@ -155,7 +190,6 @@ ENTRY(pxa_cpu_suspend) | |||
| 155 | mov r0, #42 | 190 | mov r0, #42 |
| 156 | 10: subs r0, r0, #1 | 191 | 10: subs r0, r0, #1 |
| 157 | bne 10b | 192 | bne 10b |
| 158 | #endif | ||
| 159 | 193 | ||
| 160 | @ Do not reorder... | 194 | @ Do not reorder... |
| 161 | @ Intel PXA270 Specification Update notes problems performing | 195 | @ Intel PXA270 Specification Update notes problems performing |
diff --git a/arch/arm/mach-pxa/time.c b/arch/arm/mach-pxa/time.c index 6f91fd2d061a..98d27e646b09 100644 --- a/arch/arm/mach-pxa/time.c +++ b/arch/arm/mach-pxa/time.c | |||
| @@ -1,9 +1,11 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * arch/arm/mach-pxa/time.c | 2 | * arch/arm/mach-pxa/time.c |
| 3 | * | 3 | * |
| 4 | * Author: Nicolas Pitre | 4 | * PXA clocksource, clockevents, and OST interrupt handlers. |
| 5 | * Created: Jun 15, 2001 | 5 | * Copyright (c) 2007 by Bill Gatliff <bgat@billgatliff.com>. |
| 6 | * Copyright: MontaVista Software Inc. | 6 | * |
| 7 | * Derived from Nicolas Pitre's PXA timer handler Copyright (c) 2001 | ||
| 8 | * by MontaVista Software, Inc. (Nico, your code rocks!) | ||
| 7 | * | 9 | * |
| 8 | * This program is free software; you can redistribute it and/or modify | 10 | * This program is free software; you can redistribute it and/or modify |
| 9 | * it under the terms of the GNU General Public License version 2 as | 11 | * it under the terms of the GNU General Public License version 2 as |
| @@ -12,164 +14,160 @@ | |||
| 12 | 14 | ||
| 13 | #include <linux/kernel.h> | 15 | #include <linux/kernel.h> |
| 14 | #include <linux/init.h> | 16 | #include <linux/init.h> |
| 15 | #include <linux/delay.h> | ||
| 16 | #include <linux/interrupt.h> | 17 | #include <linux/interrupt.h> |
| 17 | #include <linux/time.h> | 18 | #include <linux/clockchips.h> |
| 18 | #include <linux/signal.h> | 19 | |
| 19 | #include <linux/errno.h> | ||
| 20 | #include <linux/sched.h> | ||
| 21 | #include <linux/clocksource.h> | ||
| 22 | |||
| 23 | #include <asm/system.h> | ||
| 24 | #include <asm/hardware.h> | ||
| 25 | #include <asm/io.h> | ||
| 26 | #include <asm/leds.h> | ||
| 27 | #include <asm/irq.h> | ||
| 28 | #include <asm/mach/irq.h> | 20 | #include <asm/mach/irq.h> |
| 29 | #include <asm/mach/time.h> | 21 | #include <asm/mach/time.h> |
| 30 | #include <asm/arch/pxa-regs.h> | 22 | #include <asm/arch/pxa-regs.h> |
| 31 | 23 | ||
| 32 | |||
| 33 | static int pxa_set_rtc(void) | ||
| 34 | { | ||
| 35 | unsigned long current_time = xtime.tv_sec; | ||
| 36 | |||
| 37 | if (RTSR & RTSR_ALE) { | ||
| 38 | /* make sure not to forward the clock over an alarm */ | ||
| 39 | unsigned long alarm = RTAR; | ||
| 40 | if (current_time >= alarm && alarm >= RCNR) | ||
| 41 | return -ERESTARTSYS; | ||
| 42 | } | ||
| 43 | RCNR = current_time; | ||
| 44 | return 0; | ||
| 45 | } | ||
| 46 | |||
| 47 | #ifdef CONFIG_NO_IDLE_HZ | ||
| 48 | static unsigned long initial_match; | ||
| 49 | static int match_posponed; | ||
| 50 | #endif | ||
| 51 | |||
| 52 | static irqreturn_t | 24 | static irqreturn_t |
| 53 | pxa_timer_interrupt(int irq, void *dev_id) | 25 | pxa_ost0_interrupt(int irq, void *dev_id) |
| 54 | { | 26 | { |
| 55 | int next_match; | 27 | int next_match; |
| 56 | 28 | struct clock_event_device *c = dev_id; | |
| 57 | write_seqlock(&xtime_lock); | 29 | |
| 58 | 30 | if (c->mode == CLOCK_EVT_MODE_ONESHOT) { | |
| 59 | #ifdef CONFIG_NO_IDLE_HZ | 31 | /* Disarm the compare/match, signal the event. */ |
| 60 | if (match_posponed) { | 32 | OIER &= ~OIER_E0; |
| 61 | match_posponed = 0; | 33 | c->event_handler(c); |
| 62 | OSMR0 = initial_match; | 34 | } else if (c->mode == CLOCK_EVT_MODE_PERIODIC) { |
| 63 | } | 35 | /* Call the event handler as many times as necessary |
| 64 | #endif | 36 | * to recover missed events, if any (if we update |
| 65 | 37 | * OSMR0 and OSCR0 is still ahead of us, we've missed | |
| 66 | /* Loop until we get ahead of the free running timer. | 38 | * the event). As we're dealing with that, re-arm the |
| 67 | * This ensures an exact clock tick count and time accuracy. | 39 | * compare/match for the next event. |
| 68 | * Since IRQs are disabled at this point, coherence between | 40 | * |
| 69 | * lost_ticks(updated in do_timer()) and the match reg value is | 41 | * HACK ALERT: |
| 70 | * ensured, hence we can use do_gettimeofday() from interrupt | 42 | * |
| 71 | * handlers. | 43 | * There's a latency between the instruction that |
| 72 | * | 44 | * writes to OSMR0 and the actual commit to the |
| 73 | * HACK ALERT: it seems that the PXA timer regs aren't updated right | 45 | * physical hardware, because the CPU doesn't (have |
| 74 | * away in all cases when a write occurs. We therefore compare with | 46 | * to) run at bus speed, there's a write buffer |
| 75 | * 8 instead of 0 in the while() condition below to avoid missing a | 47 | * between the CPU and the bus, etc. etc. So if the |
| 76 | * match if OSCR has already reached the next OSMR value. | 48 | * target OSCR0 is "very close", to the OSMR0 load |
| 77 | * Experience has shown that up to 6 ticks are needed to work around | 49 | * value, the update to OSMR0 might not get to the |
| 78 | * this problem, but let's use 8 to be conservative. Note that this | 50 | * hardware in time and we'll miss that interrupt. |
| 79 | * affect things only when the timer IRQ has been delayed by nearly | 51 | * |
| 80 | * exactly one tick period which should be a pretty rare event. | 52 | * To be safe, if the new OSMR0 is "very close" to the |
| 53 | * target OSCR0 value, we call the event_handler as | ||
| 54 | * though the event actually happened. According to | ||
| 55 | * Nico's comment in the previous version of this | ||
| 56 | * code, experience has shown that 6 OSCR ticks is | ||
| 57 | * "very close" but he went with 8. We will use 16, | ||
| 58 | * based on the results of testing on PXA270. | ||
| 59 | * | ||
| 60 | * To be doubly sure, we also tell clkevt via | ||
| 61 | * clockevents_register_device() not to ask for | ||
| 62 | * anything that might put us "very close". | ||
| 81 | */ | 63 | */ |
| 64 | #define MIN_OSCR_DELTA 16 | ||
| 82 | do { | 65 | do { |
| 83 | timer_tick(); | 66 | OSSR = OSSR_M0; |
| 84 | OSSR = OSSR_M0; /* Clear match on timer 0 */ | ||
| 85 | next_match = (OSMR0 += LATCH); | 67 | next_match = (OSMR0 += LATCH); |
| 86 | } while( (signed long)(next_match - OSCR) <= 8 ); | 68 | c->event_handler(c); |
| 87 | 69 | } while (((signed long)(next_match - OSCR) <= MIN_OSCR_DELTA) | |
| 88 | write_sequnlock(&xtime_lock); | 70 | && (c->mode == CLOCK_EVT_MODE_PERIODIC)); |
| 71 | } | ||
| 89 | 72 | ||
| 90 | return IRQ_HANDLED; | 73 | return IRQ_HANDLED; |
| 91 | } | 74 | } |
| 92 | 75 | ||
| 93 | static struct irqaction pxa_timer_irq = { | 76 | static int |
| 94 | .name = "PXA Timer Tick", | 77 | pxa_osmr0_set_next_event(unsigned long delta, struct clock_event_device *dev) |
| 95 | .flags = IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL, | 78 | { |
| 96 | .handler = pxa_timer_interrupt, | 79 | unsigned long irqflags; |
| 80 | |||
| 81 | raw_local_irq_save(irqflags); | ||
| 82 | OSMR0 = OSCR + delta; | ||
| 83 | OSSR = OSSR_M0; | ||
| 84 | OIER |= OIER_E0; | ||
| 85 | raw_local_irq_restore(irqflags); | ||
| 86 | return 0; | ||
| 87 | } | ||
| 88 | |||
| 89 | static void | ||
| 90 | pxa_osmr0_set_mode(enum clock_event_mode mode, struct clock_event_device *dev) | ||
| 91 | { | ||
| 92 | unsigned long irqflags; | ||
| 93 | |||
| 94 | switch (mode) { | ||
| 95 | case CLOCK_EVT_MODE_PERIODIC: | ||
| 96 | raw_local_irq_save(irqflags); | ||
| 97 | OSMR0 = OSCR + LATCH; | ||
| 98 | OSSR = OSSR_M0; | ||
| 99 | OIER |= OIER_E0; | ||
| 100 | raw_local_irq_restore(irqflags); | ||
| 101 | break; | ||
| 102 | |||
| 103 | case CLOCK_EVT_MODE_ONESHOT: | ||
| 104 | raw_local_irq_save(irqflags); | ||
| 105 | OIER &= ~OIER_E0; | ||
| 106 | raw_local_irq_restore(irqflags); | ||
| 107 | break; | ||
| 108 | |||
| 109 | case CLOCK_EVT_MODE_UNUSED: | ||
| 110 | case CLOCK_EVT_MODE_SHUTDOWN: | ||
| 111 | /* initializing, released, or preparing for suspend */ | ||
| 112 | raw_local_irq_save(irqflags); | ||
| 113 | OIER &= ~OIER_E0; | ||
| 114 | raw_local_irq_restore(irqflags); | ||
| 115 | break; | ||
| 116 | } | ||
| 117 | } | ||
| 118 | |||
| 119 | static struct clock_event_device ckevt_pxa_osmr0 = { | ||
| 120 | .name = "osmr0", | ||
| 121 | .features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT, | ||
| 122 | .shift = 32, | ||
| 123 | .rating = 200, | ||
| 124 | .cpumask = CPU_MASK_CPU0, | ||
| 125 | .set_next_event = pxa_osmr0_set_next_event, | ||
| 126 | .set_mode = pxa_osmr0_set_mode, | ||
| 97 | }; | 127 | }; |
| 98 | 128 | ||
| 99 | static cycle_t pxa_get_cycles(void) | 129 | static cycle_t pxa_read_oscr(void) |
| 100 | { | 130 | { |
| 101 | return OSCR; | 131 | return OSCR; |
| 102 | } | 132 | } |
| 103 | 133 | ||
| 104 | static struct clocksource clocksource_pxa = { | 134 | static struct clocksource cksrc_pxa_oscr0 = { |
| 105 | .name = "pxa_timer", | 135 | .name = "oscr0", |
| 106 | .rating = 200, | 136 | .rating = 200, |
| 107 | .read = pxa_get_cycles, | 137 | .read = pxa_read_oscr, |
| 108 | .mask = CLOCKSOURCE_MASK(32), | 138 | .mask = CLOCKSOURCE_MASK(32), |
| 109 | .shift = 20, | 139 | .shift = 20, |
| 110 | .flags = CLOCK_SOURCE_IS_CONTINUOUS, | 140 | .flags = CLOCK_SOURCE_IS_CONTINUOUS, |
| 111 | }; | 141 | }; |
| 112 | 142 | ||
| 143 | static struct irqaction pxa_ost0_irq = { | ||
| 144 | .name = "ost0", | ||
| 145 | .flags = IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL, | ||
| 146 | .handler = pxa_ost0_interrupt, | ||
| 147 | .dev_id = &ckevt_pxa_osmr0, | ||
| 148 | }; | ||
| 149 | |||
| 113 | static void __init pxa_timer_init(void) | 150 | static void __init pxa_timer_init(void) |
| 114 | { | 151 | { |
| 115 | struct timespec tv; | 152 | OIER = 0; |
| 116 | unsigned long flags; | 153 | OSSR = OSSR_M0 | OSSR_M1 | OSSR_M2 | OSSR_M3; |
| 117 | 154 | ||
| 118 | set_rtc = pxa_set_rtc; | 155 | ckevt_pxa_osmr0.mult = |
| 156 | div_sc(CLOCK_TICK_RATE, NSEC_PER_SEC, ckevt_pxa_osmr0.shift); | ||
| 157 | ckevt_pxa_osmr0.max_delta_ns = | ||
| 158 | clockevent_delta2ns(0x7fffffff, &ckevt_pxa_osmr0); | ||
| 159 | ckevt_pxa_osmr0.min_delta_ns = | ||
| 160 | clockevent_delta2ns(MIN_OSCR_DELTA, &ckevt_pxa_osmr0) + 1; | ||
| 119 | 161 | ||
| 120 | OIER = 0; /* disable any timer interrupts */ | 162 | cksrc_pxa_oscr0.mult = |
| 121 | OSSR = 0xf; /* clear status on all timers */ | 163 | clocksource_hz2mult(CLOCK_TICK_RATE, cksrc_pxa_oscr0.shift); |
| 122 | setup_irq(IRQ_OST0, &pxa_timer_irq); | ||
| 123 | local_irq_save(flags); | ||
| 124 | OIER = OIER_E0; /* enable match on timer 0 to cause interrupts */ | ||
| 125 | OSMR0 = OSCR + LATCH; /* set initial match */ | ||
| 126 | local_irq_restore(flags); | ||
| 127 | |||
| 128 | /* | ||
| 129 | * OSCR runs continuously on PXA and is not written to, | ||
| 130 | * so we can use it as clock source directly. | ||
| 131 | */ | ||
| 132 | clocksource_pxa.mult = | ||
| 133 | clocksource_hz2mult(CLOCK_TICK_RATE, clocksource_pxa.shift); | ||
| 134 | clocksource_register(&clocksource_pxa); | ||
| 135 | } | ||
| 136 | |||
| 137 | #ifdef CONFIG_NO_IDLE_HZ | ||
| 138 | static int pxa_dyn_tick_enable_disable(void) | ||
| 139 | { | ||
| 140 | /* nothing to do */ | ||
| 141 | return 0; | ||
| 142 | } | ||
| 143 | 164 | ||
| 144 | static void pxa_dyn_tick_reprogram(unsigned long ticks) | 165 | setup_irq(IRQ_OST0, &pxa_ost0_irq); |
| 145 | { | ||
| 146 | if (ticks > 1) { | ||
| 147 | initial_match = OSMR0; | ||
| 148 | OSMR0 = initial_match + ticks * LATCH; | ||
| 149 | match_posponed = 1; | ||
| 150 | } | ||
| 151 | } | ||
| 152 | 166 | ||
| 153 | static irqreturn_t | 167 | clocksource_register(&cksrc_pxa_oscr0); |
| 154 | pxa_dyn_tick_handler(int irq, void *dev_id) | 168 | clockevents_register_device(&ckevt_pxa_osmr0); |
| 155 | { | ||
| 156 | if (match_posponed) { | ||
| 157 | match_posponed = 0; | ||
| 158 | OSMR0 = initial_match; | ||
| 159 | if ( (signed long)(initial_match - OSCR) <= 8 ) | ||
| 160 | return pxa_timer_interrupt(irq, dev_id); | ||
| 161 | } | ||
| 162 | return IRQ_NONE; | ||
| 163 | } | 169 | } |
| 164 | 170 | ||
| 165 | static struct dyn_tick_timer pxa_dyn_tick = { | ||
| 166 | .enable = pxa_dyn_tick_enable_disable, | ||
| 167 | .disable = pxa_dyn_tick_enable_disable, | ||
| 168 | .reprogram = pxa_dyn_tick_reprogram, | ||
| 169 | .handler = pxa_dyn_tick_handler, | ||
| 170 | }; | ||
| 171 | #endif | ||
| 172 | |||
| 173 | #ifdef CONFIG_PM | 171 | #ifdef CONFIG_PM |
| 174 | static unsigned long osmr[4], oier; | 172 | static unsigned long osmr[4], oier; |
| 175 | 173 | ||
| @@ -191,7 +189,10 @@ static void pxa_timer_resume(void) | |||
| 191 | OIER = oier; | 189 | OIER = oier; |
| 192 | 190 | ||
| 193 | /* | 191 | /* |
| 194 | * OSMR0 is the system timer: make sure OSCR is sufficiently behind | 192 | * OSCR0 is the system timer, which has to increase |
| 193 | * monotonically until it rolls over in hardware. The value | ||
| 194 | * (OSMR0 - LATCH) is OSCR0 at the most recent system tick, | ||
| 195 | * which is a handy value to restore to OSCR0. | ||
| 195 | */ | 196 | */ |
| 196 | OSCR = OSMR0 - LATCH; | 197 | OSCR = OSMR0 - LATCH; |
| 197 | } | 198 | } |
| @@ -204,7 +205,4 @@ struct sys_timer pxa_timer = { | |||
| 204 | .init = pxa_timer_init, | 205 | .init = pxa_timer_init, |
| 205 | .suspend = pxa_timer_suspend, | 206 | .suspend = pxa_timer_suspend, |
| 206 | .resume = pxa_timer_resume, | 207 | .resume = pxa_timer_resume, |
| 207 | #ifdef CONFIG_NO_IDLE_HZ | ||
| 208 | .dyn_tick = &pxa_dyn_tick, | ||
| 209 | #endif | ||
| 210 | }; | 208 | }; |
diff --git a/arch/arm/mach-s3c2410/Kconfig b/arch/arm/mach-s3c2410/Kconfig index d4b013b283c3..e2079cf9266f 100644 --- a/arch/arm/mach-s3c2410/Kconfig +++ b/arch/arm/mach-s3c2410/Kconfig | |||
| @@ -9,6 +9,7 @@ config CPU_S3C2410 | |||
| 9 | depends on ARCH_S3C2410 | 9 | depends on ARCH_S3C2410 |
| 10 | select S3C2410_CLOCK | 10 | select S3C2410_CLOCK |
| 11 | select S3C2410_GPIO | 11 | select S3C2410_GPIO |
| 12 | select CPU_LLSERIAL_S3C2410 | ||
| 12 | select S3C2410_PM if PM | 13 | select S3C2410_PM if PM |
| 13 | help | 14 | help |
| 14 | Support for S3C2410 and S3C2410A family from the S3C24XX line | 15 | Support for S3C2410 and S3C2410A family from the S3C24XX line |
diff --git a/arch/arm/mach-s3c2410/clock.c b/arch/arm/mach-s3c2410/clock.c index 5b4831c4c1d8..cab9d6265e9e 100644 --- a/arch/arm/mach-s3c2410/clock.c +++ b/arch/arm/mach-s3c2410/clock.c | |||
| @@ -37,7 +37,7 @@ | |||
| 37 | #include <asm/hardware.h> | 37 | #include <asm/hardware.h> |
| 38 | #include <asm/io.h> | 38 | #include <asm/io.h> |
| 39 | 39 | ||
| 40 | #include <asm/arch/regs-serial.h> | 40 | #include <asm/plat-s3c/regs-serial.h> |
| 41 | #include <asm/arch/regs-clock.h> | 41 | #include <asm/arch/regs-clock.h> |
| 42 | #include <asm/arch/regs-gpio.h> | 42 | #include <asm/arch/regs-gpio.h> |
| 43 | 43 | ||
diff --git a/arch/arm/mach-s3c2410/dma.c b/arch/arm/mach-s3c2410/dma.c index 67d1ad363973..80d83739ab9f 100644 --- a/arch/arm/mach-s3c2410/dma.c +++ b/arch/arm/mach-s3c2410/dma.c | |||
| @@ -23,14 +23,14 @@ | |||
| 23 | #include <asm/plat-s3c24xx/cpu.h> | 23 | #include <asm/plat-s3c24xx/cpu.h> |
| 24 | #include <asm/plat-s3c24xx/dma.h> | 24 | #include <asm/plat-s3c24xx/dma.h> |
| 25 | 25 | ||
| 26 | #include <asm/arch/regs-serial.h> | 26 | #include <asm/plat-s3c/regs-serial.h> |
| 27 | #include <asm/arch/regs-gpio.h> | 27 | #include <asm/arch/regs-gpio.h> |
| 28 | #include <asm/arch/regs-ac97.h> | 28 | #include <asm/plat-s3c/regs-ac97.h> |
| 29 | #include <asm/arch/regs-mem.h> | 29 | #include <asm/arch/regs-mem.h> |
| 30 | #include <asm/arch/regs-lcd.h> | 30 | #include <asm/arch/regs-lcd.h> |
| 31 | #include <asm/arch/regs-sdi.h> | 31 | #include <asm/arch/regs-sdi.h> |
| 32 | #include <asm/arch/regs-iis.h> | 32 | #include <asm/plat-s3c24xx/regs-iis.h> |
| 33 | #include <asm/arch/regs-spi.h> | 33 | #include <asm/plat-s3c24xx/regs-spi.h> |
| 34 | 34 | ||
| 35 | static struct s3c24xx_dma_map __initdata s3c2410_dma_mappings[] = { | 35 | static struct s3c24xx_dma_map __initdata s3c2410_dma_mappings[] = { |
| 36 | [DMACH_XD0] = { | 36 | [DMACH_XD0] = { |
diff --git a/arch/arm/mach-s3c2410/mach-amlm5900.c b/arch/arm/mach-s3c2410/mach-amlm5900.c index 435adcce6482..43bb5e106302 100644 --- a/arch/arm/mach-s3c2410/mach-amlm5900.c +++ b/arch/arm/mach-s3c2410/mach-amlm5900.c | |||
| @@ -48,7 +48,7 @@ | |||
| 48 | #include <asm/mach-types.h> | 48 | #include <asm/mach-types.h> |
| 49 | #include <asm/arch/fb.h> | 49 | #include <asm/arch/fb.h> |
| 50 | 50 | ||
| 51 | #include <asm/arch/regs-serial.h> | 51 | #include <asm/plat-s3c/regs-serial.h> |
| 52 | #include <asm/arch/regs-lcd.h> | 52 | #include <asm/arch/regs-lcd.h> |
| 53 | #include <asm/arch/regs-gpio.h> | 53 | #include <asm/arch/regs-gpio.h> |
| 54 | 54 | ||
diff --git a/arch/arm/mach-s3c2410/mach-bast.c b/arch/arm/mach-s3c2410/mach-bast.c index 8b52ea95d4f6..bc926992b4e4 100644 --- a/arch/arm/mach-s3c2410/mach-bast.c +++ b/arch/arm/mach-s3c2410/mach-bast.c | |||
| @@ -36,13 +36,13 @@ | |||
| 36 | #include <asm/mach-types.h> | 36 | #include <asm/mach-types.h> |
| 37 | 37 | ||
| 38 | //#include <asm/debug-ll.h> | 38 | //#include <asm/debug-ll.h> |
| 39 | #include <asm/arch/regs-serial.h> | 39 | #include <asm/plat-s3c/regs-serial.h> |
| 40 | #include <asm/arch/regs-gpio.h> | 40 | #include <asm/arch/regs-gpio.h> |
| 41 | #include <asm/arch/regs-mem.h> | 41 | #include <asm/arch/regs-mem.h> |
| 42 | #include <asm/arch/regs-lcd.h> | 42 | #include <asm/arch/regs-lcd.h> |
| 43 | 43 | ||
| 44 | #include <asm/arch/nand.h> | 44 | #include <asm/plat-s3c/nand.h> |
| 45 | #include <asm/arch/iic.h> | 45 | #include <asm/plat-s3c/iic.h> |
| 46 | #include <asm/arch/fb.h> | 46 | #include <asm/arch/fb.h> |
| 47 | 47 | ||
| 48 | #include <linux/mtd/mtd.h> | 48 | #include <linux/mtd/mtd.h> |
diff --git a/arch/arm/mach-s3c2410/mach-h1940.c b/arch/arm/mach-s3c2410/mach-h1940.c index 5c9bcea74767..9a172b4ad720 100644 --- a/arch/arm/mach-s3c2410/mach-h1940.c +++ b/arch/arm/mach-s3c2410/mach-h1940.c | |||
| @@ -30,7 +30,7 @@ | |||
| 30 | #include <asm/irq.h> | 30 | #include <asm/irq.h> |
| 31 | #include <asm/mach-types.h> | 31 | #include <asm/mach-types.h> |
| 32 | 32 | ||
| 33 | #include <asm/arch/regs-serial.h> | 33 | #include <asm/plat-s3c/regs-serial.h> |
| 34 | #include <asm/arch/regs-lcd.h> | 34 | #include <asm/arch/regs-lcd.h> |
| 35 | #include <asm/arch/regs-gpio.h> | 35 | #include <asm/arch/regs-gpio.h> |
| 36 | #include <asm/arch/regs-clock.h> | 36 | #include <asm/arch/regs-clock.h> |
| @@ -38,7 +38,7 @@ | |||
| 38 | #include <asm/arch/h1940.h> | 38 | #include <asm/arch/h1940.h> |
| 39 | #include <asm/arch/h1940-latch.h> | 39 | #include <asm/arch/h1940-latch.h> |
| 40 | #include <asm/arch/fb.h> | 40 | #include <asm/arch/fb.h> |
| 41 | #include <asm/arch/udc.h> | 41 | #include <asm/plat-s3c24xx/udc.h> |
| 42 | 42 | ||
| 43 | #include <asm/plat-s3c24xx/clock.h> | 43 | #include <asm/plat-s3c24xx/clock.h> |
| 44 | #include <asm/plat-s3c24xx/devs.h> | 44 | #include <asm/plat-s3c24xx/devs.h> |
diff --git a/arch/arm/mach-s3c2410/mach-n30.c b/arch/arm/mach-s3c2410/mach-n30.c index 412e50c3d28a..621f548da610 100644 --- a/arch/arm/mach-s3c2410/mach-n30.c +++ b/arch/arm/mach-s3c2410/mach-n30.c | |||
| @@ -33,9 +33,9 @@ | |||
| 33 | #include <asm/irq.h> | 33 | #include <asm/irq.h> |
| 34 | #include <asm/mach-types.h> | 34 | #include <asm/mach-types.h> |
| 35 | 35 | ||
| 36 | #include <asm/arch/regs-serial.h> | 36 | #include <asm/plat-s3c/regs-serial.h> |
| 37 | #include <asm/arch/regs-gpio.h> | 37 | #include <asm/arch/regs-gpio.h> |
| 38 | #include <asm/arch/iic.h> | 38 | #include <asm/plat-s3c/iic.h> |
| 39 | 39 | ||
| 40 | #include <asm/plat-s3c24xx/s3c2410.h> | 40 | #include <asm/plat-s3c24xx/s3c2410.h> |
| 41 | #include <asm/plat-s3c24xx/clock.h> | 41 | #include <asm/plat-s3c24xx/clock.h> |
diff --git a/arch/arm/mach-s3c2410/mach-otom.c b/arch/arm/mach-s3c2410/mach-otom.c index 1f899fa588df..717af40e4477 100644 --- a/arch/arm/mach-s3c2410/mach-otom.c +++ b/arch/arm/mach-s3c2410/mach-otom.c | |||
| @@ -29,7 +29,7 @@ | |||
| 29 | #include <asm/irq.h> | 29 | #include <asm/irq.h> |
| 30 | #include <asm/mach-types.h> | 30 | #include <asm/mach-types.h> |
| 31 | 31 | ||
| 32 | #include <asm/arch/regs-serial.h> | 32 | #include <asm/plat-s3c/regs-serial.h> |
| 33 | #include <asm/arch/regs-gpio.h> | 33 | #include <asm/arch/regs-gpio.h> |
| 34 | 34 | ||
| 35 | #include <asm/plat-s3c24xx/s3c2410.h> | 35 | #include <asm/plat-s3c24xx/s3c2410.h> |
diff --git a/arch/arm/mach-s3c2410/mach-qt2410.c b/arch/arm/mach-s3c2410/mach-qt2410.c index d86e6f18bac9..e670b1e1631b 100644 --- a/arch/arm/mach-s3c2410/mach-qt2410.c +++ b/arch/arm/mach-s3c2410/mach-qt2410.c | |||
| @@ -49,10 +49,10 @@ | |||
| 49 | 49 | ||
| 50 | #include <asm/arch/regs-gpio.h> | 50 | #include <asm/arch/regs-gpio.h> |
| 51 | #include <asm/arch/leds-gpio.h> | 51 | #include <asm/arch/leds-gpio.h> |
| 52 | #include <asm/arch/regs-serial.h> | 52 | #include <asm/plat-s3c/regs-serial.h> |
| 53 | #include <asm/arch/fb.h> | 53 | #include <asm/arch/fb.h> |
| 54 | #include <asm/arch/nand.h> | 54 | #include <asm/plat-s3c/nand.h> |
| 55 | #include <asm/arch/udc.h> | 55 | #include <asm/plat-s3c24xx/udc.h> |
| 56 | #include <asm/arch/spi.h> | 56 | #include <asm/arch/spi.h> |
| 57 | #include <asm/arch/spi-gpio.h> | 57 | #include <asm/arch/spi-gpio.h> |
| 58 | 58 | ||
diff --git a/arch/arm/mach-s3c2410/mach-smdk2410.c b/arch/arm/mach-s3c2410/mach-smdk2410.c index 5852d300d52f..226550504c85 100644 --- a/arch/arm/mach-s3c2410/mach-smdk2410.c +++ b/arch/arm/mach-s3c2410/mach-smdk2410.c | |||
| @@ -47,7 +47,7 @@ | |||
| 47 | #include <asm/irq.h> | 47 | #include <asm/irq.h> |
| 48 | #include <asm/mach-types.h> | 48 | #include <asm/mach-types.h> |
| 49 | 49 | ||
| 50 | #include <asm/arch/regs-serial.h> | 50 | #include <asm/plat-s3c/regs-serial.h> |
| 51 | 51 | ||
| 52 | #include <asm/plat-s3c24xx/devs.h> | 52 | #include <asm/plat-s3c24xx/devs.h> |
| 53 | #include <asm/plat-s3c24xx/cpu.h> | 53 | #include <asm/plat-s3c24xx/cpu.h> |
diff --git a/arch/arm/mach-s3c2410/mach-vr1000.c b/arch/arm/mach-s3c2410/mach-vr1000.c index 7b624bb00490..9f43f3f124f5 100644 --- a/arch/arm/mach-s3c2410/mach-vr1000.c +++ b/arch/arm/mach-s3c2410/mach-vr1000.c | |||
| @@ -39,7 +39,7 @@ | |||
| 39 | #include <asm/irq.h> | 39 | #include <asm/irq.h> |
| 40 | #include <asm/mach-types.h> | 40 | #include <asm/mach-types.h> |
| 41 | 41 | ||
| 42 | #include <asm/arch/regs-serial.h> | 42 | #include <asm/plat-s3c/regs-serial.h> |
| 43 | #include <asm/arch/regs-gpio.h> | 43 | #include <asm/arch/regs-gpio.h> |
| 44 | #include <asm/arch/leds-gpio.h> | 44 | #include <asm/arch/leds-gpio.h> |
| 45 | 45 | ||
diff --git a/arch/arm/mach-s3c2410/s3c2410.c b/arch/arm/mach-s3c2410/s3c2410.c index 1a86a9803753..e580303cb0ab 100644 --- a/arch/arm/mach-s3c2410/s3c2410.c +++ b/arch/arm/mach-s3c2410/s3c2410.c | |||
| @@ -29,7 +29,7 @@ | |||
| 29 | #include <asm/irq.h> | 29 | #include <asm/irq.h> |
| 30 | 30 | ||
| 31 | #include <asm/arch/regs-clock.h> | 31 | #include <asm/arch/regs-clock.h> |
| 32 | #include <asm/arch/regs-serial.h> | 32 | #include <asm/plat-s3c/regs-serial.h> |
| 33 | 33 | ||
| 34 | #include <asm/plat-s3c24xx/s3c2410.h> | 34 | #include <asm/plat-s3c24xx/s3c2410.h> |
| 35 | #include <asm/plat-s3c24xx/cpu.h> | 35 | #include <asm/plat-s3c24xx/cpu.h> |
| @@ -40,7 +40,6 @@ | |||
| 40 | 40 | ||
| 41 | static struct map_desc s3c2410_iodesc[] __initdata = { | 41 | static struct map_desc s3c2410_iodesc[] __initdata = { |
| 42 | IODESC_ENT(CLKPWR), | 42 | IODESC_ENT(CLKPWR), |
| 43 | IODESC_ENT(LCD), | ||
| 44 | IODESC_ENT(TIMER), | 43 | IODESC_ENT(TIMER), |
| 45 | IODESC_ENT(WATCHDOG), | 44 | IODESC_ENT(WATCHDOG), |
| 46 | }; | 45 | }; |
diff --git a/arch/arm/mach-s3c2410/sleep.S b/arch/arm/mach-s3c2410/sleep.S index d1eeed2ad47c..8a9c5a2bb252 100644 --- a/arch/arm/mach-s3c2410/sleep.S +++ b/arch/arm/mach-s3c2410/sleep.S | |||
| @@ -32,7 +32,7 @@ | |||
| 32 | #include <asm/arch/regs-gpio.h> | 32 | #include <asm/arch/regs-gpio.h> |
| 33 | #include <asm/arch/regs-clock.h> | 33 | #include <asm/arch/regs-clock.h> |
| 34 | #include <asm/arch/regs-mem.h> | 34 | #include <asm/arch/regs-mem.h> |
| 35 | #include <asm/arch/regs-serial.h> | 35 | #include <asm/plat-s3c/regs-serial.h> |
| 36 | 36 | ||
| 37 | /* s3c2410_cpu_suspend | 37 | /* s3c2410_cpu_suspend |
| 38 | * | 38 | * |
diff --git a/arch/arm/mach-s3c2412/Kconfig b/arch/arm/mach-s3c2412/Kconfig index d5be5d053264..8e8fe48ea47f 100644 --- a/arch/arm/mach-s3c2412/Kconfig +++ b/arch/arm/mach-s3c2412/Kconfig | |||
| @@ -7,6 +7,7 @@ | |||
| 7 | config CPU_S3C2412 | 7 | config CPU_S3C2412 |
| 8 | bool | 8 | bool |
| 9 | depends on ARCH_S3C2410 | 9 | depends on ARCH_S3C2410 |
| 10 | select CPU_LLSERIAL_S3C2440 | ||
| 10 | select S3C2412_PM if PM | 11 | select S3C2412_PM if PM |
| 11 | select S3C2412_DMA if S3C2410_DMA | 12 | select S3C2412_DMA if S3C2410_DMA |
| 12 | help | 13 | help |
diff --git a/arch/arm/mach-s3c2412/clock.c b/arch/arm/mach-s3c2412/clock.c index 6a8e4448770b..8543dd6df391 100644 --- a/arch/arm/mach-s3c2412/clock.c +++ b/arch/arm/mach-s3c2412/clock.c | |||
| @@ -37,7 +37,7 @@ | |||
| 37 | #include <asm/hardware.h> | 37 | #include <asm/hardware.h> |
| 38 | #include <asm/io.h> | 38 | #include <asm/io.h> |
| 39 | 39 | ||
| 40 | #include <asm/arch/regs-serial.h> | 40 | #include <asm/plat-s3c/regs-serial.h> |
| 41 | #include <asm/arch/regs-clock.h> | 41 | #include <asm/arch/regs-clock.h> |
| 42 | #include <asm/arch/regs-gpio.h> | 42 | #include <asm/arch/regs-gpio.h> |
| 43 | 43 | ||
diff --git a/arch/arm/mach-s3c2412/dma.c b/arch/arm/mach-s3c2412/dma.c index 668cccefe7b0..4b9425c1bf72 100644 --- a/arch/arm/mach-s3c2412/dma.c +++ b/arch/arm/mach-s3c2412/dma.c | |||
| @@ -24,14 +24,14 @@ | |||
| 24 | #include <asm/plat-s3c24xx/dma.h> | 24 | #include <asm/plat-s3c24xx/dma.h> |
| 25 | #include <asm/plat-s3c24xx/cpu.h> | 25 | #include <asm/plat-s3c24xx/cpu.h> |
| 26 | 26 | ||
| 27 | #include <asm/arch/regs-serial.h> | 27 | #include <asm/plat-s3c/regs-serial.h> |
| 28 | #include <asm/arch/regs-gpio.h> | 28 | #include <asm/arch/regs-gpio.h> |
| 29 | #include <asm/arch/regs-ac97.h> | 29 | #include <asm/plat-s3c/regs-ac97.h> |
| 30 | #include <asm/arch/regs-mem.h> | 30 | #include <asm/arch/regs-mem.h> |
| 31 | #include <asm/arch/regs-lcd.h> | 31 | #include <asm/arch/regs-lcd.h> |
| 32 | #include <asm/arch/regs-sdi.h> | 32 | #include <asm/arch/regs-sdi.h> |
| 33 | #include <asm/arch/regs-iis.h> | 33 | #include <asm/plat-s3c24xx/regs-iis.h> |
| 34 | #include <asm/arch/regs-spi.h> | 34 | #include <asm/plat-s3c24xx/regs-spi.h> |
| 35 | 35 | ||
| 36 | #define MAP(x) { (x)| DMA_CH_VALID, (x)| DMA_CH_VALID, (x)| DMA_CH_VALID, (x)| DMA_CH_VALID } | 36 | #define MAP(x) { (x)| DMA_CH_VALID, (x)| DMA_CH_VALID, (x)| DMA_CH_VALID, (x)| DMA_CH_VALID } |
| 37 | 37 | ||
diff --git a/arch/arm/mach-s3c2412/mach-smdk2413.c b/arch/arm/mach-s3c2412/mach-smdk2413.c index 063af09f899d..b126a530daa6 100644 --- a/arch/arm/mach-s3c2412/mach-smdk2413.c +++ b/arch/arm/mach-s3c2412/mach-smdk2413.c | |||
| @@ -32,12 +32,12 @@ | |||
| 32 | #include <asm/mach-types.h> | 32 | #include <asm/mach-types.h> |
| 33 | 33 | ||
| 34 | //#include <asm/debug-ll.h> | 34 | //#include <asm/debug-ll.h> |
| 35 | #include <asm/arch/regs-serial.h> | 35 | #include <asm/plat-s3c/regs-serial.h> |
| 36 | #include <asm/arch/regs-gpio.h> | 36 | #include <asm/arch/regs-gpio.h> |
| 37 | #include <asm/arch/regs-lcd.h> | 37 | #include <asm/arch/regs-lcd.h> |
| 38 | 38 | ||
| 39 | #include <asm/arch/idle.h> | 39 | #include <asm/arch/idle.h> |
| 40 | #include <asm/arch/udc.h> | 40 | #include <asm/plat-s3c24xx/udc.h> |
| 41 | #include <asm/arch/fb.h> | 41 | #include <asm/arch/fb.h> |
| 42 | 42 | ||
| 43 | #include <asm/plat-s3c24xx/s3c2410.h> | 43 | #include <asm/plat-s3c24xx/s3c2410.h> |
diff --git a/arch/arm/mach-s3c2412/mach-vstms.c b/arch/arm/mach-s3c2412/mach-vstms.c index f2fbd65956ac..32982547cd63 100644 --- a/arch/arm/mach-s3c2412/mach-vstms.c +++ b/arch/arm/mach-s3c2412/mach-vstms.c | |||
| @@ -33,14 +33,14 @@ | |||
| 33 | #include <asm/irq.h> | 33 | #include <asm/irq.h> |
| 34 | #include <asm/mach-types.h> | 34 | #include <asm/mach-types.h> |
| 35 | 35 | ||
| 36 | #include <asm/arch/regs-serial.h> | 36 | #include <asm/plat-s3c/regs-serial.h> |
| 37 | #include <asm/arch/regs-gpio.h> | 37 | #include <asm/arch/regs-gpio.h> |
| 38 | #include <asm/arch/regs-lcd.h> | 38 | #include <asm/arch/regs-lcd.h> |
| 39 | 39 | ||
| 40 | #include <asm/arch/idle.h> | 40 | #include <asm/arch/idle.h> |
| 41 | #include <asm/arch/fb.h> | 41 | #include <asm/arch/fb.h> |
| 42 | 42 | ||
| 43 | #include <asm/arch/nand.h> | 43 | #include <asm/plat-s3c/nand.h> |
| 44 | 44 | ||
| 45 | #include <asm/plat-s3c24xx/s3c2410.h> | 45 | #include <asm/plat-s3c24xx/s3c2410.h> |
| 46 | #include <asm/plat-s3c24xx/s3c2412.h> | 46 | #include <asm/plat-s3c24xx/s3c2412.h> |
diff --git a/arch/arm/mach-s3c2412/s3c2412.c b/arch/arm/mach-s3c2412/s3c2412.c index 782b5814ced2..e0ccb404623f 100644 --- a/arch/arm/mach-s3c2412/s3c2412.c +++ b/arch/arm/mach-s3c2412/s3c2412.c | |||
| @@ -34,12 +34,12 @@ | |||
| 34 | #include <asm/arch/idle.h> | 34 | #include <asm/arch/idle.h> |
| 35 | 35 | ||
| 36 | #include <asm/arch/regs-clock.h> | 36 | #include <asm/arch/regs-clock.h> |
| 37 | #include <asm/arch/regs-serial.h> | 37 | #include <asm/plat-s3c/regs-serial.h> |
| 38 | #include <asm/arch/regs-power.h> | 38 | #include <asm/arch/regs-power.h> |
| 39 | #include <asm/arch/regs-gpio.h> | 39 | #include <asm/arch/regs-gpio.h> |
| 40 | #include <asm/arch/regs-gpioj.h> | 40 | #include <asm/arch/regs-gpioj.h> |
| 41 | #include <asm/arch/regs-dsc.h> | 41 | #include <asm/arch/regs-dsc.h> |
| 42 | #include <asm/arch/regs-spi.h> | 42 | #include <asm/plat-s3c24xx/regs-spi.h> |
| 43 | #include <asm/arch/regs-s3c2412.h> | 43 | #include <asm/arch/regs-s3c2412.h> |
| 44 | 44 | ||
| 45 | #include <asm/plat-s3c24xx/s3c2412.h> | 45 | #include <asm/plat-s3c24xx/s3c2412.h> |
| @@ -63,7 +63,6 @@ static inline void s3c2412_init_gpio2(void) | |||
| 63 | 63 | ||
| 64 | static struct map_desc s3c2412_iodesc[] __initdata = { | 64 | static struct map_desc s3c2412_iodesc[] __initdata = { |
| 65 | IODESC_ENT(CLKPWR), | 65 | IODESC_ENT(CLKPWR), |
| 66 | IODESC_ENT(LCD), | ||
| 67 | IODESC_ENT(TIMER), | 66 | IODESC_ENT(TIMER), |
| 68 | IODESC_ENT(WATCHDOG), | 67 | IODESC_ENT(WATCHDOG), |
| 69 | }; | 68 | }; |
diff --git a/arch/arm/mach-s3c2440/Kconfig b/arch/arm/mach-s3c2440/Kconfig index e3bfda098c0f..f1915bd61d15 100644 --- a/arch/arm/mach-s3c2440/Kconfig +++ b/arch/arm/mach-s3c2440/Kconfig | |||
| @@ -12,6 +12,7 @@ config CPU_S3C2440 | |||
| 12 | select S3C2410_GPIO | 12 | select S3C2410_GPIO |
| 13 | select S3C2440_DMA if S3C2410_DMA | 13 | select S3C2440_DMA if S3C2410_DMA |
| 14 | select CPU_S3C244X | 14 | select CPU_S3C244X |
| 15 | select CPU_LLSERIAL_S3C2440 | ||
| 15 | help | 16 | help |
| 16 | Support for S3C2440 Samsung Mobile CPU based systems. | 17 | Support for S3C2440 Samsung Mobile CPU based systems. |
| 17 | 18 | ||
diff --git a/arch/arm/mach-s3c2440/dma.c b/arch/arm/mach-s3c2440/dma.c index cd035a3ec878..f509f062e749 100644 --- a/arch/arm/mach-s3c2440/dma.c +++ b/arch/arm/mach-s3c2440/dma.c | |||
| @@ -23,14 +23,14 @@ | |||
| 23 | #include <asm/plat-s3c24xx/dma.h> | 23 | #include <asm/plat-s3c24xx/dma.h> |
| 24 | #include <asm/plat-s3c24xx/cpu.h> | 24 | #include <asm/plat-s3c24xx/cpu.h> |
| 25 | 25 | ||
| 26 | #include <asm/arch/regs-serial.h> | 26 | #include <asm/plat-s3c/regs-serial.h> |
| 27 | #include <asm/arch/regs-gpio.h> | 27 | #include <asm/arch/regs-gpio.h> |
| 28 | #include <asm/arch/regs-ac97.h> | 28 | #include <asm/plat-s3c/regs-ac97.h> |
| 29 | #include <asm/arch/regs-mem.h> | 29 | #include <asm/arch/regs-mem.h> |
| 30 | #include <asm/arch/regs-lcd.h> | 30 | #include <asm/arch/regs-lcd.h> |
| 31 | #include <asm/arch/regs-sdi.h> | 31 | #include <asm/arch/regs-sdi.h> |
| 32 | #include <asm/arch/regs-iis.h> | 32 | #include <asm/plat-s3c24xx/regs-iis.h> |
| 33 | #include <asm/arch/regs-spi.h> | 33 | #include <asm/plat-s3c24xx/regs-spi.h> |
| 34 | 34 | ||
| 35 | static struct s3c24xx_dma_map __initdata s3c2440_dma_mappings[] = { | 35 | static struct s3c24xx_dma_map __initdata s3c2440_dma_mappings[] = { |
| 36 | [DMACH_XD0] = { | 36 | [DMACH_XD0] = { |
diff --git a/arch/arm/mach-s3c2440/mach-anubis.c b/arch/arm/mach-s3c2440/mach-anubis.c index 29c163d300d4..3d3dfa95db8e 100644 --- a/arch/arm/mach-s3c2440/mach-anubis.c +++ b/arch/arm/mach-s3c2440/mach-anubis.c | |||
| @@ -34,11 +34,11 @@ | |||
| 34 | #include <asm/irq.h> | 34 | #include <asm/irq.h> |
| 35 | #include <asm/mach-types.h> | 35 | #include <asm/mach-types.h> |
| 36 | 36 | ||
| 37 | #include <asm/arch/regs-serial.h> | 37 | #include <asm/plat-s3c/regs-serial.h> |
| 38 | #include <asm/arch/regs-gpio.h> | 38 | #include <asm/arch/regs-gpio.h> |
| 39 | #include <asm/arch/regs-mem.h> | 39 | #include <asm/arch/regs-mem.h> |
| 40 | #include <asm/arch/regs-lcd.h> | 40 | #include <asm/arch/regs-lcd.h> |
| 41 | #include <asm/arch/nand.h> | 41 | #include <asm/plat-s3c/nand.h> |
| 42 | 42 | ||
| 43 | #include <linux/mtd/mtd.h> | 43 | #include <linux/mtd/mtd.h> |
| 44 | #include <linux/mtd/nand.h> | 44 | #include <linux/mtd/nand.h> |
diff --git a/arch/arm/mach-s3c2440/mach-nexcoder.c b/arch/arm/mach-s3c2440/mach-nexcoder.c index 5e61f2166c76..afe0d7b7e389 100644 --- a/arch/arm/mach-s3c2440/mach-nexcoder.c +++ b/arch/arm/mach-s3c2440/mach-nexcoder.c | |||
| @@ -36,7 +36,7 @@ | |||
| 36 | 36 | ||
| 37 | //#include <asm/debug-ll.h> | 37 | //#include <asm/debug-ll.h> |
| 38 | #include <asm/arch/regs-gpio.h> | 38 | #include <asm/arch/regs-gpio.h> |
| 39 | #include <asm/arch/regs-serial.h> | 39 | #include <asm/plat-s3c/regs-serial.h> |
| 40 | 40 | ||
| 41 | #include <asm/plat-s3c24xx/s3c2410.h> | 41 | #include <asm/plat-s3c24xx/s3c2410.h> |
| 42 | #include <asm/plat-s3c24xx/s3c2440.h> | 42 | #include <asm/plat-s3c24xx/s3c2440.h> |
diff --git a/arch/arm/mach-s3c2440/mach-osiris.c b/arch/arm/mach-s3c2440/mach-osiris.c index 89f4c9c5777b..0ba7e9060c7b 100644 --- a/arch/arm/mach-s3c2440/mach-osiris.c +++ b/arch/arm/mach-s3c2440/mach-osiris.c | |||
| @@ -31,11 +31,11 @@ | |||
| 31 | #include <asm/irq.h> | 31 | #include <asm/irq.h> |
| 32 | #include <asm/mach-types.h> | 32 | #include <asm/mach-types.h> |
| 33 | 33 | ||
| 34 | #include <asm/arch/regs-serial.h> | 34 | #include <asm/plat-s3c/regs-serial.h> |
| 35 | #include <asm/arch/regs-gpio.h> | 35 | #include <asm/arch/regs-gpio.h> |
| 36 | #include <asm/arch/regs-mem.h> | 36 | #include <asm/arch/regs-mem.h> |
| 37 | #include <asm/arch/regs-lcd.h> | 37 | #include <asm/arch/regs-lcd.h> |
| 38 | #include <asm/arch/nand.h> | 38 | #include <asm/plat-s3c/nand.h> |
| 39 | 39 | ||
| 40 | #include <linux/mtd/mtd.h> | 40 | #include <linux/mtd/mtd.h> |
| 41 | #include <linux/mtd/nand.h> | 41 | #include <linux/mtd/nand.h> |
diff --git a/arch/arm/mach-s3c2440/mach-rx3715.c b/arch/arm/mach-s3c2440/mach-rx3715.c index 866ff71c01dd..b59e6d39f2f2 100644 --- a/arch/arm/mach-s3c2440/mach-rx3715.c +++ b/arch/arm/mach-s3c2440/mach-rx3715.c | |||
| @@ -38,12 +38,12 @@ | |||
| 38 | #include <asm/irq.h> | 38 | #include <asm/irq.h> |
| 39 | #include <asm/mach-types.h> | 39 | #include <asm/mach-types.h> |
| 40 | 40 | ||
| 41 | #include <asm/arch/regs-serial.h> | 41 | #include <asm/plat-s3c/regs-serial.h> |
| 42 | #include <asm/arch/regs-gpio.h> | 42 | #include <asm/arch/regs-gpio.h> |
| 43 | #include <asm/arch/regs-lcd.h> | 43 | #include <asm/arch/regs-lcd.h> |
| 44 | 44 | ||
| 45 | #include <asm/arch/h1940.h> | 45 | #include <asm/arch/h1940.h> |
| 46 | #include <asm/arch/nand.h> | 46 | #include <asm/plat-s3c/nand.h> |
| 47 | #include <asm/arch/fb.h> | 47 | #include <asm/arch/fb.h> |
| 48 | 48 | ||
| 49 | #include <asm/plat-s3c24xx/clock.h> | 49 | #include <asm/plat-s3c24xx/clock.h> |
diff --git a/arch/arm/mach-s3c2440/mach-smdk2440.c b/arch/arm/mach-s3c2440/mach-smdk2440.c index e167254e232e..670115b8a12e 100644 --- a/arch/arm/mach-s3c2440/mach-smdk2440.c +++ b/arch/arm/mach-s3c2440/mach-smdk2440.c | |||
| @@ -31,7 +31,7 @@ | |||
| 31 | #include <asm/irq.h> | 31 | #include <asm/irq.h> |
| 32 | #include <asm/mach-types.h> | 32 | #include <asm/mach-types.h> |
| 33 | 33 | ||
| 34 | #include <asm/arch/regs-serial.h> | 34 | #include <asm/plat-s3c/regs-serial.h> |
| 35 | #include <asm/arch/regs-gpio.h> | 35 | #include <asm/arch/regs-gpio.h> |
| 36 | #include <asm/arch/regs-lcd.h> | 36 | #include <asm/arch/regs-lcd.h> |
| 37 | 37 | ||
diff --git a/arch/arm/mach-s3c2442/Kconfig b/arch/arm/mach-s3c2442/Kconfig index bf8d87abfab3..88d5fd34fe3b 100644 --- a/arch/arm/mach-s3c2442/Kconfig +++ b/arch/arm/mach-s3c2442/Kconfig | |||
| @@ -11,6 +11,7 @@ config CPU_S3C2442 | |||
| 11 | select S3C2410_GPIO | 11 | select S3C2410_GPIO |
| 12 | select S3C2410_PM if PM | 12 | select S3C2410_PM if PM |
| 13 | select CPU_S3C244X | 13 | select CPU_S3C244X |
| 14 | select CPU_LLSERIAL_S3C2440 | ||
| 14 | help | 15 | help |
| 15 | Support for S3C2442 Samsung Mobile CPU based systems. | 16 | Support for S3C2442 Samsung Mobile CPU based systems. |
| 16 | 17 | ||
diff --git a/arch/arm/mach-s3c2443/Kconfig b/arch/arm/mach-s3c2443/Kconfig index c649bb2e7ce8..14252f573754 100644 --- a/arch/arm/mach-s3c2443/Kconfig +++ b/arch/arm/mach-s3c2443/Kconfig | |||
| @@ -8,6 +8,7 @@ config CPU_S3C2443 | |||
| 8 | bool | 8 | bool |
| 9 | depends on ARCH_S3C2410 | 9 | depends on ARCH_S3C2410 |
| 10 | select S3C2443_DMA if S3C2410_DMA | 10 | select S3C2443_DMA if S3C2410_DMA |
| 11 | select CPU_LLSERIAL_S3C2440 | ||
| 11 | help | 12 | help |
| 12 | Support for the S3C2443 SoC from the S3C24XX line | 13 | Support for the S3C2443 SoC from the S3C24XX line |
| 13 | 14 | ||
diff --git a/arch/arm/mach-s3c2443/dma.c b/arch/arm/mach-s3c2443/dma.c index f70e8ccffc3d..fc3ede82af8f 100644 --- a/arch/arm/mach-s3c2443/dma.c +++ b/arch/arm/mach-s3c2443/dma.c | |||
| @@ -24,14 +24,14 @@ | |||
| 24 | #include <asm/plat-s3c24xx/dma.h> | 24 | #include <asm/plat-s3c24xx/dma.h> |
| 25 | #include <asm/plat-s3c24xx/cpu.h> | 25 | #include <asm/plat-s3c24xx/cpu.h> |
| 26 | 26 | ||
| 27 | #include <asm/arch/regs-serial.h> | 27 | #include <asm/plat-s3c/regs-serial.h> |
| 28 | #include <asm/arch/regs-gpio.h> | 28 | #include <asm/arch/regs-gpio.h> |
| 29 | #include <asm/arch/regs-ac97.h> | 29 | #include <asm/plat-s3c/regs-ac97.h> |
| 30 | #include <asm/arch/regs-mem.h> | 30 | #include <asm/arch/regs-mem.h> |
| 31 | #include <asm/arch/regs-lcd.h> | 31 | #include <asm/arch/regs-lcd.h> |
| 32 | #include <asm/arch/regs-sdi.h> | 32 | #include <asm/arch/regs-sdi.h> |
| 33 | #include <asm/arch/regs-iis.h> | 33 | #include <asm/plat-s3c24xx/regs-iis.h> |
| 34 | #include <asm/arch/regs-spi.h> | 34 | #include <asm/plat-s3c24xx/regs-spi.h> |
| 35 | 35 | ||
| 36 | #define MAP(x) { \ | 36 | #define MAP(x) { \ |
| 37 | [0] = (x) | DMA_CH_VALID, \ | 37 | [0] = (x) | DMA_CH_VALID, \ |
diff --git a/arch/arm/mach-s3c2443/mach-smdk2443.c b/arch/arm/mach-s3c2443/mach-smdk2443.c index b1eb709ee65a..8cd93130ef36 100644 --- a/arch/arm/mach-s3c2443/mach-smdk2443.c +++ b/arch/arm/mach-s3c2443/mach-smdk2443.c | |||
| @@ -31,7 +31,7 @@ | |||
| 31 | #include <asm/irq.h> | 31 | #include <asm/irq.h> |
| 32 | #include <asm/mach-types.h> | 32 | #include <asm/mach-types.h> |
| 33 | 33 | ||
| 34 | #include <asm/arch/regs-serial.h> | 34 | #include <asm/plat-s3c/regs-serial.h> |
| 35 | #include <asm/arch/regs-gpio.h> | 35 | #include <asm/arch/regs-gpio.h> |
| 36 | #include <asm/arch/regs-lcd.h> | 36 | #include <asm/arch/regs-lcd.h> |
| 37 | 37 | ||
diff --git a/arch/arm/mm/Kconfig b/arch/arm/mm/Kconfig index 76a3ba668e2e..12161ae445da 100644 --- a/arch/arm/mm/Kconfig +++ b/arch/arm/mm/Kconfig | |||
| @@ -345,7 +345,8 @@ config CPU_XSC3 | |||
| 345 | # ARMv6 | 345 | # ARMv6 |
| 346 | config CPU_V6 | 346 | config CPU_V6 |
| 347 | bool "Support ARM V6 processor" | 347 | bool "Support ARM V6 processor" |
| 348 | depends on ARCH_INTEGRATOR || MACH_REALVIEW_EB || ARCH_OMAP2 | 348 | depends on ARCH_INTEGRATOR || MACH_REALVIEW_EB || ARCH_OMAP2 || ARCH_MX3 |
| 349 | default y if ARCH_MX3 | ||
| 349 | select CPU_32v6 | 350 | select CPU_32v6 |
| 350 | select CPU_ABRT_EV6 | 351 | select CPU_ABRT_EV6 |
| 351 | select CPU_CACHE_V6 | 352 | select CPU_CACHE_V6 |
| @@ -359,7 +360,7 @@ config CPU_V6 | |||
| 359 | config CPU_32v6K | 360 | config CPU_32v6K |
| 360 | bool "Support ARM V6K processor extensions" if !SMP | 361 | bool "Support ARM V6K processor extensions" if !SMP |
| 361 | depends on CPU_V6 | 362 | depends on CPU_V6 |
| 362 | default y if SMP | 363 | default y if SMP && !ARCH_MX3 |
| 363 | help | 364 | help |
| 364 | Say Y here if your ARMv6 processor supports the 'K' extension. | 365 | Say Y here if your ARMv6 processor supports the 'K' extension. |
| 365 | This enables the kernel to use some instructions not present | 366 | This enables the kernel to use some instructions not present |
diff --git a/arch/arm/plat-iop/time.c b/arch/arm/plat-iop/time.c index 100d57ad98ed..ba3d21d8fba3 100644 --- a/arch/arm/plat-iop/time.c +++ b/arch/arm/plat-iop/time.c | |||
| @@ -78,6 +78,13 @@ static struct irqaction iop_timer_irq = { | |||
| 78 | .flags = IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL, | 78 | .flags = IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL, |
| 79 | }; | 79 | }; |
| 80 | 80 | ||
| 81 | static unsigned long iop_tick_rate; | ||
| 82 | unsigned long get_iop_tick_rate(void) | ||
| 83 | { | ||
| 84 | return iop_tick_rate; | ||
| 85 | } | ||
| 86 | EXPORT_SYMBOL(get_iop_tick_rate); | ||
| 87 | |||
| 81 | void __init iop_init_time(unsigned long tick_rate) | 88 | void __init iop_init_time(unsigned long tick_rate) |
| 82 | { | 89 | { |
| 83 | u32 timer_ctl; | 90 | u32 timer_ctl; |
| @@ -85,6 +92,7 @@ void __init iop_init_time(unsigned long tick_rate) | |||
| 85 | ticks_per_jiffy = (tick_rate + HZ/2) / HZ; | 92 | ticks_per_jiffy = (tick_rate + HZ/2) / HZ; |
| 86 | ticks_per_usec = tick_rate / 1000000; | 93 | ticks_per_usec = tick_rate / 1000000; |
| 87 | next_jiffy_time = 0xffffffff; | 94 | next_jiffy_time = 0xffffffff; |
| 95 | iop_tick_rate = tick_rate; | ||
| 88 | 96 | ||
| 89 | timer_ctl = IOP_TMR_EN | IOP_TMR_PRIVILEGED | | 97 | timer_ctl = IOP_TMR_EN | IOP_TMR_PRIVILEGED | |
| 90 | IOP_TMR_RELOAD | IOP_TMR_RATIO_1_1; | 98 | IOP_TMR_RELOAD | IOP_TMR_RATIO_1_1; |
diff --git a/arch/arm/plat-mxc/Kconfig b/arch/arm/plat-mxc/Kconfig new file mode 100644 index 000000000000..03a65c0dfb60 --- /dev/null +++ b/arch/arm/plat-mxc/Kconfig | |||
| @@ -0,0 +1,20 @@ | |||
| 1 | if ARCH_MXC | ||
| 2 | |||
| 3 | menu "Freescale MXC Implementations" | ||
| 4 | |||
| 5 | choice | ||
| 6 | prompt "MXC/iMX System Type" | ||
| 7 | default 0 | ||
| 8 | |||
| 9 | config ARCH_MX3 | ||
| 10 | bool "MX3-based" | ||
| 11 | help | ||
| 12 | This enables support for systems based on the Freescale i.MX3 family | ||
| 13 | |||
| 14 | endchoice | ||
| 15 | |||
| 16 | source "arch/arm/mach-mx3/Kconfig" | ||
| 17 | |||
| 18 | endmenu | ||
| 19 | |||
| 20 | endif | ||
diff --git a/arch/arm/plat-mxc/Makefile b/arch/arm/plat-mxc/Makefile new file mode 100644 index 000000000000..66ad9c2b6d64 --- /dev/null +++ b/arch/arm/plat-mxc/Makefile | |||
| @@ -0,0 +1,10 @@ | |||
| 1 | # | ||
| 2 | # Makefile for the linux kernel. | ||
| 3 | # | ||
| 4 | |||
| 5 | # Common support | ||
| 6 | obj-y := irq.o | ||
| 7 | |||
| 8 | obj-m := | ||
| 9 | obj-n := | ||
| 10 | obj- := | ||
diff --git a/arch/arm/plat-mxc/irq.c b/arch/arm/plat-mxc/irq.c new file mode 100644 index 000000000000..87d253bc3d3c --- /dev/null +++ b/arch/arm/plat-mxc/irq.c | |||
| @@ -0,0 +1,83 @@ | |||
| 1 | /* | ||
| 2 | * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved. | ||
| 3 | */ | ||
| 4 | |||
| 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/module.h> | ||
| 12 | #include <linux/moduleparam.h> | ||
| 13 | #include <linux/init.h> | ||
| 14 | #include <linux/device.h> | ||
| 15 | #include <linux/errno.h> | ||
| 16 | #include <asm/hardware.h> | ||
| 17 | #include <asm/io.h> | ||
| 18 | #include <asm/irq.h> | ||
| 19 | #include <asm/mach/irq.h> | ||
| 20 | #include <asm/arch/common.h> | ||
| 21 | |||
| 22 | /*! | ||
| 23 | * Disable interrupt number "irq" in the AVIC | ||
| 24 | * | ||
| 25 | * @param irq interrupt source number | ||
| 26 | */ | ||
| 27 | static void mxc_mask_irq(unsigned int irq) | ||
| 28 | { | ||
| 29 | __raw_writel(irq, AVIC_INTDISNUM); | ||
| 30 | } | ||
| 31 | |||
| 32 | /*! | ||
| 33 | * Enable interrupt number "irq" in the AVIC | ||
| 34 | * | ||
| 35 | * @param irq interrupt source number | ||
| 36 | */ | ||
| 37 | static void mxc_unmask_irq(unsigned int irq) | ||
| 38 | { | ||
| 39 | __raw_writel(irq, AVIC_INTENNUM); | ||
| 40 | } | ||
| 41 | |||
| 42 | static struct irq_chip mxc_avic_chip = { | ||
| 43 | .mask_ack = mxc_mask_irq, | ||
| 44 | .mask = mxc_mask_irq, | ||
| 45 | .unmask = mxc_unmask_irq, | ||
| 46 | }; | ||
| 47 | |||
| 48 | /*! | ||
| 49 | * This function initializes the AVIC hardware and disables all the | ||
| 50 | * interrupts. It registers the interrupt enable and disable functions | ||
| 51 | * to the kernel for each interrupt source. | ||
| 52 | */ | ||
| 53 | void __init mxc_init_irq(void) | ||
| 54 | { | ||
| 55 | int i; | ||
| 56 | u32 reg; | ||
| 57 | |||
| 58 | /* put the AVIC into the reset value with | ||
| 59 | * all interrupts disabled | ||
| 60 | */ | ||
| 61 | __raw_writel(0, AVIC_INTCNTL); | ||
| 62 | __raw_writel(0x1f, AVIC_NIMASK); | ||
| 63 | |||
| 64 | /* disable all interrupts */ | ||
| 65 | __raw_writel(0, AVIC_INTENABLEH); | ||
| 66 | __raw_writel(0, AVIC_INTENABLEL); | ||
| 67 | |||
| 68 | /* all IRQ no FIQ */ | ||
| 69 | __raw_writel(0, AVIC_INTTYPEH); | ||
| 70 | __raw_writel(0, AVIC_INTTYPEL); | ||
| 71 | for (i = 0; i < MXC_MAX_INT_LINES; i++) { | ||
| 72 | set_irq_chip(i, &mxc_avic_chip); | ||
| 73 | set_irq_handler(i, handle_level_irq); | ||
| 74 | set_irq_flags(i, IRQF_VALID); | ||
| 75 | } | ||
| 76 | |||
| 77 | /* Set WDOG2's interrupt the highest priority level (bit 28-31) */ | ||
| 78 | reg = __raw_readl(AVIC_NIPRIORITY6); | ||
| 79 | reg |= (0xF << 28); | ||
| 80 | __raw_writel(reg, AVIC_NIPRIORITY6); | ||
| 81 | |||
| 82 | printk(KERN_INFO "MXC IRQ initialized\n"); | ||
| 83 | } | ||
diff --git a/arch/arm/plat-s3c/Kconfig b/arch/arm/plat-s3c/Kconfig new file mode 100644 index 000000000000..31656c33e05e --- /dev/null +++ b/arch/arm/plat-s3c/Kconfig | |||
| @@ -0,0 +1,104 @@ | |||
| 1 | # arch/arm/plat-s3c/Kconfig | ||
| 2 | # | ||
| 3 | # Copyright 2007 Simtec Electronics | ||
| 4 | # | ||
| 5 | # Licensed under GPLv2 | ||
| 6 | |||
| 7 | config PLAT_S3C | ||
| 8 | bool | ||
| 9 | depends on ARCH_S3C2410 | ||
| 10 | default y if ARCH_S3C2410 | ||
| 11 | select NO_IOPORT | ||
| 12 | help | ||
| 13 | Base platform code for any Samsung S3C device | ||
| 14 | |||
| 15 | # low-level serial option nodes | ||
| 16 | |||
| 17 | config CPU_LLSERIAL_S3C2410_ONLY | ||
| 18 | bool | ||
| 19 | depends on ARCH_S3C2410 | ||
| 20 | default y if CPU_LLSERIAL_S3C2410 && !CPU_LLSERIAL_S3C2440 | ||
| 21 | |||
| 22 | config CPU_LLSERIAL_S3C2440_ONLY | ||
| 23 | bool | ||
| 24 | depends on ARCH_S3C2410 | ||
| 25 | default y if CPU_LLSERIAL_S3C2440 && !CPU_LLSERIAL_S3C2410 | ||
| 26 | |||
| 27 | config CPU_LLSERIAL_S3C2410 | ||
| 28 | bool | ||
| 29 | depends on ARCH_S3C2410 | ||
| 30 | help | ||
| 31 | Selected if there is an S3C2410 (or register compatible) serial | ||
| 32 | low-level implementation needed | ||
| 33 | |||
| 34 | config CPU_LLSERIAL_S3C2440 | ||
| 35 | bool | ||
| 36 | depends on ARCH_S3C2410 | ||
| 37 | help | ||
| 38 | Selected if there is an S3C2440 (or register compatible) serial | ||
| 39 | low-level implementation needed | ||
| 40 | |||
| 41 | # boot configurations | ||
| 42 | |||
| 43 | comment "Boot options" | ||
| 44 | |||
| 45 | config S3C_BOOT_WATCHDOG | ||
| 46 | bool "S3C Initialisation watchdog" | ||
| 47 | depends on PLAT_S3C && S3C2410_WATCHDOG | ||
| 48 | help | ||
| 49 | Say y to enable the watchdog during the kernel decompression | ||
| 50 | stage. If the kernel fails to uncompress, then the watchdog | ||
| 51 | will trigger a reset and the system should restart. | ||
| 52 | |||
| 53 | config S3C_BOOT_ERROR_RESET | ||
| 54 | bool "S3C Reboot on decompression error" | ||
| 55 | depends on PLAT_S3C | ||
| 56 | help | ||
| 57 | Say y here to use the watchdog to reset the system if the | ||
| 58 | kernel decompressor detects an error during decompression. | ||
| 59 | |||
| 60 | comment "Power management" | ||
| 61 | |||
| 62 | config S3C2410_PM_DEBUG | ||
| 63 | bool "S3C2410 PM Suspend debug" | ||
| 64 | depends on PLAT_S3C && PM | ||
| 65 | help | ||
| 66 | Say Y here if you want verbose debugging from the PM Suspend and | ||
| 67 | Resume code. See <file:Documentation/arm/Samsung-S3C24XX/Suspend.txt> | ||
| 68 | for more information. | ||
| 69 | |||
| 70 | config S3C2410_PM_CHECK | ||
| 71 | bool "S3C2410 PM Suspend Memory CRC" | ||
| 72 | depends on PLAT_S3C && PM && CRC32 | ||
| 73 | help | ||
| 74 | Enable the PM code's memory area checksum over sleep. This option | ||
| 75 | will generate CRCs of all blocks of memory, and store them before | ||
| 76 | going to sleep. The blocks are then checked on resume for any | ||
| 77 | errors. | ||
| 78 | |||
| 79 | Note, this can take several seconds depending on memory size | ||
| 80 | and CPU speed. | ||
| 81 | |||
| 82 | See <file:Documentation/arm/Samsung-S3C24XX/Suspend.txt> | ||
| 83 | |||
| 84 | config S3C2410_PM_CHECK_CHUNKSIZE | ||
| 85 | int "S3C2410 PM Suspend CRC Chunksize (KiB)" | ||
| 86 | depends on PLAT_S3C && PM && S3C2410_PM_CHECK | ||
| 87 | default 64 | ||
| 88 | help | ||
| 89 | Set the chunksize in Kilobytes of the CRC for checking memory | ||
| 90 | corruption over suspend and resume. A smaller value will mean that | ||
| 91 | the CRC data block will take more memory, but wil identify any | ||
| 92 | faults with better precision. | ||
| 93 | |||
| 94 | See <file:Documentation/arm/Samsung-S3C24XX/Suspend.txt> | ||
| 95 | |||
| 96 | config S3C_LOWLEVEL_UART_PORT | ||
| 97 | int "S3C UART to use for low-level messages" | ||
| 98 | depends on PLAT_S3C | ||
| 99 | default 0 | ||
| 100 | help | ||
| 101 | Choice of which UART port to use for the low-level messages, | ||
| 102 | such as the `Uncompressing...` at start time. The value of | ||
| 103 | this configuration should be between zero and two. The port | ||
| 104 | must have been initialised by the boot-loader before use. | ||
diff --git a/arch/arm/plat-s3c24xx/Kconfig b/arch/arm/plat-s3c24xx/Kconfig index b972f36d547c..b66fb3c4e228 100644 --- a/arch/arm/plat-s3c24xx/Kconfig +++ b/arch/arm/plat-s3c24xx/Kconfig | |||
| @@ -10,7 +10,7 @@ config PLAT_S3C24XX | |||
| 10 | default y if ARCH_S3C2410 | 10 | default y if ARCH_S3C2410 |
| 11 | select NO_IOPORT | 11 | select NO_IOPORT |
| 12 | help | 12 | help |
| 13 | Base platform code for any Samsung S3C device | 13 | Base platform code for any Samsung S3C24XX device |
| 14 | 14 | ||
| 15 | if PLAT_S3C24XX | 15 | if PLAT_S3C24XX |
| 16 | 16 | ||
| @@ -26,64 +26,6 @@ config PM_SIMTEC | |||
| 26 | Common power management code for systems that are | 26 | Common power management code for systems that are |
| 27 | compatible with the Simtec style of power management | 27 | compatible with the Simtec style of power management |
| 28 | 28 | ||
| 29 | config S3C2410_BOOT_WATCHDOG | ||
| 30 | bool "S3C2410 Initialisation watchdog" | ||
| 31 | depends on ARCH_S3C2410 && S3C2410_WATCHDOG | ||
| 32 | help | ||
| 33 | Say y to enable the watchdog during the kernel decompression | ||
| 34 | stage. If the kernel fails to uncompress, then the watchdog | ||
| 35 | will trigger a reset and the system should restart. | ||
| 36 | |||
| 37 | config S3C2410_BOOT_ERROR_RESET | ||
| 38 | bool "S3C2410 Reboot on decompression error" | ||
| 39 | depends on ARCH_S3C2410 | ||
| 40 | help | ||
| 41 | Say y here to use the watchdog to reset the system if the | ||
| 42 | kernel decompressor detects an error during decompression. | ||
| 43 | |||
| 44 | config S3C2410_PM_DEBUG | ||
| 45 | bool "S3C2410 PM Suspend debug" | ||
| 46 | depends on ARCH_S3C2410 && PM | ||
| 47 | help | ||
| 48 | Say Y here if you want verbose debugging from the PM Suspend and | ||
| 49 | Resume code. See <file:Documentation/arm/Samsung-S3C24XX/Suspend.txt> | ||
| 50 | for more information. | ||
| 51 | |||
| 52 | config S3C2410_PM_CHECK | ||
| 53 | bool "S3C2410 PM Suspend Memory CRC" | ||
| 54 | depends on ARCH_S3C2410 && PM && CRC32 | ||
| 55 | help | ||
| 56 | Enable the PM code's memory area checksum over sleep. This option | ||
| 57 | will generate CRCs of all blocks of memory, and store them before | ||
| 58 | going to sleep. The blocks are then checked on resume for any | ||
| 59 | errors. | ||
| 60 | |||
| 61 | Note, this can take several seconds depending on memory size | ||
| 62 | and CPU speed. | ||
| 63 | |||
| 64 | See <file:Documentation/arm/Samsung-S3C24XX/Suspend.txt> | ||
| 65 | |||
| 66 | config S3C2410_PM_CHECK_CHUNKSIZE | ||
| 67 | int "S3C2410 PM Suspend CRC Chunksize (KiB)" | ||
| 68 | depends on ARCH_S3C2410 && PM && S3C2410_PM_CHECK | ||
| 69 | default 64 | ||
| 70 | help | ||
| 71 | Set the chunksize in Kilobytes of the CRC for checking memory | ||
| 72 | corruption over suspend and resume. A smaller value will mean that | ||
| 73 | the CRC data block will take more memory, but wil identify any | ||
| 74 | faults with better precision. | ||
| 75 | |||
| 76 | See <file:Documentation/arm/Samsung-S3C24XX/Suspend.txt> | ||
| 77 | |||
| 78 | config S3C2410_LOWLEVEL_UART_PORT | ||
| 79 | int "S3C2410 UART to use for low-level messages" | ||
| 80 | default 0 | ||
| 81 | help | ||
| 82 | Choice of which UART port to use for the low-level messages, | ||
| 83 | such as the `Uncompressing...` at start time. The value of | ||
| 84 | this configuration should be between zero and two. The port | ||
| 85 | must have been initialised by the boot-loader before use. | ||
| 86 | |||
| 87 | config S3C2410_DMA | 29 | config S3C2410_DMA |
| 88 | bool "S3C2410 DMA support" | 30 | bool "S3C2410 DMA support" |
| 89 | depends on ARCH_S3C2410 | 31 | depends on ARCH_S3C2410 |
diff --git a/arch/arm/plat-s3c24xx/common-smdk.c b/arch/arm/plat-s3c24xx/common-smdk.c index 7ed19b23ce56..398c7ac25296 100644 --- a/arch/arm/plat-s3c24xx/common-smdk.c +++ b/arch/arm/plat-s3c24xx/common-smdk.c | |||
| @@ -38,7 +38,7 @@ | |||
| 38 | #include <asm/arch/regs-gpio.h> | 38 | #include <asm/arch/regs-gpio.h> |
| 39 | #include <asm/arch/leds-gpio.h> | 39 | #include <asm/arch/leds-gpio.h> |
| 40 | 40 | ||
| 41 | #include <asm/arch/nand.h> | 41 | #include <asm/plat-s3c/nand.h> |
| 42 | 42 | ||
| 43 | #include <asm/plat-s3c24xx/common-smdk.h> | 43 | #include <asm/plat-s3c24xx/common-smdk.h> |
| 44 | #include <asm/plat-s3c24xx/devs.h> | 44 | #include <asm/plat-s3c24xx/devs.h> |
diff --git a/arch/arm/plat-s3c24xx/cpu.c b/arch/arm/plat-s3c24xx/cpu.c index 8ce4904d3131..f513ab083b8f 100644 --- a/arch/arm/plat-s3c24xx/cpu.c +++ b/arch/arm/plat-s3c24xx/cpu.c | |||
| @@ -38,7 +38,7 @@ | |||
| 38 | #include <asm/mach/map.h> | 38 | #include <asm/mach/map.h> |
| 39 | 39 | ||
| 40 | #include <asm/arch/regs-gpio.h> | 40 | #include <asm/arch/regs-gpio.h> |
| 41 | #include <asm/arch/regs-serial.h> | 41 | #include <asm/plat-s3c/regs-serial.h> |
| 42 | 42 | ||
| 43 | #include <asm/plat-s3c24xx/cpu.h> | 43 | #include <asm/plat-s3c24xx/cpu.h> |
| 44 | #include <asm/plat-s3c24xx/devs.h> | 44 | #include <asm/plat-s3c24xx/devs.h> |
diff --git a/arch/arm/plat-s3c24xx/devs.c b/arch/arm/plat-s3c24xx/devs.c index 5875da0ae0eb..e546e933b3f7 100644 --- a/arch/arm/plat-s3c24xx/devs.c +++ b/arch/arm/plat-s3c24xx/devs.c | |||
| @@ -28,12 +28,12 @@ | |||
| 28 | #include <asm/io.h> | 28 | #include <asm/io.h> |
| 29 | #include <asm/irq.h> | 29 | #include <asm/irq.h> |
| 30 | 30 | ||
| 31 | #include <asm/arch/regs-serial.h> | 31 | #include <asm/plat-s3c/regs-serial.h> |
| 32 | #include <asm/arch/udc.h> | 32 | #include <asm/plat-s3c24xx/udc.h> |
| 33 | 33 | ||
| 34 | #include <asm/plat-s3c24xx/devs.h> | 34 | #include <asm/plat-s3c24xx/devs.h> |
| 35 | #include <asm/plat-s3c24xx/cpu.h> | 35 | #include <asm/plat-s3c24xx/cpu.h> |
| 36 | #include <asm/arch/regs-spi.h> | 36 | #include <asm/plat-s3c24xx/regs-spi.h> |
| 37 | 37 | ||
| 38 | /* Serial port registrations */ | 38 | /* Serial port registrations */ |
| 39 | 39 | ||
diff --git a/arch/arm/plat-s3c24xx/pm.c b/arch/arm/plat-s3c24xx/pm.c index 5692eccdf4d1..eab1850616d8 100644 --- a/arch/arm/plat-s3c24xx/pm.c +++ b/arch/arm/plat-s3c24xx/pm.c | |||
| @@ -40,7 +40,7 @@ | |||
| 40 | #include <asm/hardware.h> | 40 | #include <asm/hardware.h> |
| 41 | #include <asm/io.h> | 41 | #include <asm/io.h> |
| 42 | 42 | ||
| 43 | #include <asm/arch/regs-serial.h> | 43 | #include <asm/plat-s3c/regs-serial.h> |
| 44 | #include <asm/arch/regs-clock.h> | 44 | #include <asm/arch/regs-clock.h> |
| 45 | #include <asm/arch/regs-gpio.h> | 45 | #include <asm/arch/regs-gpio.h> |
| 46 | #include <asm/arch/regs-mem.h> | 46 | #include <asm/arch/regs-mem.h> |
diff --git a/arch/arm/plat-s3c24xx/s3c244x.c b/arch/arm/plat-s3c24xx/s3c244x.c index 767f2e9a3a55..3444b13afac5 100644 --- a/arch/arm/plat-s3c24xx/s3c244x.c +++ b/arch/arm/plat-s3c24xx/s3c244x.c | |||
| @@ -30,7 +30,7 @@ | |||
| 30 | #include <asm/irq.h> | 30 | #include <asm/irq.h> |
| 31 | 31 | ||
| 32 | #include <asm/arch/regs-clock.h> | 32 | #include <asm/arch/regs-clock.h> |
| 33 | #include <asm/arch/regs-serial.h> | 33 | #include <asm/plat-s3c/regs-serial.h> |
| 34 | #include <asm/arch/regs-gpio.h> | 34 | #include <asm/arch/regs-gpio.h> |
| 35 | #include <asm/arch/regs-gpioj.h> | 35 | #include <asm/arch/regs-gpioj.h> |
| 36 | #include <asm/arch/regs-dsc.h> | 36 | #include <asm/arch/regs-dsc.h> |
| @@ -47,7 +47,6 @@ static struct map_desc s3c244x_iodesc[] __initdata = { | |||
| 47 | IODESC_ENT(CLKPWR), | 47 | IODESC_ENT(CLKPWR), |
| 48 | IODESC_ENT(TIMER), | 48 | IODESC_ENT(TIMER), |
| 49 | IODESC_ENT(WATCHDOG), | 49 | IODESC_ENT(WATCHDOG), |
| 50 | IODESC_ENT(LCD), | ||
| 51 | }; | 50 | }; |
| 52 | 51 | ||
| 53 | /* uart initialisation */ | 52 | /* uart initialisation */ |
diff --git a/arch/arm/plat-s3c24xx/sleep.S b/arch/arm/plat-s3c24xx/sleep.S index 7b7ae790b00d..d47113bbc34c 100644 --- a/arch/arm/plat-s3c24xx/sleep.S +++ b/arch/arm/plat-s3c24xx/sleep.S | |||
| @@ -32,7 +32,7 @@ | |||
| 32 | #include <asm/arch/regs-gpio.h> | 32 | #include <asm/arch/regs-gpio.h> |
| 33 | #include <asm/arch/regs-clock.h> | 33 | #include <asm/arch/regs-clock.h> |
| 34 | #include <asm/arch/regs-mem.h> | 34 | #include <asm/arch/regs-mem.h> |
| 35 | #include <asm/arch/regs-serial.h> | 35 | #include <asm/plat-s3c/regs-serial.h> |
| 36 | 36 | ||
| 37 | /* CONFIG_DEBUG_RESUME is dangerous if your bootloader does not | 37 | /* CONFIG_DEBUG_RESUME is dangerous if your bootloader does not |
| 38 | * reset the UART configuration, only enable if you really need this! | 38 | * reset the UART configuration, only enable if you really need this! |
diff --git a/arch/arm/plat-s3c24xx/time.c b/arch/arm/plat-s3c24xx/time.c index b7667375bcec..2ec1daaa0e53 100644 --- a/arch/arm/plat-s3c24xx/time.c +++ b/arch/arm/plat-s3c24xx/time.c | |||
| @@ -33,7 +33,7 @@ | |||
| 33 | #include <asm/io.h> | 33 | #include <asm/io.h> |
| 34 | #include <asm/irq.h> | 34 | #include <asm/irq.h> |
| 35 | #include <asm/arch/map.h> | 35 | #include <asm/arch/map.h> |
| 36 | #include <asm/arch/regs-timer.h> | 36 | #include <asm/plat-s3c/regs-timer.h> |
| 37 | #include <asm/arch/regs-irq.h> | 37 | #include <asm/arch/regs-irq.h> |
| 38 | #include <asm/mach/time.h> | 38 | #include <asm/mach/time.h> |
| 39 | 39 | ||
diff --git a/drivers/char/watchdog/Kconfig b/drivers/char/watchdog/Kconfig index 2f48ba329961..a4d81cda479e 100644 --- a/drivers/char/watchdog/Kconfig +++ b/drivers/char/watchdog/Kconfig | |||
| @@ -187,6 +187,22 @@ config PNX4008_WATCHDOG | |||
| 187 | 187 | ||
| 188 | Say N if you are unsure. | 188 | Say N if you are unsure. |
| 189 | 189 | ||
| 190 | config IOP_WATCHDOG | ||
| 191 | tristate "IOP Watchdog" | ||
| 192 | depends on WATCHDOG && PLAT_IOP | ||
| 193 | select WATCHDOG_NOWAYOUT if (ARCH_IOP32X || ARCH_IOP33X) | ||
| 194 | help | ||
| 195 | Say Y here if to include support for the watchdog timer | ||
| 196 | in the Intel IOP3XX & IOP13XX I/O Processors. This driver can | ||
| 197 | be built as a module by choosing M. The module will | ||
| 198 | be called iop_wdt. | ||
| 199 | |||
| 200 | Note: The IOP13XX watchdog does an Internal Bus Reset which will | ||
| 201 | affect both cores and the peripherals of the IOP. The ATU-X | ||
| 202 | and/or ATUe configuration registers will remain intact, but if | ||
| 203 | operating as an Root Complex and/or Central Resource, the PCI-X | ||
| 204 | and/or PCIe busses will also be reset. THIS IS A VERY BIG HAMMER. | ||
| 205 | |||
| 190 | # AVR32 Architecture | 206 | # AVR32 Architecture |
| 191 | 207 | ||
| 192 | config AT32AP700X_WDT | 208 | config AT32AP700X_WDT |
diff --git a/drivers/char/watchdog/Makefile b/drivers/char/watchdog/Makefile index 3907ec04a4e5..bdb9d5e3bb41 100644 --- a/drivers/char/watchdog/Makefile +++ b/drivers/char/watchdog/Makefile | |||
| @@ -35,6 +35,7 @@ obj-$(CONFIG_SA1100_WATCHDOG) += sa1100_wdt.o | |||
| 35 | obj-$(CONFIG_MPCORE_WATCHDOG) += mpcore_wdt.o | 35 | obj-$(CONFIG_MPCORE_WATCHDOG) += mpcore_wdt.o |
| 36 | obj-$(CONFIG_EP93XX_WATCHDOG) += ep93xx_wdt.o | 36 | obj-$(CONFIG_EP93XX_WATCHDOG) += ep93xx_wdt.o |
| 37 | obj-$(CONFIG_PNX4008_WATCHDOG) += pnx4008_wdt.o | 37 | obj-$(CONFIG_PNX4008_WATCHDOG) += pnx4008_wdt.o |
| 38 | obj-$(CONFIG_IOP_WATCHDOG) += iop_wdt.o | ||
| 38 | 39 | ||
| 39 | # AVR32 Architecture | 40 | # AVR32 Architecture |
| 40 | obj-$(CONFIG_AT32AP700X_WDT) += at32ap700x_wdt.o | 41 | obj-$(CONFIG_AT32AP700X_WDT) += at32ap700x_wdt.o |
diff --git a/drivers/char/watchdog/iop_wdt.c b/drivers/char/watchdog/iop_wdt.c new file mode 100644 index 000000000000..bbbd91af754d --- /dev/null +++ b/drivers/char/watchdog/iop_wdt.c | |||
| @@ -0,0 +1,262 @@ | |||
| 1 | /* | ||
| 2 | * drivers/char/watchdog/iop_wdt.c | ||
| 3 | * | ||
| 4 | * WDT driver for Intel I/O Processors | ||
| 5 | * Copyright (C) 2005, Intel Corporation. | ||
| 6 | * | ||
| 7 | * Based on ixp4xx driver, Copyright 2004 (c) MontaVista, Software, Inc. | ||
| 8 | * | ||
| 9 | * This program is free software; you can redistribute it and/or modify it | ||
| 10 | * under the terms and conditions of the GNU General Public License, | ||
| 11 | * version 2, as published by the Free Software Foundation. | ||
| 12 | * | ||
| 13 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
| 14 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
| 15 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
| 16 | * more details. | ||
| 17 | * | ||
| 18 | * You should have received a copy of the GNU General Public License along with | ||
| 19 | * this program; if not, write to the Free Software Foundation, Inc., 59 Temple | ||
| 20 | * Place - Suite 330, Boston, MA 02111-1307 USA. | ||
| 21 | * | ||
| 22 | * Curt E Bruns <curt.e.bruns@intel.com> | ||
| 23 | * Peter Milne <peter.milne@d-tacq.com> | ||
| 24 | * Dan Williams <dan.j.williams@intel.com> | ||
| 25 | */ | ||
| 26 | |||
| 27 | #include <linux/module.h> | ||
| 28 | #include <linux/kernel.h> | ||
| 29 | #include <linux/fs.h> | ||
| 30 | #include <linux/init.h> | ||
| 31 | #include <linux/device.h> | ||
| 32 | #include <linux/miscdevice.h> | ||
| 33 | #include <linux/watchdog.h> | ||
| 34 | #include <linux/uaccess.h> | ||
| 35 | #include <asm/hardware.h> | ||
| 36 | |||
| 37 | static int nowayout = WATCHDOG_NOWAYOUT; | ||
| 38 | static unsigned long wdt_status; | ||
| 39 | static unsigned long boot_status; | ||
| 40 | |||
| 41 | #define WDT_IN_USE 0 | ||
| 42 | #define WDT_OK_TO_CLOSE 1 | ||
| 43 | #define WDT_ENABLED 2 | ||
| 44 | |||
| 45 | static unsigned long iop_watchdog_timeout(void) | ||
| 46 | { | ||
| 47 | return (0xffffffffUL / get_iop_tick_rate()); | ||
| 48 | } | ||
| 49 | |||
| 50 | /** | ||
| 51 | * wdt_supports_disable - determine if we are accessing a iop13xx watchdog | ||
| 52 | * or iop3xx by whether it has a disable command | ||
| 53 | */ | ||
| 54 | static int wdt_supports_disable(void) | ||
| 55 | { | ||
| 56 | int can_disable; | ||
| 57 | |||
| 58 | if (IOP_WDTCR_EN_ARM != IOP_WDTCR_DIS_ARM) | ||
| 59 | can_disable = 1; | ||
| 60 | else | ||
| 61 | can_disable = 0; | ||
| 62 | |||
| 63 | return can_disable; | ||
| 64 | } | ||
| 65 | |||
| 66 | static void wdt_enable(void) | ||
| 67 | { | ||
| 68 | /* Arm and enable the Timer to starting counting down from 0xFFFF.FFFF | ||
| 69 | * Takes approx. 10.7s to timeout | ||
| 70 | */ | ||
| 71 | write_wdtcr(IOP_WDTCR_EN_ARM); | ||
| 72 | write_wdtcr(IOP_WDTCR_EN); | ||
| 73 | } | ||
| 74 | |||
| 75 | /* returns 0 if the timer was successfully disabled */ | ||
| 76 | static int wdt_disable(void) | ||
| 77 | { | ||
| 78 | /* Stop Counting */ | ||
| 79 | if (wdt_supports_disable()) { | ||
| 80 | write_wdtcr(IOP_WDTCR_DIS_ARM); | ||
| 81 | write_wdtcr(IOP_WDTCR_DIS); | ||
| 82 | clear_bit(WDT_ENABLED, &wdt_status); | ||
| 83 | printk(KERN_INFO "WATCHDOG: Disabled\n"); | ||
| 84 | return 0; | ||
| 85 | } else | ||
| 86 | return 1; | ||
| 87 | } | ||
| 88 | |||
| 89 | static int iop_wdt_open(struct inode *inode, struct file *file) | ||
| 90 | { | ||
| 91 | if (test_and_set_bit(WDT_IN_USE, &wdt_status)) | ||
| 92 | return -EBUSY; | ||
| 93 | |||
| 94 | clear_bit(WDT_OK_TO_CLOSE, &wdt_status); | ||
| 95 | |||
| 96 | wdt_enable(); | ||
| 97 | |||
| 98 | set_bit(WDT_ENABLED, &wdt_status); | ||
| 99 | |||
| 100 | return nonseekable_open(inode, file); | ||
| 101 | } | ||
| 102 | |||
| 103 | static ssize_t | ||
| 104 | iop_wdt_write(struct file *file, const char *data, size_t len, | ||
| 105 | loff_t *ppos) | ||
| 106 | { | ||
| 107 | if (len) { | ||
| 108 | if (!nowayout) { | ||
| 109 | size_t i; | ||
| 110 | |||
| 111 | clear_bit(WDT_OK_TO_CLOSE, &wdt_status); | ||
| 112 | |||
| 113 | for (i = 0; i != len; i++) { | ||
| 114 | char c; | ||
| 115 | |||
| 116 | if (get_user(c, data + i)) | ||
| 117 | return -EFAULT; | ||
| 118 | if (c == 'V') | ||
| 119 | set_bit(WDT_OK_TO_CLOSE, &wdt_status); | ||
| 120 | } | ||
| 121 | } | ||
| 122 | wdt_enable(); | ||
| 123 | } | ||
| 124 | |||
| 125 | return len; | ||
| 126 | } | ||
| 127 | |||
| 128 | static struct watchdog_info ident = { | ||
| 129 | .options = WDIOF_CARDRESET | WDIOF_MAGICCLOSE | WDIOF_KEEPALIVEPING, | ||
| 130 | .identity = "iop watchdog", | ||
| 131 | }; | ||
| 132 | |||
| 133 | static int | ||
| 134 | iop_wdt_ioctl(struct inode *inode, struct file *file, unsigned int cmd, | ||
| 135 | unsigned long arg) | ||
| 136 | { | ||
| 137 | int options; | ||
| 138 | int ret = -ENOTTY; | ||
| 139 | |||
| 140 | switch (cmd) { | ||
| 141 | case WDIOC_GETSUPPORT: | ||
| 142 | if (copy_to_user | ||
| 143 | ((struct watchdog_info *)arg, &ident, sizeof ident)) | ||
| 144 | ret = -EFAULT; | ||
| 145 | else | ||
| 146 | ret = 0; | ||
| 147 | break; | ||
| 148 | |||
| 149 | case WDIOC_GETSTATUS: | ||
| 150 | ret = put_user(0, (int *)arg); | ||
| 151 | break; | ||
| 152 | |||
| 153 | case WDIOC_GETBOOTSTATUS: | ||
| 154 | ret = put_user(boot_status, (int *)arg); | ||
| 155 | break; | ||
| 156 | |||
| 157 | case WDIOC_GETTIMEOUT: | ||
| 158 | ret = put_user(iop_watchdog_timeout(), (int *)arg); | ||
| 159 | break; | ||
| 160 | |||
| 161 | case WDIOC_KEEPALIVE: | ||
| 162 | wdt_enable(); | ||
| 163 | ret = 0; | ||
| 164 | break; | ||
| 165 | |||
| 166 | case WDIOC_SETOPTIONS: | ||
| 167 | if (get_user(options, (int *)arg)) | ||
| 168 | return -EFAULT; | ||
| 169 | |||
| 170 | if (options & WDIOS_DISABLECARD) { | ||
| 171 | if (!nowayout) { | ||
| 172 | if (wdt_disable() == 0) { | ||
| 173 | set_bit(WDT_OK_TO_CLOSE, &wdt_status); | ||
| 174 | ret = 0; | ||
| 175 | } else | ||
| 176 | ret = -ENXIO; | ||
| 177 | } else | ||
| 178 | ret = 0; | ||
| 179 | } | ||
| 180 | |||
| 181 | if (options & WDIOS_ENABLECARD) { | ||
| 182 | wdt_enable(); | ||
| 183 | ret = 0; | ||
| 184 | } | ||
| 185 | break; | ||
| 186 | } | ||
| 187 | |||
| 188 | return ret; | ||
| 189 | } | ||
| 190 | |||
| 191 | static int iop_wdt_release(struct inode *inode, struct file *file) | ||
| 192 | { | ||
| 193 | int state = 1; | ||
| 194 | if (test_bit(WDT_OK_TO_CLOSE, &wdt_status)) | ||
| 195 | if (test_bit(WDT_ENABLED, &wdt_status)) | ||
| 196 | state = wdt_disable(); | ||
| 197 | |||
| 198 | /* if the timer is not disbaled reload and notify that we are still | ||
| 199 | * going down | ||
| 200 | */ | ||
| 201 | if (state != 0) { | ||
| 202 | wdt_enable(); | ||
| 203 | printk(KERN_CRIT "WATCHDOG: Device closed unexpectedly - " | ||
| 204 | "reset in %lu seconds\n", iop_watchdog_timeout()); | ||
| 205 | } | ||
| 206 | |||
| 207 | clear_bit(WDT_IN_USE, &wdt_status); | ||
| 208 | clear_bit(WDT_OK_TO_CLOSE, &wdt_status); | ||
| 209 | |||
| 210 | return 0; | ||
| 211 | } | ||
| 212 | |||
| 213 | static const struct file_operations iop_wdt_fops = { | ||
| 214 | .owner = THIS_MODULE, | ||
| 215 | .llseek = no_llseek, | ||
| 216 | .write = iop_wdt_write, | ||
| 217 | .ioctl = iop_wdt_ioctl, | ||
| 218 | .open = iop_wdt_open, | ||
| 219 | .release = iop_wdt_release, | ||
| 220 | }; | ||
| 221 | |||
| 222 | static struct miscdevice iop_wdt_miscdev = { | ||
| 223 | .minor = WATCHDOG_MINOR, | ||
| 224 | .name = "watchdog", | ||
| 225 | .fops = &iop_wdt_fops, | ||
| 226 | }; | ||
| 227 | |||
| 228 | static int __init iop_wdt_init(void) | ||
| 229 | { | ||
| 230 | int ret; | ||
| 231 | |||
| 232 | ret = misc_register(&iop_wdt_miscdev); | ||
| 233 | if (ret == 0) | ||
| 234 | printk("iop watchdog timer: timeout %lu sec\n", | ||
| 235 | iop_watchdog_timeout()); | ||
| 236 | |||
| 237 | /* check if the reset was caused by the watchdog timer */ | ||
| 238 | boot_status = (read_rcsr() & IOP_RCSR_WDT) ? WDIOF_CARDRESET : 0; | ||
| 239 | |||
| 240 | /* Configure Watchdog Timeout to cause an Internal Bus (IB) Reset | ||
| 241 | * NOTE: An IB Reset will Reset both cores in the IOP342 | ||
| 242 | */ | ||
| 243 | write_wdtsr(IOP13XX_WDTCR_IB_RESET); | ||
| 244 | |||
| 245 | return ret; | ||
| 246 | } | ||
| 247 | |||
| 248 | static void __exit iop_wdt_exit(void) | ||
| 249 | { | ||
| 250 | misc_deregister(&iop_wdt_miscdev); | ||
| 251 | } | ||
| 252 | |||
| 253 | module_init(iop_wdt_init); | ||
| 254 | module_exit(iop_wdt_exit); | ||
| 255 | |||
| 256 | module_param(nowayout, int, 0); | ||
| 257 | MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started"); | ||
| 258 | |||
| 259 | MODULE_AUTHOR("Curt E Bruns <curt.e.bruns@intel.com>"); | ||
| 260 | MODULE_DESCRIPTION("iop watchdog timer driver"); | ||
| 261 | MODULE_LICENSE("GPL"); | ||
| 262 | MODULE_ALIAS_MISCDEV(WATCHDOG_MINOR); | ||
diff --git a/drivers/serial/imx.c b/drivers/serial/imx.c index e42faa4e4282..dc1967176fe2 100644 --- a/drivers/serial/imx.c +++ b/drivers/serial/imx.c | |||
| @@ -1114,8 +1114,8 @@ static int __init imx_serial_init(void) | |||
| 1114 | 1114 | ||
| 1115 | static void __exit imx_serial_exit(void) | 1115 | static void __exit imx_serial_exit(void) |
| 1116 | { | 1116 | { |
| 1117 | uart_unregister_driver(&imx_reg); | ||
| 1118 | platform_driver_unregister(&serial_imx_driver); | 1117 | platform_driver_unregister(&serial_imx_driver); |
| 1118 | uart_unregister_driver(&imx_reg); | ||
| 1119 | } | 1119 | } |
| 1120 | 1120 | ||
| 1121 | module_init(imx_serial_init); | 1121 | module_init(imx_serial_init); |
diff --git a/drivers/serial/s3c2410.c b/drivers/serial/s3c2410.c index 10bc0209cd66..3f26c4b2f322 100644 --- a/drivers/serial/s3c2410.c +++ b/drivers/serial/s3c2410.c | |||
| @@ -78,7 +78,7 @@ | |||
| 78 | 78 | ||
| 79 | #include <asm/hardware.h> | 79 | #include <asm/hardware.h> |
| 80 | 80 | ||
| 81 | #include <asm/arch/regs-serial.h> | 81 | #include <asm/plat-s3c/regs-serial.h> |
| 82 | #include <asm/arch/regs-gpio.h> | 82 | #include <asm/arch/regs-gpio.h> |
| 83 | 83 | ||
| 84 | /* structures */ | 84 | /* structures */ |
diff --git a/include/asm-arm/arch-at91/at91_mci.h b/include/asm-arm/arch-at91/at91_mci.h index 40a9876b661a..c2e11cc374ba 100644 --- a/include/asm-arm/arch-at91/at91_mci.h +++ b/include/asm-arm/arch-at91/at91_mci.h | |||
| @@ -26,6 +26,9 @@ | |||
| 26 | #define AT91_MCI_MR 0x04 /* Mode Register */ | 26 | #define AT91_MCI_MR 0x04 /* Mode Register */ |
| 27 | #define AT91_MCI_CLKDIV (0xff << 0) /* Clock Divider */ | 27 | #define AT91_MCI_CLKDIV (0xff << 0) /* Clock Divider */ |
| 28 | #define AT91_MCI_PWSDIV (7 << 8) /* Power Saving Divider */ | 28 | #define AT91_MCI_PWSDIV (7 << 8) /* Power Saving Divider */ |
| 29 | #define AT91_MCI_RDPROOF (1 << 11) /* Read Proof Enable [SAM926[03] only] */ | ||
| 30 | #define AT91_MCI_WRPROOF (1 << 12) /* Write Proof Enable [SAM926[03] only] */ | ||
| 31 | #define AT91_MCI_PDCFBYTE (1 << 13) /* PDC Force Byte Transfer [SAM926[03] only] */ | ||
| 29 | #define AT91_MCI_PDCPADV (1 << 14) /* PDC Padding Value */ | 32 | #define AT91_MCI_PDCPADV (1 << 14) /* PDC Padding Value */ |
| 30 | #define AT91_MCI_PDCMODE (1 << 15) /* PDC-orientated Mode */ | 33 | #define AT91_MCI_PDCMODE (1 << 15) /* PDC-orientated Mode */ |
| 31 | #define AT91_MCI_BLKLEN (0xfff << 18) /* Data Block Length */ | 34 | #define AT91_MCI_BLKLEN (0xfff << 18) /* Data Block Length */ |
diff --git a/include/asm-arm/arch-iop13xx/iop13xx.h b/include/asm-arm/arch-iop13xx/iop13xx.h index d4e4f828577c..52b7fab7ef60 100644 --- a/include/asm-arm/arch-iop13xx/iop13xx.h +++ b/include/asm-arm/arch-iop13xx/iop13xx.h | |||
| @@ -19,6 +19,39 @@ static inline int iop13xx_cpu_id(void) | |||
| 19 | return id; | 19 | return id; |
| 20 | } | 20 | } |
| 21 | 21 | ||
| 22 | /* WDTCR CP6 R7 Page 9 */ | ||
| 23 | static inline u32 read_wdtcr(void) | ||
| 24 | { | ||
| 25 | u32 val; | ||
| 26 | asm volatile("mrc p6, 0, %0, c7, c9, 0":"=r" (val)); | ||
| 27 | return val; | ||
| 28 | } | ||
| 29 | static inline void write_wdtcr(u32 val) | ||
| 30 | { | ||
| 31 | asm volatile("mcr p6, 0, %0, c7, c9, 0"::"r" (val)); | ||
| 32 | } | ||
| 33 | |||
| 34 | /* WDTSR CP6 R8 Page 9 */ | ||
| 35 | static inline u32 read_wdtsr(void) | ||
| 36 | { | ||
| 37 | u32 val; | ||
| 38 | asm volatile("mrc p6, 0, %0, c8, c9, 0":"=r" (val)); | ||
| 39 | return val; | ||
| 40 | } | ||
| 41 | static inline void write_wdtsr(u32 val) | ||
| 42 | { | ||
| 43 | asm volatile("mcr p6, 0, %0, c8, c9, 0"::"r" (val)); | ||
| 44 | } | ||
| 45 | |||
| 46 | /* RCSR - Reset Cause Status Register */ | ||
| 47 | static inline u32 read_rcsr(void) | ||
| 48 | { | ||
| 49 | u32 val; | ||
| 50 | asm volatile("mrc p6, 0, %0, c0, c1, 0":"=r" (val)); | ||
| 51 | return val; | ||
| 52 | } | ||
| 53 | |||
| 54 | extern unsigned long get_iop_tick_rate(void); | ||
| 22 | #endif | 55 | #endif |
| 23 | 56 | ||
| 24 | /* | 57 | /* |
| @@ -480,4 +513,14 @@ static inline int iop13xx_cpu_id(void) | |||
| 480 | #define IOP13XX_PBI_LR1 IOP13XX_PBI_OFFSET(0x14) | 513 | #define IOP13XX_PBI_LR1 IOP13XX_PBI_OFFSET(0x14) |
| 481 | 514 | ||
| 482 | #define IOP13XX_PROCESSOR_FREQ IOP13XX_REG_ADDR32(0x2180) | 515 | #define IOP13XX_PROCESSOR_FREQ IOP13XX_REG_ADDR32(0x2180) |
| 516 | |||
| 517 | /* Watchdog timer definitions */ | ||
| 518 | #define IOP_WDTCR_EN_ARM 0x1e1e1e1e | ||
| 519 | #define IOP_WDTCR_EN 0xe1e1e1e1 | ||
| 520 | #define IOP_WDTCR_DIS_ARM 0x1f1f1f1f | ||
| 521 | #define IOP_WDTCR_DIS 0xf1f1f1f1 | ||
| 522 | #define IOP_RCSR_WDT (1 << 5) /* reset caused by watchdog timer */ | ||
| 523 | #define IOP13XX_WDTSR_WRITE_EN (1 << 31) /* used to speed up reset requests */ | ||
| 524 | #define IOP13XX_WDTCR_IB_RESET (1 << 0) | ||
| 525 | |||
| 483 | #endif /* _IOP13XX_HW_H_ */ | 526 | #endif /* _IOP13XX_HW_H_ */ |
diff --git a/include/asm-arm/arch-iop13xx/system.h b/include/asm-arm/arch-iop13xx/system.h index 127827058e1f..8575af8db78c 100644 --- a/include/asm-arm/arch-iop13xx/system.h +++ b/include/asm-arm/arch-iop13xx/system.h | |||
| @@ -13,43 +13,13 @@ static inline void arch_idle(void) | |||
| 13 | cpu_do_idle(); | 13 | cpu_do_idle(); |
| 14 | } | 14 | } |
| 15 | 15 | ||
| 16 | /* WDTCR CP6 R7 Page 9 */ | ||
| 17 | static inline u32 read_wdtcr(void) | ||
| 18 | { | ||
| 19 | u32 val; | ||
| 20 | asm volatile("mrc p6, 0, %0, c7, c9, 0":"=r" (val)); | ||
| 21 | return val; | ||
| 22 | } | ||
| 23 | static inline void write_wdtcr(u32 val) | ||
| 24 | { | ||
| 25 | asm volatile("mcr p6, 0, %0, c7, c9, 0"::"r" (val)); | ||
| 26 | } | ||
| 27 | |||
| 28 | /* WDTSR CP6 R8 Page 9 */ | ||
| 29 | static inline u32 read_wdtsr(void) | ||
| 30 | { | ||
| 31 | u32 val; | ||
| 32 | asm volatile("mrc p6, 0, %0, c8, c9, 0":"=r" (val)); | ||
| 33 | return val; | ||
| 34 | } | ||
| 35 | static inline void write_wdtsr(u32 val) | ||
| 36 | { | ||
| 37 | asm volatile("mcr p6, 0, %0, c8, c9, 0"::"r" (val)); | ||
| 38 | } | ||
| 39 | |||
| 40 | #define IOP13XX_WDTCR_EN_ARM 0x1e1e1e1e | ||
| 41 | #define IOP13XX_WDTCR_EN 0xe1e1e1e1 | ||
| 42 | #define IOP13XX_WDTCR_DIS_ARM 0x1f1f1f1f | ||
| 43 | #define IOP13XX_WDTCR_DIS 0xf1f1f1f1 | ||
| 44 | #define IOP13XX_WDTSR_WRITE_EN (1 << 31) | ||
| 45 | #define IOP13XX_WDTCR_IB_RESET (1 << 0) | ||
| 46 | static inline void arch_reset(char mode) | 16 | static inline void arch_reset(char mode) |
| 47 | { | 17 | { |
| 48 | /* | 18 | /* |
| 49 | * Reset the internal bus (warning both cores are reset) | 19 | * Reset the internal bus (warning both cores are reset) |
| 50 | */ | 20 | */ |
| 51 | write_wdtcr(IOP13XX_WDTCR_EN_ARM); | 21 | write_wdtcr(IOP_WDTCR_EN_ARM); |
| 52 | write_wdtcr(IOP13XX_WDTCR_EN); | 22 | write_wdtcr(IOP_WDTCR_EN); |
| 53 | write_wdtsr(IOP13XX_WDTSR_WRITE_EN | IOP13XX_WDTCR_IB_RESET); | 23 | write_wdtsr(IOP13XX_WDTSR_WRITE_EN | IOP13XX_WDTCR_IB_RESET); |
| 54 | write_wdtcr(0x1000); | 24 | write_wdtcr(0x1000); |
| 55 | 25 | ||
diff --git a/include/asm-arm/arch-iop13xx/uncompress.h b/include/asm-arm/arch-iop13xx/uncompress.h index b9525d59b7ad..dd9c2934190e 100644 --- a/include/asm-arm/arch-iop13xx/uncompress.h +++ b/include/asm-arm/arch-iop13xx/uncompress.h | |||
| @@ -1,7 +1,6 @@ | |||
| 1 | #include <asm/types.h> | 1 | #include <asm/types.h> |
| 2 | #include <linux/serial_reg.h> | 2 | #include <linux/serial_reg.h> |
| 3 | #include <asm/hardware.h> | 3 | #include <asm/hardware.h> |
| 4 | #include <asm/processor.h> | ||
| 5 | 4 | ||
| 6 | #define UART_BASE ((volatile u32 *)IOP13XX_UART1_PHYS) | 5 | #define UART_BASE ((volatile u32 *)IOP13XX_UART1_PHYS) |
| 7 | #define TX_DONE (UART_LSR_TEMT | UART_LSR_THRE) | 6 | #define TX_DONE (UART_LSR_TEMT | UART_LSR_THRE) |
| @@ -9,7 +8,7 @@ | |||
| 9 | static inline void putc(char c) | 8 | static inline void putc(char c) |
| 10 | { | 9 | { |
| 11 | while ((UART_BASE[UART_LSR] & TX_DONE) != TX_DONE) | 10 | while ((UART_BASE[UART_LSR] & TX_DONE) != TX_DONE) |
| 12 | cpu_relax(); | 11 | barrier(); |
| 13 | UART_BASE[UART_TX] = c; | 12 | UART_BASE[UART_TX] = c; |
| 14 | } | 13 | } |
| 15 | 14 | ||
diff --git a/include/asm-arm/arch-iop32x/uncompress.h b/include/asm-arm/arch-iop32x/uncompress.h index e64f52bf2bce..070f15818fe7 100644 --- a/include/asm-arm/arch-iop32x/uncompress.h +++ b/include/asm-arm/arch-iop32x/uncompress.h | |||
| @@ -26,7 +26,7 @@ static __inline__ void __arch_decomp_setup(unsigned long arch_id) | |||
| 26 | { | 26 | { |
| 27 | if (machine_is_iq80321()) | 27 | if (machine_is_iq80321()) |
| 28 | uart_base = (volatile u8 *)IQ80321_UART; | 28 | uart_base = (volatile u8 *)IQ80321_UART; |
| 29 | else if (machine_is_iq31244()) | 29 | else if (machine_is_iq31244() || machine_is_em7210()) |
| 30 | uart_base = (volatile u8 *)IQ31244_UART; | 30 | uart_base = (volatile u8 *)IQ31244_UART; |
| 31 | else | 31 | else |
| 32 | uart_base = (volatile u8 *)0xfe800000; | 32 | uart_base = (volatile u8 *)0xfe800000; |
diff --git a/include/asm-arm/arch-mxc/board-mx31ads.h b/include/asm-arm/arch-mxc/board-mx31ads.h new file mode 100644 index 000000000000..be29b83ad4ae --- /dev/null +++ b/include/asm-arm/arch-mxc/board-mx31ads.h | |||
| @@ -0,0 +1,142 @@ | |||
| 1 | /* | ||
| 2 | * Copyright 2005-2007 Freescale Semiconductor, Inc. All Rights Reserved. | ||
| 3 | */ | ||
| 4 | |||
| 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 | #ifndef __ASM_ARCH_MXC_BOARD_MX31ADS_H__ | ||
| 12 | #define __ASM_ARCH_MXC_BOARD_MX31ADS_H__ | ||
| 13 | |||
| 14 | /*! | ||
| 15 | * @name PBC Controller parameters | ||
| 16 | */ | ||
| 17 | /*! @{ */ | ||
| 18 | /*! | ||
| 19 | * Base address of PBC controller | ||
| 20 | */ | ||
| 21 | #define PBC_BASE_ADDRESS IO_ADDRESS(CS4_BASE_ADDR) | ||
| 22 | /* Offsets for the PBC Controller register */ | ||
| 23 | /*! | ||
| 24 | * PBC Board status register offset | ||
| 25 | */ | ||
| 26 | #define PBC_BSTAT 0x000002 | ||
| 27 | /*! | ||
| 28 | * PBC Board control register 1 set address. | ||
| 29 | */ | ||
| 30 | #define PBC_BCTRL1_SET 0x000004 | ||
| 31 | /*! | ||
| 32 | * PBC Board control register 1 clear address. | ||
| 33 | */ | ||
| 34 | #define PBC_BCTRL1_CLEAR 0x000006 | ||
| 35 | /*! | ||
| 36 | * PBC Board control register 2 set address. | ||
| 37 | */ | ||
| 38 | #define PBC_BCTRL2_SET 0x000008 | ||
| 39 | /*! | ||
| 40 | * PBC Board control register 2 clear address. | ||
| 41 | */ | ||
| 42 | #define PBC_BCTRL2_CLEAR 0x00000A | ||
| 43 | /*! | ||
| 44 | * PBC Board control register 3 set address. | ||
| 45 | */ | ||
| 46 | #define PBC_BCTRL3_SET 0x00000C | ||
| 47 | /*! | ||
| 48 | * PBC Board control register 3 clear address. | ||
| 49 | */ | ||
| 50 | #define PBC_BCTRL3_CLEAR 0x00000E | ||
| 51 | /*! | ||
| 52 | * PBC Board control register 4 set address. | ||
| 53 | */ | ||
| 54 | #define PBC_BCTRL4_SET 0x000010 | ||
| 55 | /*! | ||
| 56 | * PBC Board control register 4 clear address. | ||
| 57 | */ | ||
| 58 | #define PBC_BCTRL4_CLEAR 0x000012 | ||
| 59 | /*! | ||
| 60 | * PBC Board status register 1. | ||
| 61 | */ | ||
| 62 | #define PBC_BSTAT1 0x000014 | ||
| 63 | /*! | ||
| 64 | * PBC Board interrupt status register. | ||
| 65 | */ | ||
| 66 | #define PBC_INTSTATUS 0x000016 | ||
| 67 | /*! | ||
| 68 | * PBC Board interrupt current status register. | ||
| 69 | */ | ||
| 70 | #define PBC_INTCURR_STATUS 0x000018 | ||
| 71 | /*! | ||
| 72 | * PBC Interrupt mask register set address. | ||
| 73 | */ | ||
| 74 | #define PBC_INTMASK_SET 0x00001A | ||
| 75 | /*! | ||
| 76 | * PBC Interrupt mask register clear address. | ||
| 77 | */ | ||
| 78 | #define PBC_INTMASK_CLEAR 0x00001C | ||
| 79 | |||
| 80 | /*! | ||
| 81 | * External UART A. | ||
| 82 | */ | ||
| 83 | #define PBC_SC16C652_UARTA 0x010000 | ||
| 84 | /*! | ||
| 85 | * External UART B. | ||
| 86 | */ | ||
| 87 | #define PBC_SC16C652_UARTB 0x010010 | ||
| 88 | /*! | ||
| 89 | * Ethernet Controller IO base address. | ||
| 90 | */ | ||
| 91 | #define PBC_CS8900A_IOBASE 0x020000 | ||
| 92 | /*! | ||
| 93 | * Ethernet Controller Memory base address. | ||
| 94 | */ | ||
| 95 | #define PBC_CS8900A_MEMBASE 0x021000 | ||
| 96 | /*! | ||
| 97 | * Ethernet Controller DMA base address. | ||
| 98 | */ | ||
| 99 | #define PBC_CS8900A_DMABASE 0x022000 | ||
| 100 | /*! | ||
| 101 | * External chip select 0. | ||
| 102 | */ | ||
| 103 | #define PBC_XCS0 0x040000 | ||
| 104 | /*! | ||
| 105 | * LCD Display enable. | ||
| 106 | */ | ||
| 107 | #define PBC_LCD_EN_B 0x060000 | ||
| 108 | /*! | ||
| 109 | * Code test debug enable. | ||
| 110 | */ | ||
| 111 | #define PBC_CODE_B 0x070000 | ||
| 112 | /*! | ||
| 113 | * PSRAM memory select. | ||
| 114 | */ | ||
| 115 | #define PBC_PSRAM_B 0x5000000 | ||
| 116 | |||
| 117 | #define PBC_INTSTATUS_REG (PBC_INTSTATUS + PBC_BASE_ADDRESS) | ||
| 118 | #define PBC_INTCURR_STATUS_REG (PBC_INTCURR_STATUS + PBC_BASE_ADDRESS) | ||
| 119 | #define PBC_INTMASK_SET_REG (PBC_INTMASK_SET + PBC_BASE_ADDRESS) | ||
| 120 | #define PBC_INTMASK_CLEAR_REG (PBC_INTMASK_CLEAR + PBC_BASE_ADDRESS) | ||
| 121 | #define EXPIO_PARENT_INT IOMUX_TO_IRQ(MX31_PIN_GPIO1_4) | ||
| 122 | |||
| 123 | #define EXPIO_INT_LOW_BAT (MXC_EXP_IO_BASE + 0) | ||
| 124 | #define EXPIO_INT_PB_IRQ (MXC_EXP_IO_BASE + 1) | ||
| 125 | #define EXPIO_INT_OTG_FS_OVR (MXC_EXP_IO_BASE + 2) | ||
| 126 | #define EXPIO_INT_FSH_OVR (MXC_EXP_IO_BASE + 3) | ||
| 127 | #define EXPIO_INT_RES4 (MXC_EXP_IO_BASE + 4) | ||
| 128 | #define EXPIO_INT_RES5 (MXC_EXP_IO_BASE + 5) | ||
| 129 | #define EXPIO_INT_RES6 (MXC_EXP_IO_BASE + 6) | ||
| 130 | #define EXPIO_INT_RES7 (MXC_EXP_IO_BASE + 7) | ||
| 131 | #define EXPIO_INT_ENET_INT (MXC_EXP_IO_BASE + 8) | ||
| 132 | #define EXPIO_INT_OTG_FS_INT (MXC_EXP_IO_BASE + 9) | ||
| 133 | #define EXPIO_INT_XUART_INTA (MXC_EXP_IO_BASE + 10) | ||
| 134 | #define EXPIO_INT_XUART_INTB (MXC_EXP_IO_BASE + 11) | ||
| 135 | #define EXPIO_INT_SYNTH_IRQ (MXC_EXP_IO_BASE + 12) | ||
| 136 | #define EXPIO_INT_CE_INT1 (MXC_EXP_IO_BASE + 13) | ||
| 137 | #define EXPIO_INT_CE_INT2 (MXC_EXP_IO_BASE + 14) | ||
| 138 | #define EXPIO_INT_RES15 (MXC_EXP_IO_BASE + 15) | ||
| 139 | |||
| 140 | #define MXC_MAX_EXP_IO_LINES 16 | ||
| 141 | |||
| 142 | #endif /* __ASM_ARCH_MXC_BOARD_MX31ADS_H__ */ | ||
diff --git a/include/asm-arm/arch-mxc/common.h b/include/asm-arm/arch-mxc/common.h new file mode 100644 index 000000000000..23b4350edbd6 --- /dev/null +++ b/include/asm-arm/arch-mxc/common.h | |||
| @@ -0,0 +1,20 @@ | |||
| 1 | /* | ||
| 2 | * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved. | ||
| 3 | */ | ||
| 4 | |||
| 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 | #ifndef __ASM_ARCH_MXC_COMMON_H__ | ||
| 12 | #define __ASM_ARCH_MXC_COMMON_H__ | ||
| 13 | |||
| 14 | struct sys_timer; | ||
| 15 | |||
| 16 | extern void mxc_map_io(void); | ||
| 17 | extern void mxc_init_irq(void); | ||
| 18 | extern struct sys_timer mxc_timer; | ||
| 19 | |||
| 20 | #endif | ||
diff --git a/include/asm-arm/arch-mxc/dma.h b/include/asm-arm/arch-mxc/dma.h new file mode 100644 index 000000000000..65e639d51d2b --- /dev/null +++ b/include/asm-arm/arch-mxc/dma.h | |||
| @@ -0,0 +1,21 @@ | |||
| 1 | /* | ||
| 2 | * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved. | ||
| 3 | */ | ||
| 4 | |||
| 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 | #ifndef __ASM_ARCH_MXC_DMA_H__ | ||
| 12 | #define __ASM_ARCH_MXC_DMA_H__ | ||
| 13 | |||
| 14 | /*! | ||
| 15 | * @file dma.h | ||
| 16 | * @brief This file contains Unified DMA API for all MXC platforms. | ||
| 17 | * The API is platform independent. | ||
| 18 | * | ||
| 19 | * @ingroup SDMA | ||
| 20 | */ | ||
| 21 | #endif | ||
diff --git a/include/asm-arm/arch-mxc/entry-macro.S b/include/asm-arm/arch-mxc/entry-macro.S new file mode 100644 index 000000000000..b542433afb1b --- /dev/null +++ b/include/asm-arm/arch-mxc/entry-macro.S | |||
| @@ -0,0 +1,39 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2007 Lennert Buytenhek <buytenh@wantstofly.org> | ||
| 3 | * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved. | ||
| 4 | */ | ||
| 5 | |||
| 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 | |||
| 12 | @ this macro disables fast irq (not implemented) | ||
| 13 | .macro disable_fiq | ||
| 14 | .endm | ||
| 15 | |||
| 16 | .macro get_irqnr_preamble, base, tmp | ||
| 17 | .endm | ||
| 18 | |||
| 19 | .macro arch_ret_to_user, tmp1, tmp2 | ||
| 20 | .endm | ||
| 21 | |||
| 22 | @ this macro checks which interrupt occured | ||
| 23 | @ and returns its number in irqnr | ||
| 24 | @ and returns if an interrupt occured in irqstat | ||
| 25 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
| 26 | ldr \base, =AVIC_IO_ADDRESS(AVIC_BASE_ADDR) | ||
| 27 | @ Load offset & priority of the highest priority | ||
| 28 | @ interrupt pending from AVIC_NIVECSR | ||
| 29 | ldr \irqstat, [\base, #0x40] | ||
| 30 | @ Shift to get the decoded IRQ number, using ASR so | ||
| 31 | @ 'no interrupt pending' becomes 0xffffffff | ||
| 32 | mov \irqnr, \irqstat, asr #16 | ||
| 33 | @ set zero flag if IRQ + 1 == 0 | ||
| 34 | adds \tmp, \irqnr, #1 | ||
| 35 | .endm | ||
| 36 | |||
| 37 | @ irq priority table (not used) | ||
| 38 | .macro irq_prio_table | ||
| 39 | .endm | ||
diff --git a/include/asm-arm/arch-mxc/hardware.h b/include/asm-arm/arch-mxc/hardware.h new file mode 100644 index 000000000000..3c09b92fef0d --- /dev/null +++ b/include/asm-arm/arch-mxc/hardware.h | |||
| @@ -0,0 +1,52 @@ | |||
| 1 | /* | ||
| 2 | * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved. | ||
| 3 | */ | ||
| 4 | |||
| 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 | /*! | ||
| 12 | * @file hardware.h | ||
| 13 | * @brief This file contains the hardware definitions of the board. | ||
| 14 | * | ||
| 15 | * @ingroup System | ||
| 16 | */ | ||
| 17 | #ifndef __ASM_ARCH_MXC_HARDWARE_H__ | ||
| 18 | #define __ASM_ARCH_MXC_HARDWARE_H__ | ||
| 19 | |||
| 20 | #include <asm/sizes.h> | ||
| 21 | |||
| 22 | #include <asm/arch/mx31.h> | ||
| 23 | |||
| 24 | #include <asm/arch/mxc.h> | ||
| 25 | |||
| 26 | #define MXC_MAX_GPIO_LINES (GPIO_NUM_PIN * GPIO_PORT_NUM) | ||
| 27 | |||
| 28 | /* | ||
| 29 | * --------------------------------------------------------------------------- | ||
| 30 | * Board specific defines | ||
| 31 | * --------------------------------------------------------------------------- | ||
| 32 | */ | ||
| 33 | #define MXC_EXP_IO_BASE (MXC_GPIO_INT_BASE + MXC_MAX_GPIO_LINES) | ||
| 34 | |||
| 35 | #include <asm/arch/board-mx31ads.h> | ||
| 36 | |||
| 37 | #ifndef MXC_MAX_EXP_IO_LINES | ||
| 38 | #define MXC_MAX_EXP_IO_LINES 0 | ||
| 39 | #endif | ||
| 40 | |||
| 41 | #define MXC_MAX_VIRTUAL_INTS 16 | ||
| 42 | #define MXC_VIRTUAL_INTS_BASE (MXC_EXP_IO_BASE + MXC_MAX_EXP_IO_LINES) | ||
| 43 | #define MXC_SDIO1_CARD_IRQ MXC_VIRTUAL_INTS_BASE | ||
| 44 | #define MXC_SDIO2_CARD_IRQ (MXC_VIRTUAL_INTS_BASE + 1) | ||
| 45 | #define MXC_SDIO3_CARD_IRQ (MXC_VIRTUAL_INTS_BASE + 2) | ||
| 46 | |||
| 47 | #define MXC_MAX_INTS (MXC_MAX_INT_LINES + \ | ||
| 48 | MXC_MAX_GPIO_LINES + \ | ||
| 49 | MXC_MAX_EXP_IO_LINES + \ | ||
| 50 | MXC_MAX_VIRTUAL_INTS) | ||
| 51 | |||
| 52 | #endif /* __ASM_ARCH_MXC_HARDWARE_H__ */ | ||
diff --git a/include/asm-arm/arch-mxc/io.h b/include/asm-arm/arch-mxc/io.h new file mode 100644 index 000000000000..cf6c83a4b9f7 --- /dev/null +++ b/include/asm-arm/arch-mxc/io.h | |||
| @@ -0,0 +1,33 @@ | |||
| 1 | /* | ||
| 2 | * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved. | ||
| 3 | */ | ||
| 4 | |||
| 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 | /*! | ||
| 12 | * @file io.h | ||
| 13 | * @brief This file contains some memory mapping macros. | ||
| 14 | * @note There is no real ISA or PCI buses. But have to define these macros | ||
| 15 | * for some drivers to compile. | ||
| 16 | * | ||
| 17 | * @ingroup System | ||
| 18 | */ | ||
| 19 | |||
| 20 | #ifndef __ASM_ARCH_MXC_IO_H__ | ||
| 21 | #define __ASM_ARCH_MXC_IO_H__ | ||
| 22 | |||
| 23 | /*! Allow IO space to be anywhere in the memory */ | ||
| 24 | #define IO_SPACE_LIMIT 0xffffffff | ||
| 25 | |||
| 26 | /*! | ||
| 27 | * io address mapping macro | ||
| 28 | */ | ||
| 29 | #define __io(a) ((void __iomem *)(a)) | ||
| 30 | |||
| 31 | #define __mem_pci(a) (a) | ||
| 32 | |||
| 33 | #endif | ||
diff --git a/include/asm-arm/arch-mxc/irqs.h b/include/asm-arm/arch-mxc/irqs.h new file mode 100644 index 000000000000..e4686c6bc4bf --- /dev/null +++ b/include/asm-arm/arch-mxc/irqs.h | |||
| @@ -0,0 +1,38 @@ | |||
| 1 | /* | ||
| 2 | * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved. | ||
| 3 | */ | ||
| 4 | |||
| 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 | #ifndef __ASM_ARCH_MXC_IRQS_H__ | ||
| 12 | #define __ASM_ARCH_MXC_IRQS_H__ | ||
| 13 | |||
| 14 | #include <asm/hardware.h> | ||
| 15 | |||
| 16 | /*! | ||
| 17 | * @file irqs.h | ||
| 18 | * @brief This file defines the number of normal interrupts and fast interrupts | ||
| 19 | * | ||
| 20 | * @ingroup Interrupt | ||
| 21 | */ | ||
| 22 | |||
| 23 | #define MXC_IRQ_TO_EXPIO(irq) ((irq) - MXC_EXP_IO_BASE) | ||
| 24 | |||
| 25 | #define MXC_IRQ_TO_GPIO(irq) ((irq) - MXC_GPIO_INT_BASE) | ||
| 26 | #define MXC_GPIO_TO_IRQ(x) (MXC_GPIO_INT_BASE + x) | ||
| 27 | |||
| 28 | /*! | ||
| 29 | * Number of normal interrupts | ||
| 30 | */ | ||
| 31 | #define NR_IRQS MXC_MAX_INTS | ||
| 32 | |||
| 33 | /*! | ||
| 34 | * Number of fast interrupts | ||
| 35 | */ | ||
| 36 | #define NR_FIQS MXC_MAX_INTS | ||
| 37 | |||
| 38 | #endif /* __ASM_ARCH_MXC_IRQS_H__ */ | ||
diff --git a/include/asm-arm/arch-mxc/memory.h b/include/asm-arm/arch-mxc/memory.h new file mode 100644 index 000000000000..c89aac83a407 --- /dev/null +++ b/include/asm-arm/arch-mxc/memory.h | |||
| @@ -0,0 +1,36 @@ | |||
| 1 | /* | ||
| 2 | * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved. | ||
| 3 | */ | ||
| 4 | |||
| 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 | #ifndef __ASM_ARCH_MXC_MEMORY_H__ | ||
| 12 | #define __ASM_ARCH_MXC_MEMORY_H__ | ||
| 13 | |||
| 14 | #include <asm/hardware.h> | ||
| 15 | |||
| 16 | /*! | ||
| 17 | * @file memory.h | ||
| 18 | * @brief This file contains macros needed by the Linux kernel and drivers. | ||
| 19 | * | ||
| 20 | * @ingroup Memory | ||
| 21 | */ | ||
| 22 | |||
| 23 | /*! | ||
| 24 | * Virtual view <-> DMA view memory address translations | ||
| 25 | * This macro is used to translate the virtual address to an address | ||
| 26 | * suitable to be passed to set_dma_addr() | ||
| 27 | */ | ||
| 28 | #define __virt_to_bus(a) __virt_to_phys(a) | ||
| 29 | |||
| 30 | /*! | ||
| 31 | * Used to convert an address for DMA operations to an address that the | ||
| 32 | * kernel can use. | ||
| 33 | */ | ||
| 34 | #define __bus_to_virt(a) __phys_to_virt(a) | ||
| 35 | |||
| 36 | #endif /* __ASM_ARCH_MXC_MEMORY_H__ */ | ||
diff --git a/include/asm-arm/arch-mxc/mx31.h b/include/asm-arm/arch-mxc/mx31.h new file mode 100644 index 000000000000..85c49c9e5d15 --- /dev/null +++ b/include/asm-arm/arch-mxc/mx31.h | |||
| @@ -0,0 +1,335 @@ | |||
| 1 | /* | ||
| 2 | * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved. | ||
| 3 | */ | ||
| 4 | |||
| 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 | #ifndef __ASM_ARCH_MXC_MX31_H__ | ||
| 12 | #define __ASM_ARCH_MXC_MX31_H__ | ||
| 13 | |||
| 14 | #ifndef __ASM_ARCH_MXC_HARDWARE_H__ | ||
| 15 | #error "Do not include directly." | ||
| 16 | #endif | ||
| 17 | |||
| 18 | /*! | ||
| 19 | * defines the hardware clock tick rate | ||
| 20 | */ | ||
| 21 | #define CLOCK_TICK_RATE 16625000 | ||
| 22 | |||
| 23 | /* | ||
| 24 | * MX31 memory map: | ||
| 25 | * | ||
| 26 | * Virt Phys Size What | ||
| 27 | * --------------------------------------------------------------------------- | ||
| 28 | * F8000000 1FFC0000 16K IRAM | ||
| 29 | * F9000000 30000000 256M L2CC | ||
| 30 | * FC000000 43F00000 1M AIPS 1 | ||
| 31 | * FC100000 50000000 1M SPBA | ||
| 32 | * FC200000 53F00000 1M AIPS 2 | ||
| 33 | * FC500000 60000000 128M ROMPATCH | ||
| 34 | * FC400000 68000000 128M AVIC | ||
| 35 | * 70000000 256M IPU (MAX M2) | ||
| 36 | * 80000000 256M CSD0 SDRAM/DDR | ||
| 37 | * 90000000 256M CSD1 SDRAM/DDR | ||
| 38 | * A0000000 128M CS0 Flash | ||
| 39 | * A8000000 128M CS1 Flash | ||
| 40 | * B0000000 32M CS2 | ||
| 41 | * B2000000 32M CS3 | ||
| 42 | * F4000000 B4000000 32M CS4 | ||
| 43 | * B6000000 32M CS5 | ||
| 44 | * FC320000 B8000000 64K NAND, SDRAM, WEIM, M3IF, EMI controllers | ||
| 45 | * C0000000 64M PCMCIA/CF | ||
| 46 | */ | ||
| 47 | |||
| 48 | #define CS0_BASE_ADDR 0xA0000000 | ||
| 49 | #define CS1_BASE_ADDR 0xA8000000 | ||
| 50 | #define CS2_BASE_ADDR 0xB0000000 | ||
| 51 | #define CS3_BASE_ADDR 0xB2000000 | ||
| 52 | |||
| 53 | #define CS4_BASE_ADDR 0xB4000000 | ||
| 54 | #define CS4_BASE_ADDR_VIRT 0xF4000000 | ||
| 55 | #define CS4_SIZE SZ_32M | ||
| 56 | |||
| 57 | #define CS5_BASE_ADDR 0xB6000000 | ||
| 58 | #define PCMCIA_MEM_BASE_ADDR 0xBC000000 | ||
| 59 | |||
| 60 | /* | ||
| 61 | * IRAM | ||
| 62 | */ | ||
| 63 | #define IRAM_BASE_ADDR 0x1FFC0000 /* internal ram */ | ||
| 64 | #define IRAM_BASE_ADDR_VIRT 0xF8000000 | ||
| 65 | #define IRAM_SIZE SZ_16K | ||
| 66 | |||
| 67 | /* | ||
| 68 | * L2CC | ||
| 69 | */ | ||
| 70 | #define L2CC_BASE_ADDR 0x30000000 | ||
| 71 | #define L2CC_BASE_ADDR_VIRT 0xF9000000 | ||
| 72 | #define L2CC_SIZE SZ_1M | ||
| 73 | |||
| 74 | /* | ||
| 75 | * AIPS 1 | ||
| 76 | */ | ||
| 77 | #define AIPS1_BASE_ADDR 0x43F00000 | ||
| 78 | #define AIPS1_BASE_ADDR_VIRT 0xFC000000 | ||
| 79 | #define AIPS1_SIZE SZ_1M | ||
| 80 | |||
| 81 | #define MAX_BASE_ADDR (AIPS1_BASE_ADDR + 0x00004000) | ||
| 82 | #define EVTMON_BASE_ADDR (AIPS1_BASE_ADDR + 0x00008000) | ||
| 83 | #define CLKCTL_BASE_ADDR (AIPS1_BASE_ADDR + 0x0000C000) | ||
| 84 | #define ETB_SLOT4_BASE_ADDR (AIPS1_BASE_ADDR + 0x00010000) | ||
| 85 | #define ETB_SLOT5_BASE_ADDR (AIPS1_BASE_ADDR + 0x00014000) | ||
| 86 | #define ECT_CTIO_BASE_ADDR (AIPS1_BASE_ADDR + 0x00018000) | ||
| 87 | #define I2C_BASE_ADDR (AIPS1_BASE_ADDR + 0x00080000) | ||
| 88 | #define I2C3_BASE_ADDR (AIPS1_BASE_ADDR + 0x00084000) | ||
| 89 | #define OTG_BASE_ADDR (AIPS1_BASE_ADDR + 0x00088000) | ||
| 90 | #define ATA_BASE_ADDR (AIPS1_BASE_ADDR + 0x0008C000) | ||
| 91 | #define UART1_BASE_ADDR (AIPS1_BASE_ADDR + 0x00090000) | ||
| 92 | #define UART2_BASE_ADDR (AIPS1_BASE_ADDR + 0x00094000) | ||
| 93 | #define I2C2_BASE_ADDR (AIPS1_BASE_ADDR + 0x00098000) | ||
| 94 | #define OWIRE_BASE_ADDR (AIPS1_BASE_ADDR + 0x0009C000) | ||
| 95 | #define SSI1_BASE_ADDR (AIPS1_BASE_ADDR + 0x000A0000) | ||
| 96 | #define CSPI1_BASE_ADDR (AIPS1_BASE_ADDR + 0x000A4000) | ||
| 97 | #define KPP_BASE_ADDR (AIPS1_BASE_ADDR + 0x000A8000) | ||
| 98 | #define IOMUXC_BASE_ADDR (AIPS1_BASE_ADDR + 0x000AC000) | ||
| 99 | #define UART4_BASE_ADDR (AIPS1_BASE_ADDR + 0x000B0000) | ||
| 100 | #define UART5_BASE_ADDR (AIPS1_BASE_ADDR + 0x000B4000) | ||
| 101 | #define ECT_IP1_BASE_ADDR (AIPS1_BASE_ADDR + 0x000B8000) | ||
| 102 | #define ECT_IP2_BASE_ADDR (AIPS1_BASE_ADDR + 0x000BC000) | ||
| 103 | |||
| 104 | /* | ||
| 105 | * SPBA global module enabled #0 | ||
| 106 | */ | ||
| 107 | #define SPBA0_BASE_ADDR 0x50000000 | ||
| 108 | #define SPBA0_BASE_ADDR_VIRT 0xFC100000 | ||
| 109 | #define SPBA0_SIZE SZ_1M | ||
| 110 | |||
| 111 | #define MMC_SDHC1_BASE_ADDR (SPBA0_BASE_ADDR + 0x00004000) | ||
| 112 | #define MMC_SDHC2_BASE_ADDR (SPBA0_BASE_ADDR + 0x00008000) | ||
| 113 | #define UART3_BASE_ADDR (SPBA0_BASE_ADDR + 0x0000C000) | ||
| 114 | #define CSPI2_BASE_ADDR (SPBA0_BASE_ADDR + 0x00010000) | ||
| 115 | #define SSI2_BASE_ADDR (SPBA0_BASE_ADDR + 0x00014000) | ||
| 116 | #define SIM1_BASE_ADDR (SPBA0_BASE_ADDR + 0x00018000) | ||
| 117 | #define IIM_BASE_ADDR (SPBA0_BASE_ADDR + 0x0001C000) | ||
| 118 | #define ATA_DMA_BASE_ADDR (SPBA0_BASE_ADDR + 0x00020000) | ||
| 119 | #define MSHC1_BASE_ADDR (SPBA0_BASE_ADDR + 0x00024000) | ||
| 120 | #define MSHC2_BASE_ADDR (SPBA0_BASE_ADDR + 0x00024000) | ||
| 121 | #define SPBA_CTRL_BASE_ADDR (SPBA0_BASE_ADDR + 0x0003C000) | ||
| 122 | |||
| 123 | /* | ||
| 124 | * AIPS 2 | ||
| 125 | */ | ||
| 126 | #define AIPS2_BASE_ADDR 0x53F00000 | ||
| 127 | #define AIPS2_BASE_ADDR_VIRT 0xFC200000 | ||
| 128 | #define AIPS2_SIZE SZ_1M | ||
| 129 | #define CCM_BASE_ADDR (AIPS2_BASE_ADDR + 0x00080000) | ||
| 130 | #define CSPI3_BASE_ADDR (AIPS2_BASE_ADDR + 0x00084000) | ||
| 131 | #define FIRI_BASE_ADDR (AIPS2_BASE_ADDR + 0x0008C000) | ||
| 132 | #define GPT1_BASE_ADDR (AIPS2_BASE_ADDR + 0x00090000) | ||
| 133 | #define EPIT1_BASE_ADDR (AIPS2_BASE_ADDR + 0x00094000) | ||
| 134 | #define EPIT2_BASE_ADDR (AIPS2_BASE_ADDR + 0x00098000) | ||
| 135 | #define GPIO3_BASE_ADDR (AIPS2_BASE_ADDR + 0x000A4000) | ||
| 136 | #define SCC_BASE_ADDR (AIPS2_BASE_ADDR + 0x000AC000) | ||
| 137 | #define SCM_BASE_ADDR (AIPS2_BASE_ADDR + 0x000AE000) | ||
| 138 | #define SMN_BASE_ADDR (AIPS2_BASE_ADDR + 0x000AF000) | ||
| 139 | #define RNGA_BASE_ADDR (AIPS2_BASE_ADDR + 0x000B0000) | ||
| 140 | #define IPU_CTRL_BASE_ADDR (AIPS2_BASE_ADDR + 0x000C0000) | ||
| 141 | #define AUDMUX_BASE_ADDR (AIPS2_BASE_ADDR + 0x000C4000) | ||
| 142 | #define MPEG4_ENC_BASE_ADDR (AIPS2_BASE_ADDR + 0x000C8000) | ||
| 143 | #define GPIO1_BASE_ADDR (AIPS2_BASE_ADDR + 0x000CC000) | ||
| 144 | #define GPIO2_BASE_ADDR (AIPS2_BASE_ADDR + 0x000D0000) | ||
| 145 | #define SDMA_BASE_ADDR (AIPS2_BASE_ADDR + 0x000D4000) | ||
| 146 | #define RTC_BASE_ADDR (AIPS2_BASE_ADDR + 0x000D8000) | ||
| 147 | #define WDOG_BASE_ADDR (AIPS2_BASE_ADDR + 0x000DC000) | ||
| 148 | #define PWM_BASE_ADDR (AIPS2_BASE_ADDR + 0x000E0000) | ||
| 149 | #define RTIC_BASE_ADDR (AIPS2_BASE_ADDR + 0x000EC000) | ||
| 150 | |||
| 151 | /* | ||
| 152 | * ROMP and AVIC | ||
| 153 | */ | ||
| 154 | #define ROMP_BASE_ADDR 0x60000000 | ||
| 155 | #define ROMP_BASE_ADDR_VIRT 0xFC500000 | ||
| 156 | #define ROMP_SIZE SZ_1M | ||
| 157 | |||
| 158 | #define AVIC_BASE_ADDR 0x68000000 | ||
| 159 | #define AVIC_BASE_ADDR_VIRT 0xFC400000 | ||
| 160 | #define AVIC_SIZE SZ_1M | ||
| 161 | |||
| 162 | /* | ||
| 163 | * NAND, SDRAM, WEIM, M3IF, EMI controllers | ||
| 164 | */ | ||
| 165 | #define X_MEMC_BASE_ADDR 0xB8000000 | ||
| 166 | #define X_MEMC_BASE_ADDR_VIRT 0xFC320000 | ||
| 167 | #define X_MEMC_SIZE SZ_64K | ||
| 168 | |||
| 169 | #define NFC_BASE_ADDR (X_MEMC_BASE_ADDR + 0x0000) | ||
| 170 | #define ESDCTL_BASE_ADDR (X_MEMC_BASE_ADDR + 0x1000) | ||
| 171 | #define WEIM_BASE_ADDR (X_MEMC_BASE_ADDR + 0x2000) | ||
| 172 | #define M3IF_BASE_ADDR (X_MEMC_BASE_ADDR + 0x3000) | ||
| 173 | #define EMI_CTL_BASE_ADDR (X_MEMC_BASE_ADDR + 0x4000) | ||
| 174 | #define PCMCIA_CTL_BASE_ADDR EMI_CTL_BASE_ADDR | ||
| 175 | |||
| 176 | /* | ||
| 177 | * Memory regions and CS | ||
| 178 | */ | ||
| 179 | #define IPU_MEM_BASE_ADDR 0x70000000 | ||
| 180 | #define CSD0_BASE_ADDR 0x80000000 | ||
| 181 | #define CSD1_BASE_ADDR 0x90000000 | ||
| 182 | #define CS0_BASE_ADDR 0xA0000000 | ||
| 183 | #define CS1_BASE_ADDR 0xA8000000 | ||
| 184 | #define CS2_BASE_ADDR 0xB0000000 | ||
| 185 | #define CS3_BASE_ADDR 0xB2000000 | ||
| 186 | |||
| 187 | #define CS4_BASE_ADDR 0xB4000000 | ||
| 188 | #define CS4_BASE_ADDR_VIRT 0xF4000000 | ||
| 189 | #define CS4_SIZE SZ_32M | ||
| 190 | |||
| 191 | #define CS5_BASE_ADDR 0xB6000000 | ||
| 192 | #define PCMCIA_MEM_BASE_ADDR 0xBC000000 | ||
| 193 | |||
| 194 | /*! | ||
| 195 | * This macro defines the physical to virtual address mapping for all the | ||
| 196 | * peripheral modules. It is used by passing in the physical address as x | ||
| 197 | * and returning the virtual address. If the physical address is not mapped, | ||
| 198 | * it returns 0xDEADBEEF | ||
| 199 | */ | ||
| 200 | #define IO_ADDRESS(x) \ | ||
| 201 | (((x >= IRAM_BASE_ADDR) && (x < (IRAM_BASE_ADDR + IRAM_SIZE))) ? IRAM_IO_ADDRESS(x):\ | ||
| 202 | ((x >= L2CC_BASE_ADDR) && (x < (L2CC_BASE_ADDR + L2CC_SIZE))) ? L2CC_IO_ADDRESS(x):\ | ||
| 203 | ((x >= AIPS1_BASE_ADDR) && (x < (AIPS1_BASE_ADDR + AIPS1_SIZE))) ? AIPS1_IO_ADDRESS(x):\ | ||
| 204 | ((x >= SPBA0_BASE_ADDR) && (x < (SPBA0_BASE_ADDR + SPBA0_SIZE))) ? SPBA0_IO_ADDRESS(x):\ | ||
| 205 | ((x >= AIPS2_BASE_ADDR) && (x < (AIPS2_BASE_ADDR + AIPS2_SIZE))) ? AIPS2_IO_ADDRESS(x):\ | ||
| 206 | ((x >= ROMP_BASE_ADDR) && (x < (ROMP_BASE_ADDR + ROMP_SIZE))) ? ROMP_IO_ADDRESS(x):\ | ||
| 207 | ((x >= AVIC_BASE_ADDR) && (x < (AVIC_BASE_ADDR + AVIC_SIZE))) ? AVIC_IO_ADDRESS(x):\ | ||
| 208 | ((x >= CS4_BASE_ADDR) && (x < (CS4_BASE_ADDR + CS4_SIZE))) ? CS4_IO_ADDRESS(x):\ | ||
| 209 | ((x >= X_MEMC_BASE_ADDR) && (x < (X_MEMC_BASE_ADDR + X_MEMC_SIZE))) ? X_MEMC_IO_ADDRESS(x):\ | ||
| 210 | 0xDEADBEEF) | ||
| 211 | |||
| 212 | /* | ||
| 213 | * define the address mapping macros: in physical address order | ||
| 214 | */ | ||
| 215 | |||
| 216 | #define IRAM_IO_ADDRESS(x) \ | ||
| 217 | (((x) - IRAM_BASE_ADDR) + IRAM_BASE_ADDR_VIRT) | ||
| 218 | |||
| 219 | #define L2CC_IO_ADDRESS(x) \ | ||
| 220 | (((x) - L2CC_BASE_ADDR) + L2CC_BASE_ADDR_VIRT) | ||
| 221 | |||
| 222 | #define AIPS1_IO_ADDRESS(x) \ | ||
| 223 | (((x) - AIPS1_BASE_ADDR) + AIPS1_BASE_ADDR_VIRT) | ||
| 224 | |||
| 225 | #define SPBA0_IO_ADDRESS(x) \ | ||
| 226 | (((x) - SPBA0_BASE_ADDR) + SPBA0_BASE_ADDR_VIRT) | ||
| 227 | |||
| 228 | #define AIPS2_IO_ADDRESS(x) \ | ||
| 229 | (((x) - AIPS2_BASE_ADDR) + AIPS2_BASE_ADDR_VIRT) | ||
| 230 | |||
| 231 | #define ROMP_IO_ADDRESS(x) \ | ||
| 232 | (((x) - ROMP_BASE_ADDR) + ROMP_BASE_ADDR_VIRT) | ||
| 233 | |||
| 234 | #define AVIC_IO_ADDRESS(x) \ | ||
| 235 | (((x) - AVIC_BASE_ADDR) + AVIC_BASE_ADDR_VIRT) | ||
| 236 | |||
| 237 | #define CS4_IO_ADDRESS(x) \ | ||
| 238 | (((x) - CS4_BASE_ADDR) + CS4_BASE_ADDR_VIRT) | ||
| 239 | |||
| 240 | #define X_MEMC_IO_ADDRESS(x) \ | ||
| 241 | (((x) - X_MEMC_BASE_ADDR) + X_MEMC_BASE_ADDR_VIRT) | ||
| 242 | |||
| 243 | #define PCMCIA_IO_ADDRESS(x) \ | ||
| 244 | (((x) - X_MEMC_BASE_ADDR) + X_MEMC_BASE_ADDR_VIRT) | ||
| 245 | |||
| 246 | /* Start of physical RAM - On many MX31 platforms, this is the first SDRAM bank (CSD0) */ | ||
| 247 | #define PHYS_OFFSET CSD0_BASE_ADDR | ||
| 248 | |||
| 249 | /* | ||
| 250 | * Interrupt numbers | ||
| 251 | */ | ||
| 252 | #define MXC_INT_PEN_ADS7843 0 | ||
| 253 | #define MXC_INT_RESV1 1 | ||
| 254 | #define MXC_INT_CS8900A 2 | ||
| 255 | #define MXC_INT_I2C3 3 | ||
| 256 | #define MXC_INT_I2C2 4 | ||
| 257 | #define MXC_INT_MPEG4_ENCODER 5 | ||
| 258 | #define MXC_INT_RTIC 6 | ||
| 259 | #define MXC_INT_FIRI 7 | ||
| 260 | #define MXC_INT_MMC_SDHC2 8 | ||
| 261 | #define MXC_INT_MMC_SDHC1 9 | ||
| 262 | #define MXC_INT_I2C 10 | ||
| 263 | #define MXC_INT_SSI2 11 | ||
| 264 | #define MXC_INT_SSI1 12 | ||
| 265 | #define MXC_INT_CSPI2 13 | ||
| 266 | #define MXC_INT_CSPI1 14 | ||
| 267 | #define MXC_INT_ATA 15 | ||
| 268 | #define MXC_INT_MBX 16 | ||
| 269 | #define MXC_INT_CSPI3 17 | ||
| 270 | #define MXC_INT_UART3 18 | ||
| 271 | #define MXC_INT_IIM 19 | ||
| 272 | #define MXC_INT_SIM2 20 | ||
| 273 | #define MXC_INT_SIM1 21 | ||
| 274 | #define MXC_INT_RNGA 22 | ||
| 275 | #define MXC_INT_EVTMON 23 | ||
| 276 | #define MXC_INT_KPP 24 | ||
| 277 | #define MXC_INT_RTC 25 | ||
| 278 | #define MXC_INT_PWM 26 | ||
| 279 | #define MXC_INT_EPIT2 27 | ||
| 280 | #define MXC_INT_EPIT1 28 | ||
| 281 | #define MXC_INT_GPT 29 | ||
| 282 | #define MXC_INT_RESV30 30 | ||
| 283 | #define MXC_INT_RESV31 31 | ||
| 284 | #define MXC_INT_UART2 32 | ||
| 285 | #define MXC_INT_NANDFC 33 | ||
| 286 | #define MXC_INT_SDMA 34 | ||
| 287 | #define MXC_INT_USB1 35 | ||
| 288 | #define MXC_INT_USB2 36 | ||
| 289 | #define MXC_INT_USB3 37 | ||
| 290 | #define MXC_INT_USB4 38 | ||
| 291 | #define MXC_INT_MSHC1 39 | ||
| 292 | #define MXC_INT_MSHC2 40 | ||
| 293 | #define MXC_INT_IPU_ERR 41 | ||
| 294 | #define MXC_INT_IPU_SYN 42 | ||
| 295 | #define MXC_INT_RESV43 43 | ||
| 296 | #define MXC_INT_RESV44 44 | ||
| 297 | #define MXC_INT_UART1 45 | ||
| 298 | #define MXC_INT_UART4 46 | ||
| 299 | #define MXC_INT_UART5 47 | ||
| 300 | #define MXC_INT_ECT 48 | ||
| 301 | #define MXC_INT_SCC_SCM 49 | ||
| 302 | #define MXC_INT_SCC_SMN 50 | ||
| 303 | #define MXC_INT_GPIO2 51 | ||
| 304 | #define MXC_INT_GPIO1 52 | ||
| 305 | #define MXC_INT_CCM 53 | ||
| 306 | #define MXC_INT_PCMCIA 54 | ||
| 307 | #define MXC_INT_WDOG 55 | ||
| 308 | #define MXC_INT_GPIO3 56 | ||
| 309 | #define MXC_INT_RESV57 57 | ||
| 310 | #define MXC_INT_EXT_POWER 58 | ||
| 311 | #define MXC_INT_EXT_TEMPER 59 | ||
| 312 | #define MXC_INT_EXT_SENSOR60 60 | ||
| 313 | #define MXC_INT_EXT_SENSOR61 61 | ||
| 314 | #define MXC_INT_EXT_WDOG 62 | ||
| 315 | #define MXC_INT_EXT_TV 63 | ||
| 316 | |||
| 317 | #define MXC_MAX_INT_LINES 64 | ||
| 318 | |||
| 319 | #define MXC_GPIO_INT_BASE MXC_MAX_INT_LINES | ||
| 320 | |||
| 321 | /*! | ||
| 322 | * Number of GPIO port as defined in the IC Spec | ||
| 323 | */ | ||
| 324 | #define GPIO_PORT_NUM 3 | ||
| 325 | /*! | ||
| 326 | * Number of GPIO pins per port | ||
| 327 | */ | ||
| 328 | #define GPIO_NUM_PIN 32 | ||
| 329 | |||
| 330 | #define PROD_SIGNATURE 0x1 /* For MX31 */ | ||
| 331 | |||
| 332 | #define SYSTEM_REV_MIN CHIP_REV_1_0 | ||
| 333 | #define SYSTEM_REV_NUM 3 | ||
| 334 | |||
| 335 | #endif /* __ASM_ARCH_MXC_MX31_H__ */ | ||
diff --git a/include/asm-arm/arch-mxc/mxc.h b/include/asm-arm/arch-mxc/mxc.h new file mode 100644 index 000000000000..0837f1f9ca31 --- /dev/null +++ b/include/asm-arm/arch-mxc/mxc.h | |||
| @@ -0,0 +1,149 @@ | |||
| 1 | /* | ||
| 2 | * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved. | ||
| 3 | */ | ||
| 4 | |||
| 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 | #ifndef __ASM_ARCH_MXC_H__ | ||
| 12 | #define __ASM_ARCH_MXC_H__ | ||
| 13 | |||
| 14 | #ifndef __ASM_ARCH_MXC_HARDWARE_H__ | ||
| 15 | #error "Do not include directly." | ||
| 16 | #endif | ||
| 17 | |||
| 18 | /* | ||
| 19 | ***************************************** | ||
| 20 | * GPT Register definitions * | ||
| 21 | ***************************************** | ||
| 22 | */ | ||
| 23 | #define MXC_GPT_GPTCR IO_ADDRESS(GPT1_BASE_ADDR + 0x00) | ||
| 24 | #define MXC_GPT_GPTPR IO_ADDRESS(GPT1_BASE_ADDR + 0x04) | ||
| 25 | #define MXC_GPT_GPTSR IO_ADDRESS(GPT1_BASE_ADDR + 0x08) | ||
| 26 | #define MXC_GPT_GPTIR IO_ADDRESS(GPT1_BASE_ADDR + 0x0C) | ||
| 27 | #define MXC_GPT_GPTOCR1 IO_ADDRESS(GPT1_BASE_ADDR + 0x10) | ||
| 28 | #define MXC_GPT_GPTOCR2 IO_ADDRESS(GPT1_BASE_ADDR + 0x14) | ||
| 29 | #define MXC_GPT_GPTOCR3 IO_ADDRESS(GPT1_BASE_ADDR + 0x18) | ||
| 30 | #define MXC_GPT_GPTICR1 IO_ADDRESS(GPT1_BASE_ADDR + 0x1C) | ||
| 31 | #define MXC_GPT_GPTICR2 IO_ADDRESS(GPT1_BASE_ADDR + 0x20) | ||
| 32 | #define MXC_GPT_GPTCNT IO_ADDRESS(GPT1_BASE_ADDR + 0x24) | ||
| 33 | |||
| 34 | /*! | ||
| 35 | * GPT Control register bit definitions | ||
| 36 | */ | ||
| 37 | #define GPTCR_FO3 (1 << 31) | ||
| 38 | #define GPTCR_FO2 (1 << 30) | ||
| 39 | #define GPTCR_FO1 (1 << 29) | ||
| 40 | |||
| 41 | #define GPTCR_OM3_SHIFT 26 | ||
| 42 | #define GPTCR_OM3_MASK (7 << GPTCR_OM3_SHIFT) | ||
| 43 | #define GPTCR_OM3_DISCONNECTED (0 << GPTCR_OM3_SHIFT) | ||
| 44 | #define GPTCR_OM3_TOGGLE (1 << GPTCR_OM3_SHIFT) | ||
| 45 | #define GPTCR_OM3_CLEAR (2 << GPTCR_OM3_SHIFT) | ||
| 46 | #define GPTCR_OM3_SET (3 << GPTCR_OM3_SHIFT) | ||
| 47 | #define GPTCR_OM3_GENERATE_LOW (7 << GPTCR_OM3_SHIFT) | ||
| 48 | |||
| 49 | #define GPTCR_OM2_SHIFT 23 | ||
| 50 | #define GPTCR_OM2_MASK (7 << GPTCR_OM2_SHIFT) | ||
| 51 | #define GPTCR_OM2_DISCONNECTED (0 << GPTCR_OM2_SHIFT) | ||
| 52 | #define GPTCR_OM2_TOGGLE (1 << GPTCR_OM2_SHIFT) | ||
| 53 | #define GPTCR_OM2_CLEAR (2 << GPTCR_OM2_SHIFT) | ||
| 54 | #define GPTCR_OM2_SET (3 << GPTCR_OM2_SHIFT) | ||
| 55 | #define GPTCR_OM2_GENERATE_LOW (7 << GPTCR_OM2_SHIFT) | ||
| 56 | |||
| 57 | #define GPTCR_OM1_SHIFT 20 | ||
| 58 | #define GPTCR_OM1_MASK (7 << GPTCR_OM1_SHIFT) | ||
| 59 | #define GPTCR_OM1_DISCONNECTED (0 << GPTCR_OM1_SHIFT) | ||
| 60 | #define GPTCR_OM1_TOGGLE (1 << GPTCR_OM1_SHIFT) | ||
| 61 | #define GPTCR_OM1_CLEAR (2 << GPTCR_OM1_SHIFT) | ||
| 62 | #define GPTCR_OM1_SET (3 << GPTCR_OM1_SHIFT) | ||
| 63 | #define GPTCR_OM1_GENERATE_LOW (7 << GPTCR_OM1_SHIFT) | ||
| 64 | |||
| 65 | #define GPTCR_IM2_SHIFT 18 | ||
| 66 | #define GPTCR_IM2_MASK (3 << GPTCR_IM2_SHIFT) | ||
| 67 | #define GPTCR_IM2_CAPTURE_DISABLE (0 << GPTCR_IM2_SHIFT) | ||
| 68 | #define GPTCR_IM2_CAPTURE_RISING (1 << GPTCR_IM2_SHIFT) | ||
| 69 | #define GPTCR_IM2_CAPTURE_FALLING (2 << GPTCR_IM2_SHIFT) | ||
| 70 | #define GPTCR_IM2_CAPTURE_BOTH (3 << GPTCR_IM2_SHIFT) | ||
| 71 | |||
| 72 | #define GPTCR_IM1_SHIFT 16 | ||
| 73 | #define GPTCR_IM1_MASK (3 << GPTCR_IM1_SHIFT) | ||
| 74 | #define GPTCR_IM1_CAPTURE_DISABLE (0 << GPTCR_IM1_SHIFT) | ||
| 75 | #define GPTCR_IM1_CAPTURE_RISING (1 << GPTCR_IM1_SHIFT) | ||
| 76 | #define GPTCR_IM1_CAPTURE_FALLING (2 << GPTCR_IM1_SHIFT) | ||
| 77 | #define GPTCR_IM1_CAPTURE_BOTH (3 << GPTCR_IM1_SHIFT) | ||
| 78 | |||
| 79 | #define GPTCR_SWR (1 << 15) | ||
| 80 | #define GPTCR_FRR (1 << 9) | ||
| 81 | |||
| 82 | #define GPTCR_CLKSRC_SHIFT 6 | ||
| 83 | #define GPTCR_CLKSRC_MASK (7 << GPTCR_CLKSRC_SHIFT) | ||
| 84 | #define GPTCR_CLKSRC_NOCLOCK (0 << GPTCR_CLKSRC_SHIFT) | ||
| 85 | #define GPTCR_CLKSRC_HIGHFREQ (2 << GPTCR_CLKSRC_SHIFT) | ||
| 86 | #define GPTCR_CLKSRC_CLKIN (3 << GPTCR_CLKSRC_SHIFT) | ||
| 87 | #define GPTCR_CLKSRC_CLK32K (7 << GPTCR_CLKSRC_SHIFT) | ||
| 88 | |||
| 89 | #define GPTCR_STOPEN (1 << 5) | ||
| 90 | #define GPTCR_DOZEN (1 << 4) | ||
| 91 | #define GPTCR_WAITEN (1 << 3) | ||
| 92 | #define GPTCR_DBGEN (1 << 2) | ||
| 93 | |||
| 94 | #define GPTCR_ENMOD (1 << 1) | ||
| 95 | #define GPTCR_ENABLE (1 << 0) | ||
| 96 | |||
| 97 | #define GPTSR_OF1 (1 << 0) | ||
| 98 | #define GPTSR_OF2 (1 << 1) | ||
| 99 | #define GPTSR_OF3 (1 << 2) | ||
| 100 | #define GPTSR_IF1 (1 << 3) | ||
| 101 | #define GPTSR_IF2 (1 << 4) | ||
| 102 | #define GPTSR_ROV (1 << 5) | ||
| 103 | |||
| 104 | #define GPTIR_OF1IE GPTSR_OF1 | ||
| 105 | #define GPTIR_OF2IE GPTSR_OF2 | ||
| 106 | #define GPTIR_OF3IE GPTSR_OF3 | ||
| 107 | #define GPTIR_IF1IE GPTSR_IF1 | ||
| 108 | #define GPTIR_IF2IE GPTSR_IF2 | ||
| 109 | #define GPTIR_ROVIE GPTSR_ROV | ||
| 110 | |||
| 111 | /* | ||
| 112 | ***************************************** | ||
| 113 | * AVIC Registers * | ||
| 114 | ***************************************** | ||
| 115 | */ | ||
| 116 | #define AVIC_BASE IO_ADDRESS(AVIC_BASE_ADDR) | ||
| 117 | #define AVIC_INTCNTL (AVIC_BASE + 0x00) /* int control reg */ | ||
| 118 | #define AVIC_NIMASK (AVIC_BASE + 0x04) /* int mask reg */ | ||
| 119 | #define AVIC_INTENNUM (AVIC_BASE + 0x08) /* int enable number reg */ | ||
| 120 | #define AVIC_INTDISNUM (AVIC_BASE + 0x0C) /* int disable number reg */ | ||
| 121 | #define AVIC_INTENABLEH (AVIC_BASE + 0x10) /* int enable reg high */ | ||
| 122 | #define AVIC_INTENABLEL (AVIC_BASE + 0x14) /* int enable reg low */ | ||
| 123 | #define AVIC_INTTYPEH (AVIC_BASE + 0x18) /* int type reg high */ | ||
| 124 | #define AVIC_INTTYPEL (AVIC_BASE + 0x1C) /* int type reg low */ | ||
| 125 | #define AVIC_NIPRIORITY7 (AVIC_BASE + 0x20) /* norm int priority lvl7 */ | ||
| 126 | #define AVIC_NIPRIORITY6 (AVIC_BASE + 0x24) /* norm int priority lvl6 */ | ||
| 127 | #define AVIC_NIPRIORITY5 (AVIC_BASE + 0x28) /* norm int priority lvl5 */ | ||
| 128 | #define AVIC_NIPRIORITY4 (AVIC_BASE + 0x2C) /* norm int priority lvl4 */ | ||
| 129 | #define AVIC_NIPRIORITY3 (AVIC_BASE + 0x30) /* norm int priority lvl3 */ | ||
| 130 | #define AVIC_NIPRIORITY2 (AVIC_BASE + 0x34) /* norm int priority lvl2 */ | ||
| 131 | #define AVIC_NIPRIORITY1 (AVIC_BASE + 0x38) /* norm int priority lvl1 */ | ||
| 132 | #define AVIC_NIPRIORITY0 (AVIC_BASE + 0x3C) /* norm int priority lvl0 */ | ||
| 133 | #define AVIC_NIVECSR (AVIC_BASE + 0x40) /* norm int vector/status */ | ||
| 134 | #define AVIC_FIVECSR (AVIC_BASE + 0x44) /* fast int vector/status */ | ||
| 135 | #define AVIC_INTSRCH (AVIC_BASE + 0x48) /* int source reg high */ | ||
| 136 | #define AVIC_INTSRCL (AVIC_BASE + 0x4C) /* int source reg low */ | ||
| 137 | #define AVIC_INTFRCH (AVIC_BASE + 0x50) /* int force reg high */ | ||
| 138 | #define AVIC_INTFRCL (AVIC_BASE + 0x54) /* int force reg low */ | ||
| 139 | #define AVIC_NIPNDH (AVIC_BASE + 0x58) /* norm int pending high */ | ||
| 140 | #define AVIC_NIPNDL (AVIC_BASE + 0x5C) /* norm int pending low */ | ||
| 141 | #define AVIC_FIPNDH (AVIC_BASE + 0x60) /* fast int pending high */ | ||
| 142 | #define AVIC_FIPNDL (AVIC_BASE + 0x64) /* fast int pending low */ | ||
| 143 | |||
| 144 | #define SYSTEM_PREV_REG IO_ADDRESS(IIM_BASE_ADDR + 0x20) | ||
| 145 | #define SYSTEM_SREV_REG IO_ADDRESS(IIM_BASE_ADDR + 0x24) | ||
| 146 | #define IIM_PROD_REV_SH 3 | ||
| 147 | #define IIM_PROD_REV_LEN 5 | ||
| 148 | |||
| 149 | #endif /* __ASM_ARCH_MXC_H__ */ | ||
diff --git a/include/asm-arm/arch-mxc/system.h b/include/asm-arm/arch-mxc/system.h new file mode 100644 index 000000000000..109956b41aca --- /dev/null +++ b/include/asm-arm/arch-mxc/system.h | |||
| @@ -0,0 +1,50 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 1999 ARM Limited | ||
| 3 | * Copyright (C) 2000 Deep Blue Solutions Ltd | ||
| 4 | * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved. | ||
| 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 as published by | ||
| 8 | * the Free Software Foundation; either version 2 of the License, or | ||
| 9 | * (at your option) any later version. | ||
| 10 | * | ||
| 11 | * This program is distributed in the hope that it will be useful, | ||
| 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 14 | * GNU General Public License for more details. | ||
| 15 | * | ||
| 16 | * You should have received a copy of the GNU General Public License | ||
| 17 | * along with this program; if not, write to the Free Software | ||
| 18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 19 | */ | ||
| 20 | |||
| 21 | #ifndef __ASM_ARCH_MXC_SYSTEM_H__ | ||
| 22 | #define __ASM_ARCH_MXC_SYSTEM_H__ | ||
| 23 | |||
| 24 | /*! | ||
| 25 | * @file system.h | ||
| 26 | * @brief This file contains idle and reset functions. | ||
| 27 | * | ||
| 28 | * @ingroup System | ||
| 29 | */ | ||
| 30 | |||
| 31 | /*! | ||
| 32 | * This function puts the CPU into idle mode. It is called by default_idle() | ||
| 33 | * in process.c file. | ||
| 34 | */ | ||
| 35 | static inline void arch_idle(void) | ||
| 36 | { | ||
| 37 | cpu_do_idle(); | ||
| 38 | } | ||
| 39 | |||
| 40 | /* | ||
| 41 | * This function resets the system. It is called by machine_restart(). | ||
| 42 | * | ||
| 43 | * @param mode indicates different kinds of resets | ||
| 44 | */ | ||
| 45 | static inline void arch_reset(char mode) | ||
| 46 | { | ||
| 47 | cpu_reset(0); | ||
| 48 | } | ||
| 49 | |||
| 50 | #endif /* __ASM_ARCH_MXC_SYSTEM_H__ */ | ||
diff --git a/include/asm-arm/arch-mxc/timex.h b/include/asm-arm/arch-mxc/timex.h new file mode 100644 index 000000000000..59019fa58f82 --- /dev/null +++ b/include/asm-arm/arch-mxc/timex.h | |||
| @@ -0,0 +1,25 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 1999 ARM Limited | ||
| 3 | * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved. | ||
| 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 | * This program is distributed in the hope that it will be useful, | ||
| 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 13 | * GNU General Public License for more details. | ||
| 14 | * | ||
| 15 | * You should have received a copy of the GNU General Public License | ||
| 16 | * along with this program; if not, write to the Free Software | ||
| 17 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 18 | */ | ||
| 19 | |||
| 20 | #ifndef __ASM_ARCH_MXC_TIMEX_H__ | ||
| 21 | #define __ASM_ARCH_MXC_TIMEX_H__ | ||
| 22 | |||
| 23 | #include <asm/hardware.h> /* for CLOCK_TICK_RATE */ | ||
| 24 | |||
| 25 | #endif /* __ASM_ARCH_MXC_TIMEX_H__ */ | ||
diff --git a/include/asm-arm/arch-mxc/uncompress.h b/include/asm-arm/arch-mxc/uncompress.h new file mode 100644 index 000000000000..ec5787d0e78c --- /dev/null +++ b/include/asm-arm/arch-mxc/uncompress.h | |||
| @@ -0,0 +1,79 @@ | |||
| 1 | /* | ||
| 2 | * include/asm-arm/arch-mxc/uncompress.h | ||
| 3 | * | ||
| 4 | * | ||
| 5 | * | ||
| 6 | * Copyright (C) 1999 ARM Limited | ||
| 7 | * Copyright (C) Shane Nay (shane@minirl.com) | ||
| 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 as published by | ||
| 11 | * the Free Software Foundation; either version 2 of the License, or | ||
| 12 | * (at your option) any later version. | ||
| 13 | * | ||
| 14 | * This program is distributed in the hope that it will be useful, | ||
| 15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 17 | * GNU General Public License for more details. | ||
| 18 | * | ||
| 19 | * You should have received a copy of the GNU General Public License | ||
| 20 | * along with this program; if not, write to the Free Software | ||
| 21 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 22 | */ | ||
| 23 | #ifndef __ASM_ARCH_MXC_UNCOMPRESS_H__ | ||
| 24 | #define __ASM_ARCH_MXC_UNCOMPRESS_H__ | ||
| 25 | |||
| 26 | #define __MXC_BOOT_UNCOMPRESS | ||
| 27 | |||
| 28 | #include <asm/hardware.h> | ||
| 29 | #include <asm/processor.h> | ||
| 30 | |||
| 31 | #define UART(x) (*(volatile unsigned long *)(serial_port + (x))) | ||
| 32 | |||
| 33 | #define USR2 0x98 | ||
| 34 | #define USR2_TXFE (1<<14) | ||
| 35 | #define TXR 0x40 | ||
| 36 | #define UCR1 0x80 | ||
| 37 | #define UCR1_UARTEN 1 | ||
| 38 | |||
| 39 | /* | ||
| 40 | * The following code assumes the serial port has already been | ||
| 41 | * initialized by the bootloader. We search for the first enabled | ||
| 42 | * port in the most probable order. If you didn't setup a port in | ||
| 43 | * your bootloader then nothing will appear (which might be desired). | ||
| 44 | * | ||
| 45 | * This does not append a newline | ||
| 46 | */ | ||
| 47 | |||
| 48 | static void putc(int ch) | ||
| 49 | { | ||
| 50 | static unsigned long serial_port = 0; | ||
| 51 | |||
| 52 | if (unlikely(serial_port == 0)) { | ||
| 53 | do { | ||
| 54 | serial_port = UART1_BASE_ADDR; | ||
| 55 | if (UART(UCR1) & UCR1_UARTEN) | ||
| 56 | break; | ||
| 57 | serial_port = UART2_BASE_ADDR; | ||
| 58 | if (UART(UCR1) & UCR1_UARTEN) | ||
| 59 | break; | ||
| 60 | return; | ||
| 61 | } while (0); | ||
| 62 | } | ||
| 63 | |||
| 64 | while (!(UART(USR2) & USR2_TXFE)) | ||
| 65 | cpu_relax(); | ||
| 66 | |||
| 67 | UART(TXR) = ch; | ||
| 68 | } | ||
| 69 | |||
| 70 | #define flush() do { } while (0) | ||
| 71 | |||
| 72 | /* | ||
| 73 | * nothing to do | ||
| 74 | */ | ||
| 75 | #define arch_decomp_setup() | ||
| 76 | |||
| 77 | #define arch_decomp_wdog() | ||
| 78 | |||
| 79 | #endif /* __ASM_ARCH_MXC_UNCOMPRESS_H__ */ | ||
diff --git a/include/asm-arm/arch-mxc/vmalloc.h b/include/asm-arm/arch-mxc/vmalloc.h new file mode 100644 index 000000000000..83a73da895eb --- /dev/null +++ b/include/asm-arm/arch-mxc/vmalloc.h | |||
| @@ -0,0 +1,36 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2000 Russell King. | ||
| 3 | * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved. | ||
| 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 | * This program is distributed in the hope that it will be useful, | ||
| 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 13 | * GNU General Public License for more details. | ||
| 14 | * | ||
| 15 | * You should have received a copy of the GNU General Public License | ||
| 16 | * along with this program; if not, write to the Free Software | ||
| 17 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 18 | */ | ||
| 19 | |||
| 20 | #ifndef __ASM_ARCH_MXC_VMALLOC_H__ | ||
| 21 | #define __ASM_ARCH_MXC_VMALLOC_H__ | ||
| 22 | |||
| 23 | /*! | ||
| 24 | * @file vmalloc.h | ||
| 25 | * | ||
| 26 | * @brief This file contains platform specific macros for vmalloc. | ||
| 27 | * | ||
| 28 | * @ingroup System | ||
| 29 | */ | ||
| 30 | |||
| 31 | /*! | ||
| 32 | * vmalloc ending address | ||
| 33 | */ | ||
| 34 | #define VMALLOC_END 0xF4000000 | ||
| 35 | |||
| 36 | #endif /* __ASM_ARCH_MXC_VMALLOC_H__ */ | ||
diff --git a/include/asm-arm/arch-ns9xxx/regs-bbu.h b/include/asm-arm/arch-ns9xxx/regs-bbu.h index e26269546240..7ee194dc6354 100644 --- a/include/asm-arm/arch-ns9xxx/regs-bbu.h +++ b/include/asm-arm/arch-ns9xxx/regs-bbu.h | |||
| @@ -15,7 +15,31 @@ | |||
| 15 | 15 | ||
| 16 | /* BBus Utility */ | 16 | /* BBus Utility */ |
| 17 | 17 | ||
| 18 | /* GPIO Configuration Register */ | 18 | /* GPIO Configuration Registers block 1 */ |
| 19 | #define BBU_GC(x) __REG2(0x9060000c, (x)) | 19 | /* NOTE: the HRM starts counting at 1 for the GPIO registers, here the start is |
| 20 | * at 0 for each block. That is, BBU_GCONFb1(0) is GPIO Configuration Register | ||
| 21 | * #1, BBU_GCONFb2(0) is GPIO Configuration Register #8. */ | ||
| 22 | #define BBU_GCONFb1(x) __REG2(0x90600010, (x)) | ||
| 23 | #define BBU_GCONFb2(x) __REG2(0x90600100, (x)) | ||
| 24 | |||
| 25 | #define BBU_GCONFx_DIR(m) __REGBIT(3 + (((m) & 7) << 2)) | ||
| 26 | #define BBU_GCONFx_DIR_INPUT(m) __REGVAL(BBU_GCONFx_DIR(m), 0) | ||
| 27 | #define BBU_GCONFx_DIR_OUTPUT(m) __REGVAL(BBU_GCONFx_DIR(m), 1) | ||
| 28 | #define BBU_GCONFx_INV(m) __REGBIT(2 + (((m) & 7) << 2)) | ||
| 29 | #define BBU_GCONFx_INV_NO(m) __REGVAL(BBU_GCONFx_INV(m), 0) | ||
| 30 | #define BBU_GCONFx_INV_YES(m) __REGVAL(BBU_GCONFx_INV(m), 1) | ||
| 31 | #define BBU_GCONFx_FUNC(m) __REGBITS(1 + (((m) & 7) << 2), ((m) & 7) << 2) | ||
| 32 | #define BBU_GCONFx_FUNC_0(m) __REGVAL(BBU_GCONFx_FUNC(m), 0) | ||
| 33 | #define BBU_GCONFx_FUNC_1(m) __REGVAL(BBU_GCONFx_FUNC(m), 1) | ||
| 34 | #define BBU_GCONFx_FUNC_2(m) __REGVAL(BBU_GCONFx_FUNC(m), 2) | ||
| 35 | #define BBU_GCONFx_FUNC_3(m) __REGVAL(BBU_GCONFx_FUNC(m), 3) | ||
| 36 | |||
| 37 | #define BBU_GCTRL1 __REG(0x90600030) | ||
| 38 | #define BBU_GCTRL2 __REG(0x90600034) | ||
| 39 | #define BBU_GCTRL3 __REG(0x90600120) | ||
| 40 | |||
| 41 | #define BBU_GSTAT1 __REG(0x90600040) | ||
| 42 | #define BBU_GSTAT2 __REG(0x90600044) | ||
| 43 | #define BBU_GSTAT3 __REG(0x90600130) | ||
| 20 | 44 | ||
| 21 | #endif /* ifndef __ASM_ARCH_REGSBBU_H */ | 45 | #endif /* ifndef __ASM_ARCH_REGSBBU_H */ |
diff --git a/include/asm-arm/arch-ns9xxx/regs-mem.h b/include/asm-arm/arch-ns9xxx/regs-mem.h index 8ed8448767b9..fb455a0ed845 100644 --- a/include/asm-arm/arch-ns9xxx/regs-mem.h +++ b/include/asm-arm/arch-ns9xxx/regs-mem.h | |||
| @@ -79,9 +79,9 @@ | |||
| 79 | #define MEM_SMC(x) __REG2(0xa0700200, (x) << 3) | 79 | #define MEM_SMC(x) __REG2(0xa0700200, (x) << 3) |
| 80 | 80 | ||
| 81 | /* Static Memory Configuration Register x: Write protect */ | 81 | /* Static Memory Configuration Register x: Write protect */ |
| 82 | #define MEM_SMC_WSMC __REGBIT(20) | 82 | #define MEM_SMC_PSMC __REGBIT(20) |
| 83 | #define MEM_SMC_WSMC_OFF __REGVAL(MEM_SMC_WSMC, 0) | 83 | #define MEM_SMC_PSMC_OFF __REGVAL(MEM_SMC_PSMC, 0) |
| 84 | #define MEM_SMC_WSMC_ON __REGVAL(MEM_SMC_WSMC, 1) | 84 | #define MEM_SMC_PSMC_ON __REGVAL(MEM_SMC_PSMC, 1) |
| 85 | 85 | ||
| 86 | /* Static Memory Configuration Register x: Buffer enable */ | 86 | /* Static Memory Configuration Register x: Buffer enable */ |
| 87 | #define MEM_SMC_BSMC __REGBIT(19) | 87 | #define MEM_SMC_BSMC __REGBIT(19) |
diff --git a/include/asm-arm/arch-ns9xxx/regs-sys.h b/include/asm-arm/arch-ns9xxx/regs-sys.h index a42546aeb92a..749262f86204 100644 --- a/include/asm-arm/arch-ns9xxx/regs-sys.h +++ b/include/asm-arm/arch-ns9xxx/regs-sys.h | |||
| @@ -64,7 +64,7 @@ | |||
| 64 | 64 | ||
| 65 | /* Timer x Control register: Timer enable */ | 65 | /* Timer x Control register: Timer enable */ |
| 66 | #define SYS_TCx_TEN __REGBIT(15) | 66 | #define SYS_TCx_TEN __REGBIT(15) |
| 67 | #define SYS_TCx_TEN_DIS __REGVAL(SYS_TCx_TEN, 1) | 67 | #define SYS_TCx_TEN_DIS __REGVAL(SYS_TCx_TEN, 0) |
| 68 | #define SYS_TCx_TEN_EN __REGVAL(SYS_TCx_TEN, 1) | 68 | #define SYS_TCx_TEN_EN __REGVAL(SYS_TCx_TEN, 1) |
| 69 | 69 | ||
| 70 | /* Timer x Control register: CPU debug mode */ | 70 | /* Timer x Control register: CPU debug mode */ |
diff --git a/include/asm-arm/arch-pxa/pm.h b/include/asm-arm/arch-pxa/pm.h index 52243a62c4e7..6903db7fae15 100644 --- a/include/asm-arm/arch-pxa/pm.h +++ b/include/asm-arm/arch-pxa/pm.h | |||
| @@ -7,5 +7,19 @@ | |||
| 7 | * | 7 | * |
| 8 | */ | 8 | */ |
| 9 | 9 | ||
| 10 | extern int pxa_pm_prepare(suspend_state_t state); | 10 | struct pxa_cpu_pm_fns { |
| 11 | int save_size; | ||
| 12 | void (*save)(unsigned long *); | ||
| 13 | void (*restore)(unsigned long *); | ||
| 14 | int (*valid)(suspend_state_t state); | ||
| 15 | void (*enter)(suspend_state_t state); | ||
| 16 | }; | ||
| 17 | |||
| 18 | extern struct pxa_cpu_pm_fns *pxa_cpu_pm_fns; | ||
| 19 | |||
| 20 | /* sleep.S */ | ||
| 21 | extern void pxa25x_cpu_suspend(unsigned int); | ||
| 22 | extern void pxa27x_cpu_suspend(unsigned int); | ||
| 23 | extern void pxa_cpu_resume(void); | ||
| 24 | |||
| 11 | extern int pxa_pm_enter(suspend_state_t state); | 25 | extern int pxa_pm_enter(suspend_state_t state); |
diff --git a/include/asm-arm/arch-s3c2400/map.h b/include/asm-arm/arch-s3c2400/map.h new file mode 100644 index 000000000000..1184d907b31e --- /dev/null +++ b/include/asm-arm/arch-s3c2400/map.h | |||
| @@ -0,0 +1,66 @@ | |||
| 1 | /* linux/include/asm-arm/arch-s3c2400/map.h | ||
| 2 | * | ||
| 3 | * Copyright 2003,2007 Simtec Electronics | ||
| 4 | * http://armlinux.simtec.co.uk/ | ||
| 5 | * Ben Dooks <ben@simtec.co.uk> | ||
| 6 | * | ||
| 7 | * Copyright 2003, Lucas Correia Villa Real | ||
| 8 | * | ||
| 9 | * S3C2400 - Memory map definitions | ||
| 10 | * | ||
| 11 | * This program is free software; you can redistribute it and/or modify | ||
| 12 | * it under the terms of the GNU General Public License version 2 as | ||
| 13 | * published by the Free Software Foundation. | ||
| 14 | */ | ||
| 15 | |||
| 16 | #define S3C2400_PA_MEMCTRL (0x14000000) | ||
| 17 | #define S3C2400_PA_USBHOST (0x14200000) | ||
| 18 | #define S3C2400_PA_IRQ (0x14400000) | ||
| 19 | #define S3C2400_PA_DMA (0x14600000) | ||
| 20 | #define S3C2400_PA_CLKPWR (0x14800000) | ||
| 21 | #define S3C2400_PA_LCD (0x14A00000) | ||
| 22 | #define S3C2400_PA_UART (0x15000000) | ||
| 23 | #define S3C2400_PA_TIMER (0x15100000) | ||
| 24 | #define S3C2400_PA_USBDEV (0x15200140) | ||
| 25 | #define S3C2400_PA_WATCHDOG (0x15300000) | ||
| 26 | #define S3C2400_PA_IIC (0x15400000) | ||
| 27 | #define S3C2400_PA_IIS (0x15508000) | ||
| 28 | #define S3C2400_PA_GPIO (0x15600000) | ||
| 29 | #define S3C2400_PA_RTC (0x15700040) | ||
| 30 | #define S3C2400_PA_ADC (0x15800000) | ||
| 31 | #define S3C2400_PA_SPI (0x15900000) | ||
| 32 | |||
| 33 | #define S3C2400_PA_MMC (0x15A00000) | ||
| 34 | #define S3C2400_SZ_MMC SZ_1M | ||
| 35 | |||
| 36 | /* physical addresses of all the chip-select areas */ | ||
| 37 | |||
| 38 | #define S3C2400_CS0 (0x00000000) | ||
| 39 | #define S3C2400_CS1 (0x02000000) | ||
| 40 | #define S3C2400_CS2 (0x04000000) | ||
| 41 | #define S3C2400_CS3 (0x06000000) | ||
| 42 | #define S3C2400_CS4 (0x08000000) | ||
| 43 | #define S3C2400_CS5 (0x0A000000) | ||
| 44 | #define S3C2400_CS6 (0x0C000000) | ||
| 45 | #define S3C2400_CS7 (0x0E000000) | ||
| 46 | |||
| 47 | #define S3C2400_SDRAM_PA (S3C2400_CS6) | ||
| 48 | |||
| 49 | /* Use a single interface for common resources between S3C24XX cpus */ | ||
| 50 | |||
| 51 | #define S3C24XX_PA_IRQ S3C2400_PA_IRQ | ||
| 52 | #define S3C24XX_PA_MEMCTRL S3C2400_PA_MEMCTRL | ||
| 53 | #define S3C24XX_PA_USBHOST S3C2400_PA_USBHOST | ||
| 54 | #define S3C24XX_PA_DMA S3C2400_PA_DMA | ||
| 55 | #define S3C24XX_PA_CLKPWR S3C2400_PA_CLKPWR | ||
| 56 | #define S3C24XX_PA_LCD S3C2400_PA_LCD | ||
| 57 | #define S3C24XX_PA_UART S3C2400_PA_UART | ||
| 58 | #define S3C24XX_PA_TIMER S3C2400_PA_TIMER | ||
| 59 | #define S3C24XX_PA_USBDEV S3C2400_PA_USBDEV | ||
| 60 | #define S3C24XX_PA_WATCHDOG S3C2400_PA_WATCHDOG | ||
| 61 | #define S3C24XX_PA_IIC S3C2400_PA_IIC | ||
| 62 | #define S3C24XX_PA_IIS S3C2400_PA_IIS | ||
| 63 | #define S3C24XX_PA_GPIO S3C2400_PA_GPIO | ||
| 64 | #define S3C24XX_PA_RTC S3C2400_PA_RTC | ||
| 65 | #define S3C24XX_PA_ADC S3C2400_PA_ADC | ||
| 66 | #define S3C24XX_PA_SPI S3C2400_PA_SPI | ||
diff --git a/include/asm-arm/arch-s3c2400/memory.h b/include/asm-arm/arch-s3c2400/memory.h new file mode 100644 index 000000000000..fb0381dde704 --- /dev/null +++ b/include/asm-arm/arch-s3c2400/memory.h | |||
| @@ -0,0 +1,23 @@ | |||
| 1 | /* linux/include/asm-arm/arch-s3c2400/memory.h | ||
| 2 | * from linux/include/asm-arm/arch-rpc/memory.h | ||
| 3 | * | ||
| 4 | * Copyright 2007 Simtec Electronics | ||
| 5 | * http://armlinux.simtec.co.uk/ | ||
| 6 | * Ben Dooks <ben@simtec.co.uk> | ||
| 7 | * | ||
| 8 | * Copyright (C) 1996,1997,1998 Russell King. | ||
| 9 | * | ||
| 10 | * This program is free software; you can redistribute it and/or modify | ||
| 11 | * it under the terms of the GNU General Public License version 2 as | ||
| 12 | * published by the Free Software Foundation. | ||
| 13 | */ | ||
| 14 | |||
| 15 | #ifndef __ASM_ARCH_MEMORY_H | ||
| 16 | #define __ASM_ARCH_MEMORY_H | ||
| 17 | |||
| 18 | #define PHYS_OFFSET UL(0x0C000000) | ||
| 19 | |||
| 20 | #define __virt_to_bus(x) __virt_to_phys(x) | ||
| 21 | #define __bus_to_virt(x) __phys_to_virt(x) | ||
| 22 | |||
| 23 | #endif | ||
diff --git a/include/asm-arm/arch-s3c2410/debug-macro.S b/include/asm-arm/arch-s3c2410/debug-macro.S index 93064860e0e5..9c8cd9abb82b 100644 --- a/include/asm-arm/arch-s3c2410/debug-macro.S +++ b/include/asm-arm/arch-s3c2410/debug-macro.S | |||
| @@ -13,32 +13,23 @@ | |||
| 13 | */ | 13 | */ |
| 14 | 14 | ||
| 15 | #include <asm/arch/map.h> | 15 | #include <asm/arch/map.h> |
| 16 | #include <asm/arch/regs-serial.h> | ||
| 17 | #include <asm/arch/regs-gpio.h> | 16 | #include <asm/arch/regs-gpio.h> |
| 17 | #include <asm/plat-s3c/regs-serial.h> | ||
| 18 | 18 | ||
| 19 | #define S3C2410_UART1_OFF (0x4000) | 19 | #define S3C2410_UART1_OFF (0x4000) |
| 20 | #define SHIFT_2440TXF (14-9) | 20 | #define SHIFT_2440TXF (14-9) |
| 21 | 21 | ||
| 22 | .macro addruart, rx | 22 | .macro addruart, rx |
| 23 | mrc p15, 0, \rx, c1, c0 | 23 | mrc p15, 0, \rx, c1, c0 |
| 24 | tst \rx, #1 | 24 | tst \rx, #1 |
| 25 | ldreq \rx, = S3C24XX_PA_UART | 25 | ldreq \rx, = S3C24XX_PA_UART |
| 26 | ldrne \rx, = S3C24XX_VA_UART | 26 | ldrne \rx, = S3C24XX_VA_UART |
| 27 | #if CONFIG_DEBUG_S3C2410_UART != 0 | 27 | #if CONFIG_DEBUG_S3C_UART != 0 |
| 28 | add \rx, \rx, #(S3C2410_UART1_OFF * CONFIG_DEBUG_S3C2410_UART) | 28 | add \rx, \rx, #(S3C2410_UART1_OFF * CONFIG_DEBUG_S3C_UART) |
| 29 | #endif | 29 | #endif |
| 30 | .endm | 30 | .endm |
| 31 | 31 | ||
| 32 | .macro senduart,rd,rx | 32 | .macro fifo_full_s3c24xx rd, rx |
| 33 | strb \rd, [\rx, # S3C2410_UTXH ] | ||
| 34 | .endm | ||
| 35 | |||
| 36 | .macro busyuart, rd, rx | ||
| 37 | ldr \rd, [ \rx, # S3C2410_UFCON ] | ||
| 38 | tst \rd, #S3C2410_UFCON_FIFOMODE @ fifo enabled? | ||
| 39 | beq 1001f @ | ||
| 40 | @ FIFO enabled... | ||
| 41 | 1003: | ||
| 42 | @ check for arm920 vs arm926. currently assume all arm926 | 33 | @ check for arm920 vs arm926. currently assume all arm926 |
| 43 | @ devices have an 64 byte FIFO identical to the s3c2440 | 34 | @ devices have an 64 byte FIFO identical to the s3c2440 |
| 44 | mrc p15, 0, \rd, c0, c0 | 35 | mrc p15, 0, \rd, c0, c0 |
| @@ -57,25 +48,22 @@ | |||
| 57 | ldr \rd, [ \rx, # S3C2410_UFSTAT ] | 48 | ldr \rd, [ \rx, # S3C2410_UFSTAT ] |
| 58 | moveq \rd, \rd, lsr #SHIFT_2440TXF | 49 | moveq \rd, \rd, lsr #SHIFT_2440TXF |
| 59 | tst \rd, #S3C2410_UFSTAT_TXFULL | 50 | tst \rd, #S3C2410_UFSTAT_TXFULL |
| 60 | bne 1003b | 51 | .endm |
| 61 | b 1002f | ||
| 62 | |||
| 63 | 1001: | ||
| 64 | @ busy waiting for non fifo | ||
| 65 | ldr \rd, [ \rx, # S3C2410_UTRSTAT ] | ||
| 66 | tst \rd, #S3C2410_UTRSTAT_TXFE | ||
| 67 | beq 1001b | ||
| 68 | 52 | ||
| 69 | 1002: @ exit busyuart | 53 | .macro fifo_full_s3c2410 rd, rx |
| 70 | .endm | 54 | ldr \rd, [ \rx, # S3C2410_UFSTAT ] |
| 55 | tst \rd, #S3C2410_UFSTAT_TXFULL | ||
| 56 | .endm | ||
| 71 | 57 | ||
| 72 | .macro waituart,rd,rx | 58 | /* fifo level reading */ |
| 73 | 59 | ||
| 74 | ldr \rd, [ \rx, # S3C2410_UFCON ] | 60 | .macro fifo_level_s3c24xx rd, rx |
| 75 | tst \rd, #S3C2410_UFCON_FIFOMODE @ fifo enabled? | 61 | @ check for arm920 vs arm926. currently assume all arm926 |
| 76 | beq 1001f @ | 62 | @ devices have an 64 byte FIFO identical to the s3c2440 |
| 77 | @ FIFO enabled... | 63 | mrc p15, 0, \rd, c0, c0 |
| 78 | 1003: | 64 | and \rd, \rd, #0xff0 |
| 65 | teq \rd, #0x260 | ||
| 66 | beq 10000f | ||
| 79 | mrc p15, 0, \rd, c1, c0 | 67 | mrc p15, 0, \rd, c1, c0 |
| 80 | tst \rd, #1 | 68 | tst \rd, #1 |
| 81 | addeq \rd, \rx, #(S3C24XX_PA_GPIO - S3C24XX_PA_UART) | 69 | addeq \rd, \rx, #(S3C24XX_PA_GPIO - S3C24XX_PA_UART) |
| @@ -85,18 +73,32 @@ | |||
| 85 | and \rd, \rd, #0x00ff0000 | 73 | and \rd, \rd, #0x00ff0000 |
| 86 | teq \rd, #0x00440000 @ is it 2440? | 74 | teq \rd, #0x00440000 @ is it 2440? |
| 87 | 75 | ||
| 76 | 10000: | ||
| 88 | ldr \rd, [ \rx, # S3C2410_UFSTAT ] | 77 | ldr \rd, [ \rx, # S3C2410_UFSTAT ] |
| 89 | andne \rd, \rd, #S3C2410_UFSTAT_TXMASK | 78 | andne \rd, \rd, #S3C2410_UFSTAT_TXMASK |
| 90 | andeq \rd, \rd, #S3C2440_UFSTAT_TXMASK | 79 | andeq \rd, \rd, #S3C2440_UFSTAT_TXMASK |
| 91 | teq \rd, #0 | 80 | .endm |
| 92 | bne 1003b | 81 | |
| 93 | b 1002f | 82 | .macro fifo_level_s3c2410 rd, rx |
| 83 | ldr \rd, [ \rx, # S3C2410_UFSTAT ] | ||
| 84 | and \rd, \rd, #S3C2410_UFSTAT_TXMASK | ||
| 85 | .endm | ||
| 86 | |||
| 87 | /* Select the correct implementation depending on the configuration. The | ||
| 88 | * S3C2440 will get selected by default, as these are the most widely | ||
| 89 | * used variants of these | ||
| 90 | */ | ||
| 91 | |||
| 92 | #if defined(CONFIG_CPU_LLSERIAL_S3C2410_ONLY) | ||
| 93 | #define fifo_full fifo_full_s3c2410 | ||
| 94 | #define fifo_level fifo_level_s3c2410 | ||
| 95 | #warning 2410only | ||
| 96 | #elif !defined(CONFIG_CPU_LLSERIAL_S3C2440_ONLY) | ||
| 97 | #define fifo_full fifo_full_s3c24xx | ||
| 98 | #define fifo_level fifo_level_s3c24xx | ||
| 99 | #warning generic | ||
| 100 | #endif | ||
| 94 | 101 | ||
| 95 | 1001: | 102 | /* include the reset of the code which will do the work */ |
| 96 | @ idle waiting for non fifo | ||
| 97 | ldr \rd, [ \rx, # S3C2410_UTRSTAT ] | ||
| 98 | tst \rd, #S3C2410_UTRSTAT_TXFE | ||
| 99 | beq 1001b | ||
| 100 | 103 | ||
| 101 | 1002: @ exit busyuart | 104 | #include <asm/plat-s3c/debug-macro.S> |
| 102 | .endm | ||
diff --git a/include/asm-arm/arch-s3c2410/map.h b/include/asm-arm/arch-s3c2410/map.h index 19e77f038042..b33ed3b05ef5 100644 --- a/include/asm-arm/arch-s3c2410/map.h +++ b/include/asm-arm/arch-s3c2410/map.h | |||
| @@ -13,58 +13,36 @@ | |||
| 13 | #ifndef __ASM_ARCH_MAP_H | 13 | #ifndef __ASM_ARCH_MAP_H |
| 14 | #define __ASM_ARCH_MAP_H | 14 | #define __ASM_ARCH_MAP_H |
| 15 | 15 | ||
| 16 | /* we have a bit of a tight squeeze to fit all our registers from | 16 | #include <asm/plat-s3c/map.h> |
| 17 | * 0xF00000000 upwards, since we use all of the nGCS space in some | ||
| 18 | * capacity, and also need to fit the S3C2410 registers in as well... | ||
| 19 | * | ||
| 20 | * we try to ensure stuff like the IRQ registers are available for | ||
| 21 | * an single MOVS instruction (ie, only 8 bits of set data) | ||
| 22 | * | ||
| 23 | * Note, we are trying to remove some of these from the implementation | ||
| 24 | * as they are only useful to certain drivers... | ||
| 25 | */ | ||
| 26 | |||
| 27 | #ifndef __ASSEMBLY__ | ||
| 28 | #define S3C2410_ADDR(x) ((void __iomem __force *)0xF0000000 + (x)) | ||
| 29 | #else | ||
| 30 | #define S3C2410_ADDR(x) (0xF0000000 + (x)) | ||
| 31 | #endif | ||
| 32 | 17 | ||
| 33 | #define S3C2400_ADDR(x) S3C2410_ADDR(x) | 18 | #define S3C2410_ADDR(x) S3C_ADDR(x) |
| 34 | 19 | ||
| 35 | /* interrupt controller is the first thing we put in, to make | 20 | /* interrupt controller is the first thing we put in, to make |
| 36 | * the assembly code for the irq detection easier | 21 | * the assembly code for the irq detection easier |
| 37 | */ | 22 | */ |
| 38 | #define S3C24XX_VA_IRQ S3C2410_ADDR(0x00000000) | 23 | #define S3C24XX_VA_IRQ S3C_VA_IRQ |
| 39 | #define S3C2400_PA_IRQ (0x14400000) | ||
| 40 | #define S3C2410_PA_IRQ (0x4A000000) | 24 | #define S3C2410_PA_IRQ (0x4A000000) |
| 41 | #define S3C24XX_SZ_IRQ SZ_1M | 25 | #define S3C24XX_SZ_IRQ SZ_1M |
| 42 | 26 | ||
| 43 | /* memory controller registers */ | 27 | /* memory controller registers */ |
| 44 | #define S3C24XX_VA_MEMCTRL S3C2410_ADDR(0x00100000) | 28 | #define S3C24XX_VA_MEMCTRL S3C_VA_MEM |
| 45 | #define S3C2400_PA_MEMCTRL (0x14000000) | ||
| 46 | #define S3C2410_PA_MEMCTRL (0x48000000) | 29 | #define S3C2410_PA_MEMCTRL (0x48000000) |
| 47 | #define S3C24XX_SZ_MEMCTRL SZ_1M | 30 | #define S3C24XX_SZ_MEMCTRL SZ_1M |
| 48 | 31 | ||
| 49 | /* USB host controller */ | 32 | /* USB host controller */ |
| 50 | #define S3C2400_PA_USBHOST (0x14200000) | ||
| 51 | #define S3C2410_PA_USBHOST (0x49000000) | 33 | #define S3C2410_PA_USBHOST (0x49000000) |
| 52 | #define S3C24XX_SZ_USBHOST SZ_1M | 34 | #define S3C24XX_SZ_USBHOST SZ_1M |
| 53 | 35 | ||
| 54 | /* DMA controller */ | 36 | /* DMA controller */ |
| 55 | #define S3C2400_PA_DMA (0x14600000) | ||
| 56 | #define S3C2410_PA_DMA (0x4B000000) | 37 | #define S3C2410_PA_DMA (0x4B000000) |
| 57 | #define S3C24XX_SZ_DMA SZ_1M | 38 | #define S3C24XX_SZ_DMA SZ_1M |
| 58 | 39 | ||
| 59 | /* Clock and Power management */ | 40 | /* Clock and Power management */ |
| 60 | #define S3C24XX_VA_CLKPWR S3C2410_ADDR(0x00200000) | 41 | #define S3C24XX_VA_CLKPWR S3C_VA_SYS |
| 61 | #define S3C2400_PA_CLKPWR (0x14800000) | ||
| 62 | #define S3C2410_PA_CLKPWR (0x4C000000) | 42 | #define S3C2410_PA_CLKPWR (0x4C000000) |
| 63 | #define S3C24XX_SZ_CLKPWR SZ_1M | 43 | #define S3C24XX_SZ_CLKPWR SZ_1M |
| 64 | 44 | ||
| 65 | /* LCD controller */ | 45 | /* LCD controller */ |
| 66 | #define S3C24XX_VA_LCD S3C2410_ADDR(0x00300000) | ||
| 67 | #define S3C2400_PA_LCD (0x14A00000) | ||
| 68 | #define S3C2410_PA_LCD (0x4D000000) | 46 | #define S3C2410_PA_LCD (0x4D000000) |
| 69 | #define S3C24XX_SZ_LCD SZ_1M | 47 | #define S3C24XX_SZ_LCD SZ_1M |
| 70 | 48 | ||
| @@ -72,41 +50,30 @@ | |||
| 72 | #define S3C2410_PA_NAND (0x4E000000) | 50 | #define S3C2410_PA_NAND (0x4E000000) |
| 73 | #define S3C24XX_SZ_NAND SZ_1M | 51 | #define S3C24XX_SZ_NAND SZ_1M |
| 74 | 52 | ||
| 75 | /* MMC controller - available on the S3C2400 */ | ||
| 76 | #define S3C2400_PA_MMC (0x15A00000) | ||
| 77 | #define S3C2400_SZ_MMC SZ_1M | ||
| 78 | |||
| 79 | /* UARTs */ | 53 | /* UARTs */ |
| 80 | #define S3C24XX_VA_UART S3C2410_ADDR(0x00400000) | 54 | #define S3C24XX_VA_UART S3C_VA_UART |
| 81 | #define S3C2400_PA_UART (0x15000000) | ||
| 82 | #define S3C2410_PA_UART (0x50000000) | 55 | #define S3C2410_PA_UART (0x50000000) |
| 83 | #define S3C24XX_SZ_UART SZ_1M | 56 | #define S3C24XX_SZ_UART SZ_1M |
| 84 | 57 | ||
| 85 | /* Timers */ | 58 | /* Timers */ |
| 86 | #define S3C24XX_VA_TIMER S3C2410_ADDR(0x00500000) | 59 | #define S3C24XX_VA_TIMER S3C_VA_TIMER |
| 87 | #define S3C2400_PA_TIMER (0x15100000) | ||
| 88 | #define S3C2410_PA_TIMER (0x51000000) | 60 | #define S3C2410_PA_TIMER (0x51000000) |
| 89 | #define S3C24XX_SZ_TIMER SZ_1M | 61 | #define S3C24XX_SZ_TIMER SZ_1M |
| 90 | 62 | ||
| 91 | /* USB Device port */ | 63 | /* USB Device port */ |
| 92 | #define S3C24XX_VA_USBDEV S3C2410_ADDR(0x00600000) | ||
| 93 | #define S3C2400_PA_USBDEV (0x15200140) | ||
| 94 | #define S3C2410_PA_USBDEV (0x52000000) | 64 | #define S3C2410_PA_USBDEV (0x52000000) |
| 95 | #define S3C24XX_SZ_USBDEV SZ_1M | 65 | #define S3C24XX_SZ_USBDEV SZ_1M |
| 96 | 66 | ||
| 97 | /* Watchdog */ | 67 | /* Watchdog */ |
| 98 | #define S3C24XX_VA_WATCHDOG S3C2410_ADDR(0x00700000) | 68 | #define S3C24XX_VA_WATCHDOG S3C_VA_WATCHDOG |
| 99 | #define S3C2400_PA_WATCHDOG (0x15300000) | ||
| 100 | #define S3C2410_PA_WATCHDOG (0x53000000) | 69 | #define S3C2410_PA_WATCHDOG (0x53000000) |
| 101 | #define S3C24XX_SZ_WATCHDOG SZ_1M | 70 | #define S3C24XX_SZ_WATCHDOG SZ_1M |
| 102 | 71 | ||
| 103 | /* IIC hardware controller */ | 72 | /* IIC hardware controller */ |
| 104 | #define S3C2400_PA_IIC (0x15400000) | ||
| 105 | #define S3C2410_PA_IIC (0x54000000) | 73 | #define S3C2410_PA_IIC (0x54000000) |
| 106 | #define S3C24XX_SZ_IIC SZ_1M | 74 | #define S3C24XX_SZ_IIC SZ_1M |
| 107 | 75 | ||
| 108 | /* IIS controller */ | 76 | /* IIS controller */ |
| 109 | #define S3C2400_PA_IIS (0x15508000) | ||
| 110 | #define S3C2410_PA_IIS (0x55000000) | 77 | #define S3C2410_PA_IIS (0x55000000) |
| 111 | #define S3C24XX_SZ_IIS SZ_1M | 78 | #define S3C24XX_SZ_IIS SZ_1M |
| 112 | 79 | ||
| @@ -116,27 +83,23 @@ | |||
| 116 | * it is the same distance apart from the UART in the | 83 | * it is the same distance apart from the UART in the |
| 117 | * phsyical address space, as the initial mapping for the IO | 84 | * phsyical address space, as the initial mapping for the IO |
| 118 | * is done as a 1:1 maping. This puts it (currently) at | 85 | * is done as a 1:1 maping. This puts it (currently) at |
| 119 | * 0xF6800000, which is not in the way of any current mapping | 86 | * 0xFA800000, which is not in the way of any current mapping |
| 120 | * by the base system. | 87 | * by the base system. |
| 121 | */ | 88 | */ |
| 122 | 89 | ||
| 123 | #define S3C2400_PA_GPIO (0x15600000) | ||
| 124 | #define S3C2410_PA_GPIO (0x56000000) | 90 | #define S3C2410_PA_GPIO (0x56000000) |
| 125 | #define S3C24XX_VA_GPIO ((S3C2410_PA_GPIO - S3C24XX_PA_UART) + S3C24XX_VA_UART) | 91 | #define S3C24XX_VA_GPIO ((S3C2410_PA_GPIO - S3C24XX_PA_UART) + S3C24XX_VA_UART) |
| 126 | #define S3C24XX_SZ_GPIO SZ_1M | 92 | #define S3C24XX_SZ_GPIO SZ_1M |
| 127 | 93 | ||
| 128 | /* RTC */ | 94 | /* RTC */ |
| 129 | #define S3C2400_PA_RTC (0x15700040) | ||
| 130 | #define S3C2410_PA_RTC (0x57000000) | 95 | #define S3C2410_PA_RTC (0x57000000) |
| 131 | #define S3C24XX_SZ_RTC SZ_1M | 96 | #define S3C24XX_SZ_RTC SZ_1M |
| 132 | 97 | ||
| 133 | /* ADC */ | 98 | /* ADC */ |
| 134 | #define S3C2400_PA_ADC (0x15800000) | ||
| 135 | #define S3C2410_PA_ADC (0x58000000) | 99 | #define S3C2410_PA_ADC (0x58000000) |
| 136 | #define S3C24XX_SZ_ADC SZ_1M | 100 | #define S3C24XX_SZ_ADC SZ_1M |
| 137 | 101 | ||
| 138 | /* SPI */ | 102 | /* SPI */ |
| 139 | #define S3C2400_PA_SPI (0x15900000) | ||
| 140 | #define S3C2410_PA_SPI (0x59000000) | 103 | #define S3C2410_PA_SPI (0x59000000) |
| 141 | #define S3C24XX_SZ_SPI SZ_1M | 104 | #define S3C24XX_SZ_SPI SZ_1M |
| 142 | 105 | ||
| @@ -177,37 +140,8 @@ | |||
| 177 | 140 | ||
| 178 | #define S3C2410_SDRAM_PA (S3C2410_CS6) | 141 | #define S3C2410_SDRAM_PA (S3C2410_CS6) |
| 179 | 142 | ||
| 180 | #define S3C2400_CS0 (0x00000000) | ||
| 181 | #define S3C2400_CS1 (0x02000000) | ||
| 182 | #define S3C2400_CS2 (0x04000000) | ||
| 183 | #define S3C2400_CS3 (0x06000000) | ||
| 184 | #define S3C2400_CS4 (0x08000000) | ||
| 185 | #define S3C2400_CS5 (0x0A000000) | ||
| 186 | #define S3C2400_CS6 (0x0C000000) | ||
| 187 | #define S3C2400_CS7 (0x0E000000) | ||
| 188 | |||
| 189 | #define S3C2400_SDRAM_PA (S3C2400_CS6) | ||
| 190 | |||
| 191 | /* Use a single interface for common resources between S3C24XX cpus */ | 143 | /* Use a single interface for common resources between S3C24XX cpus */ |
| 192 | 144 | ||
| 193 | #ifdef CONFIG_CPU_S3C2400 | ||
| 194 | #define S3C24XX_PA_IRQ S3C2400_PA_IRQ | ||
| 195 | #define S3C24XX_PA_MEMCTRL S3C2400_PA_MEMCTRL | ||
| 196 | #define S3C24XX_PA_USBHOST S3C2400_PA_USBHOST | ||
| 197 | #define S3C24XX_PA_DMA S3C2400_PA_DMA | ||
| 198 | #define S3C24XX_PA_CLKPWR S3C2400_PA_CLKPWR | ||
| 199 | #define S3C24XX_PA_LCD S3C2400_PA_LCD | ||
| 200 | #define S3C24XX_PA_UART S3C2400_PA_UART | ||
| 201 | #define S3C24XX_PA_TIMER S3C2400_PA_TIMER | ||
| 202 | #define S3C24XX_PA_USBDEV S3C2400_PA_USBDEV | ||
| 203 | #define S3C24XX_PA_WATCHDOG S3C2400_PA_WATCHDOG | ||
| 204 | #define S3C24XX_PA_IIC S3C2400_PA_IIC | ||
| 205 | #define S3C24XX_PA_IIS S3C2400_PA_IIS | ||
| 206 | #define S3C24XX_PA_GPIO S3C2400_PA_GPIO | ||
| 207 | #define S3C24XX_PA_RTC S3C2400_PA_RTC | ||
| 208 | #define S3C24XX_PA_ADC S3C2400_PA_ADC | ||
| 209 | #define S3C24XX_PA_SPI S3C2400_PA_SPI | ||
| 210 | #else | ||
| 211 | #define S3C24XX_PA_IRQ S3C2410_PA_IRQ | 145 | #define S3C24XX_PA_IRQ S3C2410_PA_IRQ |
| 212 | #define S3C24XX_PA_MEMCTRL S3C2410_PA_MEMCTRL | 146 | #define S3C24XX_PA_MEMCTRL S3C2410_PA_MEMCTRL |
| 213 | #define S3C24XX_PA_USBHOST S3C2410_PA_USBHOST | 147 | #define S3C24XX_PA_USBHOST S3C2410_PA_USBHOST |
| @@ -224,7 +158,6 @@ | |||
| 224 | #define S3C24XX_PA_RTC S3C2410_PA_RTC | 158 | #define S3C24XX_PA_RTC S3C2410_PA_RTC |
| 225 | #define S3C24XX_PA_ADC S3C2410_PA_ADC | 159 | #define S3C24XX_PA_ADC S3C2410_PA_ADC |
| 226 | #define S3C24XX_PA_SPI S3C2410_PA_SPI | 160 | #define S3C24XX_PA_SPI S3C2410_PA_SPI |
| 227 | #endif | ||
| 228 | 161 | ||
| 229 | /* deal with the registers that move under the 2412/2413 */ | 162 | /* deal with the registers that move under the 2412/2413 */ |
| 230 | 163 | ||
diff --git a/include/asm-arm/arch-s3c2410/memory.h b/include/asm-arm/arch-s3c2410/memory.h index 4be6a74c4303..533e2436e707 100644 --- a/include/asm-arm/arch-s3c2410/memory.h +++ b/include/asm-arm/arch-s3c2410/memory.h | |||
| @@ -11,20 +11,7 @@ | |||
| 11 | #ifndef __ASM_ARCH_MEMORY_H | 11 | #ifndef __ASM_ARCH_MEMORY_H |
| 12 | #define __ASM_ARCH_MEMORY_H | 12 | #define __ASM_ARCH_MEMORY_H |
| 13 | 13 | ||
| 14 | /* | ||
| 15 | * DRAM starts at 0x30000000 for S3C2410/S3C2440 | ||
| 16 | * and at 0x0C000000 for S3C2400 | ||
| 17 | */ | ||
| 18 | #ifdef CONFIG_CPU_S3C2400 | ||
| 19 | #define PHYS_OFFSET UL(0x0C000000) | ||
| 20 | #else | ||
| 21 | #define PHYS_OFFSET UL(0x30000000) | 14 | #define PHYS_OFFSET UL(0x30000000) |
| 22 | #endif | ||
| 23 | |||
| 24 | /* | ||
| 25 | * These are exactly the same on the S3C2410 as the | ||
| 26 | * physical memory view. | ||
| 27 | */ | ||
| 28 | 15 | ||
| 29 | #define __virt_to_bus(x) __virt_to_phys(x) | 16 | #define __virt_to_bus(x) __virt_to_phys(x) |
| 30 | #define __bus_to_virt(x) __phys_to_virt(x) | 17 | #define __bus_to_virt(x) __phys_to_virt(x) |
diff --git a/include/asm-arm/arch-s3c2410/regs-lcd.h b/include/asm-arm/arch-s3c2410/regs-lcd.h index b7faeb04c0ff..76fe5f693426 100644 --- a/include/asm-arm/arch-s3c2410/regs-lcd.h +++ b/include/asm-arm/arch-s3c2410/regs-lcd.h | |||
| @@ -12,7 +12,7 @@ | |||
| 12 | #ifndef ___ASM_ARCH_REGS_LCD_H | 12 | #ifndef ___ASM_ARCH_REGS_LCD_H |
| 13 | #define ___ASM_ARCH_REGS_LCD_H "$Id: lcd.h,v 1.3 2003/06/26 13:25:06 ben Exp $" | 13 | #define ___ASM_ARCH_REGS_LCD_H "$Id: lcd.h,v 1.3 2003/06/26 13:25:06 ben Exp $" |
| 14 | 14 | ||
| 15 | #define S3C2410_LCDREG(x) ((x) + S3C24XX_VA_LCD) | 15 | #define S3C2410_LCDREG(x) (x) |
| 16 | 16 | ||
| 17 | /* LCD control registers */ | 17 | /* LCD control registers */ |
| 18 | #define S3C2410_LCDCON1 S3C2410_LCDREG(0x00) | 18 | #define S3C2410_LCDCON1 S3C2410_LCDREG(0x00) |
diff --git a/include/asm-arm/arch-s3c2410/system.h b/include/asm-arm/arch-s3c2410/system.h index 1c74ef17da33..63891786dfa0 100644 --- a/include/asm-arm/arch-s3c2410/system.h +++ b/include/asm-arm/arch-s3c2410/system.h | |||
| @@ -17,7 +17,7 @@ | |||
| 17 | #include <asm/arch/idle.h> | 17 | #include <asm/arch/idle.h> |
| 18 | #include <asm/arch/reset.h> | 18 | #include <asm/arch/reset.h> |
| 19 | 19 | ||
| 20 | #include <asm/arch/regs-watchdog.h> | 20 | #include <asm/plat-s3c/regs-watchdog.h> |
| 21 | #include <asm/arch/regs-clock.h> | 21 | #include <asm/arch/regs-clock.h> |
| 22 | 22 | ||
| 23 | void (*s3c24xx_idle)(void); | 23 | void (*s3c24xx_idle)(void); |
diff --git a/include/asm-arm/arch-s3c2410/uncompress.h b/include/asm-arm/arch-s3c2410/uncompress.h index dcb2cef38f50..48a5731ee988 100644 --- a/include/asm-arm/arch-s3c2410/uncompress.h +++ b/include/asm-arm/arch-s3c2410/uncompress.h | |||
| @@ -1,6 +1,7 @@ | |||
| 1 | /* linux/include/asm-arm/arch-s3c2410/uncompress.h | 1 | /* linux/include/asm-arm/arch-s3c2410/uncompress.h |
| 2 | * | 2 | * |
| 3 | * Copyright (c) 2003 Simtec Electronics | 3 | * Copyright (c) 2003, 2007 Simtec Electronics |
| 4 | * http://armlinux.simtec.co.uk/ | ||
| 4 | * Ben Dooks <ben@simtec.co.uk> | 5 | * Ben Dooks <ben@simtec.co.uk> |
| 5 | * | 6 | * |
| 6 | * S3C2410 - uncompress code | 7 | * S3C2410 - uncompress code |
| @@ -13,153 +14,39 @@ | |||
| 13 | #ifndef __ASM_ARCH_UNCOMPRESS_H | 14 | #ifndef __ASM_ARCH_UNCOMPRESS_H |
| 14 | #define __ASM_ARCH_UNCOMPRESS_H | 15 | #define __ASM_ARCH_UNCOMPRESS_H |
| 15 | 16 | ||
| 16 | typedef unsigned int upf_t; /* cannot include linux/serial_core.h */ | 17 | #include <asm/arch/regs-gpio.h> |
| 17 | |||
| 18 | /* defines for UART registers */ | ||
| 19 | #include "asm/arch/regs-serial.h" | ||
| 20 | #include "asm/arch/regs-gpio.h" | ||
| 21 | #include "asm/arch/regs-watchdog.h" | ||
| 22 | |||
| 23 | #include <asm/arch/map.h> | 18 | #include <asm/arch/map.h> |
| 24 | 19 | ||
| 25 | /* working in physical space... */ | 20 | /* working in physical space... */ |
| 26 | #undef S3C2410_GPIOREG | 21 | #undef S3C2410_GPIOREG |
| 27 | #undef S3C2410_WDOGREG | ||
| 28 | |||
| 29 | #define S3C2410_GPIOREG(x) ((S3C24XX_PA_GPIO + (x))) | 22 | #define S3C2410_GPIOREG(x) ((S3C24XX_PA_GPIO + (x))) |
| 30 | #define S3C2410_WDOGREG(x) ((S3C24XX_PA_WATCHDOG + (x))) | ||
| 31 | 23 | ||
| 32 | /* how many bytes we allow into the FIFO at a time in FIFO mode */ | 24 | #include <asm/plat-s3c/uncompress.h> |
| 33 | #define FIFO_MAX (14) | ||
| 34 | 25 | ||
| 35 | #define uart_base S3C24XX_PA_UART + (0x4000*CONFIG_S3C2410_LOWLEVEL_UART_PORT) | 26 | static inline int is_arm926(void) |
| 36 | |||
| 37 | static __inline__ void | ||
| 38 | uart_wr(unsigned int reg, unsigned int val) | ||
| 39 | { | 27 | { |
| 40 | volatile unsigned int *ptr; | 28 | unsigned int cpuid; |
| 41 | |||
| 42 | ptr = (volatile unsigned int *)(reg + uart_base); | ||
| 43 | *ptr = val; | ||
| 44 | } | ||
| 45 | 29 | ||
| 46 | static __inline__ unsigned int | 30 | asm volatile ("mrc p15, 0, %0, c1, c0, 0" : "=r" (cpuid)); |
| 47 | uart_rd(unsigned int reg) | ||
| 48 | { | ||
| 49 | volatile unsigned int *ptr; | ||
| 50 | 31 | ||
| 51 | ptr = (volatile unsigned int *)(reg + uart_base); | 32 | return ((cpuid & 0xff0) == 0x260); |
| 52 | return *ptr; | ||
| 53 | } | 33 | } |
| 54 | 34 | ||
| 55 | 35 | static void arch_detect_cpu(void) | |
| 56 | /* we can deal with the case the UARTs are being run | ||
| 57 | * in FIFO mode, so that we don't hold up our execution | ||
| 58 | * waiting for tx to happen... | ||
| 59 | */ | ||
| 60 | |||
| 61 | static void putc(int ch) | ||
| 62 | { | 36 | { |
| 63 | int cpuid = S3C2410_GSTATUS1_2410; | 37 | unsigned int cpuid; |
| 64 | 38 | ||
| 65 | #ifndef CONFIG_CPU_S3C2400 | ||
| 66 | cpuid = *((volatile unsigned int *)S3C2410_GSTATUS1); | 39 | cpuid = *((volatile unsigned int *)S3C2410_GSTATUS1); |
| 67 | cpuid &= S3C2410_GSTATUS1_IDMASK; | 40 | cpuid &= S3C2410_GSTATUS1_IDMASK; |
| 68 | #endif | ||
| 69 | |||
| 70 | if (uart_rd(S3C2410_UFCON) & S3C2410_UFCON_FIFOMODE) { | ||
| 71 | int level; | ||
| 72 | |||
| 73 | while (1) { | ||
| 74 | level = uart_rd(S3C2410_UFSTAT); | ||
| 75 | |||
| 76 | if (cpuid == S3C2410_GSTATUS1_2440 || | ||
| 77 | cpuid == S3C2410_GSTATUS1_2442) { | ||
| 78 | level &= S3C2440_UFSTAT_TXMASK; | ||
| 79 | level >>= S3C2440_UFSTAT_TXSHIFT; | ||
| 80 | } else { | ||
| 81 | level &= S3C2410_UFSTAT_TXMASK; | ||
| 82 | level >>= S3C2410_UFSTAT_TXSHIFT; | ||
| 83 | } | ||
| 84 | |||
| 85 | if (level < FIFO_MAX) | ||
| 86 | break; | ||
| 87 | } | ||
| 88 | 41 | ||
| 42 | if (is_arm926() || cpuid == S3C2410_GSTATUS1_2440 || | ||
| 43 | cpuid == S3C2410_GSTATUS1_2442) { | ||
| 44 | fifo_mask = S3C2440_UFSTAT_TXMASK; | ||
| 45 | fifo_max = 63 << S3C2440_UFSTAT_TXSHIFT; | ||
| 89 | } else { | 46 | } else { |
| 90 | /* not using fifos */ | 47 | fifo_mask = S3C2410_UFSTAT_TXMASK; |
| 91 | 48 | fifo_max = 15 << S3C2410_UFSTAT_TXSHIFT; | |
| 92 | while ((uart_rd(S3C2410_UTRSTAT) & S3C2410_UTRSTAT_TXE) != S3C2410_UTRSTAT_TXE) | ||
| 93 | barrier(); | ||
| 94 | } | 49 | } |
| 95 | |||
| 96 | /* write byte to transmission register */ | ||
| 97 | uart_wr(S3C2410_UTXH, ch); | ||
| 98 | } | 50 | } |
| 99 | 51 | ||
| 100 | static inline void flush(void) | ||
| 101 | { | ||
| 102 | } | ||
| 103 | |||
| 104 | #define __raw_writel(d,ad) do { *((volatile unsigned int *)(ad)) = (d); } while(0) | ||
| 105 | |||
| 106 | /* CONFIG_S3C2410_BOOT_WATCHDOG | ||
| 107 | * | ||
| 108 | * Simple boot-time watchdog setup, to reboot the system if there is | ||
| 109 | * any problem with the boot process | ||
| 110 | */ | ||
| 111 | |||
| 112 | #ifdef CONFIG_S3C2410_BOOT_WATCHDOG | ||
| 113 | |||
| 114 | #define WDOG_COUNT (0xff00) | ||
| 115 | |||
| 116 | static inline void arch_decomp_wdog(void) | ||
| 117 | { | ||
| 118 | __raw_writel(WDOG_COUNT, S3C2410_WTCNT); | ||
| 119 | } | ||
| 120 | |||
| 121 | static void arch_decomp_wdog_start(void) | ||
| 122 | { | ||
| 123 | __raw_writel(WDOG_COUNT, S3C2410_WTDAT); | ||
| 124 | __raw_writel(WDOG_COUNT, S3C2410_WTCNT); | ||
| 125 | __raw_writel(S3C2410_WTCON_ENABLE | S3C2410_WTCON_DIV128 | S3C2410_WTCON_RSTEN | S3C2410_WTCON_PRESCALE(0x80), S3C2410_WTCON); | ||
| 126 | } | ||
| 127 | |||
| 128 | #else | ||
| 129 | #define arch_decomp_wdog_start() | ||
| 130 | #define arch_decomp_wdog() | ||
| 131 | #endif | ||
| 132 | |||
| 133 | #ifdef CONFIG_S3C2410_BOOT_ERROR_RESET | ||
| 134 | |||
| 135 | static void arch_decomp_error(const char *x) | ||
| 136 | { | ||
| 137 | putstr("\n\n"); | ||
| 138 | putstr(x); | ||
| 139 | putstr("\n\n -- System resetting\n"); | ||
| 140 | |||
| 141 | __raw_writel(0x4000, S3C2410_WTDAT); | ||
| 142 | __raw_writel(0x4000, S3C2410_WTCNT); | ||
| 143 | __raw_writel(S3C2410_WTCON_ENABLE | S3C2410_WTCON_DIV128 | S3C2410_WTCON_RSTEN | S3C2410_WTCON_PRESCALE(0x40), S3C2410_WTCON); | ||
| 144 | |||
| 145 | while(1); | ||
| 146 | } | ||
| 147 | |||
| 148 | #define arch_error arch_decomp_error | ||
| 149 | #endif | ||
| 150 | |||
| 151 | static void error(char *err); | ||
| 152 | |||
| 153 | static void | ||
| 154 | arch_decomp_setup(void) | ||
| 155 | { | ||
| 156 | /* we may need to setup the uart(s) here if we are not running | ||
| 157 | * on an BAST... the BAST will have left the uarts configured | ||
| 158 | * after calling linux. | ||
| 159 | */ | ||
| 160 | |||
| 161 | arch_decomp_wdog_start(); | ||
| 162 | } | ||
| 163 | |||
| 164 | |||
| 165 | #endif /* __ASM_ARCH_UNCOMPRESS_H */ | 52 | #endif /* __ASM_ARCH_UNCOMPRESS_H */ |
diff --git a/include/asm-arm/hardware/iop3xx.h b/include/asm-arm/hardware/iop3xx.h index 81ca5d3e2bff..fb90b421f31c 100644 --- a/include/asm-arm/hardware/iop3xx.h +++ b/include/asm-arm/hardware/iop3xx.h | |||
| @@ -194,6 +194,13 @@ extern int init_atu; | |||
| 194 | #define IOP_TMR_PRIVILEGED 0x08 | 194 | #define IOP_TMR_PRIVILEGED 0x08 |
| 195 | #define IOP_TMR_RATIO_1_1 0x00 | 195 | #define IOP_TMR_RATIO_1_1 0x00 |
| 196 | 196 | ||
| 197 | /* Watchdog timer definitions */ | ||
| 198 | #define IOP_WDTCR_EN_ARM 0x1e1e1e1e | ||
| 199 | #define IOP_WDTCR_EN 0xe1e1e1e1 | ||
| 200 | /* iop3xx does not support stopping the watchdog, so we just re-arm */ | ||
| 201 | #define IOP_WDTCR_DIS_ARM (IOP_WDTCR_EN_ARM) | ||
| 202 | #define IOP_WDTCR_DIS (IOP_WDTCR_EN) | ||
| 203 | |||
| 197 | /* Application accelerator unit */ | 204 | /* Application accelerator unit */ |
| 198 | #define IOP3XX_AAU_PHYS_BASE (IOP3XX_PERIPHERAL_PHYS_BASE + 0x800) | 205 | #define IOP3XX_AAU_PHYS_BASE (IOP3XX_PERIPHERAL_PHYS_BASE + 0x800) |
| 199 | #define IOP3XX_AAU_UPPER_PA (IOP3XX_AAU_PHYS_BASE + 0xa7) | 206 | #define IOP3XX_AAU_UPPER_PA (IOP3XX_AAU_PHYS_BASE + 0xa7) |
| @@ -274,6 +281,32 @@ static inline void write_tisr(u32 val) | |||
| 274 | asm volatile("mcr p6, 0, %0, c6, c1, 0" : : "r" (val)); | 281 | asm volatile("mcr p6, 0, %0, c6, c1, 0" : : "r" (val)); |
| 275 | } | 282 | } |
| 276 | 283 | ||
| 284 | static inline u32 read_wdtcr(void) | ||
| 285 | { | ||
| 286 | u32 val; | ||
| 287 | asm volatile("mrc p6, 0, %0, c7, c1, 0":"=r" (val)); | ||
| 288 | return val; | ||
| 289 | } | ||
| 290 | static inline void write_wdtcr(u32 val) | ||
| 291 | { | ||
| 292 | asm volatile("mcr p6, 0, %0, c7, c1, 0"::"r" (val)); | ||
| 293 | } | ||
| 294 | |||
| 295 | extern unsigned long get_iop_tick_rate(void); | ||
| 296 | |||
| 297 | /* only iop13xx has these registers, we define these to present a | ||
| 298 | * common register interface for the iop_wdt driver. | ||
| 299 | */ | ||
| 300 | #define IOP_RCSR_WDT (0) | ||
| 301 | static inline u32 read_rcsr(void) | ||
| 302 | { | ||
| 303 | return 0; | ||
| 304 | } | ||
| 305 | static inline void write_wdtsr(u32 val) | ||
| 306 | { | ||
| 307 | do { } while (0); | ||
| 308 | } | ||
| 309 | |||
| 277 | extern struct platform_device iop3xx_dma_0_channel; | 310 | extern struct platform_device iop3xx_dma_0_channel; |
| 278 | extern struct platform_device iop3xx_dma_1_channel; | 311 | extern struct platform_device iop3xx_dma_1_channel; |
| 279 | extern struct platform_device iop3xx_aau_channel; | 312 | extern struct platform_device iop3xx_aau_channel; |
diff --git a/include/asm-arm/plat-s3c/debug-macro.S b/include/asm-arm/plat-s3c/debug-macro.S new file mode 100644 index 000000000000..84c40b847da8 --- /dev/null +++ b/include/asm-arm/plat-s3c/debug-macro.S | |||
| @@ -0,0 +1,75 @@ | |||
| 1 | /* linux/include/asm-arm/plat-s3c/debug-macro.S | ||
| 2 | * | ||
| 3 | * Copyright 2005, 2007 Simtec Electronics | ||
| 4 | * http://armlinux.simtec.co.uk/ | ||
| 5 | * Ben Dooks <ben@simtec.co.uk> | ||
| 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 | |||
| 12 | #include <asm/plat-s3c/regs-serial.h> | ||
| 13 | |||
| 14 | /* The S3C2440 implementations are used by default as they are the | ||
| 15 | * most widely re-used */ | ||
| 16 | |||
| 17 | .macro fifo_level_s3c2440 rd, rx | ||
| 18 | ldr \rd, [ \rx, # S3C2410_UFSTAT ] | ||
| 19 | and \rd, \rd, #S3C2440_UFSTAT_TXMASK | ||
| 20 | .endm | ||
| 21 | |||
| 22 | #ifndef fifo_level | ||
| 23 | #define fifo_level fifo_level_s3c2410 | ||
| 24 | #endif | ||
| 25 | |||
| 26 | .macro fifo_full_s3c2440 rd, rx | ||
| 27 | ldr \rd, [ \rx, # S3C2410_UFSTAT ] | ||
| 28 | tst \rd, #S3C2440_UFSTAT_TXFULL | ||
| 29 | .endm | ||
| 30 | |||
| 31 | #ifndef fifo_full | ||
| 32 | #define fifo_full fifo_full_s3c2440 | ||
| 33 | #endif | ||
| 34 | |||
| 35 | .macro senduart,rd,rx | ||
| 36 | strb \rd, [\rx, # S3C2410_UTXH ] | ||
| 37 | .endm | ||
| 38 | |||
| 39 | .macro busyuart, rd, rx | ||
| 40 | ldr \rd, [ \rx, # S3C2410_UFCON ] | ||
| 41 | tst \rd, #S3C2410_UFCON_FIFOMODE @ fifo enabled? | ||
| 42 | beq 1001f @ | ||
| 43 | @ FIFO enabled... | ||
| 44 | 1003: | ||
| 45 | fifo_full \rd, \rx | ||
| 46 | bne 1003b | ||
| 47 | b 1002f | ||
| 48 | |||
| 49 | 1001: | ||
| 50 | @ busy waiting for non fifo | ||
| 51 | ldr \rd, [ \rx, # S3C2410_UTRSTAT ] | ||
| 52 | tst \rd, #S3C2410_UTRSTAT_TXFE | ||
| 53 | beq 1001b | ||
| 54 | |||
| 55 | 1002: @ exit busyuart | ||
| 56 | .endm | ||
| 57 | |||
| 58 | .macro waituart,rd,rx | ||
| 59 | ldr \rd, [ \rx, # S3C2410_UFCON ] | ||
| 60 | tst \rd, #S3C2410_UFCON_FIFOMODE @ fifo enabled? | ||
| 61 | beq 1001f @ | ||
| 62 | @ FIFO enabled... | ||
| 63 | 1003: | ||
| 64 | fifo_level \rd, \rx | ||
| 65 | teq \rd, #0 | ||
| 66 | bne 1003b | ||
| 67 | b 1002f | ||
| 68 | 1001: | ||
| 69 | @ idle waiting for non fifo | ||
| 70 | ldr \rd, [ \rx, # S3C2410_UTRSTAT ] | ||
| 71 | tst \rd, #S3C2410_UTRSTAT_TXFE | ||
| 72 | beq 1001b | ||
| 73 | |||
| 74 | 1002: @ exit busyuart | ||
| 75 | .endm | ||
diff --git a/include/asm-arm/arch-s3c2410/iic.h b/include/asm-arm/plat-s3c/iic.h index 71211c8b5384..71211c8b5384 100644 --- a/include/asm-arm/arch-s3c2410/iic.h +++ b/include/asm-arm/plat-s3c/iic.h | |||
diff --git a/include/asm-arm/plat-s3c/map.h b/include/asm-arm/plat-s3c/map.h new file mode 100644 index 000000000000..95a82b0e84a1 --- /dev/null +++ b/include/asm-arm/plat-s3c/map.h | |||
| @@ -0,0 +1,40 @@ | |||
| 1 | /* linux/include/asm-arm/plat-s3c/map.h | ||
| 2 | * | ||
| 3 | * Copyright 2003, 2007 Simtec Electronics | ||
| 4 | * http://armlinux.simtec.co.uk/ | ||
| 5 | * Ben Dooks <ben@simtec.co.uk> | ||
| 6 | * | ||
| 7 | * S3C - Memory map definitions (virtual addresses) | ||
| 8 | * | ||
| 9 | * This program is free software; you can redistribute it and/or modify | ||
| 10 | * it under the terms of the GNU General Public License version 2 as | ||
| 11 | * published by the Free Software Foundation. | ||
| 12 | */ | ||
| 13 | |||
| 14 | #ifndef __ASM_PLAT_MAP_H | ||
| 15 | #define __ASM_PLAT_MAP_H __FILE__ | ||
| 16 | |||
| 17 | /* Fit all our registers in at 0xF4000000 upwards, trying to use as | ||
| 18 | * little of the VA space as possible so vmalloc and friends have a | ||
| 19 | * better chance of getting memory. | ||
| 20 | * | ||
| 21 | * we try to ensure stuff like the IRQ registers are available for | ||
| 22 | * an single MOVS instruction (ie, only 8 bits of set data) | ||
| 23 | */ | ||
| 24 | |||
| 25 | #define S3C_ADDR_BASE (0xF4000000) | ||
| 26 | |||
| 27 | #ifndef __ASSEMBLY__ | ||
| 28 | #define S3C_ADDR(x) ((void __iomem __force *)S3C_ADDR_BASE + (x)) | ||
| 29 | #else | ||
| 30 | #define S3C_ADDR(x) (S3C_ADDR_BASE + (x)) | ||
| 31 | #endif | ||
| 32 | |||
| 33 | #define S3C_VA_IRQ S3C_ADDR(0x000000000) /* irq controller(s) */ | ||
| 34 | #define S3C_VA_SYS S3C_ADDR(0x001000000) /* system control */ | ||
| 35 | #define S3C_VA_MEM S3C_ADDR(0x002000000) /* system control */ | ||
| 36 | #define S3C_VA_TIMER S3C_ADDR(0x003000000) /* timer block */ | ||
| 37 | #define S3C_VA_WATCHDOG S3C_ADDR(0x004000000) /* watchdog */ | ||
| 38 | #define S3C_VA_UART S3C_ADDR(0x010000000) /* UART */ | ||
| 39 | |||
| 40 | #endif /* __ASM_PLAT_MAP_H */ | ||
diff --git a/include/asm-arm/arch-s3c2410/nand.h b/include/asm-arm/plat-s3c/nand.h index 8816f7f9cee1..8816f7f9cee1 100644 --- a/include/asm-arm/arch-s3c2410/nand.h +++ b/include/asm-arm/plat-s3c/nand.h | |||
diff --git a/include/asm-arm/arch-s3c2410/regs-ac97.h b/include/asm-arm/plat-s3c/regs-ac97.h index b004dee6bcaf..b004dee6bcaf 100644 --- a/include/asm-arm/arch-s3c2410/regs-ac97.h +++ b/include/asm-arm/plat-s3c/regs-ac97.h | |||
diff --git a/include/asm-arm/arch-s3c2410/regs-adc.h b/include/asm-arm/plat-s3c/regs-adc.h index c7f231963e76..c7f231963e76 100644 --- a/include/asm-arm/arch-s3c2410/regs-adc.h +++ b/include/asm-arm/plat-s3c/regs-adc.h | |||
diff --git a/include/asm-arm/arch-s3c2410/regs-iic.h b/include/asm-arm/plat-s3c/regs-iic.h index 2ae29522f253..2ae29522f253 100644 --- a/include/asm-arm/arch-s3c2410/regs-iic.h +++ b/include/asm-arm/plat-s3c/regs-iic.h | |||
diff --git a/include/asm-arm/arch-s3c2410/regs-nand.h b/include/asm-arm/plat-s3c/regs-nand.h index b824d371ae0b..b824d371ae0b 100644 --- a/include/asm-arm/arch-s3c2410/regs-nand.h +++ b/include/asm-arm/plat-s3c/regs-nand.h | |||
diff --git a/include/asm-arm/arch-s3c2410/regs-rtc.h b/include/asm-arm/plat-s3c/regs-rtc.h index 93b03c49710a..93b03c49710a 100644 --- a/include/asm-arm/arch-s3c2410/regs-rtc.h +++ b/include/asm-arm/plat-s3c/regs-rtc.h | |||
diff --git a/include/asm-arm/arch-s3c2410/regs-serial.h b/include/asm-arm/plat-s3c/regs-serial.h index 8946702a87f5..923e114db663 100644 --- a/include/asm-arm/arch-s3c2410/regs-serial.h +++ b/include/asm-arm/plat-s3c/regs-serial.h | |||
| @@ -32,10 +32,10 @@ | |||
| 32 | #ifndef __ASM_ARM_REGS_SERIAL_H | 32 | #ifndef __ASM_ARM_REGS_SERIAL_H |
| 33 | #define __ASM_ARM_REGS_SERIAL_H | 33 | #define __ASM_ARM_REGS_SERIAL_H |
| 34 | 34 | ||
| 35 | #define S3C24XX_VA_UART0 (S3C24XX_VA_UART) | 35 | #define S3C24XX_VA_UART0 (S3C_VA_UART) |
| 36 | #define S3C24XX_VA_UART1 (S3C24XX_VA_UART + 0x4000 ) | 36 | #define S3C24XX_VA_UART1 (S3C_VA_UART + 0x4000 ) |
| 37 | #define S3C24XX_VA_UART2 (S3C24XX_VA_UART + 0x8000 ) | 37 | #define S3C24XX_VA_UART2 (S3C_VA_UART + 0x8000 ) |
| 38 | #define S3C24XX_VA_UART3 (S3C24XX_VA_UART + 0xC000 ) | 38 | #define S3C24XX_VA_UART3 (S3C_VA_UART + 0xC000 ) |
| 39 | 39 | ||
| 40 | #define S3C2410_PA_UART0 (S3C24XX_PA_UART) | 40 | #define S3C2410_PA_UART0 (S3C24XX_PA_UART) |
| 41 | #define S3C2410_PA_UART1 (S3C24XX_PA_UART + 0x4000 ) | 41 | #define S3C2410_PA_UART1 (S3C24XX_PA_UART + 0x4000 ) |
diff --git a/include/asm-arm/arch-s3c2410/regs-timer.h b/include/asm-arm/plat-s3c/regs-timer.h index 6f8fe432fe3a..8b0d594397b1 100644 --- a/include/asm-arm/arch-s3c2410/regs-timer.h +++ b/include/asm-arm/plat-s3c/regs-timer.h | |||
| @@ -14,12 +14,12 @@ | |||
| 14 | #ifndef __ASM_ARCH_REGS_TIMER_H | 14 | #ifndef __ASM_ARCH_REGS_TIMER_H |
| 15 | #define __ASM_ARCH_REGS_TIMER_H "$Id: timer.h,v 1.4 2003/05/06 19:30:50 ben Exp $" | 15 | #define __ASM_ARCH_REGS_TIMER_H "$Id: timer.h,v 1.4 2003/05/06 19:30:50 ben Exp $" |
| 16 | 16 | ||
| 17 | #define S3C2410_TIMERREG(x) (S3C24XX_VA_TIMER + (x)) | 17 | #define S3C_TIMERREG(x) (S3C_VA_TIMER + (x)) |
| 18 | #define S3C2410_TIMERREG2(tmr,reg) S3C2410_TIMERREG((reg)+0x0c+((tmr)*0x0c)) | 18 | #define S3C_TIMERREG2(tmr,reg) S3C_TIMERREG((reg)+0x0c+((tmr)*0x0c)) |
| 19 | 19 | ||
| 20 | #define S3C2410_TCFG0 S3C2410_TIMERREG(0x00) | 20 | #define S3C2410_TCFG0 S3C_TIMERREG(0x00) |
| 21 | #define S3C2410_TCFG1 S3C2410_TIMERREG(0x04) | 21 | #define S3C2410_TCFG1 S3C_TIMERREG(0x04) |
| 22 | #define S3C2410_TCON S3C2410_TIMERREG(0x08) | 22 | #define S3C2410_TCON S3C_TIMERREG(0x08) |
| 23 | 23 | ||
| 24 | #define S3C2410_TCFG_PRESCALER0_MASK (255<<0) | 24 | #define S3C2410_TCFG_PRESCALER0_MASK (255<<0) |
| 25 | #define S3C2410_TCFG_PRESCALER1_MASK (255<<8) | 25 | #define S3C2410_TCFG_PRESCALER1_MASK (255<<8) |
| @@ -71,9 +71,9 @@ | |||
| 71 | 71 | ||
| 72 | /* WARNING - timer 4 has no buffer reg, and it's observation is at +4 */ | 72 | /* WARNING - timer 4 has no buffer reg, and it's observation is at +4 */ |
| 73 | 73 | ||
| 74 | #define S3C2410_TCNTB(tmr) S3C2410_TIMERREG2(tmr, 0x00) | 74 | #define S3C2410_TCNTB(tmr) S3C_TIMERREG2(tmr, 0x00) |
| 75 | #define S3C2410_TCMPB(tmr) S3C2410_TIMERREG2(tmr, 0x04) | 75 | #define S3C2410_TCMPB(tmr) S3C_TIMERREG2(tmr, 0x04) |
| 76 | #define S3C2410_TCNTO(tmr) S3C2410_TIMERREG2(tmr, (((tmr) == 4) ? 0x04 : 0x08)) | 76 | #define S3C2410_TCNTO(tmr) S3C_TIMERREG2(tmr, (((tmr) == 4) ? 0x04 : 0x08)) |
| 77 | 77 | ||
| 78 | #define S3C2410_TCON_T4RELOAD (1<<22) | 78 | #define S3C2410_TCON_T4RELOAD (1<<22) |
| 79 | #define S3C2410_TCON_T4MANUALUPD (1<<21) | 79 | #define S3C2410_TCON_T4MANUALUPD (1<<21) |
diff --git a/include/asm-arm/arch-s3c2410/regs-watchdog.h b/include/asm-arm/plat-s3c/regs-watchdog.h index a9c5d491bdb6..56c4193b7a46 100644 --- a/include/asm-arm/arch-s3c2410/regs-watchdog.h +++ b/include/asm-arm/plat-s3c/regs-watchdog.h | |||
| @@ -14,11 +14,11 @@ | |||
| 14 | #ifndef __ASM_ARCH_REGS_WATCHDOG_H | 14 | #ifndef __ASM_ARCH_REGS_WATCHDOG_H |
| 15 | #define __ASM_ARCH_REGS_WATCHDOG_H "$Id: watchdog.h,v 1.2 2003/04/29 13:31:09 ben Exp $" | 15 | #define __ASM_ARCH_REGS_WATCHDOG_H "$Id: watchdog.h,v 1.2 2003/04/29 13:31:09 ben Exp $" |
| 16 | 16 | ||
| 17 | #define S3C2410_WDOGREG(x) ((x) + S3C24XX_VA_WATCHDOG) | 17 | #define S3C_WDOGREG(x) ((x) + S3C_VA_WATCHDOG) |
| 18 | 18 | ||
| 19 | #define S3C2410_WTCON S3C2410_WDOGREG(0x00) | 19 | #define S3C2410_WTCON S3C_WDOGREG(0x00) |
| 20 | #define S3C2410_WTDAT S3C2410_WDOGREG(0x04) | 20 | #define S3C2410_WTDAT S3C_WDOGREG(0x04) |
| 21 | #define S3C2410_WTCNT S3C2410_WDOGREG(0x08) | 21 | #define S3C2410_WTCNT S3C_WDOGREG(0x08) |
| 22 | 22 | ||
| 23 | /* the watchdog can either generate a reset pulse, or an | 23 | /* the watchdog can either generate a reset pulse, or an |
| 24 | * interrupt. | 24 | * interrupt. |
diff --git a/include/asm-arm/plat-s3c/uncompress.h b/include/asm-arm/plat-s3c/uncompress.h new file mode 100644 index 000000000000..b5e6208175d1 --- /dev/null +++ b/include/asm-arm/plat-s3c/uncompress.h | |||
| @@ -0,0 +1,155 @@ | |||
| 1 | /* linux/include/asm-arm/plat-s3c/uncompress.h | ||
| 2 | * | ||
| 3 | * Copyright 2003, 2007 Simtec Electronics | ||
| 4 | * http://armlinux.simtec.co.uk/ | ||
| 5 | * Ben Dooks <ben@simtec.co.uk> | ||
| 6 | * | ||
| 7 | * S3C - uncompress code | ||
| 8 | * | ||
| 9 | * This program is free software; you can redistribute it and/or modify | ||
| 10 | * it under the terms of the GNU General Public License version 2 as | ||
| 11 | * published by the Free Software Foundation. | ||
| 12 | */ | ||
| 13 | |||
| 14 | #ifndef __ASM_PLAT_UNCOMPRESS_H | ||
| 15 | #define __ASM_PLAT_UNCOMPRESS_H | ||
| 16 | |||
| 17 | typedef unsigned int upf_t; /* cannot include linux/serial_core.h */ | ||
| 18 | |||
| 19 | /* uart setup */ | ||
| 20 | |||
| 21 | static unsigned int fifo_mask; | ||
| 22 | static unsigned int fifo_max; | ||
| 23 | |||
| 24 | /* forward declerations */ | ||
| 25 | |||
| 26 | static void arch_detect_cpu(void); | ||
| 27 | |||
| 28 | /* defines for UART registers */ | ||
| 29 | |||
| 30 | #include "asm/plat-s3c/regs-serial.h" | ||
| 31 | #include "asm/plat-s3c/regs-watchdog.h" | ||
| 32 | |||
| 33 | /* working in physical space... */ | ||
| 34 | #undef S3C2410_WDOGREG | ||
| 35 | #define S3C2410_WDOGREG(x) ((S3C24XX_PA_WATCHDOG + (x))) | ||
| 36 | |||
| 37 | /* how many bytes we allow into the FIFO at a time in FIFO mode */ | ||
| 38 | #define FIFO_MAX (14) | ||
| 39 | |||
| 40 | #define uart_base S3C24XX_PA_UART + (0x4000*CONFIG_S3C_LOWLEVEL_UART_PORT) | ||
| 41 | |||
| 42 | static __inline__ void | ||
| 43 | uart_wr(unsigned int reg, unsigned int val) | ||
| 44 | { | ||
| 45 | volatile unsigned int *ptr; | ||
| 46 | |||
| 47 | ptr = (volatile unsigned int *)(reg + uart_base); | ||
| 48 | *ptr = val; | ||
| 49 | } | ||
| 50 | |||
| 51 | static __inline__ unsigned int | ||
| 52 | uart_rd(unsigned int reg) | ||
| 53 | { | ||
| 54 | volatile unsigned int *ptr; | ||
| 55 | |||
| 56 | ptr = (volatile unsigned int *)(reg + uart_base); | ||
| 57 | return *ptr; | ||
| 58 | } | ||
| 59 | |||
| 60 | /* we can deal with the case the UARTs are being run | ||
| 61 | * in FIFO mode, so that we don't hold up our execution | ||
| 62 | * waiting for tx to happen... | ||
| 63 | */ | ||
| 64 | |||
| 65 | static void putc(int ch) | ||
| 66 | { | ||
| 67 | if (uart_rd(S3C2410_UFCON) & S3C2410_UFCON_FIFOMODE) { | ||
| 68 | int level; | ||
| 69 | |||
| 70 | while (1) { | ||
| 71 | level = uart_rd(S3C2410_UFSTAT); | ||
| 72 | level &= fifo_mask; | ||
| 73 | |||
| 74 | if (level < fifo_max) | ||
| 75 | break; | ||
| 76 | } | ||
| 77 | |||
| 78 | } else { | ||
| 79 | /* not using fifos */ | ||
| 80 | |||
| 81 | while ((uart_rd(S3C2410_UTRSTAT) & S3C2410_UTRSTAT_TXE) != S3C2410_UTRSTAT_TXE) | ||
| 82 | barrier(); | ||
| 83 | } | ||
| 84 | |||
| 85 | /* write byte to transmission register */ | ||
| 86 | uart_wr(S3C2410_UTXH, ch); | ||
| 87 | } | ||
| 88 | |||
| 89 | static inline void flush(void) | ||
| 90 | { | ||
| 91 | } | ||
| 92 | |||
| 93 | #define __raw_writel(d,ad) do { *((volatile unsigned int *)(ad)) = (d); } while(0) | ||
| 94 | |||
| 95 | /* CONFIG_S3C_BOOT_WATCHDOG | ||
| 96 | * | ||
| 97 | * Simple boot-time watchdog setup, to reboot the system if there is | ||
| 98 | * any problem with the boot process | ||
| 99 | */ | ||
| 100 | |||
| 101 | #ifdef CONFIG_S3C_BOOT_WATCHDOG | ||
| 102 | |||
| 103 | #define WDOG_COUNT (0xff00) | ||
| 104 | |||
| 105 | static inline void arch_decomp_wdog(void) | ||
| 106 | { | ||
| 107 | __raw_writel(WDOG_COUNT, S3C2410_WTCNT); | ||
| 108 | } | ||
| 109 | |||
| 110 | static void arch_decomp_wdog_start(void) | ||
| 111 | { | ||
| 112 | __raw_writel(WDOG_COUNT, S3C2410_WTDAT); | ||
| 113 | __raw_writel(WDOG_COUNT, S3C2410_WTCNT); | ||
| 114 | __raw_writel(S3C2410_WTCON_ENABLE | S3C2410_WTCON_DIV128 | S3C2410_WTCON_RSTEN | S3C2410_WTCON_PRESCALE(0x80), S3C2410_WTCON); | ||
| 115 | } | ||
| 116 | |||
| 117 | #else | ||
| 118 | #define arch_decomp_wdog_start() | ||
| 119 | #define arch_decomp_wdog() | ||
| 120 | #endif | ||
| 121 | |||
| 122 | #ifdef CONFIG_S3C_BOOT_ERROR_RESET | ||
| 123 | |||
| 124 | static void arch_decomp_error(const char *x) | ||
| 125 | { | ||
| 126 | putstr("\n\n"); | ||
| 127 | putstr(x); | ||
| 128 | putstr("\n\n -- System resetting\n"); | ||
| 129 | |||
| 130 | __raw_writel(0x4000, S3C2410_WTDAT); | ||
| 131 | __raw_writel(0x4000, S3C2410_WTCNT); | ||
| 132 | __raw_writel(S3C2410_WTCON_ENABLE | S3C2410_WTCON_DIV128 | S3C2410_WTCON_RSTEN | S3C2410_WTCON_PRESCALE(0x40), S3C2410_WTCON); | ||
| 133 | |||
| 134 | while(1); | ||
| 135 | } | ||
| 136 | |||
| 137 | #define arch_error arch_decomp_error | ||
| 138 | #endif | ||
| 139 | |||
| 140 | static void error(char *err); | ||
| 141 | |||
| 142 | static void | ||
| 143 | arch_decomp_setup(void) | ||
| 144 | { | ||
| 145 | /* we may need to setup the uart(s) here if we are not running | ||
| 146 | * on an BAST... the BAST will have left the uarts configured | ||
| 147 | * after calling linux. | ||
| 148 | */ | ||
| 149 | |||
| 150 | arch_detect_cpu(); | ||
| 151 | arch_decomp_wdog_start(); | ||
| 152 | } | ||
| 153 | |||
| 154 | |||
| 155 | #endif /* __ASM_PLAT_UNCOMPRESS_H */ | ||
diff --git a/include/asm-arm/arch-s3c2410/regs-iis.h b/include/asm-arm/plat-s3c24xx/regs-iis.h index eaf77916a602..eaf77916a602 100644 --- a/include/asm-arm/arch-s3c2410/regs-iis.h +++ b/include/asm-arm/plat-s3c24xx/regs-iis.h | |||
diff --git a/include/asm-arm/arch-s3c2410/regs-spi.h b/include/asm-arm/plat-s3c24xx/regs-spi.h index 4a499a138256..4a499a138256 100644 --- a/include/asm-arm/arch-s3c2410/regs-spi.h +++ b/include/asm-arm/plat-s3c24xx/regs-spi.h | |||
diff --git a/include/asm-arm/arch-s3c2410/regs-udc.h b/include/asm-arm/plat-s3c24xx/regs-udc.h index e1e9805d2d9a..e1e9805d2d9a 100644 --- a/include/asm-arm/arch-s3c2410/regs-udc.h +++ b/include/asm-arm/plat-s3c24xx/regs-udc.h | |||
diff --git a/include/asm-arm/arch-s3c2410/udc.h b/include/asm-arm/plat-s3c24xx/udc.h index b8aa6cb69b58..b8aa6cb69b58 100644 --- a/include/asm-arm/arch-s3c2410/udc.h +++ b/include/asm-arm/plat-s3c24xx/udc.h | |||
