Merge branch 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm

* 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm: (44 commits)
[ARM] 4822/1: RealView: Change the REALVIEW_MPCORE configuration option
[ARM] 4821/1: RealView: Remove the platform dependencies from localtimer.c
[ARM] 4820/1: RealView: Select the timer IRQ at run-time
[ARM] 4819/1: RealView: Fix entry-macro.S to work with multiple platforms
[ARM] 4818/1: RealView: Add core-tile detection
[ARM] 4817/1: RealView: Move the AMBA resource definitions to realview_eb.c
[ARM] 4816/1: RealView: Move the platform-specific definitions into board-eb.h
[ARM] 4815/1: RealView: Add clockevents suport for the local timers
[ARM] 4814/1: RealView: Add broadcasting clockevents support for ARM11MPCore
[ARM] 4813/1: Add SMP helper functions for clockevents support
[ARM] 4812/1: RealView: clockevents support for the RealView platforms
[ARM] 4811/1: RealView: clocksource support for the RealView platforms
[ARM] 4736/1: Export atags to userspace and allow kexec to use customised atags
[ARM] 4798/1: pcm027: fix missing header file
[ARM] 4803/1: pxa: fix building issue of poodle.c caused by patch 4737/1
[ARM] 4801/1: pxa: fix building issues of missing pxa2xx-regs.h
[ARM] pxa: introduce sysdev for pxa3xx static memory controller
[ARM] pxa: add preliminary suspend/resume code for pxa3xx
[ARM] pxa: introduce sysdev for GPIO register saving/restoring
[ARM] pxa: introduce sysdev for IRQ register saving/restoring
...

+3792 -1447
+16 -2
arch/arm/Kconfig
··· 35 bool 36 default n 37 38 config MMU 39 bool 40 default y ··· 192 bool "ARM Ltd. RealView family" 193 select ARM_AMBA 194 select ICST307 195 help 196 This enables support for ARM Ltd RealView boards. 197 ··· 630 631 config SMP 632 bool "Symmetric Multi-Processing (EXPERIMENTAL)" 633 - depends on EXPERIMENTAL && REALVIEW_MPCORE 634 help 635 This enables support for systems with more than one CPU. If you have 636 a system with only one CPU, like most personal computers, say N. If ··· 663 664 config LOCAL_TIMERS 665 bool "Use local timer interrupts" 666 - depends on SMP && REALVIEW_MPCORE 667 default y 668 help 669 Enable support for local timers on SMP platforms, rather then the ··· 918 is properly shutdown, so do not be surprised if this code does not 919 initially work for you. It may help to enable device hotplugging 920 support. 921 922 endmenu 923
··· 35 bool 36 default n 37 38 + config GENERIC_CLOCKEVENTS_BROADCAST 39 + bool 40 + depends on GENERIC_CLOCKEVENTS 41 + default y if SMP && !LOCAL_TIMERS 42 + 43 config MMU 44 bool 45 default y ··· 187 bool "ARM Ltd. RealView family" 188 select ARM_AMBA 189 select ICST307 190 + select GENERIC_TIME 191 + select GENERIC_CLOCKEVENTS 192 help 193 This enables support for ARM Ltd RealView boards. 194 ··· 623 624 config SMP 625 bool "Symmetric Multi-Processing (EXPERIMENTAL)" 626 + depends on EXPERIMENTAL && REALVIEW_EB_ARM11MP 627 help 628 This enables support for systems with more than one CPU. If you have 629 a system with only one CPU, like most personal computers, say N. If ··· 656 657 config LOCAL_TIMERS 658 bool "Use local timer interrupts" 659 + depends on SMP && REALVIEW_EB_ARM11MP 660 default y 661 help 662 Enable support for local timers on SMP platforms, rather then the ··· 911 is properly shutdown, so do not be surprised if this code does not 912 initially work for you. It may help to enable device hotplugging 913 support. 914 + 915 + config ATAGS_PROC 916 + bool "Export atags in procfs" 917 + default n 918 + help 919 + Should the atags used to boot the kernel be exported in an "atags" 920 + file in procfs. Useful with kexec. 921 922 endmenu 923
-2
arch/arm/common/time-acorn.c
··· 69 static irqreturn_t 70 ioc_timer_interrupt(int irq, void *dev_id) 71 { 72 - write_seqlock(&xtime_lock); 73 timer_tick(); 74 - write_sequnlock(&xtime_lock); 75 return IRQ_HANDLED; 76 } 77
··· 69 static irqreturn_t 70 ioc_timer_interrupt(int irq, void *dev_id) 71 { 72 timer_tick(); 73 return IRQ_HANDLED; 74 } 75
+649 -333
arch/arm/configs/ixp4xx_defconfig
··· 1 # 2 # Automatically generated make config: don't edit 3 - # Linux kernel version: 2.6.15 4 - # Tue Jan 3 03:20:40 2006 5 # 6 CONFIG_ARM=y 7 CONFIG_MMU=y 8 - CONFIG_UID16=y 9 CONFIG_RWSEM_GENERIC_SPINLOCK=y 10 CONFIG_GENERIC_CALIBRATE_DELAY=y 11 - 12 - # 13 - # Code maturity level options 14 - # 15 - CONFIG_EXPERIMENTAL=y 16 - CONFIG_CLEAN_COMPILE=y 17 - CONFIG_BROKEN_ON_SMP=y 18 - CONFIG_INIT_ENV_ARG_LIMIT=32 19 20 # 21 # General setup 22 # 23 CONFIG_LOCALVERSION="" 24 CONFIG_LOCALVERSION_AUTO=y 25 CONFIG_SWAP=y 26 CONFIG_SYSVIPC=y 27 # CONFIG_POSIX_MQUEUE is not set 28 CONFIG_BSD_PROCESS_ACCT=y 29 # CONFIG_BSD_PROCESS_ACCT_V3 is not set 30 - CONFIG_SYSCTL=y 31 # CONFIG_AUDIT is not set 32 - # CONFIG_HOTPLUG is not set 33 - CONFIG_KOBJECT_UEVENT=y 34 # CONFIG_IKCONFIG is not set 35 CONFIG_INITRAMFS_SOURCE="" 36 CONFIG_CC_OPTIMIZE_FOR_SIZE=y 37 CONFIG_EMBEDDED=y 38 CONFIG_KALLSYMS=y 39 # CONFIG_KALLSYMS_ALL is not set 40 # CONFIG_KALLSYMS_EXTRA_PASS is not set 41 CONFIG_PRINTK=y 42 CONFIG_BUG=y 43 CONFIG_BASE_FULL=y 44 CONFIG_FUTEX=y 45 CONFIG_EPOLL=y 46 CONFIG_SHMEM=y 47 - CONFIG_CC_ALIGN_FUNCTIONS=0 48 - CONFIG_CC_ALIGN_LABELS=0 49 - CONFIG_CC_ALIGN_LOOPS=0 50 - CONFIG_CC_ALIGN_JUMPS=0 51 # CONFIG_TINY_SHMEM is not set 52 CONFIG_BASE_SMALL=0 53 - 54 - # 55 - # Loadable module support 56 - # 57 CONFIG_MODULES=y 58 # CONFIG_MODULE_UNLOAD is not set 59 - CONFIG_OBSOLETE_MODPARM=y 60 CONFIG_MODVERSIONS=y 61 # CONFIG_MODULE_SRCVERSION_ALL is not set 62 CONFIG_KMOD=y 63 - 64 - # 65 - # Block layer 66 - # 67 68 # 69 # IO Schedulers ··· 108 # 109 # System Type 110 # 111 # CONFIG_ARCH_CLPS7500 is not set 112 # CONFIG_ARCH_CLPS711X is not set 113 # CONFIG_ARCH_CO285 is not set 114 # CONFIG_ARCH_EBSA110 is not set 115 # CONFIG_ARCH_FOOTBRIDGE is not set 116 - # CONFIG_ARCH_INTEGRATOR is not set 117 - # CONFIG_ARCH_IOP3XX is not set 118 - CONFIG_ARCH_IXP4XX=y 119 # CONFIG_ARCH_IXP2000 is not set 120 # CONFIG_ARCH_L7200 is not set 121 # CONFIG_ARCH_PXA is not set 122 # CONFIG_ARCH_RPC is not set 123 # CONFIG_ARCH_SA1100 is not set 124 # CONFIG_ARCH_S3C2410 is not set 125 # CONFIG_ARCH_SHARK is not set 126 # CONFIG_ARCH_LH7A40X is not set 127 # CONFIG_ARCH_OMAP is not set 128 - # CONFIG_ARCH_VERSATILE is not set 129 - # CONFIG_ARCH_REALVIEW is not set 130 - # CONFIG_ARCH_IMX is not set 131 - # CONFIG_ARCH_H720X is not set 132 - # CONFIG_ARCH_AAEC2000 is not set 133 CONFIG_ARCH_SUPPORTS_BIG_ENDIAN=y 134 135 # ··· 150 # 151 # IXP4xx Platforms 152 # 153 - CONFIG_ARCH_AVILA=y 154 CONFIG_ARCH_ADI_COYOTE=y 155 CONFIG_ARCH_IXDP425=y 156 CONFIG_MACH_IXDPG425=y 157 CONFIG_MACH_IXDP465=y ··· 163 CONFIG_ARCH_IXCDP1100=y 164 CONFIG_ARCH_PRPMC1100=y 165 CONFIG_MACH_NAS100D=y 166 CONFIG_ARCH_IXDP4XX=y 167 CONFIG_CPU_IXP46X=y 168 CONFIG_CPU_IXP43X=y 169 - # CONFIG_MACH_GTWX5715 is not set 170 171 # 172 # IXP4xx Options 173 # 174 # CONFIG_IXP4XX_INDIRECT_PCI is not set 175 176 # 177 # Processor Type ··· 194 CONFIG_CPU_ABRT_EV5T=y 195 CONFIG_CPU_CACHE_VIVT=y 196 CONFIG_CPU_TLB_V4WBI=y 197 198 # 199 # Processor Features 200 # 201 # CONFIG_ARM_THUMB is not set 202 CONFIG_CPU_BIG_ENDIAN=y 203 CONFIG_XSCALE_PMU=y 204 - CONFIG_DMABOUNCE=y 205 206 # 207 # Bus support 208 # 209 - CONFIG_ISA_DMA_API=y 210 CONFIG_PCI=y 211 - CONFIG_PCI_LEGACY_PROC=y 212 # CONFIG_PCI_DEBUG is not set 213 - 214 - # 215 - # PCCARD (PCMCIA/CardBus) support 216 - # 217 # CONFIG_PCCARD is not set 218 219 # 220 # Kernel Features 221 # 222 # CONFIG_PREEMPT is not set 223 - # CONFIG_NO_IDLE_HZ is not set 224 # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set 225 CONFIG_SELECT_MEMORY_MODEL=y 226 CONFIG_FLATMEM_MANUAL=y ··· 236 CONFIG_FLATMEM=y 237 CONFIG_FLAT_NODE_MEM_MAP=y 238 # CONFIG_SPARSEMEM_STATIC is not set 239 CONFIG_SPLIT_PTLOCK_CPUS=4096 240 CONFIG_ALIGNMENT_TRAP=y 241 242 # ··· 251 CONFIG_ZBOOT_ROM_BSS=0x0 252 CONFIG_CMDLINE="console=ttyS0,115200 ip=bootp root=/dev/nfs" 253 # CONFIG_XIP_KERNEL is not set 254 255 # 256 # Floating point emulation ··· 270 CONFIG_BINFMT_ELF=y 271 # CONFIG_BINFMT_AOUT is not set 272 # CONFIG_BINFMT_MISC is not set 273 - # CONFIG_ARTHUR is not set 274 275 # 276 # Power management options 277 # 278 # CONFIG_PM is not set 279 - # CONFIG_APM is not set 280 281 # 282 # Networking ··· 285 # 286 # Networking options 287 # 288 - CONFIG_PACKET=m 289 CONFIG_PACKET_MMAP=y 290 CONFIG_UNIX=y 291 CONFIG_XFRM=y 292 # CONFIG_XFRM_USER is not set 293 # CONFIG_NET_KEY is not set 294 CONFIG_INET=y 295 CONFIG_IP_MULTICAST=y ··· 300 # CONFIG_IP_FIB_TRIE is not set 301 CONFIG_IP_FIB_HASH=y 302 CONFIG_IP_MULTIPLE_TABLES=y 303 - CONFIG_IP_ROUTE_FWMARK=y 304 CONFIG_IP_ROUTE_MULTIPATH=y 305 - # CONFIG_IP_ROUTE_MULTIPATH_CACHED is not set 306 CONFIG_IP_ROUTE_VERBOSE=y 307 CONFIG_IP_PNP=y 308 CONFIG_IP_PNP_DHCP=y ··· 317 # CONFIG_INET_AH is not set 318 # CONFIG_INET_ESP is not set 319 # CONFIG_INET_IPCOMP is not set 320 - CONFIG_INET_TUNNEL=m 321 CONFIG_INET_DIAG=y 322 CONFIG_INET_TCP_DIAG=y 323 # CONFIG_TCP_CONG_ADVANCED is not set 324 - CONFIG_TCP_CONG_BIC=y 325 - 326 - # 327 - # IP: Virtual Server Configuration 328 - # 329 CONFIG_IP_VS=m 330 CONFIG_IP_VS_DEBUG=y 331 CONFIG_IP_VS_TAB_BITS=12 ··· 359 # IPVS application helper 360 # 361 # CONFIG_IPV6 is not set 362 CONFIG_NETFILTER=y 363 # CONFIG_NETFILTER_DEBUG is not set 364 CONFIG_BRIDGE_NETFILTER=y ··· 370 # Core Netfilter Configuration 371 # 372 # CONFIG_NETFILTER_NETLINK is not set 373 374 # 375 # IP: Netfilter Configuration 376 # 377 - CONFIG_IP_NF_CONNTRACK=m 378 - # CONFIG_IP_NF_CT_ACCT is not set 379 - # CONFIG_IP_NF_CONNTRACK_MARK is not set 380 - # CONFIG_IP_NF_CONNTRACK_EVENTS is not set 381 - # CONFIG_IP_NF_CT_PROTO_SCTP is not set 382 - CONFIG_IP_NF_FTP=m 383 - CONFIG_IP_NF_IRC=m 384 - # CONFIG_IP_NF_NETBIOS_NS is not set 385 - # CONFIG_IP_NF_TFTP is not set 386 - # CONFIG_IP_NF_AMANDA is not set 387 - # CONFIG_IP_NF_PPTP is not set 388 CONFIG_IP_NF_QUEUE=m 389 CONFIG_IP_NF_IPTABLES=m 390 - CONFIG_IP_NF_MATCH_LIMIT=m 391 # CONFIG_IP_NF_MATCH_IPRANGE is not set 392 - CONFIG_IP_NF_MATCH_MAC=m 393 - # CONFIG_IP_NF_MATCH_PKTTYPE is not set 394 - CONFIG_IP_NF_MATCH_MARK=m 395 - CONFIG_IP_NF_MATCH_MULTIPORT=m 396 CONFIG_IP_NF_MATCH_TOS=m 397 # CONFIG_IP_NF_MATCH_RECENT is not set 398 # CONFIG_IP_NF_MATCH_ECN is not set 399 - # CONFIG_IP_NF_MATCH_DSCP is not set 400 - CONFIG_IP_NF_MATCH_AH_ESP=m 401 - CONFIG_IP_NF_MATCH_LENGTH=m 402 CONFIG_IP_NF_MATCH_TTL=m 403 - CONFIG_IP_NF_MATCH_TCPMSS=m 404 - # CONFIG_IP_NF_MATCH_HELPER is not set 405 - CONFIG_IP_NF_MATCH_STATE=m 406 - # CONFIG_IP_NF_MATCH_CONNTRACK is not set 407 CONFIG_IP_NF_MATCH_OWNER=m 408 - # CONFIG_IP_NF_MATCH_PHYSDEV is not set 409 # CONFIG_IP_NF_MATCH_ADDRTYPE is not set 410 - # CONFIG_IP_NF_MATCH_REALM is not set 411 - # CONFIG_IP_NF_MATCH_SCTP is not set 412 - # CONFIG_IP_NF_MATCH_DCCP is not set 413 - # CONFIG_IP_NF_MATCH_COMMENT is not set 414 - # CONFIG_IP_NF_MATCH_HASHLIMIT is not set 415 - # CONFIG_IP_NF_MATCH_STRING is not set 416 CONFIG_IP_NF_FILTER=m 417 CONFIG_IP_NF_TARGET_REJECT=m 418 CONFIG_IP_NF_TARGET_LOG=m 419 CONFIG_IP_NF_TARGET_ULOG=m 420 - CONFIG_IP_NF_TARGET_TCPMSS=m 421 - # CONFIG_IP_NF_TARGET_NFQUEUE is not set 422 - CONFIG_IP_NF_NAT=m 423 - CONFIG_IP_NF_NAT_NEEDED=y 424 - CONFIG_IP_NF_TARGET_MASQUERADE=m 425 - CONFIG_IP_NF_TARGET_REDIRECT=m 426 - # CONFIG_IP_NF_TARGET_NETMAP is not set 427 - # CONFIG_IP_NF_TARGET_SAME is not set 428 - CONFIG_IP_NF_NAT_SNMP_BASIC=m 429 - CONFIG_IP_NF_NAT_IRC=m 430 - CONFIG_IP_NF_NAT_FTP=m 431 CONFIG_IP_NF_MANGLE=m 432 CONFIG_IP_NF_TARGET_TOS=m 433 # CONFIG_IP_NF_TARGET_ECN is not set 434 - # CONFIG_IP_NF_TARGET_DSCP is not set 435 - CONFIG_IP_NF_TARGET_MARK=m 436 - # CONFIG_IP_NF_TARGET_CLASSIFY is not set 437 # CONFIG_IP_NF_TARGET_TTL is not set 438 # CONFIG_IP_NF_RAW is not set 439 CONFIG_IP_NF_ARPTABLES=m ··· 431 # Bridge: Netfilter Configuration 432 # 433 # CONFIG_BRIDGE_NF_EBTABLES is not set 434 - 435 - # 436 - # DCCP Configuration (EXPERIMENTAL) 437 - # 438 # CONFIG_IP_DCCP is not set 439 - 440 - # 441 - # SCTP Configuration (EXPERIMENTAL) 442 - # 443 # CONFIG_IP_SCTP is not set 444 CONFIG_ATM=y 445 CONFIG_ATM_CLIP=y 446 # CONFIG_ATM_CLIP_NO_ICMP is not set ··· 449 CONFIG_IPX=m 450 # CONFIG_IPX_INTERN is not set 451 CONFIG_ATALK=m 452 - CONFIG_DEV_APPLETALK=y 453 CONFIG_IPDDP=m 454 CONFIG_IPDDP_ENCAP=y 455 CONFIG_IPDDP_DECAP=y 456 CONFIG_X25=m 457 CONFIG_LAPB=m 458 - # CONFIG_NET_DIVERT is not set 459 CONFIG_ECONET=m 460 CONFIG_ECONET_AUNUDP=y 461 CONFIG_ECONET_NATIVE=y 462 CONFIG_WAN_ROUTER=m 463 - 464 - # 465 - # QoS and/or fair queueing 466 - # 467 CONFIG_NET_SCHED=y 468 - CONFIG_NET_SCH_CLK_JIFFIES=y 469 - # CONFIG_NET_SCH_CLK_GETTIMEOFDAY is not set 470 - # CONFIG_NET_SCH_CLK_CPU is not set 471 472 # 473 # Queueing/Scheduling ··· 469 # CONFIG_NET_SCH_HFSC is not set 470 # CONFIG_NET_SCH_ATM is not set 471 CONFIG_NET_SCH_PRIO=m 472 CONFIG_NET_SCH_RED=m 473 CONFIG_NET_SCH_SFQ=m 474 CONFIG_NET_SCH_TEQL=m ··· 494 CONFIG_NET_CLS_RSVP=m 495 CONFIG_NET_CLS_RSVP6=m 496 # CONFIG_NET_EMATCH is not set 497 - # CONFIG_NET_CLS_ACT is not set 498 CONFIG_NET_CLS_POLICE=y 499 # CONFIG_NET_CLS_IND is not set 500 - CONFIG_NET_ESTIMATOR=y 501 502 # 503 # Network testing ··· 513 # CONFIG_HAMRADIO is not set 514 # CONFIG_IRDA is not set 515 # CONFIG_BT is not set 516 # CONFIG_IEEE80211 is not set 517 518 # 519 # Device Drivers ··· 533 # 534 # Generic Driver Options 535 # 536 CONFIG_STANDALONE=y 537 CONFIG_PREVENT_FIRMWARE_BUILD=y 538 - # CONFIG_FW_LOADER is not set 539 # CONFIG_DEBUG_DRIVER is not set 540 - 541 - # 542 - # Connector - unified userspace <-> kernelspace linker 543 - # 544 # CONFIG_CONNECTOR is not set 545 - 546 - # 547 - # Memory Technology Devices (MTD) 548 - # 549 CONFIG_MTD=y 550 # CONFIG_MTD_DEBUG is not set 551 # CONFIG_MTD_CONCAT is not set ··· 556 # User Modules And Translation Layers 557 # 558 CONFIG_MTD_CHAR=y 559 CONFIG_MTD_BLOCK=y 560 # CONFIG_FTL is not set 561 # CONFIG_NFTL is not set 562 # CONFIG_INFTL is not set 563 # CONFIG_RFD_FTL is not set 564 565 # 566 # RAM/ROM/Flash chip drivers ··· 589 # CONFIG_MTD_RAM is not set 590 # CONFIG_MTD_ROM is not set 591 # CONFIG_MTD_ABSENT is not set 592 - # CONFIG_MTD_XIP is not set 593 594 # 595 # Mapping drivers for chip access ··· 598 # CONFIG_MTD_ARM_INTEGRATOR is not set 599 CONFIG_MTD_IXP4XX=y 600 # CONFIG_MTD_PCI is not set 601 # CONFIG_MTD_PLATRAM is not set 602 603 # ··· 608 # CONFIG_MTD_SLRAM is not set 609 # CONFIG_MTD_PHRAM is not set 610 # CONFIG_MTD_MTDRAM is not set 611 - # CONFIG_MTD_BLKMTD is not set 612 # CONFIG_MTD_BLOCK2MTD is not set 613 614 # ··· 616 # CONFIG_MTD_DOC2000 is not set 617 # CONFIG_MTD_DOC2001 is not set 618 # CONFIG_MTD_DOC2001PLUS is not set 619 - 620 - # 621 - # NAND Flash Device Drivers 622 - # 623 CONFIG_MTD_NAND=m 624 # CONFIG_MTD_NAND_VERIFY_WRITE is not set 625 CONFIG_MTD_NAND_IDS=m 626 # CONFIG_MTD_NAND_DISKONCHIP is not set 627 # CONFIG_MTD_NAND_NANDSIM is not set 628 - 629 - # 630 - # OneNAND Flash Device Drivers 631 - # 632 # CONFIG_MTD_ONENAND is not set 633 634 # 635 - # Parallel port support 636 # 637 # CONFIG_PARPORT is not set 638 - 639 - # 640 - # Plug and Play support 641 - # 642 - 643 - # 644 - # Block devices 645 - # 646 # CONFIG_BLK_CPQ_DA is not set 647 # CONFIG_BLK_CPQ_CISS_DA is not set 648 # CONFIG_BLK_DEV_DAC960 is not set ··· 643 # CONFIG_BLK_DEV_CRYPTOLOOP is not set 644 # CONFIG_BLK_DEV_NBD is not set 645 # CONFIG_BLK_DEV_SX8 is not set 646 CONFIG_BLK_DEV_RAM=y 647 CONFIG_BLK_DEV_RAM_COUNT=16 648 CONFIG_BLK_DEV_RAM_SIZE=8192 649 - CONFIG_BLK_DEV_INITRD=y 650 # CONFIG_CDROM_PKTCDVD is not set 651 # CONFIG_ATA_OVER_ETH is not set 652 - 653 - # 654 - # ATA/ATAPI/MFM/RLL support 655 - # 656 CONFIG_IDE=y 657 CONFIG_BLK_DEV_IDE=y 658 659 # ··· 668 # CONFIG_BLK_DEV_IDECD is not set 669 # CONFIG_BLK_DEV_IDETAPE is not set 670 # CONFIG_BLK_DEV_IDEFLOPPY is not set 671 # CONFIG_IDE_TASK_IOCTL is not set 672 673 # 674 # IDE chipset support/bugfixes 675 # 676 CONFIG_IDE_GENERIC=y 677 CONFIG_BLK_DEV_IDEPCI=y 678 # CONFIG_IDEPCI_SHARE_IRQ is not set 679 # CONFIG_BLK_DEV_OFFBOARD is not set 680 # CONFIG_BLK_DEV_GENERIC is not set 681 # CONFIG_BLK_DEV_OPTI621 is not set 682 - # CONFIG_BLK_DEV_SL82C105 is not set 683 CONFIG_BLK_DEV_IDEDMA_PCI=y 684 - # CONFIG_BLK_DEV_IDEDMA_FORCED is not set 685 - # CONFIG_IDEDMA_PCI_AUTO is not set 686 # CONFIG_BLK_DEV_AEC62XX is not set 687 # CONFIG_BLK_DEV_ALI15X3 is not set 688 - # CONFIG_BLK_DEV_AMD74XX is not set 689 CONFIG_BLK_DEV_CMD64X=y 690 # CONFIG_BLK_DEV_TRIFLEX is not set 691 # CONFIG_BLK_DEV_CY82C693 is not set ··· 697 # CONFIG_BLK_DEV_CS5530 is not set 698 # CONFIG_BLK_DEV_HPT34X is not set 699 CONFIG_BLK_DEV_HPT366=y 700 # CONFIG_BLK_DEV_SC1200 is not set 701 # CONFIG_BLK_DEV_PIIX is not set 702 # CONFIG_BLK_DEV_IT821X is not set 703 # CONFIG_BLK_DEV_NS87415 is not set 704 # CONFIG_BLK_DEV_PDC202XX_OLD is not set 705 CONFIG_BLK_DEV_PDC202XX_NEW=y 706 - # CONFIG_PDC202XX_FORCE is not set 707 # CONFIG_BLK_DEV_SVWKS is not set 708 # CONFIG_BLK_DEV_SIIMAGE is not set 709 # CONFIG_BLK_DEV_SLC90E66 is not set 710 # CONFIG_BLK_DEV_TRM290 is not set 711 # CONFIG_BLK_DEV_VIA82CXXX is not set 712 # CONFIG_IDE_ARM is not set 713 CONFIG_BLK_DEV_IDEDMA=y 714 - # CONFIG_IDEDMA_IVB is not set 715 - # CONFIG_IDEDMA_AUTO is not set 716 # CONFIG_BLK_DEV_HD is not set 717 718 # 719 # SCSI device support 720 # 721 # CONFIG_RAID_ATTRS is not set 722 - # CONFIG_SCSI is not set 723 724 # 725 - # Multi-device support (RAID and LVM) 726 # 727 # CONFIG_MD is not set 728 - 729 - # 730 - # Fusion MPT device support 731 - # 732 # CONFIG_FUSION is not set 733 734 # 735 # IEEE 1394 (FireWire) support 736 # 737 # CONFIG_IEEE1394 is not set 738 - 739 - # 740 - # I2O device support 741 - # 742 # CONFIG_I2O is not set 743 - 744 - # 745 - # Network device support 746 - # 747 CONFIG_NETDEVICES=y 748 CONFIG_DUMMY=y 749 # CONFIG_BONDING is not set 750 # CONFIG_EQUALIZER is not set 751 # CONFIG_TUN is not set 752 - 753 - # 754 - # ARCnet devices 755 - # 756 # CONFIG_ARCNET is not set 757 - 758 - # 759 - # PHY device support 760 - # 761 # CONFIG_PHYLIB is not set 762 - 763 - # 764 - # Ethernet (10 or 100Mbit) 765 - # 766 CONFIG_NET_ETHERNET=y 767 CONFIG_MII=y 768 # CONFIG_HAPPYMEAL is not set 769 # CONFIG_SUNGEM is not set 770 # CONFIG_CASSINI is not set 771 # CONFIG_NET_VENDOR_3COM is not set 772 # CONFIG_SMC91X is not set 773 # CONFIG_DM9000 is not set 774 - 775 - # 776 - # Tulip family network device support 777 - # 778 # CONFIG_NET_TULIP is not set 779 # CONFIG_HP100 is not set 780 CONFIG_NET_PCI=y 781 # CONFIG_PCNET32 is not set 782 # CONFIG_AMD8111_ETH is not set 783 # CONFIG_ADAPTEC_STARFIRE is not set 784 # CONFIG_B44 is not set 785 # CONFIG_FORCEDETH is not set 786 - # CONFIG_DGRS is not set 787 CONFIG_EEPRO100=y 788 # CONFIG_E100 is not set 789 # CONFIG_FEALNX is not set ··· 866 # CONFIG_SUNDANCE is not set 867 # CONFIG_TLAN is not set 868 # CONFIG_VIA_RHINE is not set 869 - 870 - # 871 - # Ethernet (1000 Mbit) 872 - # 873 # CONFIG_ACENIC is not set 874 # CONFIG_DL2K is not set 875 # CONFIG_E1000 is not set 876 # CONFIG_NS83820 is not set 877 # CONFIG_HAMACHI is not set 878 # CONFIG_YELLOWFIN is not set 879 # CONFIG_R8169 is not set 880 # CONFIG_SIS190 is not set 881 # CONFIG_SKGE is not set 882 # CONFIG_SK98LIN is not set 883 # CONFIG_VIA_VELOCITY is not set 884 # CONFIG_TIGON3 is not set 885 # CONFIG_BNX2 is not set 886 - 887 - # 888 - # Ethernet (10000 Mbit) 889 - # 890 # CONFIG_CHELSIO_T1 is not set 891 # CONFIG_IXGB is not set 892 # CONFIG_S2IO is not set 893 - 894 - # 895 - # Token Ring devices 896 - # 897 # CONFIG_TR is not set 898 899 # 900 - # Wireless LAN (non-hamradio) 901 # 902 - CONFIG_NET_RADIO=y 903 904 # 905 - # Obsolete Wireless cards support (pre-802.11) 906 # 907 - # CONFIG_STRIP is not set 908 - 909 - # 910 - # Wireless 802.11b ISA/PCI cards support 911 - # 912 - # CONFIG_AIRO is not set 913 - CONFIG_HERMES=y 914 - # CONFIG_PLX_HERMES is not set 915 - # CONFIG_TMD_HERMES is not set 916 - # CONFIG_NORTEL_HERMES is not set 917 - CONFIG_PCI_HERMES=y 918 - # CONFIG_ATMEL is not set 919 - 920 - # 921 - # Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support 922 - # 923 - # CONFIG_PRISM54 is not set 924 - # CONFIG_HOSTAP is not set 925 - CONFIG_NET_WIRELESS=y 926 - 927 - # 928 - # Wan interfaces 929 - # 930 CONFIG_WAN=y 931 - # CONFIG_DSCC4 is not set 932 # CONFIG_LANMEDIA is not set 933 - # CONFIG_SYNCLINK_SYNCPPP is not set 934 CONFIG_HDLC=m 935 - CONFIG_HDLC_RAW=y 936 # CONFIG_HDLC_RAW_ETH is not set 937 - CONFIG_HDLC_CISCO=y 938 - CONFIG_HDLC_FR=y 939 - CONFIG_HDLC_PPP=y 940 - CONFIG_HDLC_X25=y 941 # CONFIG_PCI200SYN is not set 942 # CONFIG_WANXL is not set 943 # CONFIG_PC300 is not set 944 # CONFIG_FARSYNC is not set 945 CONFIG_DLCI=m 946 - CONFIG_DLCI_COUNT=24 947 CONFIG_DLCI_MAX=8 948 - CONFIG_WAN_ROUTER_DRIVERS=y 949 # CONFIG_CYCLADES_SYNC is not set 950 # CONFIG_LAPBETHER is not set 951 # CONFIG_X25_ASY is not set 952 - 953 - # 954 - # ATM drivers 955 - # 956 # CONFIG_ATM_DUMMY is not set 957 CONFIG_ATM_TCP=m 958 # CONFIG_ATM_LANAI is not set ··· 953 # CONFIG_HIPPI is not set 954 # CONFIG_PPP is not set 955 # CONFIG_SLIP is not set 956 # CONFIG_SHAPER is not set 957 # CONFIG_NETCONSOLE is not set 958 # CONFIG_NETPOLL is not set 959 # CONFIG_NET_POLL_CONTROLLER is not set 960 - 961 - # 962 - # ISDN subsystem 963 - # 964 # CONFIG_ISDN is not set 965 966 # 967 # Input device support 968 # 969 CONFIG_INPUT=y 970 971 # 972 # Userland interfaces ··· 975 CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 976 CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 977 # CONFIG_INPUT_JOYDEV is not set 978 - # CONFIG_INPUT_TSDEV is not set 979 # CONFIG_INPUT_EVDEV is not set 980 # CONFIG_INPUT_EVBUG is not set 981 ··· 984 # CONFIG_INPUT_KEYBOARD is not set 985 # CONFIG_INPUT_MOUSE is not set 986 # CONFIG_INPUT_JOYSTICK is not set 987 # CONFIG_INPUT_TOUCHSCREEN is not set 988 - # CONFIG_INPUT_MISC is not set 989 990 # 991 # Hardware I/O ports ··· 1012 # 1013 CONFIG_SERIAL_8250=y 1014 CONFIG_SERIAL_8250_CONSOLE=y 1015 CONFIG_SERIAL_8250_NR_UARTS=2 1016 # CONFIG_SERIAL_8250_EXTENDED is not set 1017 1018 # ··· 1026 CONFIG_UNIX98_PTYS=y 1027 CONFIG_LEGACY_PTYS=y 1028 CONFIG_LEGACY_PTY_COUNT=256 1029 - 1030 - # 1031 - # IPMI 1032 - # 1033 # CONFIG_IPMI_HANDLER is not set 1034 - 1035 - # 1036 - # Watchdog Cards 1037 - # 1038 - CONFIG_WATCHDOG=y 1039 - # CONFIG_WATCHDOG_NOWAYOUT is not set 1040 - 1041 - # 1042 - # Watchdog Device Drivers 1043 - # 1044 - # CONFIG_SOFT_WATCHDOG is not set 1045 - CONFIG_IXP4XX_WATCHDOG=y 1046 - 1047 - # 1048 - # PCI-based Watchdog Cards 1049 - # 1050 - # CONFIG_PCIPCWATCHDOG is not set 1051 - # CONFIG_WDTPCI is not set 1052 # CONFIG_NVRAM is not set 1053 - # CONFIG_RTC is not set 1054 - # CONFIG_DTLK is not set 1055 # CONFIG_R3964 is not set 1056 # CONFIG_APPLICOM is not set 1057 - 1058 - # 1059 - # Ftape, the floppy tape device driver 1060 - # 1061 - # CONFIG_DRM is not set 1062 # CONFIG_RAW_DRIVER is not set 1063 - 1064 - # 1065 - # TPM devices 1066 - # 1067 # CONFIG_TCG_TPM is not set 1068 - # CONFIG_TELCLOCK is not set 1069 - 1070 - # 1071 - # I2C support 1072 - # 1073 CONFIG_I2C=y 1074 CONFIG_I2C_CHARDEV=y 1075 1076 # ··· 1054 # CONFIG_I2C_ALI15X3 is not set 1055 # CONFIG_I2C_AMD756 is not set 1056 # CONFIG_I2C_AMD8111 is not set 1057 # CONFIG_I2C_I801 is not set 1058 # CONFIG_I2C_I810 is not set 1059 # CONFIG_I2C_PIIX4 is not set 1060 # CONFIG_I2C_IOP3XX is not set 1061 CONFIG_I2C_IXP4XX=y 1062 # CONFIG_I2C_NFORCE2 is not set 1063 # CONFIG_I2C_PARPORT_LIGHT is not set 1064 # CONFIG_I2C_PROSAVAGE is not set 1065 # CONFIG_I2C_SAVAGE4 is not set 1066 - # CONFIG_SCx200_ACB is not set 1067 # CONFIG_I2C_SIS5595 is not set 1068 # CONFIG_I2C_SIS630 is not set 1069 # CONFIG_I2C_SIS96X is not set 1070 # CONFIG_I2C_STUB is not set 1071 # CONFIG_I2C_VIA is not set 1072 # CONFIG_I2C_VIAPRO is not set 1073 # CONFIG_I2C_VOODOO3 is not set 1074 - # CONFIG_I2C_PCA_ISA is not set 1075 1076 # 1077 # Miscellaneous I2C Chip support 1078 # 1079 # CONFIG_SENSORS_DS1337 is not set 1080 # CONFIG_SENSORS_DS1374 is not set 1081 CONFIG_SENSORS_EEPROM=y 1082 # CONFIG_SENSORS_PCF8574 is not set 1083 # CONFIG_SENSORS_PCA9539 is not set 1084 # CONFIG_SENSORS_PCF8591 is not set 1085 - # CONFIG_SENSORS_RTC8564 is not set 1086 # CONFIG_SENSORS_MAX6875 is not set 1087 - # CONFIG_RTC_X1205_I2C is not set 1088 # CONFIG_I2C_DEBUG_CORE is not set 1089 # CONFIG_I2C_DEBUG_ALGO is not set 1090 # CONFIG_I2C_DEBUG_BUS is not set 1091 # CONFIG_I2C_DEBUG_CHIP is not set 1092 1093 # 1094 - # Hardware Monitoring support 1095 # 1096 CONFIG_HWMON=y 1097 # CONFIG_HWMON_VID is not set 1098 # CONFIG_SENSORS_ADM1021 is not set 1099 # CONFIG_SENSORS_ADM1025 is not set 1100 # CONFIG_SENSORS_ADM1026 is not set 1101 # CONFIG_SENSORS_ADM1031 is not set 1102 # CONFIG_SENSORS_ADM9240 is not set 1103 - # CONFIG_SENSORS_ASB100 is not set 1104 # CONFIG_SENSORS_ATXP1 is not set 1105 # CONFIG_SENSORS_DS1621 is not set 1106 - # CONFIG_SENSORS_FSCHER is not set 1107 - # CONFIG_SENSORS_FSCPOS is not set 1108 # CONFIG_SENSORS_GL518SM is not set 1109 # CONFIG_SENSORS_GL520SM is not set 1110 # CONFIG_SENSORS_IT87 is not set ··· 1129 # CONFIG_SENSORS_LM87 is not set 1130 # CONFIG_SENSORS_LM90 is not set 1131 # CONFIG_SENSORS_LM92 is not set 1132 # CONFIG_SENSORS_MAX1619 is not set 1133 # CONFIG_SENSORS_PC87360 is not set 1134 # CONFIG_SENSORS_SIS5595 is not set 1135 # CONFIG_SENSORS_SMSC47M1 is not set 1136 # CONFIG_SENSORS_SMSC47B397 is not set 1137 # CONFIG_SENSORS_VIA686A is not set 1138 # CONFIG_SENSORS_W83781D is not set 1139 # CONFIG_SENSORS_W83792D is not set 1140 # CONFIG_SENSORS_W83L785TS is not set 1141 # CONFIG_SENSORS_W83627HF is not set 1142 # CONFIG_SENSORS_W83627EHF is not set 1143 # CONFIG_HWMON_DEBUG_CHIP is not set 1144 1145 # 1146 - # Misc devices 1147 # 1148 1149 # 1150 - # Multimedia Capabilities Port drivers 1151 # 1152 1153 # 1154 # Multimedia devices 1155 # 1156 # CONFIG_VIDEO_DEV is not set 1157 - 1158 - # 1159 - # Digital Video Broadcasting Devices 1160 - # 1161 - # CONFIG_DVB is not set 1162 1163 # 1164 # Graphics support 1165 # 1166 # CONFIG_FB is not set 1167 1168 # 1169 # Sound 1170 # 1171 # CONFIG_SOUND is not set 1172 1173 # 1174 - # USB support 1175 # 1176 CONFIG_USB_ARCH_HAS_HCD=y 1177 CONFIG_USB_ARCH_HAS_OHCI=y 1178 - # CONFIG_USB is not set 1179 1180 # 1181 # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' 1182 # 1183 1184 # 1185 # USB Gadget Support 1186 # 1187 # CONFIG_USB_GADGET is not set 1188 1189 # 1190 - # MMC/SD Card support 1191 # 1192 - # CONFIG_MMC is not set 1193 1194 # 1195 # File systems ··· 1404 CONFIG_EXT3_FS_XATTR=y 1405 CONFIG_EXT3_FS_POSIX_ACL=y 1406 # CONFIG_EXT3_FS_SECURITY is not set 1407 CONFIG_JBD=y 1408 - # CONFIG_JBD_DEBUG is not set 1409 CONFIG_FS_MBCACHE=y 1410 # CONFIG_REISERFS_FS is not set 1411 # CONFIG_JFS_FS is not set 1412 CONFIG_FS_POSIX_ACL=y 1413 # CONFIG_XFS_FS is not set 1414 # CONFIG_MINIX_FS is not set 1415 # CONFIG_ROMFS_FS is not set 1416 CONFIG_INOTIFY=y 1417 # CONFIG_QUOTA is not set 1418 CONFIG_DNOTIFY=y 1419 # CONFIG_AUTOFS_FS is not set ··· 1440 # Pseudo filesystems 1441 # 1442 CONFIG_PROC_FS=y 1443 CONFIG_SYSFS=y 1444 CONFIG_TMPFS=y 1445 # CONFIG_HUGETLB_PAGE is not set 1446 - CONFIG_RAMFS=y 1447 - # CONFIG_RELAYFS_FS is not set 1448 1449 # 1450 # Miscellaneous filesystems ··· 1457 # CONFIG_BEFS_FS is not set 1458 # CONFIG_BFS_FS is not set 1459 # CONFIG_EFS_FS is not set 1460 - # CONFIG_JFFS_FS is not set 1461 CONFIG_JFFS2_FS=y 1462 CONFIG_JFFS2_FS_DEBUG=0 1463 CONFIG_JFFS2_FS_WRITEBUFFER=y 1464 # CONFIG_JFFS2_SUMMARY is not set 1465 # CONFIG_JFFS2_COMPRESSION_OPTIONS is not set 1466 CONFIG_JFFS2_ZLIB=y 1467 CONFIG_JFFS2_RTIME=y 1468 # CONFIG_JFFS2_RUBIN is not set 1469 # CONFIG_CRAMFS is not set ··· 1474 # CONFIG_QNX4FS_FS is not set 1475 # CONFIG_SYSV_FS is not set 1476 # CONFIG_UFS_FS is not set 1477 - 1478 - # 1479 - # Network File Systems 1480 - # 1481 CONFIG_NFS_FS=y 1482 CONFIG_NFS_V3=y 1483 # CONFIG_NFS_V3_ACL is not set ··· 1486 CONFIG_LOCKD_V4=y 1487 CONFIG_NFS_COMMON=y 1488 CONFIG_SUNRPC=y 1489 # CONFIG_RPCSEC_GSS_KRB5 is not set 1490 # CONFIG_RPCSEC_GSS_SPKM3 is not set 1491 # CONFIG_SMB_FS is not set ··· 1494 # CONFIG_NCP_FS is not set 1495 # CONFIG_CODA_FS is not set 1496 # CONFIG_AFS_FS is not set 1497 - # CONFIG_9P_FS is not set 1498 1499 # 1500 # Partition Types ··· 1513 # CONFIG_SGI_PARTITION is not set 1514 # CONFIG_ULTRIX_PARTITION is not set 1515 # CONFIG_SUN_PARTITION is not set 1516 # CONFIG_EFI_PARTITION is not set 1517 - 1518 - # 1519 - # Native Language Support 1520 - # 1521 # CONFIG_NLS is not set 1522 - 1523 - # 1524 - # Profiling support 1525 - # 1526 # CONFIG_PROFILING is not set 1527 1528 # 1529 # Kernel hacking 1530 # 1531 # CONFIG_PRINTK_TIME is not set 1532 - CONFIG_DEBUG_KERNEL=y 1533 CONFIG_MAGIC_SYSRQ=y 1534 - CONFIG_LOG_BUF_SHIFT=14 1535 CONFIG_DETECT_SOFTLOCKUP=y 1536 # CONFIG_SCHEDSTATS is not set 1537 - # CONFIG_DEBUG_SLAB is not set 1538 # CONFIG_DEBUG_SPINLOCK is not set 1539 # CONFIG_DEBUG_SPINLOCK_SLEEP is not set 1540 # CONFIG_DEBUG_KOBJECT is not set 1541 CONFIG_DEBUG_BUGVERBOSE=y 1542 # CONFIG_DEBUG_INFO is not set 1543 - # CONFIG_DEBUG_FS is not set 1544 # CONFIG_DEBUG_VM is not set 1545 CONFIG_FRAME_POINTER=y 1546 # CONFIG_RCU_TORTURE_TEST is not set 1547 # CONFIG_DEBUG_USER is not set 1548 CONFIG_DEBUG_ERRORS=y 1549 CONFIG_DEBUG_LL=y ··· 1570 # 1571 # CONFIG_KEYS is not set 1572 # CONFIG_SECURITY is not set 1573 - 1574 - # 1575 - # Cryptographic options 1576 - # 1577 # CONFIG_CRYPTO is not set 1578 - 1579 - # 1580 - # Hardware crypto devices 1581 - # 1582 1583 # 1584 # Library routines 1585 # 1586 # CONFIG_CRC_CCITT is not set 1587 # CONFIG_CRC16 is not set 1588 CONFIG_CRC32=y 1589 # CONFIG_LIBCRC32C is not set 1590 CONFIG_ZLIB_INFLATE=y 1591 CONFIG_ZLIB_DEFLATE=y
··· 1 # 2 # Automatically generated make config: don't edit 3 + # Linux kernel version: 2.6.24 4 + # Sun Jan 27 07:33:38 2008 5 # 6 CONFIG_ARM=y 7 + CONFIG_SYS_SUPPORTS_APM_EMULATION=y 8 + CONFIG_GENERIC_GPIO=y 9 + CONFIG_GENERIC_TIME=y 10 + CONFIG_GENERIC_CLOCKEVENTS=y 11 CONFIG_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_VECTORS_BASE=0xffff0000 26 + CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" 27 28 # 29 # General setup 30 # 31 + CONFIG_EXPERIMENTAL=y 32 + CONFIG_BROKEN_ON_SMP=y 33 + CONFIG_INIT_ENV_ARG_LIMIT=32 34 CONFIG_LOCALVERSION="" 35 CONFIG_LOCALVERSION_AUTO=y 36 CONFIG_SWAP=y 37 CONFIG_SYSVIPC=y 38 + CONFIG_SYSVIPC_SYSCTL=y 39 # CONFIG_POSIX_MQUEUE is not set 40 CONFIG_BSD_PROCESS_ACCT=y 41 # CONFIG_BSD_PROCESS_ACCT_V3 is not set 42 + # CONFIG_TASKSTATS is not set 43 + # CONFIG_USER_NS is not set 44 + # CONFIG_PID_NS is not set 45 # CONFIG_AUDIT is not set 46 # CONFIG_IKCONFIG is not set 47 + CONFIG_LOG_BUF_SHIFT=14 48 + # CONFIG_CGROUPS is not set 49 + CONFIG_FAIR_GROUP_SCHED=y 50 + CONFIG_FAIR_USER_SCHED=y 51 + # CONFIG_FAIR_CGROUP_SCHED is not set 52 + CONFIG_SYSFS_DEPRECATED=y 53 + # CONFIG_RELAY is not set 54 + CONFIG_BLK_DEV_INITRD=y 55 CONFIG_INITRAMFS_SOURCE="" 56 CONFIG_CC_OPTIMIZE_FOR_SIZE=y 57 + CONFIG_SYSCTL=y 58 CONFIG_EMBEDDED=y 59 + CONFIG_UID16=y 60 + CONFIG_SYSCTL_SYSCALL=y 61 CONFIG_KALLSYMS=y 62 # CONFIG_KALLSYMS_ALL is not set 63 # CONFIG_KALLSYMS_EXTRA_PASS is not set 64 + CONFIG_HOTPLUG=y 65 CONFIG_PRINTK=y 66 CONFIG_BUG=y 67 + CONFIG_ELF_CORE=y 68 CONFIG_BASE_FULL=y 69 CONFIG_FUTEX=y 70 + CONFIG_ANON_INODES=y 71 CONFIG_EPOLL=y 72 + CONFIG_SIGNALFD=y 73 + CONFIG_EVENTFD=y 74 CONFIG_SHMEM=y 75 + CONFIG_VM_EVENT_COUNTERS=y 76 + CONFIG_SLUB_DEBUG=y 77 + # CONFIG_SLAB is not set 78 + CONFIG_SLUB=y 79 + # CONFIG_SLOB is not set 80 + CONFIG_SLABINFO=y 81 + CONFIG_RT_MUTEXES=y 82 # CONFIG_TINY_SHMEM is not set 83 CONFIG_BASE_SMALL=0 84 CONFIG_MODULES=y 85 # CONFIG_MODULE_UNLOAD is not set 86 CONFIG_MODVERSIONS=y 87 # CONFIG_MODULE_SRCVERSION_ALL is not set 88 CONFIG_KMOD=y 89 + CONFIG_BLOCK=y 90 + # CONFIG_LBD is not set 91 + # CONFIG_BLK_DEV_IO_TRACE is not set 92 + # CONFIG_LSF is not set 93 + # CONFIG_BLK_DEV_BSG is not set 94 95 # 96 # IO Schedulers ··· 81 # 82 # System Type 83 # 84 + # CONFIG_ARCH_AAEC2000 is not set 85 + # CONFIG_ARCH_INTEGRATOR is not set 86 + # CONFIG_ARCH_REALVIEW is not set 87 + # CONFIG_ARCH_VERSATILE is not set 88 + # CONFIG_ARCH_AT91 is not set 89 # CONFIG_ARCH_CLPS7500 is not set 90 # CONFIG_ARCH_CLPS711X is not set 91 # CONFIG_ARCH_CO285 is not set 92 # CONFIG_ARCH_EBSA110 is not set 93 + # CONFIG_ARCH_EP93XX is not set 94 # CONFIG_ARCH_FOOTBRIDGE is not set 95 + # CONFIG_ARCH_NETX is not set 96 + # CONFIG_ARCH_H720X is not set 97 + # CONFIG_ARCH_IMX is not set 98 + # CONFIG_ARCH_IOP13XX is not set 99 + # CONFIG_ARCH_IOP32X is not set 100 + # CONFIG_ARCH_IOP33X is not set 101 + # CONFIG_ARCH_IXP23XX is not set 102 # CONFIG_ARCH_IXP2000 is not set 103 + CONFIG_ARCH_IXP4XX=y 104 # CONFIG_ARCH_L7200 is not set 105 + # CONFIG_ARCH_KS8695 is not set 106 + # CONFIG_ARCH_NS9XXX is not set 107 + # CONFIG_ARCH_MXC is not set 108 + # CONFIG_ARCH_PNX4008 is not set 109 # CONFIG_ARCH_PXA is not set 110 # CONFIG_ARCH_RPC is not set 111 # CONFIG_ARCH_SA1100 is not set 112 # CONFIG_ARCH_S3C2410 is not set 113 # CONFIG_ARCH_SHARK is not set 114 # CONFIG_ARCH_LH7A40X is not set 115 + # CONFIG_ARCH_DAVINCI is not set 116 # CONFIG_ARCH_OMAP is not set 117 CONFIG_ARCH_SUPPORTS_BIG_ENDIAN=y 118 119 # ··· 112 # 113 # IXP4xx Platforms 114 # 115 + CONFIG_MACH_NSLU2=y 116 + CONFIG_MACH_AVILA=y 117 + CONFIG_MACH_LOFT=y 118 CONFIG_ARCH_ADI_COYOTE=y 119 + CONFIG_MACH_GATEWAY7001=y 120 + CONFIG_MACH_WG302V2=y 121 CONFIG_ARCH_IXDP425=y 122 CONFIG_MACH_IXDPG425=y 123 CONFIG_MACH_IXDP465=y ··· 121 CONFIG_ARCH_IXCDP1100=y 122 CONFIG_ARCH_PRPMC1100=y 123 CONFIG_MACH_NAS100D=y 124 + CONFIG_MACH_DSMG600=y 125 CONFIG_ARCH_IXDP4XX=y 126 CONFIG_CPU_IXP46X=y 127 CONFIG_CPU_IXP43X=y 128 + CONFIG_MACH_GTWX5715=y 129 130 # 131 # IXP4xx Options 132 # 133 + CONFIG_DMABOUNCE=y 134 # CONFIG_IXP4XX_INDIRECT_PCI is not set 135 + CONFIG_IXP4XX_QMGR=y 136 + CONFIG_IXP4XX_NPE=y 137 + 138 + # 139 + # Boot options 140 + # 141 + 142 + # 143 + # Power management 144 + # 145 146 # 147 # Processor Type ··· 140 CONFIG_CPU_ABRT_EV5T=y 141 CONFIG_CPU_CACHE_VIVT=y 142 CONFIG_CPU_TLB_V4WBI=y 143 + CONFIG_CPU_CP15=y 144 + CONFIG_CPU_CP15_MMU=y 145 146 # 147 # Processor Features 148 # 149 # CONFIG_ARM_THUMB is not set 150 CONFIG_CPU_BIG_ENDIAN=y 151 + # CONFIG_CPU_DCACHE_DISABLE is not set 152 + # CONFIG_OUTER_CACHE is not set 153 + # CONFIG_IWMMXT is not set 154 CONFIG_XSCALE_PMU=y 155 156 # 157 # Bus support 158 # 159 CONFIG_PCI=y 160 + CONFIG_PCI_SYSCALL=y 161 + # CONFIG_ARCH_SUPPORTS_MSI is not set 162 + CONFIG_PCI_LEGACY=y 163 # CONFIG_PCI_DEBUG is not set 164 # CONFIG_PCCARD is not set 165 166 # 167 # Kernel Features 168 # 169 + # CONFIG_TICK_ONESHOT is not set 170 + # CONFIG_NO_HZ is not set 171 + # CONFIG_HIGH_RES_TIMERS is not set 172 + CONFIG_GENERIC_CLOCKEVENTS_BUILD=y 173 # CONFIG_PREEMPT is not set 174 + CONFIG_HZ=100 175 + CONFIG_AEABI=y 176 + CONFIG_OABI_COMPAT=y 177 # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set 178 CONFIG_SELECT_MEMORY_MODEL=y 179 CONFIG_FLATMEM_MANUAL=y ··· 175 CONFIG_FLATMEM=y 176 CONFIG_FLAT_NODE_MEM_MAP=y 177 # CONFIG_SPARSEMEM_STATIC is not set 178 + # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set 179 CONFIG_SPLIT_PTLOCK_CPUS=4096 180 + # CONFIG_RESOURCES_64BIT is not set 181 + CONFIG_ZONE_DMA_FLAG=1 182 + CONFIG_BOUNCE=y 183 + CONFIG_VIRT_TO_BUS=y 184 CONFIG_ALIGNMENT_TRAP=y 185 186 # ··· 185 CONFIG_ZBOOT_ROM_BSS=0x0 186 CONFIG_CMDLINE="console=ttyS0,115200 ip=bootp root=/dev/nfs" 187 # CONFIG_XIP_KERNEL is not set 188 + # CONFIG_KEXEC is not set 189 190 # 191 # Floating point emulation ··· 203 CONFIG_BINFMT_ELF=y 204 # CONFIG_BINFMT_AOUT is not set 205 # CONFIG_BINFMT_MISC is not set 206 207 # 208 # Power management options 209 # 210 # CONFIG_PM is not set 211 + CONFIG_SUSPEND_UP_POSSIBLE=y 212 213 # 214 # Networking ··· 219 # 220 # Networking options 221 # 222 + CONFIG_PACKET=y 223 CONFIG_PACKET_MMAP=y 224 CONFIG_UNIX=y 225 CONFIG_XFRM=y 226 # CONFIG_XFRM_USER is not set 227 + # CONFIG_XFRM_SUB_POLICY is not set 228 + # CONFIG_XFRM_MIGRATE is not set 229 # CONFIG_NET_KEY is not set 230 CONFIG_INET=y 231 CONFIG_IP_MULTICAST=y ··· 232 # CONFIG_IP_FIB_TRIE is not set 233 CONFIG_IP_FIB_HASH=y 234 CONFIG_IP_MULTIPLE_TABLES=y 235 CONFIG_IP_ROUTE_MULTIPATH=y 236 CONFIG_IP_ROUTE_VERBOSE=y 237 CONFIG_IP_PNP=y 238 CONFIG_IP_PNP_DHCP=y ··· 251 # CONFIG_INET_AH is not set 252 # CONFIG_INET_ESP is not set 253 # CONFIG_INET_IPCOMP is not set 254 + # CONFIG_INET_XFRM_TUNNEL is not set 255 + # CONFIG_INET_TUNNEL is not set 256 + CONFIG_INET_XFRM_MODE_TRANSPORT=y 257 + CONFIG_INET_XFRM_MODE_TUNNEL=y 258 + CONFIG_INET_XFRM_MODE_BEET=y 259 + # CONFIG_INET_LRO is not set 260 CONFIG_INET_DIAG=y 261 CONFIG_INET_TCP_DIAG=y 262 # CONFIG_TCP_CONG_ADVANCED is not set 263 + CONFIG_TCP_CONG_CUBIC=y 264 + CONFIG_DEFAULT_TCP_CONG="cubic" 265 + # CONFIG_TCP_MD5SIG is not set 266 CONFIG_IP_VS=m 267 CONFIG_IP_VS_DEBUG=y 268 CONFIG_IP_VS_TAB_BITS=12 ··· 290 # IPVS application helper 291 # 292 # CONFIG_IPV6 is not set 293 + # CONFIG_INET6_XFRM_TUNNEL is not set 294 + # CONFIG_INET6_TUNNEL is not set 295 + # CONFIG_NETWORK_SECMARK is not set 296 CONFIG_NETFILTER=y 297 # CONFIG_NETFILTER_DEBUG is not set 298 CONFIG_BRIDGE_NETFILTER=y ··· 298 # Core Netfilter Configuration 299 # 300 # CONFIG_NETFILTER_NETLINK is not set 301 + # CONFIG_NF_CONNTRACK_ENABLED is not set 302 + # CONFIG_NF_CONNTRACK is not set 303 + CONFIG_NETFILTER_XTABLES=m 304 + # CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set 305 + # CONFIG_NETFILTER_XT_TARGET_DSCP is not set 306 + # CONFIG_NETFILTER_XT_TARGET_MARK is not set 307 + # CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set 308 + # CONFIG_NETFILTER_XT_TARGET_NFLOG is not set 309 + # CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set 310 + # CONFIG_NETFILTER_XT_MATCH_COMMENT is not set 311 + # CONFIG_NETFILTER_XT_MATCH_DCCP is not set 312 + # CONFIG_NETFILTER_XT_MATCH_DSCP is not set 313 + # CONFIG_NETFILTER_XT_MATCH_ESP is not set 314 + # CONFIG_NETFILTER_XT_MATCH_LENGTH is not set 315 + # CONFIG_NETFILTER_XT_MATCH_LIMIT is not set 316 + # CONFIG_NETFILTER_XT_MATCH_MAC is not set 317 + # CONFIG_NETFILTER_XT_MATCH_MARK is not set 318 + # CONFIG_NETFILTER_XT_MATCH_POLICY is not set 319 + # CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set 320 + # CONFIG_NETFILTER_XT_MATCH_PHYSDEV is not set 321 + # CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set 322 + # CONFIG_NETFILTER_XT_MATCH_QUOTA is not set 323 + # CONFIG_NETFILTER_XT_MATCH_REALM is not set 324 + # CONFIG_NETFILTER_XT_MATCH_SCTP is not set 325 + # CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set 326 + # CONFIG_NETFILTER_XT_MATCH_STRING is not set 327 + # CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set 328 + # CONFIG_NETFILTER_XT_MATCH_TIME is not set 329 + # CONFIG_NETFILTER_XT_MATCH_U32 is not set 330 + # CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set 331 332 # 333 # IP: Netfilter Configuration 334 # 335 CONFIG_IP_NF_QUEUE=m 336 CONFIG_IP_NF_IPTABLES=m 337 # CONFIG_IP_NF_MATCH_IPRANGE is not set 338 CONFIG_IP_NF_MATCH_TOS=m 339 # CONFIG_IP_NF_MATCH_RECENT is not set 340 # CONFIG_IP_NF_MATCH_ECN is not set 341 + # CONFIG_IP_NF_MATCH_AH is not set 342 CONFIG_IP_NF_MATCH_TTL=m 343 CONFIG_IP_NF_MATCH_OWNER=m 344 # CONFIG_IP_NF_MATCH_ADDRTYPE is not set 345 CONFIG_IP_NF_FILTER=m 346 CONFIG_IP_NF_TARGET_REJECT=m 347 CONFIG_IP_NF_TARGET_LOG=m 348 CONFIG_IP_NF_TARGET_ULOG=m 349 CONFIG_IP_NF_MANGLE=m 350 CONFIG_IP_NF_TARGET_TOS=m 351 # CONFIG_IP_NF_TARGET_ECN is not set 352 # CONFIG_IP_NF_TARGET_TTL is not set 353 # CONFIG_IP_NF_RAW is not set 354 CONFIG_IP_NF_ARPTABLES=m ··· 372 # Bridge: Netfilter Configuration 373 # 374 # CONFIG_BRIDGE_NF_EBTABLES is not set 375 # CONFIG_IP_DCCP is not set 376 # CONFIG_IP_SCTP is not set 377 + # CONFIG_TIPC is not set 378 CONFIG_ATM=y 379 CONFIG_ATM_CLIP=y 380 # CONFIG_ATM_CLIP_NO_ICMP is not set ··· 397 CONFIG_IPX=m 398 # CONFIG_IPX_INTERN is not set 399 CONFIG_ATALK=m 400 + CONFIG_DEV_APPLETALK=m 401 CONFIG_IPDDP=m 402 CONFIG_IPDDP_ENCAP=y 403 CONFIG_IPDDP_DECAP=y 404 CONFIG_X25=m 405 CONFIG_LAPB=m 406 CONFIG_ECONET=m 407 CONFIG_ECONET_AUNUDP=y 408 CONFIG_ECONET_NATIVE=y 409 CONFIG_WAN_ROUTER=m 410 CONFIG_NET_SCHED=y 411 412 # 413 # Queueing/Scheduling ··· 425 # CONFIG_NET_SCH_HFSC is not set 426 # CONFIG_NET_SCH_ATM is not set 427 CONFIG_NET_SCH_PRIO=m 428 + # CONFIG_NET_SCH_RR is not set 429 CONFIG_NET_SCH_RED=m 430 CONFIG_NET_SCH_SFQ=m 431 CONFIG_NET_SCH_TEQL=m ··· 449 CONFIG_NET_CLS_RSVP=m 450 CONFIG_NET_CLS_RSVP6=m 451 # CONFIG_NET_EMATCH is not set 452 + CONFIG_NET_CLS_ACT=y 453 + CONFIG_NET_ACT_POLICE=y 454 + # CONFIG_NET_ACT_GACT is not set 455 + # CONFIG_NET_ACT_MIRRED is not set 456 + # CONFIG_NET_ACT_IPT is not set 457 + # CONFIG_NET_ACT_NAT is not set 458 + # CONFIG_NET_ACT_PEDIT is not set 459 + # CONFIG_NET_ACT_SIMP is not set 460 CONFIG_NET_CLS_POLICE=y 461 # CONFIG_NET_CLS_IND is not set 462 + CONFIG_NET_SCH_FIFO=y 463 464 # 465 # Network testing ··· 461 # CONFIG_HAMRADIO is not set 462 # CONFIG_IRDA is not set 463 # CONFIG_BT is not set 464 + # CONFIG_AF_RXRPC is not set 465 + CONFIG_FIB_RULES=y 466 + 467 + # 468 + # Wireless 469 + # 470 + # CONFIG_CFG80211 is not set 471 + # CONFIG_WIRELESS_EXT is not set 472 + # CONFIG_MAC80211 is not set 473 # CONFIG_IEEE80211 is not set 474 + # CONFIG_RFKILL is not set 475 + # CONFIG_NET_9P is not set 476 477 # 478 # Device Drivers ··· 470 # 471 # Generic Driver Options 472 # 473 + CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" 474 CONFIG_STANDALONE=y 475 CONFIG_PREVENT_FIRMWARE_BUILD=y 476 + CONFIG_FW_LOADER=y 477 # CONFIG_DEBUG_DRIVER is not set 478 + # CONFIG_DEBUG_DEVRES is not set 479 + # CONFIG_SYS_HYPERVISOR is not set 480 # CONFIG_CONNECTOR is not set 481 CONFIG_MTD=y 482 # CONFIG_MTD_DEBUG is not set 483 # CONFIG_MTD_CONCAT is not set ··· 498 # User Modules And Translation Layers 499 # 500 CONFIG_MTD_CHAR=y 501 + CONFIG_MTD_BLKDEVS=y 502 CONFIG_MTD_BLOCK=y 503 # CONFIG_FTL is not set 504 # CONFIG_NFTL is not set 505 # CONFIG_INFTL is not set 506 # CONFIG_RFD_FTL is not set 507 + # CONFIG_SSFDC is not set 508 + # CONFIG_MTD_OOPS is not set 509 510 # 511 # RAM/ROM/Flash chip drivers ··· 528 # CONFIG_MTD_RAM is not set 529 # CONFIG_MTD_ROM is not set 530 # CONFIG_MTD_ABSENT is not set 531 532 # 533 # Mapping drivers for chip access ··· 538 # CONFIG_MTD_ARM_INTEGRATOR is not set 539 CONFIG_MTD_IXP4XX=y 540 # CONFIG_MTD_PCI is not set 541 + # CONFIG_MTD_INTEL_VR_NOR is not set 542 # CONFIG_MTD_PLATRAM is not set 543 544 # ··· 547 # CONFIG_MTD_SLRAM is not set 548 # CONFIG_MTD_PHRAM is not set 549 # CONFIG_MTD_MTDRAM is not set 550 # CONFIG_MTD_BLOCK2MTD is not set 551 552 # ··· 556 # CONFIG_MTD_DOC2000 is not set 557 # CONFIG_MTD_DOC2001 is not set 558 # CONFIG_MTD_DOC2001PLUS is not set 559 CONFIG_MTD_NAND=m 560 # CONFIG_MTD_NAND_VERIFY_WRITE is not set 561 + # CONFIG_MTD_NAND_ECC_SMC is not set 562 + # CONFIG_MTD_NAND_MUSEUM_IDS is not set 563 CONFIG_MTD_NAND_IDS=m 564 # CONFIG_MTD_NAND_DISKONCHIP is not set 565 + # CONFIG_MTD_NAND_CAFE is not set 566 # CONFIG_MTD_NAND_NANDSIM is not set 567 + # CONFIG_MTD_NAND_PLATFORM is not set 568 + # CONFIG_MTD_ALAUDA is not set 569 # CONFIG_MTD_ONENAND is not set 570 571 # 572 + # UBI - Unsorted block images 573 # 574 + # CONFIG_MTD_UBI is not set 575 # CONFIG_PARPORT is not set 576 + CONFIG_BLK_DEV=y 577 # CONFIG_BLK_CPQ_DA is not set 578 # CONFIG_BLK_CPQ_CISS_DA is not set 579 # CONFIG_BLK_DEV_DAC960 is not set ··· 592 # CONFIG_BLK_DEV_CRYPTOLOOP is not set 593 # CONFIG_BLK_DEV_NBD is not set 594 # CONFIG_BLK_DEV_SX8 is not set 595 + # CONFIG_BLK_DEV_UB is not set 596 CONFIG_BLK_DEV_RAM=y 597 CONFIG_BLK_DEV_RAM_COUNT=16 598 CONFIG_BLK_DEV_RAM_SIZE=8192 599 + CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 600 # CONFIG_CDROM_PKTCDVD is not set 601 # CONFIG_ATA_OVER_ETH is not set 602 + CONFIG_MISC_DEVICES=y 603 + # CONFIG_PHANTOM is not set 604 + # CONFIG_EEPROM_93CX6 is not set 605 + # CONFIG_SGI_IOC4 is not set 606 + # CONFIG_TIFM_CORE is not set 607 CONFIG_IDE=y 608 + CONFIG_IDE_MAX_HWIFS=4 609 CONFIG_BLK_DEV_IDE=y 610 611 # ··· 614 # CONFIG_BLK_DEV_IDECD is not set 615 # CONFIG_BLK_DEV_IDETAPE is not set 616 # CONFIG_BLK_DEV_IDEFLOPPY is not set 617 + # CONFIG_BLK_DEV_IDESCSI is not set 618 # CONFIG_IDE_TASK_IOCTL is not set 619 + CONFIG_IDE_PROC_FS=y 620 621 # 622 # IDE chipset support/bugfixes 623 # 624 CONFIG_IDE_GENERIC=y 625 + # CONFIG_BLK_DEV_PLATFORM is not set 626 + 627 + # 628 + # PCI IDE chipsets support 629 + # 630 CONFIG_BLK_DEV_IDEPCI=y 631 # CONFIG_IDEPCI_SHARE_IRQ is not set 632 + CONFIG_IDEPCI_PCIBUS_ORDER=y 633 # CONFIG_BLK_DEV_OFFBOARD is not set 634 # CONFIG_BLK_DEV_GENERIC is not set 635 # CONFIG_BLK_DEV_OPTI621 is not set 636 CONFIG_BLK_DEV_IDEDMA_PCI=y 637 # CONFIG_BLK_DEV_AEC62XX is not set 638 # CONFIG_BLK_DEV_ALI15X3 is not set 639 CONFIG_BLK_DEV_CMD64X=y 640 # CONFIG_BLK_DEV_TRIFLEX is not set 641 # CONFIG_BLK_DEV_CY82C693 is not set ··· 639 # CONFIG_BLK_DEV_CS5530 is not set 640 # CONFIG_BLK_DEV_HPT34X is not set 641 CONFIG_BLK_DEV_HPT366=y 642 + # CONFIG_BLK_DEV_JMICRON is not set 643 # CONFIG_BLK_DEV_SC1200 is not set 644 # CONFIG_BLK_DEV_PIIX is not set 645 + # CONFIG_BLK_DEV_IT8213 is not set 646 # CONFIG_BLK_DEV_IT821X is not set 647 # CONFIG_BLK_DEV_NS87415 is not set 648 # CONFIG_BLK_DEV_PDC202XX_OLD is not set 649 CONFIG_BLK_DEV_PDC202XX_NEW=y 650 # CONFIG_BLK_DEV_SVWKS is not set 651 # CONFIG_BLK_DEV_SIIMAGE is not set 652 + # CONFIG_BLK_DEV_SL82C105 is not set 653 # CONFIG_BLK_DEV_SLC90E66 is not set 654 # CONFIG_BLK_DEV_TRM290 is not set 655 # CONFIG_BLK_DEV_VIA82CXXX is not set 656 + # CONFIG_BLK_DEV_TC86C001 is not set 657 # CONFIG_IDE_ARM is not set 658 CONFIG_BLK_DEV_IDEDMA=y 659 + CONFIG_IDE_ARCH_OBSOLETE_INIT=y 660 # CONFIG_BLK_DEV_HD is not set 661 662 # 663 # SCSI device support 664 # 665 # CONFIG_RAID_ATTRS is not set 666 + CONFIG_SCSI=y 667 + CONFIG_SCSI_DMA=y 668 + # CONFIG_SCSI_TGT is not set 669 + # CONFIG_SCSI_NETLINK is not set 670 + # CONFIG_SCSI_PROC_FS is not set 671 672 # 673 + # SCSI support type (disk, tape, CD-ROM) 674 # 675 + CONFIG_BLK_DEV_SD=y 676 + # CONFIG_CHR_DEV_ST is not set 677 + # CONFIG_CHR_DEV_OSST is not set 678 + # CONFIG_BLK_DEV_SR is not set 679 + # CONFIG_CHR_DEV_SG is not set 680 + # CONFIG_CHR_DEV_SCH is not set 681 + 682 + # 683 + # Some SCSI devices (e.g. CD jukebox) support multiple LUNs 684 + # 685 + # CONFIG_SCSI_MULTI_LUN is not set 686 + # CONFIG_SCSI_CONSTANTS is not set 687 + # CONFIG_SCSI_LOGGING is not set 688 + # CONFIG_SCSI_SCAN_ASYNC is not set 689 + CONFIG_SCSI_WAIT_SCAN=m 690 + 691 + # 692 + # SCSI Transports 693 + # 694 + # CONFIG_SCSI_SPI_ATTRS is not set 695 + # CONFIG_SCSI_FC_ATTRS is not set 696 + # CONFIG_SCSI_ISCSI_ATTRS is not set 697 + # CONFIG_SCSI_SAS_LIBSAS is not set 698 + # CONFIG_SCSI_SRP_ATTRS is not set 699 + # CONFIG_SCSI_LOWLEVEL is not set 700 + CONFIG_ATA=y 701 + # CONFIG_ATA_NONSTANDARD is not set 702 + # CONFIG_SATA_AHCI is not set 703 + # CONFIG_SATA_SVW is not set 704 + # CONFIG_ATA_PIIX is not set 705 + # CONFIG_SATA_MV is not set 706 + # CONFIG_SATA_NV is not set 707 + # CONFIG_PDC_ADMA is not set 708 + # CONFIG_SATA_QSTOR is not set 709 + # CONFIG_SATA_PROMISE is not set 710 + # CONFIG_SATA_SX4 is not set 711 + # CONFIG_SATA_SIL is not set 712 + # CONFIG_SATA_SIL24 is not set 713 + # CONFIG_SATA_SIS is not set 714 + # CONFIG_SATA_ULI is not set 715 + # CONFIG_SATA_VIA is not set 716 + # CONFIG_SATA_VITESSE is not set 717 + # CONFIG_SATA_INIC162X is not set 718 + # CONFIG_PATA_ALI is not set 719 + # CONFIG_PATA_AMD is not set 720 + CONFIG_PATA_ARTOP=y 721 + # CONFIG_PATA_ATIIXP is not set 722 + # CONFIG_PATA_CMD640_PCI is not set 723 + # CONFIG_PATA_CMD64X is not set 724 + # CONFIG_PATA_CS5520 is not set 725 + # CONFIG_PATA_CS5530 is not set 726 + # CONFIG_PATA_CYPRESS is not set 727 + # CONFIG_PATA_EFAR is not set 728 + # CONFIG_ATA_GENERIC is not set 729 + # CONFIG_PATA_HPT366 is not set 730 + # CONFIG_PATA_HPT37X is not set 731 + # CONFIG_PATA_HPT3X2N is not set 732 + # CONFIG_PATA_HPT3X3 is not set 733 + # CONFIG_PATA_IT821X is not set 734 + # CONFIG_PATA_IT8213 is not set 735 + # CONFIG_PATA_JMICRON is not set 736 + # CONFIG_PATA_TRIFLEX is not set 737 + # CONFIG_PATA_MARVELL is not set 738 + # CONFIG_PATA_MPIIX is not set 739 + # CONFIG_PATA_OLDPIIX is not set 740 + # CONFIG_PATA_NETCELL is not set 741 + # CONFIG_PATA_NS87410 is not set 742 + # CONFIG_PATA_NS87415 is not set 743 + # CONFIG_PATA_OPTI is not set 744 + # CONFIG_PATA_OPTIDMA is not set 745 + # CONFIG_PATA_PDC_OLD is not set 746 + # CONFIG_PATA_RADISYS is not set 747 + # CONFIG_PATA_RZ1000 is not set 748 + # CONFIG_PATA_SC1200 is not set 749 + # CONFIG_PATA_SERVERWORKS is not set 750 + # CONFIG_PATA_PDC2027X is not set 751 + # CONFIG_PATA_SIL680 is not set 752 + # CONFIG_PATA_SIS is not set 753 + # CONFIG_PATA_VIA is not set 754 + # CONFIG_PATA_WINBOND is not set 755 + # CONFIG_PATA_PLATFORM is not set 756 + CONFIG_PATA_IXP4XX_CF=y 757 # CONFIG_MD is not set 758 # CONFIG_FUSION is not set 759 760 # 761 # IEEE 1394 (FireWire) support 762 # 763 + # CONFIG_FIREWIRE is not set 764 # CONFIG_IEEE1394 is not set 765 # CONFIG_I2O is not set 766 CONFIG_NETDEVICES=y 767 + # CONFIG_NETDEVICES_MULTIQUEUE is not set 768 + # CONFIG_IFB is not set 769 CONFIG_DUMMY=y 770 # CONFIG_BONDING is not set 771 + # CONFIG_MACVLAN is not set 772 # CONFIG_EQUALIZER is not set 773 # CONFIG_TUN is not set 774 + # CONFIG_VETH is not set 775 # CONFIG_ARCNET is not set 776 # CONFIG_PHYLIB is not set 777 CONFIG_NET_ETHERNET=y 778 CONFIG_MII=y 779 + CONFIG_IXP4XX_ETH=y 780 + # CONFIG_AX88796 is not set 781 # CONFIG_HAPPYMEAL is not set 782 # CONFIG_SUNGEM is not set 783 # CONFIG_CASSINI is not set 784 # CONFIG_NET_VENDOR_3COM is not set 785 # CONFIG_SMC91X is not set 786 # CONFIG_DM9000 is not set 787 # CONFIG_NET_TULIP is not set 788 # CONFIG_HP100 is not set 789 + # CONFIG_IBM_NEW_EMAC_ZMII is not set 790 + # CONFIG_IBM_NEW_EMAC_RGMII is not set 791 + # CONFIG_IBM_NEW_EMAC_TAH is not set 792 + # CONFIG_IBM_NEW_EMAC_EMAC4 is not set 793 CONFIG_NET_PCI=y 794 # CONFIG_PCNET32 is not set 795 # CONFIG_AMD8111_ETH is not set 796 # CONFIG_ADAPTEC_STARFIRE is not set 797 # CONFIG_B44 is not set 798 # CONFIG_FORCEDETH is not set 799 CONFIG_EEPRO100=y 800 # CONFIG_E100 is not set 801 # CONFIG_FEALNX is not set ··· 738 # CONFIG_SUNDANCE is not set 739 # CONFIG_TLAN is not set 740 # CONFIG_VIA_RHINE is not set 741 + # CONFIG_SC92031 is not set 742 + CONFIG_NETDEV_1000=y 743 # CONFIG_ACENIC is not set 744 # CONFIG_DL2K is not set 745 # CONFIG_E1000 is not set 746 + # CONFIG_E1000E is not set 747 + # CONFIG_IP1000 is not set 748 # CONFIG_NS83820 is not set 749 # CONFIG_HAMACHI is not set 750 # CONFIG_YELLOWFIN is not set 751 # CONFIG_R8169 is not set 752 # CONFIG_SIS190 is not set 753 # CONFIG_SKGE is not set 754 + # CONFIG_SKY2 is not set 755 # CONFIG_SK98LIN is not set 756 # CONFIG_VIA_VELOCITY is not set 757 # CONFIG_TIGON3 is not set 758 # CONFIG_BNX2 is not set 759 + # CONFIG_QLA3XXX is not set 760 + # CONFIG_ATL1 is not set 761 + CONFIG_NETDEV_10000=y 762 # CONFIG_CHELSIO_T1 is not set 763 + # CONFIG_CHELSIO_T3 is not set 764 + # CONFIG_IXGBE is not set 765 # CONFIG_IXGB is not set 766 # CONFIG_S2IO is not set 767 + # CONFIG_MYRI10GE is not set 768 + # CONFIG_NETXEN_NIC is not set 769 + # CONFIG_NIU is not set 770 + # CONFIG_MLX4_CORE is not set 771 + # CONFIG_TEHUTI is not set 772 # CONFIG_TR is not set 773 774 # 775 + # Wireless LAN 776 # 777 + # CONFIG_WLAN_PRE80211 is not set 778 + # CONFIG_WLAN_80211 is not set 779 780 # 781 + # USB Network Adapters 782 # 783 + # CONFIG_USB_CATC is not set 784 + # CONFIG_USB_KAWETH is not set 785 + # CONFIG_USB_PEGASUS is not set 786 + # CONFIG_USB_RTL8150 is not set 787 + # CONFIG_USB_USBNET is not set 788 CONFIG_WAN=y 789 # CONFIG_LANMEDIA is not set 790 CONFIG_HDLC=m 791 + CONFIG_HDLC_RAW=m 792 # CONFIG_HDLC_RAW_ETH is not set 793 + CONFIG_HDLC_CISCO=m 794 + CONFIG_HDLC_FR=m 795 + CONFIG_HDLC_PPP=m 796 + CONFIG_HDLC_X25=m 797 # CONFIG_PCI200SYN is not set 798 # CONFIG_WANXL is not set 799 # CONFIG_PC300 is not set 800 + # CONFIG_PC300TOO is not set 801 # CONFIG_FARSYNC is not set 802 + # CONFIG_DSCC4 is not set 803 + # CONFIG_IXP4XX_HSS is not set 804 CONFIG_DLCI=m 805 CONFIG_DLCI_MAX=8 806 + CONFIG_WAN_ROUTER_DRIVERS=m 807 # CONFIG_CYCLADES_SYNC is not set 808 # CONFIG_LAPBETHER is not set 809 # CONFIG_X25_ASY is not set 810 + CONFIG_ATM_DRIVERS=y 811 # CONFIG_ATM_DUMMY is not set 812 CONFIG_ATM_TCP=m 813 # CONFIG_ATM_LANAI is not set ··· 842 # CONFIG_HIPPI is not set 843 # CONFIG_PPP is not set 844 # CONFIG_SLIP is not set 845 + # CONFIG_NET_FC is not set 846 # CONFIG_SHAPER is not set 847 # CONFIG_NETCONSOLE is not set 848 # CONFIG_NETPOLL is not set 849 # CONFIG_NET_POLL_CONTROLLER is not set 850 # CONFIG_ISDN is not set 851 852 # 853 # Input device support 854 # 855 CONFIG_INPUT=y 856 + # CONFIG_INPUT_FF_MEMLESS is not set 857 + # CONFIG_INPUT_POLLDEV is not set 858 859 # 860 # Userland interfaces ··· 865 CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 866 CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 867 # CONFIG_INPUT_JOYDEV is not set 868 # CONFIG_INPUT_EVDEV is not set 869 # CONFIG_INPUT_EVBUG is not set 870 ··· 875 # CONFIG_INPUT_KEYBOARD is not set 876 # CONFIG_INPUT_MOUSE is not set 877 # CONFIG_INPUT_JOYSTICK is not set 878 + # CONFIG_INPUT_TABLET is not set 879 # CONFIG_INPUT_TOUCHSCREEN is not set 880 + CONFIG_INPUT_MISC=y 881 + CONFIG_INPUT_IXP4XX_BEEPER=y 882 + # CONFIG_INPUT_ATI_REMOTE is not set 883 + # CONFIG_INPUT_ATI_REMOTE2 is not set 884 + # CONFIG_INPUT_KEYSPAN_REMOTE is not set 885 + # CONFIG_INPUT_POWERMATE is not set 886 + # CONFIG_INPUT_YEALINK is not set 887 + # CONFIG_INPUT_UINPUT is not set 888 889 # 890 # Hardware I/O ports ··· 895 # 896 CONFIG_SERIAL_8250=y 897 CONFIG_SERIAL_8250_CONSOLE=y 898 + CONFIG_SERIAL_8250_PCI=y 899 CONFIG_SERIAL_8250_NR_UARTS=2 900 + CONFIG_SERIAL_8250_RUNTIME_UARTS=2 901 # CONFIG_SERIAL_8250_EXTENDED is not set 902 903 # ··· 907 CONFIG_UNIX98_PTYS=y 908 CONFIG_LEGACY_PTYS=y 909 CONFIG_LEGACY_PTY_COUNT=256 910 # CONFIG_IPMI_HANDLER is not set 911 + CONFIG_HW_RANDOM=m 912 + CONFIG_HW_RANDOM_IXP4XX=m 913 # CONFIG_NVRAM is not set 914 # CONFIG_R3964 is not set 915 # CONFIG_APPLICOM is not set 916 # CONFIG_RAW_DRIVER is not set 917 # CONFIG_TCG_TPM is not set 918 + CONFIG_DEVPORT=y 919 CONFIG_I2C=y 920 + CONFIG_I2C_BOARDINFO=y 921 CONFIG_I2C_CHARDEV=y 922 923 # ··· 969 # CONFIG_I2C_ALI15X3 is not set 970 # CONFIG_I2C_AMD756 is not set 971 # CONFIG_I2C_AMD8111 is not set 972 + # CONFIG_I2C_GPIO is not set 973 # CONFIG_I2C_I801 is not set 974 # CONFIG_I2C_I810 is not set 975 # CONFIG_I2C_PIIX4 is not set 976 # CONFIG_I2C_IOP3XX is not set 977 CONFIG_I2C_IXP4XX=y 978 # CONFIG_I2C_NFORCE2 is not set 979 + # CONFIG_I2C_OCORES is not set 980 # CONFIG_I2C_PARPORT_LIGHT is not set 981 # CONFIG_I2C_PROSAVAGE is not set 982 # CONFIG_I2C_SAVAGE4 is not set 983 + # CONFIG_I2C_SIMTEC is not set 984 # CONFIG_I2C_SIS5595 is not set 985 # CONFIG_I2C_SIS630 is not set 986 # CONFIG_I2C_SIS96X is not set 987 + # CONFIG_I2C_TAOS_EVM is not set 988 # CONFIG_I2C_STUB is not set 989 + # CONFIG_I2C_TINY_USB is not set 990 # CONFIG_I2C_VIA is not set 991 # CONFIG_I2C_VIAPRO is not set 992 # CONFIG_I2C_VOODOO3 is not set 993 994 # 995 # Miscellaneous I2C Chip support 996 # 997 # CONFIG_SENSORS_DS1337 is not set 998 # CONFIG_SENSORS_DS1374 is not set 999 + # CONFIG_DS1682 is not set 1000 CONFIG_SENSORS_EEPROM=y 1001 # CONFIG_SENSORS_PCF8574 is not set 1002 # CONFIG_SENSORS_PCA9539 is not set 1003 # CONFIG_SENSORS_PCF8591 is not set 1004 # CONFIG_SENSORS_MAX6875 is not set 1005 + # CONFIG_SENSORS_TSL2550 is not set 1006 # CONFIG_I2C_DEBUG_CORE is not set 1007 # CONFIG_I2C_DEBUG_ALGO is not set 1008 # CONFIG_I2C_DEBUG_BUS is not set 1009 # CONFIG_I2C_DEBUG_CHIP is not set 1010 1011 # 1012 + # SPI support 1013 # 1014 + # CONFIG_SPI is not set 1015 + # CONFIG_SPI_MASTER is not set 1016 + # CONFIG_W1 is not set 1017 + # CONFIG_POWER_SUPPLY is not set 1018 CONFIG_HWMON=y 1019 # CONFIG_HWMON_VID is not set 1020 + # CONFIG_SENSORS_AD7418 is not set 1021 # CONFIG_SENSORS_ADM1021 is not set 1022 # CONFIG_SENSORS_ADM1025 is not set 1023 # CONFIG_SENSORS_ADM1026 is not set 1024 + # CONFIG_SENSORS_ADM1029 is not set 1025 # CONFIG_SENSORS_ADM1031 is not set 1026 # CONFIG_SENSORS_ADM9240 is not set 1027 + # CONFIG_SENSORS_ADT7470 is not set 1028 # CONFIG_SENSORS_ATXP1 is not set 1029 # CONFIG_SENSORS_DS1621 is not set 1030 + # CONFIG_SENSORS_I5K_AMB is not set 1031 + # CONFIG_SENSORS_F71805F is not set 1032 + # CONFIG_SENSORS_F71882FG is not set 1033 + # CONFIG_SENSORS_F75375S is not set 1034 # CONFIG_SENSORS_GL518SM is not set 1035 # CONFIG_SENSORS_GL520SM is not set 1036 # CONFIG_SENSORS_IT87 is not set ··· 1033 # CONFIG_SENSORS_LM87 is not set 1034 # CONFIG_SENSORS_LM90 is not set 1035 # CONFIG_SENSORS_LM92 is not set 1036 + # CONFIG_SENSORS_LM93 is not set 1037 # CONFIG_SENSORS_MAX1619 is not set 1038 + # CONFIG_SENSORS_MAX6650 is not set 1039 # CONFIG_SENSORS_PC87360 is not set 1040 + # CONFIG_SENSORS_PC87427 is not set 1041 # CONFIG_SENSORS_SIS5595 is not set 1042 + # CONFIG_SENSORS_DME1737 is not set 1043 # CONFIG_SENSORS_SMSC47M1 is not set 1044 + # CONFIG_SENSORS_SMSC47M192 is not set 1045 # CONFIG_SENSORS_SMSC47B397 is not set 1046 + # CONFIG_SENSORS_THMC50 is not set 1047 # CONFIG_SENSORS_VIA686A is not set 1048 + # CONFIG_SENSORS_VT1211 is not set 1049 + # CONFIG_SENSORS_VT8231 is not set 1050 # CONFIG_SENSORS_W83781D is not set 1051 + # CONFIG_SENSORS_W83791D is not set 1052 # CONFIG_SENSORS_W83792D is not set 1053 + # CONFIG_SENSORS_W83793 is not set 1054 # CONFIG_SENSORS_W83L785TS is not set 1055 # CONFIG_SENSORS_W83627HF is not set 1056 # CONFIG_SENSORS_W83627EHF is not set 1057 # CONFIG_HWMON_DEBUG_CHIP is not set 1058 + CONFIG_WATCHDOG=y 1059 + # CONFIG_WATCHDOG_NOWAYOUT is not set 1060 1061 # 1062 + # Watchdog Device Drivers 1063 # 1064 + # CONFIG_SOFT_WATCHDOG is not set 1065 + CONFIG_IXP4XX_WATCHDOG=y 1066 1067 # 1068 + # PCI-based Watchdog Cards 1069 # 1070 + # CONFIG_PCIPCWATCHDOG is not set 1071 + # CONFIG_WDTPCI is not set 1072 + 1073 + # 1074 + # USB-based Watchdog Cards 1075 + # 1076 + # CONFIG_USBPCWATCHDOG is not set 1077 + 1078 + # 1079 + # Sonics Silicon Backplane 1080 + # 1081 + CONFIG_SSB_POSSIBLE=y 1082 + # CONFIG_SSB is not set 1083 + 1084 + # 1085 + # Multifunction device drivers 1086 + # 1087 + # CONFIG_MFD_SM501 is not set 1088 1089 # 1090 # Multimedia devices 1091 # 1092 # CONFIG_VIDEO_DEV is not set 1093 + # CONFIG_DVB_CORE is not set 1094 + CONFIG_DAB=y 1095 + # CONFIG_USB_DABUSB is not set 1096 1097 # 1098 # Graphics support 1099 # 1100 + # CONFIG_DRM is not set 1101 + # CONFIG_VGASTATE is not set 1102 + # CONFIG_VIDEO_OUTPUT_CONTROL is not set 1103 # CONFIG_FB is not set 1104 + # CONFIG_BACKLIGHT_LCD_SUPPORT is not set 1105 + 1106 + # 1107 + # Display device support 1108 + # 1109 + # CONFIG_DISPLAY_SUPPORT is not set 1110 1111 # 1112 # Sound 1113 # 1114 # CONFIG_SOUND is not set 1115 + CONFIG_HID_SUPPORT=y 1116 + CONFIG_HID=y 1117 + # CONFIG_HID_DEBUG is not set 1118 + # CONFIG_HIDRAW is not set 1119 1120 # 1121 + # USB Input Devices 1122 # 1123 + CONFIG_USB_HID=y 1124 + # CONFIG_USB_HIDINPUT_POWERBOOK is not set 1125 + # CONFIG_HID_FF is not set 1126 + # CONFIG_USB_HIDDEV is not set 1127 + CONFIG_USB_SUPPORT=y 1128 CONFIG_USB_ARCH_HAS_HCD=y 1129 CONFIG_USB_ARCH_HAS_OHCI=y 1130 + CONFIG_USB_ARCH_HAS_EHCI=y 1131 + CONFIG_USB=y 1132 + # CONFIG_USB_DEBUG is not set 1133 + 1134 + # 1135 + # Miscellaneous USB options 1136 + # 1137 + CONFIG_USB_DEVICEFS=y 1138 + # CONFIG_USB_DEVICE_CLASS is not set 1139 + # CONFIG_USB_DYNAMIC_MINORS is not set 1140 + # CONFIG_USB_OTG is not set 1141 + 1142 + # 1143 + # USB Host Controller Drivers 1144 + # 1145 + CONFIG_USB_EHCI_HCD=y 1146 + # CONFIG_USB_EHCI_SPLIT_ISO is not set 1147 + # CONFIG_USB_EHCI_ROOT_HUB_TT is not set 1148 + # CONFIG_USB_EHCI_TT_NEWSCHED is not set 1149 + # CONFIG_USB_ISP116X_HCD is not set 1150 + CONFIG_USB_OHCI_HCD=y 1151 + # CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set 1152 + # CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set 1153 + CONFIG_USB_OHCI_LITTLE_ENDIAN=y 1154 + CONFIG_USB_UHCI_HCD=y 1155 + # CONFIG_USB_SL811_HCD is not set 1156 + # CONFIG_USB_R8A66597_HCD is not set 1157 + 1158 + # 1159 + # USB Device Class drivers 1160 + # 1161 + # CONFIG_USB_ACM is not set 1162 + # CONFIG_USB_PRINTER is not set 1163 1164 # 1165 # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' 1166 # 1167 1168 # 1169 + # may also be needed; see USB_STORAGE Help for more information 1170 + # 1171 + CONFIG_USB_STORAGE=y 1172 + # CONFIG_USB_STORAGE_DEBUG is not set 1173 + # CONFIG_USB_STORAGE_DATAFAB is not set 1174 + # CONFIG_USB_STORAGE_FREECOM is not set 1175 + # CONFIG_USB_STORAGE_ISD200 is not set 1176 + # CONFIG_USB_STORAGE_DPCM is not set 1177 + # CONFIG_USB_STORAGE_USBAT is not set 1178 + # CONFIG_USB_STORAGE_SDDR09 is not set 1179 + # CONFIG_USB_STORAGE_SDDR55 is not set 1180 + # CONFIG_USB_STORAGE_JUMPSHOT is not set 1181 + # CONFIG_USB_STORAGE_ALAUDA is not set 1182 + # CONFIG_USB_STORAGE_KARMA is not set 1183 + # CONFIG_USB_LIBUSUAL is not set 1184 + 1185 + # 1186 + # USB Imaging devices 1187 + # 1188 + # CONFIG_USB_MDC800 is not set 1189 + # CONFIG_USB_MICROTEK is not set 1190 + # CONFIG_USB_MON is not set 1191 + 1192 + # 1193 + # USB port drivers 1194 + # 1195 + 1196 + # 1197 + # USB Serial Converter support 1198 + # 1199 + # CONFIG_USB_SERIAL is not set 1200 + 1201 + # 1202 + # USB Miscellaneous drivers 1203 + # 1204 + # CONFIG_USB_EMI62 is not set 1205 + # CONFIG_USB_EMI26 is not set 1206 + # CONFIG_USB_ADUTUX is not set 1207 + # CONFIG_USB_AUERSWALD is not set 1208 + # CONFIG_USB_RIO500 is not set 1209 + # CONFIG_USB_LEGOTOWER is not set 1210 + # CONFIG_USB_LCD is not set 1211 + # CONFIG_USB_BERRY_CHARGE is not set 1212 + # CONFIG_USB_LED is not set 1213 + # CONFIG_USB_CYPRESS_CY7C63 is not set 1214 + # CONFIG_USB_CYTHERM is not set 1215 + # CONFIG_USB_PHIDGET is not set 1216 + # CONFIG_USB_IDMOUSE is not set 1217 + # CONFIG_USB_FTDI_ELAN is not set 1218 + # CONFIG_USB_APPLEDISPLAY is not set 1219 + # CONFIG_USB_SISUSBVGA is not set 1220 + # CONFIG_USB_LD is not set 1221 + # CONFIG_USB_TRANCEVIBRATOR is not set 1222 + # CONFIG_USB_IOWARRIOR is not set 1223 + # CONFIG_USB_TEST is not set 1224 + 1225 + # 1226 + # USB DSL modem support 1227 + # 1228 + # CONFIG_USB_ATM is not set 1229 + 1230 + # 1231 # USB Gadget Support 1232 # 1233 # CONFIG_USB_GADGET is not set 1234 + # CONFIG_MMC is not set 1235 + CONFIG_NEW_LEDS=y 1236 + CONFIG_LEDS_CLASS=y 1237 1238 # 1239 + # LED drivers 1240 # 1241 + # CONFIG_LEDS_IXP4XX is not set 1242 + CONFIG_LEDS_GPIO=y 1243 + 1244 + # 1245 + # LED Triggers 1246 + # 1247 + CONFIG_LEDS_TRIGGERS=y 1248 + CONFIG_LEDS_TRIGGER_TIMER=y 1249 + CONFIG_LEDS_TRIGGER_IDE_DISK=y 1250 + CONFIG_LEDS_TRIGGER_HEARTBEAT=y 1251 + CONFIG_RTC_LIB=y 1252 + CONFIG_RTC_CLASS=y 1253 + CONFIG_RTC_HCTOSYS=y 1254 + CONFIG_RTC_HCTOSYS_DEVICE="rtc0" 1255 + # CONFIG_RTC_DEBUG is not set 1256 + 1257 + # 1258 + # RTC interfaces 1259 + # 1260 + CONFIG_RTC_INTF_SYSFS=y 1261 + CONFIG_RTC_INTF_PROC=y 1262 + CONFIG_RTC_INTF_DEV=y 1263 + # CONFIG_RTC_INTF_DEV_UIE_EMUL is not set 1264 + # CONFIG_RTC_DRV_TEST is not set 1265 + 1266 + # 1267 + # I2C RTC drivers 1268 + # 1269 + # CONFIG_RTC_DRV_DS1307 is not set 1270 + # CONFIG_RTC_DRV_DS1374 is not set 1271 + # CONFIG_RTC_DRV_DS1672 is not set 1272 + # CONFIG_RTC_DRV_MAX6900 is not set 1273 + # CONFIG_RTC_DRV_RS5C372 is not set 1274 + # CONFIG_RTC_DRV_ISL1208 is not set 1275 + CONFIG_RTC_DRV_X1205=y 1276 + CONFIG_RTC_DRV_PCF8563=y 1277 + # CONFIG_RTC_DRV_PCF8583 is not set 1278 + # CONFIG_RTC_DRV_M41T80 is not set 1279 + 1280 + # 1281 + # SPI RTC drivers 1282 + # 1283 + 1284 + # 1285 + # Platform RTC drivers 1286 + # 1287 + # CONFIG_RTC_DRV_CMOS is not set 1288 + # CONFIG_RTC_DRV_DS1553 is not set 1289 + # CONFIG_RTC_DRV_STK17TA8 is not set 1290 + # CONFIG_RTC_DRV_DS1742 is not set 1291 + # CONFIG_RTC_DRV_M48T86 is not set 1292 + # CONFIG_RTC_DRV_M48T59 is not set 1293 + # CONFIG_RTC_DRV_V3020 is not set 1294 + 1295 + # 1296 + # on-CPU RTC drivers 1297 + # 1298 1299 # 1300 # File systems ··· 1107 CONFIG_EXT3_FS_XATTR=y 1108 CONFIG_EXT3_FS_POSIX_ACL=y 1109 # CONFIG_EXT3_FS_SECURITY is not set 1110 + # CONFIG_EXT4DEV_FS is not set 1111 CONFIG_JBD=y 1112 CONFIG_FS_MBCACHE=y 1113 # CONFIG_REISERFS_FS is not set 1114 # CONFIG_JFS_FS is not set 1115 CONFIG_FS_POSIX_ACL=y 1116 # CONFIG_XFS_FS is not set 1117 + # CONFIG_GFS2_FS is not set 1118 + # CONFIG_OCFS2_FS is not set 1119 # CONFIG_MINIX_FS is not set 1120 # CONFIG_ROMFS_FS is not set 1121 CONFIG_INOTIFY=y 1122 + CONFIG_INOTIFY_USER=y 1123 # CONFIG_QUOTA is not set 1124 CONFIG_DNOTIFY=y 1125 # CONFIG_AUTOFS_FS is not set ··· 1140 # Pseudo filesystems 1141 # 1142 CONFIG_PROC_FS=y 1143 + CONFIG_PROC_SYSCTL=y 1144 CONFIG_SYSFS=y 1145 CONFIG_TMPFS=y 1146 + # CONFIG_TMPFS_POSIX_ACL is not set 1147 # CONFIG_HUGETLB_PAGE is not set 1148 + # CONFIG_CONFIGFS_FS is not set 1149 1150 # 1151 # Miscellaneous filesystems ··· 1156 # CONFIG_BEFS_FS is not set 1157 # CONFIG_BFS_FS is not set 1158 # CONFIG_EFS_FS is not set 1159 CONFIG_JFFS2_FS=y 1160 CONFIG_JFFS2_FS_DEBUG=0 1161 CONFIG_JFFS2_FS_WRITEBUFFER=y 1162 + # CONFIG_JFFS2_FS_WBUF_VERIFY is not set 1163 # CONFIG_JFFS2_SUMMARY is not set 1164 + # CONFIG_JFFS2_FS_XATTR is not set 1165 # CONFIG_JFFS2_COMPRESSION_OPTIONS is not set 1166 CONFIG_JFFS2_ZLIB=y 1167 + # CONFIG_JFFS2_LZO is not set 1168 CONFIG_JFFS2_RTIME=y 1169 # CONFIG_JFFS2_RUBIN is not set 1170 # CONFIG_CRAMFS is not set ··· 1171 # CONFIG_QNX4FS_FS is not set 1172 # CONFIG_SYSV_FS is not set 1173 # CONFIG_UFS_FS is not set 1174 + CONFIG_NETWORK_FILESYSTEMS=y 1175 CONFIG_NFS_FS=y 1176 CONFIG_NFS_V3=y 1177 # CONFIG_NFS_V3_ACL is not set ··· 1186 CONFIG_LOCKD_V4=y 1187 CONFIG_NFS_COMMON=y 1188 CONFIG_SUNRPC=y 1189 + # CONFIG_SUNRPC_BIND34 is not set 1190 # CONFIG_RPCSEC_GSS_KRB5 is not set 1191 # CONFIG_RPCSEC_GSS_SPKM3 is not set 1192 # CONFIG_SMB_FS is not set ··· 1193 # CONFIG_NCP_FS is not set 1194 # CONFIG_CODA_FS is not set 1195 # CONFIG_AFS_FS is not set 1196 1197 # 1198 # Partition Types ··· 1213 # CONFIG_SGI_PARTITION is not set 1214 # CONFIG_ULTRIX_PARTITION is not set 1215 # CONFIG_SUN_PARTITION is not set 1216 + # CONFIG_KARMA_PARTITION is not set 1217 # CONFIG_EFI_PARTITION is not set 1218 + # CONFIG_SYSV68_PARTITION is not set 1219 # CONFIG_NLS is not set 1220 + # CONFIG_DLM is not set 1221 + CONFIG_INSTRUMENTATION=y 1222 # CONFIG_PROFILING is not set 1223 + # CONFIG_MARKERS is not set 1224 1225 # 1226 # Kernel hacking 1227 # 1228 # CONFIG_PRINTK_TIME is not set 1229 + CONFIG_ENABLE_WARN_DEPRECATED=y 1230 + CONFIG_ENABLE_MUST_CHECK=y 1231 CONFIG_MAGIC_SYSRQ=y 1232 + # CONFIG_UNUSED_SYMBOLS is not set 1233 + # CONFIG_DEBUG_FS is not set 1234 + # CONFIG_HEADERS_CHECK is not set 1235 + CONFIG_DEBUG_KERNEL=y 1236 + # CONFIG_DEBUG_SHIRQ is not set 1237 CONFIG_DETECT_SOFTLOCKUP=y 1238 + CONFIG_SCHED_DEBUG=y 1239 # CONFIG_SCHEDSTATS is not set 1240 + # CONFIG_TIMER_STATS is not set 1241 + # CONFIG_SLUB_DEBUG_ON is not set 1242 + # CONFIG_DEBUG_RT_MUTEXES is not set 1243 + # CONFIG_RT_MUTEX_TESTER is not set 1244 # CONFIG_DEBUG_SPINLOCK is not set 1245 + # CONFIG_DEBUG_MUTEXES is not set 1246 + # CONFIG_DEBUG_LOCK_ALLOC is not set 1247 + # CONFIG_PROVE_LOCKING is not set 1248 + # CONFIG_LOCK_STAT is not set 1249 # CONFIG_DEBUG_SPINLOCK_SLEEP is not set 1250 + # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set 1251 # CONFIG_DEBUG_KOBJECT is not set 1252 CONFIG_DEBUG_BUGVERBOSE=y 1253 # CONFIG_DEBUG_INFO is not set 1254 # CONFIG_DEBUG_VM is not set 1255 + # CONFIG_DEBUG_LIST is not set 1256 + # CONFIG_DEBUG_SG is not set 1257 CONFIG_FRAME_POINTER=y 1258 + CONFIG_FORCED_INLINING=y 1259 + # CONFIG_BOOT_PRINTK_DELAY is not set 1260 # CONFIG_RCU_TORTURE_TEST is not set 1261 + # CONFIG_FAULT_INJECTION is not set 1262 + # CONFIG_SAMPLES is not set 1263 # CONFIG_DEBUG_USER is not set 1264 CONFIG_DEBUG_ERRORS=y 1265 CONFIG_DEBUG_LL=y ··· 1254 # 1255 # CONFIG_KEYS is not set 1256 # CONFIG_SECURITY is not set 1257 + # CONFIG_SECURITY_FILE_CAPABILITIES is not set 1258 # CONFIG_CRYPTO is not set 1259 1260 # 1261 # Library routines 1262 # 1263 + CONFIG_BITREVERSE=y 1264 # CONFIG_CRC_CCITT is not set 1265 # CONFIG_CRC16 is not set 1266 + # CONFIG_CRC_ITU_T is not set 1267 CONFIG_CRC32=y 1268 + # CONFIG_CRC7 is not set 1269 # CONFIG_LIBCRC32C is not set 1270 CONFIG_ZLIB_INFLATE=y 1271 CONFIG_ZLIB_DEFLATE=y 1272 + CONFIG_PLIST=y 1273 + CONFIG_HAS_IOMEM=y 1274 + CONFIG_HAS_IOPORT=y 1275 + CONFIG_HAS_DMA=y
+1
arch/arm/kernel/Makefile
··· 20 obj-$(CONFIG_SMP) += smp.o 21 obj-$(CONFIG_KEXEC) += machine_kexec.o relocate_kernel.o 22 obj-$(CONFIG_KPROBES) += kprobes.o kprobes-decode.o 23 obj-$(CONFIG_OABI_COMPAT) += sys_oabi-compat.o 24 25 obj-$(CONFIG_CRUNCH) += crunch.o crunch-bits.o
··· 20 obj-$(CONFIG_SMP) += smp.o 21 obj-$(CONFIG_KEXEC) += machine_kexec.o relocate_kernel.o 22 obj-$(CONFIG_KPROBES) += kprobes.o kprobes-decode.o 23 + obj-$(CONFIG_ATAGS_PROC) += atags.o 24 obj-$(CONFIG_OABI_COMPAT) += sys_oabi-compat.o 25 26 obj-$(CONFIG_CRUNCH) += crunch.o crunch-bits.o
+86
arch/arm/kernel/atags.c
···
··· 1 + #include <linux/slab.h> 2 + #include <linux/kexec.h> 3 + #include <linux/proc_fs.h> 4 + #include <asm/setup.h> 5 + #include <asm/types.h> 6 + #include <asm/page.h> 7 + 8 + struct buffer { 9 + size_t size; 10 + char *data; 11 + }; 12 + static struct buffer tags_buffer; 13 + 14 + static int 15 + read_buffer(char* page, char** start, off_t off, int count, 16 + int* eof, void* data) 17 + { 18 + struct buffer *buffer = (struct buffer *)data; 19 + 20 + if (off >= buffer->size) { 21 + *eof = 1; 22 + return 0; 23 + } 24 + 25 + count = min((int) (buffer->size - off), count); 26 + 27 + memcpy(page, &buffer->data[off], count); 28 + 29 + return count; 30 + } 31 + 32 + 33 + static int 34 + create_proc_entries(void) 35 + { 36 + struct proc_dir_entry* tags_entry; 37 + 38 + tags_entry = create_proc_read_entry("atags", 0400, &proc_root, read_buffer, &tags_buffer); 39 + if (!tags_entry) 40 + return -ENOMEM; 41 + 42 + return 0; 43 + } 44 + 45 + 46 + static char __initdata atags_copy_buf[KEXEC_BOOT_PARAMS_SIZE]; 47 + static char __initdata *atags_copy; 48 + 49 + void __init save_atags(const struct tag *tags) 50 + { 51 + atags_copy = atags_copy_buf; 52 + memcpy(atags_copy, tags, KEXEC_BOOT_PARAMS_SIZE); 53 + } 54 + 55 + 56 + static int __init init_atags_procfs(void) 57 + { 58 + struct tag *tag; 59 + int error; 60 + 61 + if (!atags_copy) { 62 + printk(KERN_WARNING "Exporting ATAGs: No saved tags found\n"); 63 + return -EIO; 64 + } 65 + 66 + for (tag = (struct tag *) atags_copy; tag->hdr.size; tag = tag_next(tag)) 67 + ; 68 + 69 + tags_buffer.size = ((char *) tag - atags_copy) + sizeof(tag->hdr); 70 + tags_buffer.data = kmalloc(tags_buffer.size, GFP_KERNEL); 71 + if (tags_buffer.data == NULL) 72 + return -ENOMEM; 73 + memcpy(tags_buffer.data, atags_copy, tags_buffer.size); 74 + 75 + error = create_proc_entries(); 76 + if (error) { 77 + printk(KERN_ERR "Exporting ATAGs: not enough memory\n"); 78 + kfree(tags_buffer.data); 79 + tags_buffer.size = 0; 80 + tags_buffer.data = NULL; 81 + } 82 + 83 + return error; 84 + } 85 + 86 + arch_initcall(init_atags_procfs);
+5
arch/arm/kernel/atags.h
···
··· 1 + #ifdef CONFIG_ATAGS_PROC 2 + extern void save_atags(struct tag *tags); 3 + #else 4 + static inline void save_atags(struct tag *tags) { } 5 + #endif
+2
arch/arm/kernel/machine_kexec.c
··· 21 extern unsigned long kexec_start_address; 22 extern unsigned long kexec_indirection_page; 23 extern unsigned long kexec_mach_type; 24 25 /* 26 * Provide a dummy crash_notes definition while crash dump arrives to arm. ··· 63 kexec_start_address = image->start; 64 kexec_indirection_page = page_list; 65 kexec_mach_type = machine_arch_type; 66 67 /* copy our kernel relocation code to the control code page */ 68 memcpy(reboot_code_buffer,
··· 21 extern unsigned long kexec_start_address; 22 extern unsigned long kexec_indirection_page; 23 extern unsigned long kexec_mach_type; 24 + extern unsigned long kexec_boot_atags; 25 26 /* 27 * Provide a dummy crash_notes definition while crash dump arrives to arm. ··· 62 kexec_start_address = image->start; 63 kexec_indirection_page = page_list; 64 kexec_mach_type = machine_arch_type; 65 + kexec_boot_atags = image->start - KEXEC_ARM_ZIMAGE_OFFSET + KEXEC_ARM_ATAGS_OFFSET; 66 67 /* copy our kernel relocation code to the control code page */ 68 memcpy(reboot_code_buffer,
+4 -26
arch/arm/kernel/relocate_kernel.S
··· 7 .globl relocate_new_kernel 8 relocate_new_kernel: 9 10 - /* Move boot params back to where the kernel expects them */ 11 - 12 - ldr r0,kexec_boot_params_address 13 - teq r0,#0 14 - beq 8f 15 - 16 - ldr r1,kexec_boot_params_copy 17 - mov r6,#KEXEC_BOOT_PARAMS_SIZE/4 18 - 7: 19 - ldr r5,[r1],#4 20 - str r5,[r0],#4 21 - subs r6,r6,#1 22 - bne 7b 23 - 24 - 8: 25 - /* Boot params moved, now go on with the kernel */ 26 - 27 ldr r0,kexec_indirection_page 28 ldr r1,kexec_start_address 29 ··· 50 mov lr,r1 51 mov r0,#0 52 ldr r1,kexec_mach_type 53 - ldr r2,kexec_boot_params_address 54 mov pc,lr 55 56 .globl kexec_start_address ··· 65 kexec_mach_type: 66 .long 0x0 67 68 - /* phy addr where new kernel will expect to find boot params */ 69 - .globl kexec_boot_params_address 70 - kexec_boot_params_address: 71 - .long 0x0 72 - 73 - /* phy addr where old kernel put a copy of orig boot params */ 74 - .globl kexec_boot_params_copy 75 - kexec_boot_params_copy: 76 .long 0x0 77 78 relocate_new_kernel_end:
··· 7 .globl relocate_new_kernel 8 relocate_new_kernel: 9 10 ldr r0,kexec_indirection_page 11 ldr r1,kexec_start_address 12 ··· 67 mov lr,r1 68 mov r0,#0 69 ldr r1,kexec_mach_type 70 + ldr r2,kexec_boot_atags 71 mov pc,lr 72 73 .globl kexec_start_address ··· 82 kexec_mach_type: 83 .long 0x0 84 85 + /* phy addr of the atags for the new kernel */ 86 + .globl kexec_boot_atags 87 + kexec_boot_atags: 88 .long 0x0 89 90 relocate_new_kernel_end:
+3 -30
arch/arm/kernel/setup.c
··· 24 #include <linux/interrupt.h> 25 #include <linux/smp.h> 26 #include <linux/fs.h> 27 - #include <linux/kexec.h> 28 29 #include <asm/cpu.h> 30 #include <asm/elf.h> ··· 38 #include <asm/mach/time.h> 39 40 #include "compat.h" 41 42 #ifndef MEM_SIZE 43 #define MEM_SIZE (16*1024*1024) ··· 62 extern void _stext, _text, _etext, __data_start, _edata, _end; 63 64 unsigned int processor_id; 65 unsigned int __machine_arch_type; 66 EXPORT_SYMBOL(__machine_arch_type); 67 ··· 785 } 786 arch_initcall(customize_machine); 787 788 - #ifdef CONFIG_KEXEC 789 - 790 - /* Physical addr of where the boot params should be for this machine */ 791 - extern unsigned long kexec_boot_params_address; 792 - 793 - /* Physical addr of the buffer into which the boot params are copied */ 794 - extern unsigned long kexec_boot_params_copy; 795 - 796 - /* Pointer to the boot params buffer, for manipulation and display */ 797 - unsigned long kexec_boot_params; 798 - EXPORT_SYMBOL(kexec_boot_params); 799 - 800 - /* The buffer itself - make sure it is sized correctly */ 801 - static unsigned long kexec_boot_params_buf[(KEXEC_BOOT_PARAMS_SIZE + 3) / 4]; 802 - 803 - #endif 804 - 805 void __init setup_arch(char **cmdline_p) 806 { 807 struct tag *tags = (struct tag *)&init_tags; ··· 803 else if (mdesc->boot_params) 804 tags = phys_to_virt(mdesc->boot_params); 805 806 - #ifdef CONFIG_KEXEC 807 - kexec_boot_params_copy = virt_to_phys(kexec_boot_params_buf); 808 - kexec_boot_params = (unsigned long)kexec_boot_params_buf; 809 - if (__atags_pointer) { 810 - kexec_boot_params_address = __atags_pointer; 811 - memcpy((void *)kexec_boot_params, tags, KEXEC_BOOT_PARAMS_SIZE); 812 - } else if (mdesc->boot_params) { 813 - kexec_boot_params_address = mdesc->boot_params; 814 - memcpy((void *)kexec_boot_params, tags, KEXEC_BOOT_PARAMS_SIZE); 815 - } 816 - #endif 817 - 818 /* 819 * If we have the old style parameters, convert them to 820 * a tag list. ··· 818 if (tags->hdr.tag == ATAG_CORE) { 819 if (meminfo.nr_banks != 0) 820 squash_mem_tags(tags); 821 parse_tags(tags); 822 } 823
··· 24 #include <linux/interrupt.h> 25 #include <linux/smp.h> 26 #include <linux/fs.h> 27 28 #include <asm/cpu.h> 29 #include <asm/elf.h> ··· 39 #include <asm/mach/time.h> 40 41 #include "compat.h" 42 + #include "atags.h" 43 44 #ifndef MEM_SIZE 45 #define MEM_SIZE (16*1024*1024) ··· 62 extern void _stext, _text, _etext, __data_start, _edata, _end; 63 64 unsigned int processor_id; 65 + EXPORT_SYMBOL(processor_id); 66 unsigned int __machine_arch_type; 67 EXPORT_SYMBOL(__machine_arch_type); 68 ··· 784 } 785 arch_initcall(customize_machine); 786 787 void __init setup_arch(char **cmdline_p) 788 { 789 struct tag *tags = (struct tag *)&init_tags; ··· 819 else if (mdesc->boot_params) 820 tags = phys_to_virt(mdesc->boot_params); 821 822 /* 823 * If we have the old style parameters, convert them to 824 * a tag list. ··· 846 if (tags->hdr.tag == ATAG_CORE) { 847 if (meminfo.nr_banks != 0) 848 squash_mem_tags(tags); 849 + save_atags(tags); 850 parse_tags(tags); 851 } 852
+32 -7
arch/arm/kernel/smp.c
··· 290 local_irq_enable(); 291 local_fiq_enable(); 292 293 calibrate_delay(); 294 295 smp_store_cpu_info(cpu); ··· 303 * OK, now it's safe to let the boot CPU continue 304 */ 305 cpu_set(cpu, cpu_online_map); 306 - 307 - /* 308 - * Setup local timer for this CPU. 309 - */ 310 - local_timer_setup(cpu); 311 312 /* 313 * OK, it's off to the idle thread for us ··· 454 } 455 EXPORT_SYMBOL_GPL(smp_call_function); 456 457 void show_ipi_list(struct seq_file *p) 458 { 459 unsigned int cpu; ··· 502 static void ipi_timer(void) 503 { 504 irq_enter(); 505 - profile_tick(CPU_PROFILING); 506 - update_process_times(user_mode(get_irq_regs())); 507 irq_exit(); 508 } 509 ··· 638 { 639 cpumask_t mask = cpu_online_map; 640 cpu_clear(smp_processor_id(), mask); 641 send_ipi_message(mask, IPI_TIMER); 642 } 643
··· 290 local_irq_enable(); 291 local_fiq_enable(); 292 293 + /* 294 + * Setup local timer for this CPU. 295 + */ 296 + local_timer_setup(cpu); 297 + 298 calibrate_delay(); 299 300 smp_store_cpu_info(cpu); ··· 298 * OK, now it's safe to let the boot CPU continue 299 */ 300 cpu_set(cpu, cpu_online_map); 301 302 /* 303 * OK, it's off to the idle thread for us ··· 454 } 455 EXPORT_SYMBOL_GPL(smp_call_function); 456 457 + int smp_call_function_single(int cpu, void (*func)(void *info), void *info, 458 + int retry, int wait) 459 + { 460 + /* prevent preemption and reschedule on another processor */ 461 + int current_cpu = get_cpu(); 462 + int ret = 0; 463 + 464 + if (cpu == current_cpu) { 465 + local_irq_disable(); 466 + func(info); 467 + local_irq_enable(); 468 + } else 469 + ret = smp_call_function_on_cpu(func, info, retry, wait, 470 + cpumask_of_cpu(cpu)); 471 + 472 + put_cpu(); 473 + 474 + return ret; 475 + } 476 + EXPORT_SYMBOL_GPL(smp_call_function_single); 477 + 478 void show_ipi_list(struct seq_file *p) 479 { 480 unsigned int cpu; ··· 481 static void ipi_timer(void) 482 { 483 irq_enter(); 484 + local_timer_interrupt(); 485 irq_exit(); 486 } 487 ··· 618 { 619 cpumask_t mask = cpu_online_map; 620 cpu_clear(smp_processor_id(), mask); 621 + send_ipi_message(mask, IPI_TIMER); 622 + } 623 + 624 + void smp_timer_broadcast(cpumask_t mask) 625 + { 626 send_ipi_message(mask, IPI_TIMER); 627 } 628
+30
arch/arm/mach-at91/Kconfig
··· 253 system clock (of at least several MHz), rounding is less of a 254 problem so it can be safer to use a decimal values like 100. 255 256 endmenu 257 258 endif
··· 253 system clock (of at least several MHz), rounding is less of a 254 problem so it can be safer to use a decimal values like 100. 255 256 + choice 257 + prompt "Select a UART for early kernel messages" 258 + 259 + config AT91_EARLY_DBGU 260 + bool "DBGU" 261 + 262 + config AT91_EARLY_USART0 263 + bool "USART0" 264 + 265 + config AT91_EARLY_USART1 266 + bool "USART1" 267 + 268 + config AT91_EARLY_USART2 269 + bool "USART2" 270 + depends on ! ARCH_AT91X40 271 + 272 + config AT91_EARLY_USART3 273 + bool "USART3" 274 + depends on (ARCH_AT91RM9200 || ARCH_AT91SAM9RL || ARCH_AT91SAM9260) 275 + 276 + config AT91_EARLY_USART4 277 + bool "USART4" 278 + depends on ARCH_AT91SAM9260 279 + 280 + config AT91_EARLY_USART5 281 + bool "USART5" 282 + depends on ARCH_AT91SAM9260 283 + 284 + endchoice 285 + 286 endmenu 287 288 endif
-3
arch/arm/mach-at91/at91sam926x_time.c
··· 49 volatile long nr_ticks; 50 51 if (at91_sys_read(AT91_PIT_SR) & AT91_PIT_PITS) { /* This is a shared interrupt */ 52 - write_seqlock(&xtime_lock); 53 - 54 /* Get number to ticks performed before interrupt and clear PIT interrupt */ 55 nr_ticks = PIT_PICNT(at91_sys_read(AT91_PIT_PIVR)); 56 do { ··· 56 nr_ticks--; 57 } while (nr_ticks); 58 59 - write_sequnlock(&xtime_lock); 60 return IRQ_HANDLED; 61 } else 62 return IRQ_NONE; /* not handled */
··· 49 volatile long nr_ticks; 50 51 if (at91_sys_read(AT91_PIT_SR) & AT91_PIT_PITS) { /* This is a shared interrupt */ 52 /* Get number to ticks performed before interrupt and clear PIT interrupt */ 53 nr_ticks = PIT_PICNT(at91_sys_read(AT91_PIT_PIVR)); 54 do { ··· 58 nr_ticks--; 59 } while (nr_ticks); 60 61 return IRQ_HANDLED; 62 } else 63 return IRQ_NONE; /* not handled */
+3
arch/arm/mach-at91/generic.h
··· 47 #define AT91RM9200_BGA 4 /* AT91RM9200 BGA package has 4 banks */ 48 49 struct at91_gpio_bank { 50 unsigned short id; /* peripheral ID */ 51 unsigned long offset; /* offset from system peripheral base */ 52 struct clk *clock; /* associated clock */
··· 47 #define AT91RM9200_BGA 4 /* AT91RM9200 BGA package has 4 banks */ 48 49 struct at91_gpio_bank { 50 + unsigned chipbase; /* bank's first GPIO number */ 51 + void __iomem *regbase; /* base of register bank */ 52 + struct at91_gpio_bank *next; /* bank sharing same IRQ/clock/... */ 53 unsigned short id; /* peripheral ID */ 54 unsigned long offset; /* offset from system peripheral base */ 55 struct clk *clock; /* associated clock */
+60 -29
arch/arm/mach-at91/gpio.c
··· 33 34 static inline void __iomem *pin_to_controller(unsigned pin) 35 { 36 - void __iomem *sys_base = (void __iomem *) AT91_VA_BASE_SYS; 37 - 38 pin -= PIN_BASE; 39 pin /= 32; 40 if (likely(pin < gpio_banks)) 41 - return sys_base + gpio[pin].offset; 42 43 return NULL; 44 } ··· 292 int i; 293 294 for (i = 0; i < gpio_banks; i++) { 295 - u32 pio = gpio[i].offset; 296 297 - backups[i] = at91_sys_read(pio + PIO_IMR); 298 - at91_sys_write(pio + PIO_IDR, backups[i]); 299 - at91_sys_write(pio + PIO_IER, wakeups[i]); 300 301 if (!wakeups[i]) 302 clk_disable(gpio[i].clock); ··· 313 int i; 314 315 for (i = 0; i < gpio_banks; i++) { 316 - u32 pio = gpio[i].offset; 317 318 if (!wakeups[i]) 319 clk_enable(gpio[i].clock); 320 321 - at91_sys_write(pio + PIO_IDR, wakeups[i]); 322 - at91_sys_write(pio + PIO_IER, backups[i]); 323 } 324 } 325 ··· 359 360 static int gpio_irq_type(unsigned pin, unsigned type) 361 { 362 - return (type == IRQT_BOTHEDGE) ? 0 : -EINVAL; 363 } 364 365 static struct irq_chip gpio_irqchip = { ··· 380 { 381 unsigned pin; 382 struct irq_desc *gpio; 383 void __iomem *pio; 384 u32 isr; 385 386 - pio = get_irq_chip_data(irq); 387 388 /* temporarily mask (level sensitive) parent IRQ */ 389 desc->chip->ack(irq); 390 for (;;) { 391 - /* reading ISR acks the pending (edge triggered) GPIO interrupt */ 392 isr = __raw_readl(pio + PIO_ISR) & __raw_readl(pio + PIO_IMR); 393 - if (!isr) 394 - break; 395 396 - pin = (unsigned) get_irq_data(irq); 397 gpio = &irq_desc[pin]; 398 399 while (isr) { ··· 495 */ 496 void __init at91_gpio_irq_setup(void) 497 { 498 - unsigned pioc, pin; 499 500 - for (pioc = 0, pin = PIN_BASE; 501 - pioc < gpio_banks; 502 - pioc++) { 503 - void __iomem *controller; 504 - unsigned id = gpio[pioc].id; 505 unsigned i; 506 507 - clk_enable(gpio[pioc].clock); /* enable PIO controller's clock */ 508 509 - controller = (void __iomem *) AT91_VA_BASE_SYS + gpio[pioc].offset; 510 - __raw_writel(~0, controller + PIO_IDR); 511 512 - set_irq_data(id, (void *) pin); 513 - set_irq_chip_data(id, controller); 514 - 515 - for (i = 0; i < 32; i++, pin++) { 516 /* 517 * Can use the "simple" and not "edge" handler since it's 518 * shorter, and the AIC handles interrupts sanely. ··· 519 set_irq_flags(pin, IRQF_VALID); 520 } 521 522 set_irq_chained_handler(id, gpio_irq_handler); 523 } 524 pr_info("AT91: %d gpio irqs in %d banks\n", pin - PIN_BASE, gpio_banks); ··· 537 */ 538 void __init at91_gpio_init(struct at91_gpio_bank *data, int nr_banks) 539 { 540 BUG_ON(nr_banks > MAX_GPIO_BANKS); 541 542 gpio = data; 543 gpio_banks = nr_banks; 544 }
··· 33 34 static inline void __iomem *pin_to_controller(unsigned pin) 35 { 36 pin -= PIN_BASE; 37 pin /= 32; 38 if (likely(pin < gpio_banks)) 39 + return gpio[pin].regbase; 40 41 return NULL; 42 } ··· 294 int i; 295 296 for (i = 0; i < gpio_banks; i++) { 297 + void __iomem *pio = gpio[i].regbase; 298 299 + backups[i] = __raw_readl(pio + PIO_IMR); 300 + __raw_writel(backups[i], pio + PIO_IDR); 301 + __raw_writel(wakeups[i], pio + PIO_IER); 302 303 if (!wakeups[i]) 304 clk_disable(gpio[i].clock); ··· 315 int i; 316 317 for (i = 0; i < gpio_banks; i++) { 318 + void __iomem *pio = gpio[i].regbase; 319 320 if (!wakeups[i]) 321 clk_enable(gpio[i].clock); 322 323 + __raw_writel(wakeups[i], pio + PIO_IDR); 324 + __raw_writel(backups[i], pio + PIO_IER); 325 } 326 } 327 ··· 361 362 static int gpio_irq_type(unsigned pin, unsigned type) 363 { 364 + switch (type) { 365 + case IRQ_TYPE_NONE: 366 + case IRQ_TYPE_EDGE_BOTH: 367 + return 0; 368 + default: 369 + return -EINVAL; 370 + } 371 } 372 373 static struct irq_chip gpio_irqchip = { ··· 376 { 377 unsigned pin; 378 struct irq_desc *gpio; 379 + struct at91_gpio_bank *bank; 380 void __iomem *pio; 381 u32 isr; 382 383 + bank = get_irq_chip_data(irq); 384 + pio = bank->regbase; 385 386 /* temporarily mask (level sensitive) parent IRQ */ 387 desc->chip->ack(irq); 388 for (;;) { 389 + /* Reading ISR acks pending (edge triggered) GPIO interrupts. 390 + * When there none are pending, we're finished unless we need 391 + * to process multiple banks (like ID_PIOCDE on sam9263). 392 + */ 393 isr = __raw_readl(pio + PIO_ISR) & __raw_readl(pio + PIO_IMR); 394 + if (!isr) { 395 + if (!bank->next) 396 + break; 397 + bank = bank->next; 398 + pio = bank->regbase; 399 + continue; 400 + } 401 402 + pin = bank->chipbase; 403 gpio = &irq_desc[pin]; 404 405 while (isr) { ··· 481 */ 482 void __init at91_gpio_irq_setup(void) 483 { 484 + unsigned pioc, pin; 485 + struct at91_gpio_bank *this, *prev; 486 487 + for (pioc = 0, pin = PIN_BASE, this = gpio, prev = NULL; 488 + pioc++ < gpio_banks; 489 + prev = this, this++) { 490 + unsigned id = this->id; 491 unsigned i; 492 493 + /* enable PIO controller's clock */ 494 + clk_enable(this->clock); 495 496 + __raw_writel(~0, this->regbase + PIO_IDR); 497 498 + for (i = 0, pin = this->chipbase; i < 32; i++, pin++) { 499 /* 500 * Can use the "simple" and not "edge" handler since it's 501 * shorter, and the AIC handles interrupts sanely. ··· 508 set_irq_flags(pin, IRQF_VALID); 509 } 510 511 + /* The toplevel handler handles one bank of GPIOs, except 512 + * AT91SAM9263_ID_PIOCDE handles three... PIOC is first in 513 + * the list, so we only set up that handler. 514 + */ 515 + if (prev && prev->next == this) 516 + continue; 517 + 518 + set_irq_chip_data(id, this); 519 set_irq_chained_handler(id, gpio_irq_handler); 520 } 521 pr_info("AT91: %d gpio irqs in %d banks\n", pin - PIN_BASE, gpio_banks); ··· 518 */ 519 void __init at91_gpio_init(struct at91_gpio_bank *data, int nr_banks) 520 { 521 + unsigned i; 522 + struct at91_gpio_bank *last; 523 + 524 BUG_ON(nr_banks > MAX_GPIO_BANKS); 525 526 gpio = data; 527 gpio_banks = nr_banks; 528 + 529 + for (i = 0, last = NULL; i < nr_banks; i++, last = data, data++) { 530 + data->chipbase = PIN_BASE + i * 32; 531 + data->regbase = data->offset + (void __iomem *)AT91_VA_BASE_SYS; 532 + 533 + /* AT91SAM9263_ID_PIOCDE groups PIOC, PIOD, PIOE */ 534 + if (last && last->id == data->id) 535 + last->next = data; 536 + } 537 }
+14
arch/arm/mach-ixp4xx/Kconfig
··· 189 need to use the indirect method instead. If you don't know 190 what you need, leave this option unselected. 191 192 endmenu 193 194 endif
··· 189 need to use the indirect method instead. If you don't know 190 what you need, leave this option unselected. 191 192 + config IXP4XX_QMGR 193 + tristate "IXP4xx Queue Manager support" 194 + help 195 + This driver supports IXP4xx built-in hardware queue manager 196 + and is automatically selected by Ethernet and HSS drivers. 197 + 198 + config IXP4XX_NPE 199 + tristate "IXP4xx Network Processor Engine support" 200 + select HOTPLUG 201 + select FW_LOADER 202 + help 203 + This driver supports IXP4xx built-in network coprocessors 204 + and is automatically selected by Ethernet and HSS drivers. 205 + 206 endmenu 207 208 endif
+5 -3
arch/arm/mach-ixp4xx/Makefile
··· 23 obj-$(CONFIG_MACH_IXDPG425) += coyote-setup.o 24 obj-$(CONFIG_ARCH_ADI_COYOTE) += coyote-setup.o 25 obj-$(CONFIG_MACH_GTWX5715) += gtwx5715-setup.o 26 - obj-$(CONFIG_MACH_NSLU2) += nslu2-setup.o nslu2-power.o 27 - obj-$(CONFIG_MACH_NAS100D) += nas100d-setup.o nas100d-power.o 28 - obj-$(CONFIG_MACH_DSMG600) += dsmg600-setup.o dsmg600-power.o 29 obj-$(CONFIG_MACH_GATEWAY7001) += gateway7001-setup.o 30 obj-$(CONFIG_MACH_WG302V2) += wg302v2-setup.o 31 32 obj-$(CONFIG_PCI) += $(obj-pci-$(CONFIG_PCI)) common-pci.o
··· 23 obj-$(CONFIG_MACH_IXDPG425) += coyote-setup.o 24 obj-$(CONFIG_ARCH_ADI_COYOTE) += coyote-setup.o 25 obj-$(CONFIG_MACH_GTWX5715) += gtwx5715-setup.o 26 + obj-$(CONFIG_MACH_NSLU2) += nslu2-setup.o 27 + obj-$(CONFIG_MACH_NAS100D) += nas100d-setup.o 28 + obj-$(CONFIG_MACH_DSMG600) += dsmg600-setup.o 29 obj-$(CONFIG_MACH_GATEWAY7001) += gateway7001-setup.o 30 obj-$(CONFIG_MACH_WG302V2) += wg302v2-setup.o 31 32 obj-$(CONFIG_PCI) += $(obj-pci-$(CONFIG_PCI)) common-pci.o 33 + obj-$(CONFIG_IXP4XX_QMGR) += ixp4xx_qmgr.o 34 + obj-$(CONFIG_IXP4XX_NPE) += ixp4xx_npe.o
-125
arch/arm/mach-ixp4xx/dsmg600-power.c
··· 1 - /* 2 - * arch/arm/mach-ixp4xx/dsmg600-power.c 3 - * 4 - * DSM-G600 Power/Reset driver 5 - * Author: Michael Westerhof <mwester@dls.net> 6 - * 7 - * Based on nslu2-power.c 8 - * Copyright (C) 2005 Tower Technologies 9 - * Author: Alessandro Zummo <a.zummo@towertech.it> 10 - * 11 - * which was based on nslu2-io.c 12 - * Copyright (C) 2004 Karen Spearel 13 - * 14 - * Maintainers: http://www.nslu2-linux.org/ 15 - * 16 - * This program is free software; you can redistribute it and/or modify 17 - * it under the terms of the GNU General Public License version 2 as 18 - * published by the Free Software Foundation. 19 - * 20 - */ 21 - 22 - #include <linux/module.h> 23 - #include <linux/reboot.h> 24 - #include <linux/interrupt.h> 25 - #include <linux/irq.h> 26 - #include <linux/jiffies.h> 27 - #include <linux/timer.h> 28 - 29 - #include <asm/mach-types.h> 30 - 31 - extern void ctrl_alt_del(void); 32 - 33 - /* This is used to make sure the power-button pusher is serious. The button 34 - * must be held until the value of this counter reaches zero. 35 - */ 36 - static volatile int power_button_countdown; 37 - 38 - /* Must hold the button down for at least this many counts to be processed */ 39 - #define PBUTTON_HOLDDOWN_COUNT 4 /* 2 secs */ 40 - 41 - static void dsmg600_power_handler(unsigned long data); 42 - static DEFINE_TIMER(dsmg600_power_timer, dsmg600_power_handler, 0, 0); 43 - 44 - static void dsmg600_power_handler(unsigned long data) 45 - { 46 - /* This routine is called twice per second to check the 47 - * state of the power button. 48 - */ 49 - 50 - if (*IXP4XX_GPIO_GPINR & DSMG600_PB_BM) { 51 - 52 - /* IO Pin is 1 (button pushed) */ 53 - if (power_button_countdown == 0) { 54 - /* Signal init to do the ctrlaltdel action, this will bypass 55 - * init if it hasn't started and do a kernel_restart. 56 - */ 57 - ctrl_alt_del(); 58 - 59 - /* Change the state of the power LED to "blink" */ 60 - gpio_line_set(DSMG600_LED_PWR_GPIO, IXP4XX_GPIO_LOW); 61 - } 62 - power_button_countdown--; 63 - 64 - } else { 65 - power_button_countdown = PBUTTON_HOLDDOWN_COUNT; 66 - } 67 - 68 - mod_timer(&dsmg600_power_timer, jiffies + msecs_to_jiffies(500)); 69 - } 70 - 71 - static irqreturn_t dsmg600_reset_handler(int irq, void *dev_id) 72 - { 73 - /* This is the paper-clip reset, it shuts the machine down directly. */ 74 - machine_power_off(); 75 - 76 - return IRQ_HANDLED; 77 - } 78 - 79 - static int __init dsmg600_power_init(void) 80 - { 81 - if (!(machine_is_dsmg600())) 82 - return 0; 83 - 84 - if (request_irq(DSMG600_RB_IRQ, &dsmg600_reset_handler, 85 - IRQF_DISABLED | IRQF_TRIGGER_LOW, "DSM-G600 reset button", 86 - NULL) < 0) { 87 - 88 - printk(KERN_DEBUG "Reset Button IRQ %d not available\n", 89 - DSMG600_RB_IRQ); 90 - 91 - return -EIO; 92 - } 93 - 94 - /* The power button on the D-Link DSM-G600 is on GPIO 15, but 95 - * it cannot handle interrupts on that GPIO line. So we'll 96 - * have to poll it with a kernel timer. 97 - */ 98 - 99 - /* Make sure that the power button GPIO is set up as an input */ 100 - gpio_line_config(DSMG600_PB_GPIO, IXP4XX_GPIO_IN); 101 - 102 - /* Set the initial value for the power button IRQ handler */ 103 - power_button_countdown = PBUTTON_HOLDDOWN_COUNT; 104 - 105 - mod_timer(&dsmg600_power_timer, jiffies + msecs_to_jiffies(500)); 106 - 107 - return 0; 108 - } 109 - 110 - static void __exit dsmg600_power_exit(void) 111 - { 112 - if (!(machine_is_dsmg600())) 113 - return; 114 - 115 - del_timer_sync(&dsmg600_power_timer); 116 - 117 - free_irq(DSMG600_RB_IRQ, NULL); 118 - } 119 - 120 - module_init(dsmg600_power_init); 121 - module_exit(dsmg600_power_exit); 122 - 123 - MODULE_AUTHOR("Michael Westerhof <mwester@dls.net>"); 124 - MODULE_DESCRIPTION("DSM-G600 Power/Reset driver"); 125 - MODULE_LICENSE("GPL");
···
+114 -26
arch/arm/mach-ixp4xx/dsmg600-setup.c
··· 1 /* 2 * DSM-G600 board-setup 3 * 4 * Copyright (C) 2006 Tower Technologies 5 - * Author: Alessandro Zummo <a.zummo@towertech.it> 6 * 7 - * based ixdp425-setup.c: 8 * Copyright (C) 2003-2004 MontaVista Software, Inc. 9 * 10 * Author: Alessandro Zummo <a.zummo@towertech.it> 11 * Maintainers: http://www.nslu2-linux.org/ 12 */ 13 14 - #include <linux/kernel.h> 15 #include <linux/serial.h> 16 #include <linux/serial_8250.h> 17 #include <linux/i2c-gpio.h> 18 19 #include <asm/mach-types.h> 20 #include <asm/mach/arch.h> 21 #include <asm/mach/flash.h> 22 #include <asm/mach/time.h> 23 24 static struct flash_platform_data dsmg600_flash_data = { 25 .map_name = "cfi_probe", ··· 63 }, 64 }; 65 66 - #ifdef CONFIG_LEDS_CLASS 67 - static struct resource dsmg600_led_resources[] = { 68 { 69 - .name = "power", 70 - .start = DSMG600_LED_PWR_GPIO, 71 - .end = DSMG600_LED_PWR_GPIO, 72 - .flags = IXP4XX_GPIO_HIGH, 73 - }, 74 - { 75 - .name = "wlan", 76 - .start = DSMG600_LED_WLAN_GPIO, 77 - .end = DSMG600_LED_WLAN_GPIO, 78 - .flags = IXP4XX_GPIO_LOW, 79 }, 80 }; 81 82 - static struct platform_device dsmg600_leds = { 83 - .name = "IXP4XX-GPIO-LED", 84 - .id = -1, 85 - .num_resources = ARRAY_SIZE(dsmg600_led_resources), 86 - .resource = dsmg600_led_resources, 87 }; 88 - #endif 89 90 static struct resource dsmg600_uart_resources[] = { 91 { ··· 138 static struct platform_device *dsmg600_devices[] __initdata = { 139 &dsmg600_i2c_gpio, 140 &dsmg600_flash, 141 }; 142 143 static void dsmg600_power_off(void) ··· 148 149 /* poweroff */ 150 gpio_line_set(DSMG600_PO_GPIO, IXP4XX_GPIO_HIGH); 151 } 152 153 static void __init dsmg600_timer_init(void) ··· 225 dsmg600_flash_resource.end = 226 IXP4XX_EXP_BUS_BASE(0) + ixp4xx_exp_bus_size - 1; 227 228 - pm_power_off = dsmg600_power_off; 229 230 /* The UART is required on the DSM-G600 (Redboot cannot use the 231 * NIC) -- do it here so that it does *not* get removed if ··· 236 237 platform_add_devices(dsmg600_devices, ARRAY_SIZE(dsmg600_devices)); 238 239 - #ifdef CONFIG_LEDS_CLASS 240 - /* We don't care whether or not this works. */ 241 - (void)platform_device_register(&dsmg600_leds); 242 - #endif 243 } 244 245 MACHINE_START(DSMG600, "D-Link DSM-G600 RevA")
··· 1 /* 2 * DSM-G600 board-setup 3 * 4 + * Copyright (C) 2008 Rod Whitby <rod@whitby.id.au> 5 * Copyright (C) 2006 Tower Technologies 6 * 7 + * based on ixdp425-setup.c: 8 * Copyright (C) 2003-2004 MontaVista Software, Inc. 9 + * based on nslu2-power.c: 10 + * Copyright (C) 2005 Tower Technologies 11 + * based on nslu2-io.c: 12 + * Copyright (C) 2004 Karen Spearel 13 * 14 * Author: Alessandro Zummo <a.zummo@towertech.it> 15 + * Author: Michael Westerhof <mwester@dls.net> 16 + * Author: Rod Whitby <rod@whitby.id.au> 17 * Maintainers: http://www.nslu2-linux.org/ 18 */ 19 20 + #include <linux/irq.h> 21 + #include <linux/jiffies.h> 22 + #include <linux/timer.h> 23 #include <linux/serial.h> 24 #include <linux/serial_8250.h> 25 + #include <linux/leds.h> 26 + #include <linux/reboot.h> 27 + #include <linux/i2c.h> 28 #include <linux/i2c-gpio.h> 29 30 #include <asm/mach-types.h> 31 #include <asm/mach/arch.h> 32 #include <asm/mach/flash.h> 33 #include <asm/mach/time.h> 34 + #include <asm/gpio.h> 35 36 static struct flash_platform_data dsmg600_flash_data = { 37 .map_name = "cfi_probe", ··· 51 }, 52 }; 53 54 + static struct i2c_board_info __initdata dsmg600_i2c_board_info [] = { 55 { 56 + I2C_BOARD_INFO("rtc-pcf8563", 0x51), 57 }, 58 }; 59 60 + static struct gpio_led dsmg600_led_pins[] = { 61 + { 62 + .name = "power", 63 + .gpio = DSMG600_LED_PWR_GPIO, 64 + }, 65 + { 66 + .name = "wlan", 67 + .gpio = DSMG600_LED_WLAN_GPIO, 68 + .active_low = true, 69 + }, 70 }; 71 + 72 + static struct gpio_led_platform_data dsmg600_led_data = { 73 + .num_leds = ARRAY_SIZE(dsmg600_led_pins), 74 + .leds = dsmg600_led_pins, 75 + }; 76 + 77 + static struct platform_device dsmg600_leds = { 78 + .name = "leds-gpio", 79 + .id = -1, 80 + .dev.platform_data = &dsmg600_led_data, 81 + }; 82 83 static struct resource dsmg600_uart_resources[] = { 84 { ··· 121 static struct platform_device *dsmg600_devices[] __initdata = { 122 &dsmg600_i2c_gpio, 123 &dsmg600_flash, 124 + &dsmg600_leds, 125 }; 126 127 static void dsmg600_power_off(void) ··· 130 131 /* poweroff */ 132 gpio_line_set(DSMG600_PO_GPIO, IXP4XX_GPIO_HIGH); 133 + } 134 + 135 + /* This is used to make sure the power-button pusher is serious. The button 136 + * must be held until the value of this counter reaches zero. 137 + */ 138 + static int power_button_countdown; 139 + 140 + /* Must hold the button down for at least this many counts to be processed */ 141 + #define PBUTTON_HOLDDOWN_COUNT 4 /* 2 secs */ 142 + 143 + static void dsmg600_power_handler(unsigned long data); 144 + static DEFINE_TIMER(dsmg600_power_timer, dsmg600_power_handler, 0, 0); 145 + 146 + static void dsmg600_power_handler(unsigned long data) 147 + { 148 + /* This routine is called twice per second to check the 149 + * state of the power button. 150 + */ 151 + 152 + if (gpio_get_value(DSMG600_PB_GPIO)) { 153 + 154 + /* IO Pin is 1 (button pushed) */ 155 + if (power_button_countdown > 0) 156 + power_button_countdown--; 157 + 158 + } else { 159 + 160 + /* Done on button release, to allow for auto-power-on mods. */ 161 + if (power_button_countdown == 0) { 162 + /* Signal init to do the ctrlaltdel action, 163 + * this will bypass init if it hasn't started 164 + * and do a kernel_restart. 165 + */ 166 + ctrl_alt_del(); 167 + 168 + /* Change the state of the power LED to "blink" */ 169 + gpio_line_set(DSMG600_LED_PWR_GPIO, IXP4XX_GPIO_LOW); 170 + } else { 171 + power_button_countdown = PBUTTON_HOLDDOWN_COUNT; 172 + } 173 + } 174 + 175 + mod_timer(&dsmg600_power_timer, jiffies + msecs_to_jiffies(500)); 176 + } 177 + 178 + static irqreturn_t dsmg600_reset_handler(int irq, void *dev_id) 179 + { 180 + /* This is the paper-clip reset, it shuts the machine down directly. */ 181 + machine_power_off(); 182 + 183 + return IRQ_HANDLED; 184 } 185 186 static void __init dsmg600_timer_init(void) ··· 156 dsmg600_flash_resource.end = 157 IXP4XX_EXP_BUS_BASE(0) + ixp4xx_exp_bus_size - 1; 158 159 + i2c_register_board_info(0, dsmg600_i2c_board_info, 160 + ARRAY_SIZE(dsmg600_i2c_board_info)); 161 162 /* The UART is required on the DSM-G600 (Redboot cannot use the 163 * NIC) -- do it here so that it does *not* get removed if ··· 166 167 platform_add_devices(dsmg600_devices, ARRAY_SIZE(dsmg600_devices)); 168 169 + pm_power_off = dsmg600_power_off; 170 + 171 + if (request_irq(gpio_to_irq(DSMG600_RB_GPIO), &dsmg600_reset_handler, 172 + IRQF_DISABLED | IRQF_TRIGGER_LOW, 173 + "DSM-G600 reset button", NULL) < 0) { 174 + 175 + printk(KERN_DEBUG "Reset Button IRQ %d not available\n", 176 + gpio_to_irq(DSMG600_RB_GPIO)); 177 + } 178 + 179 + /* The power button on the D-Link DSM-G600 is on GPIO 15, but 180 + * it cannot handle interrupts on that GPIO line. So we'll 181 + * have to poll it with a kernel timer. 182 + */ 183 + 184 + /* Make sure that the power button GPIO is set up as an input */ 185 + gpio_line_config(DSMG600_PB_GPIO, IXP4XX_GPIO_IN); 186 + 187 + /* Set the initial value for the power button IRQ handler */ 188 + power_button_countdown = PBUTTON_HOLDDOWN_COUNT; 189 + 190 + mod_timer(&dsmg600_power_timer, jiffies + msecs_to_jiffies(500)); 191 } 192 193 MACHINE_START(DSMG600, "D-Link DSM-G600 RevA")
+28 -1
arch/arm/mach-ixp4xx/ixdp425-setup.c
··· 177 .resource = ixdp425_uart_resources 178 }; 179 180 static struct platform_device *ixdp425_devices[] __initdata = { 181 &ixdp425_i2c_gpio, 182 &ixdp425_flash, ··· 209 defined(CONFIG_MTD_NAND_PLATFORM_MODULE) 210 &ixdp425_flash_nand, 211 #endif 212 - &ixdp425_uart 213 }; 214 215 static void __init ixdp425_init(void)
··· 177 .resource = ixdp425_uart_resources 178 }; 179 180 + /* Built-in 10/100 Ethernet MAC interfaces */ 181 + static struct eth_plat_info ixdp425_plat_eth[] = { 182 + { 183 + .phy = 0, 184 + .rxq = 3, 185 + .txreadyq = 20, 186 + }, { 187 + .phy = 1, 188 + .rxq = 4, 189 + .txreadyq = 21, 190 + } 191 + }; 192 + 193 + static struct platform_device ixdp425_eth[] = { 194 + { 195 + .name = "ixp4xx_eth", 196 + .id = IXP4XX_ETH_NPEB, 197 + .dev.platform_data = ixdp425_plat_eth, 198 + }, { 199 + .name = "ixp4xx_eth", 200 + .id = IXP4XX_ETH_NPEC, 201 + .dev.platform_data = ixdp425_plat_eth + 1, 202 + } 203 + }; 204 + 205 static struct platform_device *ixdp425_devices[] __initdata = { 206 &ixdp425_i2c_gpio, 207 &ixdp425_flash, ··· 184 defined(CONFIG_MTD_NAND_PLATFORM_MODULE) 185 &ixdp425_flash_nand, 186 #endif 187 + &ixdp425_uart, 188 + &ixdp425_eth[0], 189 + &ixdp425_eth[1], 190 }; 191 192 static void __init ixdp425_init(void)
+741
arch/arm/mach-ixp4xx/ixp4xx_npe.c
···
··· 1 + /* 2 + * Intel IXP4xx Network Processor Engine driver for Linux 3 + * 4 + * Copyright (C) 2007 Krzysztof Halasa <khc@pm.waw.pl> 5 + * 6 + * This program is free software; you can redistribute it and/or modify it 7 + * under the terms of version 2 of the GNU General Public License 8 + * as published by the Free Software Foundation. 9 + * 10 + * The code is based on publicly available information: 11 + * - Intel IXP4xx Developer's Manual and other e-papers 12 + * - Intel IXP400 Access Library Software (BSD license) 13 + * - previous works by Christian Hohnstaedt <chohnstaedt@innominate.com> 14 + * Thanks, Christian. 15 + */ 16 + 17 + #include <linux/delay.h> 18 + #include <linux/dma-mapping.h> 19 + #include <linux/firmware.h> 20 + #include <linux/io.h> 21 + #include <linux/kernel.h> 22 + #include <linux/module.h> 23 + #include <linux/slab.h> 24 + #include <asm/arch/npe.h> 25 + 26 + #define DEBUG_MSG 0 27 + #define DEBUG_FW 0 28 + 29 + #define NPE_COUNT 3 30 + #define MAX_RETRIES 1000 /* microseconds */ 31 + #define NPE_42X_DATA_SIZE 0x800 /* in dwords */ 32 + #define NPE_46X_DATA_SIZE 0x1000 33 + #define NPE_A_42X_INSTR_SIZE 0x1000 34 + #define NPE_B_AND_C_42X_INSTR_SIZE 0x800 35 + #define NPE_46X_INSTR_SIZE 0x1000 36 + #define REGS_SIZE 0x1000 37 + 38 + #define NPE_PHYS_REG 32 39 + 40 + #define FW_MAGIC 0xFEEDF00D 41 + #define FW_BLOCK_TYPE_INSTR 0x0 42 + #define FW_BLOCK_TYPE_DATA 0x1 43 + #define FW_BLOCK_TYPE_EOF 0xF 44 + 45 + /* NPE exec status (read) and command (write) */ 46 + #define CMD_NPE_STEP 0x01 47 + #define CMD_NPE_START 0x02 48 + #define CMD_NPE_STOP 0x03 49 + #define CMD_NPE_CLR_PIPE 0x04 50 + #define CMD_CLR_PROFILE_CNT 0x0C 51 + #define CMD_RD_INS_MEM 0x10 /* instruction memory */ 52 + #define CMD_WR_INS_MEM 0x11 53 + #define CMD_RD_DATA_MEM 0x12 /* data memory */ 54 + #define CMD_WR_DATA_MEM 0x13 55 + #define CMD_RD_ECS_REG 0x14 /* exec access register */ 56 + #define CMD_WR_ECS_REG 0x15 57 + 58 + #define STAT_RUN 0x80000000 59 + #define STAT_STOP 0x40000000 60 + #define STAT_CLEAR 0x20000000 61 + #define STAT_ECS_K 0x00800000 /* pipeline clean */ 62 + 63 + #define NPE_STEVT 0x1B 64 + #define NPE_STARTPC 0x1C 65 + #define NPE_REGMAP 0x1E 66 + #define NPE_CINDEX 0x1F 67 + 68 + #define INSTR_WR_REG_SHORT 0x0000C000 69 + #define INSTR_WR_REG_BYTE 0x00004000 70 + #define INSTR_RD_FIFO 0x0F888220 71 + #define INSTR_RESET_MBOX 0x0FAC8210 72 + 73 + #define ECS_BG_CTXT_REG_0 0x00 /* Background Executing Context */ 74 + #define ECS_BG_CTXT_REG_1 0x01 /* Stack level */ 75 + #define ECS_BG_CTXT_REG_2 0x02 76 + #define ECS_PRI_1_CTXT_REG_0 0x04 /* Priority 1 Executing Context */ 77 + #define ECS_PRI_1_CTXT_REG_1 0x05 /* Stack level */ 78 + #define ECS_PRI_1_CTXT_REG_2 0x06 79 + #define ECS_PRI_2_CTXT_REG_0 0x08 /* Priority 2 Executing Context */ 80 + #define ECS_PRI_2_CTXT_REG_1 0x09 /* Stack level */ 81 + #define ECS_PRI_2_CTXT_REG_2 0x0A 82 + #define ECS_DBG_CTXT_REG_0 0x0C /* Debug Executing Context */ 83 + #define ECS_DBG_CTXT_REG_1 0x0D /* Stack level */ 84 + #define ECS_DBG_CTXT_REG_2 0x0E 85 + #define ECS_INSTRUCT_REG 0x11 /* NPE Instruction Register */ 86 + 87 + #define ECS_REG_0_ACTIVE 0x80000000 /* all levels */ 88 + #define ECS_REG_0_NEXTPC_MASK 0x1FFF0000 /* BG/PRI1/PRI2 levels */ 89 + #define ECS_REG_0_LDUR_BITS 8 90 + #define ECS_REG_0_LDUR_MASK 0x00000700 /* all levels */ 91 + #define ECS_REG_1_CCTXT_BITS 16 92 + #define ECS_REG_1_CCTXT_MASK 0x000F0000 /* all levels */ 93 + #define ECS_REG_1_SELCTXT_BITS 0 94 + #define ECS_REG_1_SELCTXT_MASK 0x0000000F /* all levels */ 95 + #define ECS_DBG_REG_2_IF 0x00100000 /* debug level */ 96 + #define ECS_DBG_REG_2_IE 0x00080000 /* debug level */ 97 + 98 + /* NPE watchpoint_fifo register bit */ 99 + #define WFIFO_VALID 0x80000000 100 + 101 + /* NPE messaging_status register bit definitions */ 102 + #define MSGSTAT_OFNE 0x00010000 /* OutFifoNotEmpty */ 103 + #define MSGSTAT_IFNF 0x00020000 /* InFifoNotFull */ 104 + #define MSGSTAT_OFNF 0x00040000 /* OutFifoNotFull */ 105 + #define MSGSTAT_IFNE 0x00080000 /* InFifoNotEmpty */ 106 + #define MSGSTAT_MBINT 0x00100000 /* Mailbox interrupt */ 107 + #define MSGSTAT_IFINT 0x00200000 /* InFifo interrupt */ 108 + #define MSGSTAT_OFINT 0x00400000 /* OutFifo interrupt */ 109 + #define MSGSTAT_WFINT 0x00800000 /* WatchFifo interrupt */ 110 + 111 + /* NPE messaging_control register bit definitions */ 112 + #define MSGCTL_OUT_FIFO 0x00010000 /* enable output FIFO */ 113 + #define MSGCTL_IN_FIFO 0x00020000 /* enable input FIFO */ 114 + #define MSGCTL_OUT_FIFO_WRITE 0x01000000 /* enable FIFO + WRITE */ 115 + #define MSGCTL_IN_FIFO_WRITE 0x02000000 116 + 117 + /* NPE mailbox_status value for reset */ 118 + #define RESET_MBOX_STAT 0x0000F0F0 119 + 120 + const char *npe_names[] = { "NPE-A", "NPE-B", "NPE-C" }; 121 + 122 + #define print_npe(pri, npe, fmt, ...) \ 123 + printk(pri "%s: " fmt, npe_name(npe), ## __VA_ARGS__) 124 + 125 + #if DEBUG_MSG 126 + #define debug_msg(npe, fmt, ...) \ 127 + print_npe(KERN_DEBUG, npe, fmt, ## __VA_ARGS__) 128 + #else 129 + #define debug_msg(npe, fmt, ...) 130 + #endif 131 + 132 + static struct { 133 + u32 reg, val; 134 + } ecs_reset[] = { 135 + { ECS_BG_CTXT_REG_0, 0xA0000000 }, 136 + { ECS_BG_CTXT_REG_1, 0x01000000 }, 137 + { ECS_BG_CTXT_REG_2, 0x00008000 }, 138 + { ECS_PRI_1_CTXT_REG_0, 0x20000080 }, 139 + { ECS_PRI_1_CTXT_REG_1, 0x01000000 }, 140 + { ECS_PRI_1_CTXT_REG_2, 0x00008000 }, 141 + { ECS_PRI_2_CTXT_REG_0, 0x20000080 }, 142 + { ECS_PRI_2_CTXT_REG_1, 0x01000000 }, 143 + { ECS_PRI_2_CTXT_REG_2, 0x00008000 }, 144 + { ECS_DBG_CTXT_REG_0, 0x20000000 }, 145 + { ECS_DBG_CTXT_REG_1, 0x00000000 }, 146 + { ECS_DBG_CTXT_REG_2, 0x001E0000 }, 147 + { ECS_INSTRUCT_REG, 0x1003C00F }, 148 + }; 149 + 150 + static struct npe npe_tab[NPE_COUNT] = { 151 + { 152 + .id = 0, 153 + .regs = (struct npe_regs __iomem *)IXP4XX_NPEA_BASE_VIRT, 154 + .regs_phys = IXP4XX_NPEA_BASE_PHYS, 155 + }, { 156 + .id = 1, 157 + .regs = (struct npe_regs __iomem *)IXP4XX_NPEB_BASE_VIRT, 158 + .regs_phys = IXP4XX_NPEB_BASE_PHYS, 159 + }, { 160 + .id = 2, 161 + .regs = (struct npe_regs __iomem *)IXP4XX_NPEC_BASE_VIRT, 162 + .regs_phys = IXP4XX_NPEC_BASE_PHYS, 163 + } 164 + }; 165 + 166 + int npe_running(struct npe *npe) 167 + { 168 + return (__raw_readl(&npe->regs->exec_status_cmd) & STAT_RUN) != 0; 169 + } 170 + 171 + static void npe_cmd_write(struct npe *npe, u32 addr, int cmd, u32 data) 172 + { 173 + __raw_writel(data, &npe->regs->exec_data); 174 + __raw_writel(addr, &npe->regs->exec_addr); 175 + __raw_writel(cmd, &npe->regs->exec_status_cmd); 176 + } 177 + 178 + static u32 npe_cmd_read(struct npe *npe, u32 addr, int cmd) 179 + { 180 + __raw_writel(addr, &npe->regs->exec_addr); 181 + __raw_writel(cmd, &npe->regs->exec_status_cmd); 182 + /* Iintroduce extra read cycles after issuing read command to NPE 183 + so that we read the register after the NPE has updated it. 184 + This is to overcome race condition between XScale and NPE */ 185 + __raw_readl(&npe->regs->exec_data); 186 + __raw_readl(&npe->regs->exec_data); 187 + return __raw_readl(&npe->regs->exec_data); 188 + } 189 + 190 + static void npe_clear_active(struct npe *npe, u32 reg) 191 + { 192 + u32 val = npe_cmd_read(npe, reg, CMD_RD_ECS_REG); 193 + npe_cmd_write(npe, reg, CMD_WR_ECS_REG, val & ~ECS_REG_0_ACTIVE); 194 + } 195 + 196 + static void npe_start(struct npe *npe) 197 + { 198 + /* ensure only Background Context Stack Level is active */ 199 + npe_clear_active(npe, ECS_PRI_1_CTXT_REG_0); 200 + npe_clear_active(npe, ECS_PRI_2_CTXT_REG_0); 201 + npe_clear_active(npe, ECS_DBG_CTXT_REG_0); 202 + 203 + __raw_writel(CMD_NPE_CLR_PIPE, &npe->regs->exec_status_cmd); 204 + __raw_writel(CMD_NPE_START, &npe->regs->exec_status_cmd); 205 + } 206 + 207 + static void npe_stop(struct npe *npe) 208 + { 209 + __raw_writel(CMD_NPE_STOP, &npe->regs->exec_status_cmd); 210 + __raw_writel(CMD_NPE_CLR_PIPE, &npe->regs->exec_status_cmd); /*FIXME?*/ 211 + } 212 + 213 + static int __must_check npe_debug_instr(struct npe *npe, u32 instr, u32 ctx, 214 + u32 ldur) 215 + { 216 + u32 wc; 217 + int i; 218 + 219 + /* set the Active bit, and the LDUR, in the debug level */ 220 + npe_cmd_write(npe, ECS_DBG_CTXT_REG_0, CMD_WR_ECS_REG, 221 + ECS_REG_0_ACTIVE | (ldur << ECS_REG_0_LDUR_BITS)); 222 + 223 + /* set CCTXT at ECS DEBUG L3 to specify in which context to execute 224 + the instruction, and set SELCTXT at ECS DEBUG Level to specify 225 + which context store to access. 226 + Debug ECS Level Reg 1 has form 0x000n000n, where n = context number 227 + */ 228 + npe_cmd_write(npe, ECS_DBG_CTXT_REG_1, CMD_WR_ECS_REG, 229 + (ctx << ECS_REG_1_CCTXT_BITS) | 230 + (ctx << ECS_REG_1_SELCTXT_BITS)); 231 + 232 + /* clear the pipeline */ 233 + __raw_writel(CMD_NPE_CLR_PIPE, &npe->regs->exec_status_cmd); 234 + 235 + /* load NPE instruction into the instruction register */ 236 + npe_cmd_write(npe, ECS_INSTRUCT_REG, CMD_WR_ECS_REG, instr); 237 + 238 + /* we need this value later to wait for completion of NPE execution 239 + step */ 240 + wc = __raw_readl(&npe->regs->watch_count); 241 + 242 + /* issue a Step One command via the Execution Control register */ 243 + __raw_writel(CMD_NPE_STEP, &npe->regs->exec_status_cmd); 244 + 245 + /* Watch Count register increments when NPE completes an instruction */ 246 + for (i = 0; i < MAX_RETRIES; i++) { 247 + if (wc != __raw_readl(&npe->regs->watch_count)) 248 + return 0; 249 + udelay(1); 250 + } 251 + 252 + print_npe(KERN_ERR, npe, "reset: npe_debug_instr(): timeout\n"); 253 + return -ETIMEDOUT; 254 + } 255 + 256 + static int __must_check npe_logical_reg_write8(struct npe *npe, u32 addr, 257 + u8 val, u32 ctx) 258 + { 259 + /* here we build the NPE assembler instruction: mov8 d0, #0 */ 260 + u32 instr = INSTR_WR_REG_BYTE | /* OpCode */ 261 + addr << 9 | /* base Operand */ 262 + (val & 0x1F) << 4 | /* lower 5 bits to immediate data */ 263 + (val & ~0x1F) << (18 - 5);/* higher 3 bits to CoProc instr. */ 264 + return npe_debug_instr(npe, instr, ctx, 1); /* execute it */ 265 + } 266 + 267 + static int __must_check npe_logical_reg_write16(struct npe *npe, u32 addr, 268 + u16 val, u32 ctx) 269 + { 270 + /* here we build the NPE assembler instruction: mov16 d0, #0 */ 271 + u32 instr = INSTR_WR_REG_SHORT | /* OpCode */ 272 + addr << 9 | /* base Operand */ 273 + (val & 0x1F) << 4 | /* lower 5 bits to immediate data */ 274 + (val & ~0x1F) << (18 - 5);/* higher 11 bits to CoProc instr. */ 275 + return npe_debug_instr(npe, instr, ctx, 1); /* execute it */ 276 + } 277 + 278 + static int __must_check npe_logical_reg_write32(struct npe *npe, u32 addr, 279 + u32 val, u32 ctx) 280 + { 281 + /* write in 16 bit steps first the high and then the low value */ 282 + if (npe_logical_reg_write16(npe, addr, val >> 16, ctx)) 283 + return -ETIMEDOUT; 284 + return npe_logical_reg_write16(npe, addr + 2, val & 0xFFFF, ctx); 285 + } 286 + 287 + static int npe_reset(struct npe *npe) 288 + { 289 + u32 val, ctl, exec_count, ctx_reg2; 290 + int i; 291 + 292 + ctl = (__raw_readl(&npe->regs->messaging_control) | 0x3F000000) & 293 + 0x3F3FFFFF; 294 + 295 + /* disable parity interrupt */ 296 + __raw_writel(ctl & 0x3F00FFFF, &npe->regs->messaging_control); 297 + 298 + /* pre exec - debug instruction */ 299 + /* turn off the halt bit by clearing Execution Count register. */ 300 + exec_count = __raw_readl(&npe->regs->exec_count); 301 + __raw_writel(0, &npe->regs->exec_count); 302 + /* ensure that IF and IE are on (temporarily), so that we don't end up 303 + stepping forever */ 304 + ctx_reg2 = npe_cmd_read(npe, ECS_DBG_CTXT_REG_2, CMD_RD_ECS_REG); 305 + npe_cmd_write(npe, ECS_DBG_CTXT_REG_2, CMD_WR_ECS_REG, ctx_reg2 | 306 + ECS_DBG_REG_2_IF | ECS_DBG_REG_2_IE); 307 + 308 + /* clear the FIFOs */ 309 + while (__raw_readl(&npe->regs->watchpoint_fifo) & WFIFO_VALID) 310 + ; 311 + while (__raw_readl(&npe->regs->messaging_status) & MSGSTAT_OFNE) 312 + /* read from the outFIFO until empty */ 313 + print_npe(KERN_DEBUG, npe, "npe_reset: read FIFO = 0x%X\n", 314 + __raw_readl(&npe->regs->in_out_fifo)); 315 + 316 + while (__raw_readl(&npe->regs->messaging_status) & MSGSTAT_IFNE) 317 + /* step execution of the NPE intruction to read inFIFO using 318 + the Debug Executing Context stack */ 319 + if (npe_debug_instr(npe, INSTR_RD_FIFO, 0, 0)) 320 + return -ETIMEDOUT; 321 + 322 + /* reset the mailbox reg from the XScale side */ 323 + __raw_writel(RESET_MBOX_STAT, &npe->regs->mailbox_status); 324 + /* from NPE side */ 325 + if (npe_debug_instr(npe, INSTR_RESET_MBOX, 0, 0)) 326 + return -ETIMEDOUT; 327 + 328 + /* Reset the physical registers in the NPE register file */ 329 + for (val = 0; val < NPE_PHYS_REG; val++) { 330 + if (npe_logical_reg_write16(npe, NPE_REGMAP, val >> 1, 0)) 331 + return -ETIMEDOUT; 332 + /* address is either 0 or 4 */ 333 + if (npe_logical_reg_write32(npe, (val & 1) * 4, 0, 0)) 334 + return -ETIMEDOUT; 335 + } 336 + 337 + /* Reset the context store = each context's Context Store registers */ 338 + 339 + /* Context 0 has no STARTPC. Instead, this value is used to set NextPC 340 + for Background ECS, to set where NPE starts executing code */ 341 + val = npe_cmd_read(npe, ECS_BG_CTXT_REG_0, CMD_RD_ECS_REG); 342 + val &= ~ECS_REG_0_NEXTPC_MASK; 343 + val |= (0 /* NextPC */ << 16) & ECS_REG_0_NEXTPC_MASK; 344 + npe_cmd_write(npe, ECS_BG_CTXT_REG_0, CMD_WR_ECS_REG, val); 345 + 346 + for (i = 0; i < 16; i++) { 347 + if (i) { /* Context 0 has no STEVT nor STARTPC */ 348 + /* STEVT = off, 0x80 */ 349 + if (npe_logical_reg_write8(npe, NPE_STEVT, 0x80, i)) 350 + return -ETIMEDOUT; 351 + if (npe_logical_reg_write16(npe, NPE_STARTPC, 0, i)) 352 + return -ETIMEDOUT; 353 + } 354 + /* REGMAP = d0->p0, d8->p2, d16->p4 */ 355 + if (npe_logical_reg_write16(npe, NPE_REGMAP, 0x820, i)) 356 + return -ETIMEDOUT; 357 + if (npe_logical_reg_write8(npe, NPE_CINDEX, 0, i)) 358 + return -ETIMEDOUT; 359 + } 360 + 361 + /* post exec */ 362 + /* clear active bit in debug level */ 363 + npe_cmd_write(npe, ECS_DBG_CTXT_REG_0, CMD_WR_ECS_REG, 0); 364 + /* clear the pipeline */ 365 + __raw_writel(CMD_NPE_CLR_PIPE, &npe->regs->exec_status_cmd); 366 + /* restore previous values */ 367 + __raw_writel(exec_count, &npe->regs->exec_count); 368 + npe_cmd_write(npe, ECS_DBG_CTXT_REG_2, CMD_WR_ECS_REG, ctx_reg2); 369 + 370 + /* write reset values to Execution Context Stack registers */ 371 + for (val = 0; val < ARRAY_SIZE(ecs_reset); val++) 372 + npe_cmd_write(npe, ecs_reset[val].reg, CMD_WR_ECS_REG, 373 + ecs_reset[val].val); 374 + 375 + /* clear the profile counter */ 376 + __raw_writel(CMD_CLR_PROFILE_CNT, &npe->regs->exec_status_cmd); 377 + 378 + __raw_writel(0, &npe->regs->exec_count); 379 + __raw_writel(0, &npe->regs->action_points[0]); 380 + __raw_writel(0, &npe->regs->action_points[1]); 381 + __raw_writel(0, &npe->regs->action_points[2]); 382 + __raw_writel(0, &npe->regs->action_points[3]); 383 + __raw_writel(0, &npe->regs->watch_count); 384 + 385 + val = ixp4xx_read_feature_bits(); 386 + /* reset the NPE */ 387 + ixp4xx_write_feature_bits(val & 388 + ~(IXP4XX_FEATURE_RESET_NPEA << npe->id)); 389 + for (i = 0; i < MAX_RETRIES; i++) { 390 + if (!(ixp4xx_read_feature_bits() & 391 + (IXP4XX_FEATURE_RESET_NPEA << npe->id))) 392 + break; /* reset completed */ 393 + udelay(1); 394 + } 395 + if (i == MAX_RETRIES) 396 + return -ETIMEDOUT; 397 + 398 + /* deassert reset */ 399 + ixp4xx_write_feature_bits(val | 400 + (IXP4XX_FEATURE_RESET_NPEA << npe->id)); 401 + for (i = 0; i < MAX_RETRIES; i++) { 402 + if (ixp4xx_read_feature_bits() & 403 + (IXP4XX_FEATURE_RESET_NPEA << npe->id)) 404 + break; /* NPE is back alive */ 405 + udelay(1); 406 + } 407 + if (i == MAX_RETRIES) 408 + return -ETIMEDOUT; 409 + 410 + npe_stop(npe); 411 + 412 + /* restore NPE configuration bus Control Register - parity settings */ 413 + __raw_writel(ctl, &npe->regs->messaging_control); 414 + return 0; 415 + } 416 + 417 + 418 + int npe_send_message(struct npe *npe, const void *msg, const char *what) 419 + { 420 + const u32 *send = msg; 421 + int cycles = 0; 422 + 423 + debug_msg(npe, "Trying to send message %s [%08X:%08X]\n", 424 + what, send[0], send[1]); 425 + 426 + if (__raw_readl(&npe->regs->messaging_status) & MSGSTAT_IFNE) { 427 + debug_msg(npe, "NPE input FIFO not empty\n"); 428 + return -EIO; 429 + } 430 + 431 + __raw_writel(send[0], &npe->regs->in_out_fifo); 432 + 433 + if (!(__raw_readl(&npe->regs->messaging_status) & MSGSTAT_IFNF)) { 434 + debug_msg(npe, "NPE input FIFO full\n"); 435 + return -EIO; 436 + } 437 + 438 + __raw_writel(send[1], &npe->regs->in_out_fifo); 439 + 440 + while ((cycles < MAX_RETRIES) && 441 + (__raw_readl(&npe->regs->messaging_status) & MSGSTAT_IFNE)) { 442 + udelay(1); 443 + cycles++; 444 + } 445 + 446 + if (cycles == MAX_RETRIES) { 447 + debug_msg(npe, "Timeout sending message\n"); 448 + return -ETIMEDOUT; 449 + } 450 + 451 + debug_msg(npe, "Sending a message took %i cycles\n", cycles); 452 + return 0; 453 + } 454 + 455 + int npe_recv_message(struct npe *npe, void *msg, const char *what) 456 + { 457 + u32 *recv = msg; 458 + int cycles = 0, cnt = 0; 459 + 460 + debug_msg(npe, "Trying to receive message %s\n", what); 461 + 462 + while (cycles < MAX_RETRIES) { 463 + if (__raw_readl(&npe->regs->messaging_status) & MSGSTAT_OFNE) { 464 + recv[cnt++] = __raw_readl(&npe->regs->in_out_fifo); 465 + if (cnt == 2) 466 + break; 467 + } else { 468 + udelay(1); 469 + cycles++; 470 + } 471 + } 472 + 473 + switch(cnt) { 474 + case 1: 475 + debug_msg(npe, "Received [%08X]\n", recv[0]); 476 + break; 477 + case 2: 478 + debug_msg(npe, "Received [%08X:%08X]\n", recv[0], recv[1]); 479 + break; 480 + } 481 + 482 + if (cycles == MAX_RETRIES) { 483 + debug_msg(npe, "Timeout waiting for message\n"); 484 + return -ETIMEDOUT; 485 + } 486 + 487 + debug_msg(npe, "Receiving a message took %i cycles\n", cycles); 488 + return 0; 489 + } 490 + 491 + int npe_send_recv_message(struct npe *npe, void *msg, const char *what) 492 + { 493 + int result; 494 + u32 *send = msg, recv[2]; 495 + 496 + if ((result = npe_send_message(npe, msg, what)) != 0) 497 + return result; 498 + if ((result = npe_recv_message(npe, recv, what)) != 0) 499 + return result; 500 + 501 + if ((recv[0] != send[0]) || (recv[1] != send[1])) { 502 + debug_msg(npe, "Message %s: unexpected message received\n", 503 + what); 504 + return -EIO; 505 + } 506 + return 0; 507 + } 508 + 509 + 510 + int npe_load_firmware(struct npe *npe, const char *name, struct device *dev) 511 + { 512 + const struct firmware *fw_entry; 513 + 514 + struct dl_block { 515 + u32 type; 516 + u32 offset; 517 + } *blk; 518 + 519 + struct dl_image { 520 + u32 magic; 521 + u32 id; 522 + u32 size; 523 + union { 524 + u32 data[0]; 525 + struct dl_block blocks[0]; 526 + }; 527 + } *image; 528 + 529 + struct dl_codeblock { 530 + u32 npe_addr; 531 + u32 size; 532 + u32 data[0]; 533 + } *cb; 534 + 535 + int i, j, err, data_size, instr_size, blocks, table_end; 536 + u32 cmd; 537 + 538 + if ((err = request_firmware(&fw_entry, name, dev)) != 0) 539 + return err; 540 + 541 + err = -EINVAL; 542 + if (fw_entry->size < sizeof(struct dl_image)) { 543 + print_npe(KERN_ERR, npe, "incomplete firmware file\n"); 544 + goto err; 545 + } 546 + image = (struct dl_image*)fw_entry->data; 547 + 548 + #if DEBUG_FW 549 + print_npe(KERN_DEBUG, npe, "firmware: %08X %08X %08X (0x%X bytes)\n", 550 + image->magic, image->id, image->size, image->size * 4); 551 + #endif 552 + 553 + if (image->magic == swab32(FW_MAGIC)) { /* swapped file */ 554 + image->id = swab32(image->id); 555 + image->size = swab32(image->size); 556 + } else if (image->magic != FW_MAGIC) { 557 + print_npe(KERN_ERR, npe, "bad firmware file magic: 0x%X\n", 558 + image->magic); 559 + goto err; 560 + } 561 + if ((image->size * 4 + sizeof(struct dl_image)) != fw_entry->size) { 562 + print_npe(KERN_ERR, npe, 563 + "inconsistent size of firmware file\n"); 564 + goto err; 565 + } 566 + if (((image->id >> 24) & 0xF /* NPE ID */) != npe->id) { 567 + print_npe(KERN_ERR, npe, "firmware file NPE ID mismatch\n"); 568 + goto err; 569 + } 570 + if (image->magic == swab32(FW_MAGIC)) 571 + for (i = 0; i < image->size; i++) 572 + image->data[i] = swab32(image->data[i]); 573 + 574 + if (!cpu_is_ixp46x() && ((image->id >> 28) & 0xF /* device ID */)) { 575 + print_npe(KERN_INFO, npe, "IXP46x firmware ignored on " 576 + "IXP42x\n"); 577 + goto err; 578 + } 579 + 580 + if (npe_running(npe)) { 581 + print_npe(KERN_INFO, npe, "unable to load firmware, NPE is " 582 + "already running\n"); 583 + err = -EBUSY; 584 + goto err; 585 + } 586 + #if 0 587 + npe_stop(npe); 588 + npe_reset(npe); 589 + #endif 590 + 591 + print_npe(KERN_INFO, npe, "firmware functionality 0x%X, " 592 + "revision 0x%X:%X\n", (image->id >> 16) & 0xFF, 593 + (image->id >> 8) & 0xFF, image->id & 0xFF); 594 + 595 + if (!cpu_is_ixp46x()) { 596 + if (!npe->id) 597 + instr_size = NPE_A_42X_INSTR_SIZE; 598 + else 599 + instr_size = NPE_B_AND_C_42X_INSTR_SIZE; 600 + data_size = NPE_42X_DATA_SIZE; 601 + } else { 602 + instr_size = NPE_46X_INSTR_SIZE; 603 + data_size = NPE_46X_DATA_SIZE; 604 + } 605 + 606 + for (blocks = 0; blocks * sizeof(struct dl_block) / 4 < image->size; 607 + blocks++) 608 + if (image->blocks[blocks].type == FW_BLOCK_TYPE_EOF) 609 + break; 610 + if (blocks * sizeof(struct dl_block) / 4 >= image->size) { 611 + print_npe(KERN_INFO, npe, "firmware EOF block marker not " 612 + "found\n"); 613 + goto err; 614 + } 615 + 616 + #if DEBUG_FW 617 + print_npe(KERN_DEBUG, npe, "%i firmware blocks found\n", blocks); 618 + #endif 619 + 620 + table_end = blocks * sizeof(struct dl_block) / 4 + 1 /* EOF marker */; 621 + for (i = 0, blk = image->blocks; i < blocks; i++, blk++) { 622 + if (blk->offset > image->size - sizeof(struct dl_codeblock) / 4 623 + || blk->offset < table_end) { 624 + print_npe(KERN_INFO, npe, "invalid offset 0x%X of " 625 + "firmware block #%i\n", blk->offset, i); 626 + goto err; 627 + } 628 + 629 + cb = (struct dl_codeblock*)&image->data[blk->offset]; 630 + if (blk->type == FW_BLOCK_TYPE_INSTR) { 631 + if (cb->npe_addr + cb->size > instr_size) 632 + goto too_big; 633 + cmd = CMD_WR_INS_MEM; 634 + } else if (blk->type == FW_BLOCK_TYPE_DATA) { 635 + if (cb->npe_addr + cb->size > data_size) 636 + goto too_big; 637 + cmd = CMD_WR_DATA_MEM; 638 + } else { 639 + print_npe(KERN_INFO, npe, "invalid firmware block #%i " 640 + "type 0x%X\n", i, blk->type); 641 + goto err; 642 + } 643 + if (blk->offset + sizeof(*cb) / 4 + cb->size > image->size) { 644 + print_npe(KERN_INFO, npe, "firmware block #%i doesn't " 645 + "fit in firmware image: type %c, start 0x%X," 646 + " length 0x%X\n", i, 647 + blk->type == FW_BLOCK_TYPE_INSTR ? 'I' : 'D', 648 + cb->npe_addr, cb->size); 649 + goto err; 650 + } 651 + 652 + for (j = 0; j < cb->size; j++) 653 + npe_cmd_write(npe, cb->npe_addr + j, cmd, cb->data[j]); 654 + } 655 + 656 + npe_start(npe); 657 + if (!npe_running(npe)) 658 + print_npe(KERN_ERR, npe, "unable to start\n"); 659 + release_firmware(fw_entry); 660 + return 0; 661 + 662 + too_big: 663 + print_npe(KERN_INFO, npe, "firmware block #%i doesn't fit in NPE " 664 + "memory: type %c, start 0x%X, length 0x%X\n", i, 665 + blk->type == FW_BLOCK_TYPE_INSTR ? 'I' : 'D', 666 + cb->npe_addr, cb->size); 667 + err: 668 + release_firmware(fw_entry); 669 + return err; 670 + } 671 + 672 + 673 + struct npe *npe_request(int id) 674 + { 675 + if (id < NPE_COUNT) 676 + if (npe_tab[id].valid) 677 + if (try_module_get(THIS_MODULE)) 678 + return &npe_tab[id]; 679 + return NULL; 680 + } 681 + 682 + void npe_release(struct npe *npe) 683 + { 684 + module_put(THIS_MODULE); 685 + } 686 + 687 + 688 + static int __init npe_init_module(void) 689 + { 690 + 691 + int i, found = 0; 692 + 693 + for (i = 0; i < NPE_COUNT; i++) { 694 + struct npe *npe = &npe_tab[i]; 695 + if (!(ixp4xx_read_feature_bits() & 696 + (IXP4XX_FEATURE_RESET_NPEA << i))) 697 + continue; /* NPE already disabled or not present */ 698 + if (!(npe->mem_res = request_mem_region(npe->regs_phys, 699 + REGS_SIZE, 700 + npe_name(npe)))) { 701 + print_npe(KERN_ERR, npe, 702 + "failed to request memory region\n"); 703 + continue; 704 + } 705 + 706 + if (npe_reset(npe)) 707 + continue; 708 + npe->valid = 1; 709 + found++; 710 + } 711 + 712 + if (!found) 713 + return -ENOSYS; 714 + return 0; 715 + } 716 + 717 + static void __exit npe_cleanup_module(void) 718 + { 719 + int i; 720 + 721 + for (i = 0; i < NPE_COUNT; i++) 722 + if (npe_tab[i].mem_res) { 723 + npe_reset(&npe_tab[i]); 724 + release_resource(npe_tab[i].mem_res); 725 + } 726 + } 727 + 728 + module_init(npe_init_module); 729 + module_exit(npe_cleanup_module); 730 + 731 + MODULE_AUTHOR("Krzysztof Halasa"); 732 + MODULE_LICENSE("GPL v2"); 733 + 734 + EXPORT_SYMBOL(npe_names); 735 + EXPORT_SYMBOL(npe_running); 736 + EXPORT_SYMBOL(npe_request); 737 + EXPORT_SYMBOL(npe_release); 738 + EXPORT_SYMBOL(npe_load_firmware); 739 + EXPORT_SYMBOL(npe_send_message); 740 + EXPORT_SYMBOL(npe_recv_message); 741 + EXPORT_SYMBOL(npe_send_recv_message);
+274
arch/arm/mach-ixp4xx/ixp4xx_qmgr.c
···
··· 1 + /* 2 + * Intel IXP4xx Queue Manager driver for Linux 3 + * 4 + * Copyright (C) 2007 Krzysztof Halasa <khc@pm.waw.pl> 5 + * 6 + * This program is free software; you can redistribute it and/or modify it 7 + * under the terms of version 2 of the GNU General Public License 8 + * as published by the Free Software Foundation. 9 + */ 10 + 11 + #include <linux/ioport.h> 12 + #include <linux/interrupt.h> 13 + #include <linux/kernel.h> 14 + #include <linux/module.h> 15 + #include <asm/arch/qmgr.h> 16 + 17 + #define DEBUG 0 18 + 19 + struct qmgr_regs __iomem *qmgr_regs; 20 + static struct resource *mem_res; 21 + static spinlock_t qmgr_lock; 22 + static u32 used_sram_bitmap[4]; /* 128 16-dword pages */ 23 + static void (*irq_handlers[HALF_QUEUES])(void *pdev); 24 + static void *irq_pdevs[HALF_QUEUES]; 25 + 26 + void qmgr_set_irq(unsigned int queue, int src, 27 + void (*handler)(void *pdev), void *pdev) 28 + { 29 + u32 __iomem *reg = &qmgr_regs->irqsrc[queue / 8]; /* 8 queues / u32 */ 30 + int bit = (queue % 8) * 4; /* 3 bits + 1 reserved bit per queue */ 31 + unsigned long flags; 32 + 33 + src &= 7; 34 + spin_lock_irqsave(&qmgr_lock, flags); 35 + __raw_writel((__raw_readl(reg) & ~(7 << bit)) | (src << bit), reg); 36 + irq_handlers[queue] = handler; 37 + irq_pdevs[queue] = pdev; 38 + spin_unlock_irqrestore(&qmgr_lock, flags); 39 + } 40 + 41 + 42 + static irqreturn_t qmgr_irq1(int irq, void *pdev) 43 + { 44 + int i; 45 + u32 val = __raw_readl(&qmgr_regs->irqstat[0]); 46 + __raw_writel(val, &qmgr_regs->irqstat[0]); /* ACK */ 47 + 48 + for (i = 0; i < HALF_QUEUES; i++) 49 + if (val & (1 << i)) 50 + irq_handlers[i](irq_pdevs[i]); 51 + 52 + return val ? IRQ_HANDLED : 0; 53 + } 54 + 55 + 56 + void qmgr_enable_irq(unsigned int queue) 57 + { 58 + unsigned long flags; 59 + 60 + spin_lock_irqsave(&qmgr_lock, flags); 61 + __raw_writel(__raw_readl(&qmgr_regs->irqen[0]) | (1 << queue), 62 + &qmgr_regs->irqen[0]); 63 + spin_unlock_irqrestore(&qmgr_lock, flags); 64 + } 65 + 66 + void qmgr_disable_irq(unsigned int queue) 67 + { 68 + unsigned long flags; 69 + 70 + spin_lock_irqsave(&qmgr_lock, flags); 71 + __raw_writel(__raw_readl(&qmgr_regs->irqen[0]) & ~(1 << queue), 72 + &qmgr_regs->irqen[0]); 73 + spin_unlock_irqrestore(&qmgr_lock, flags); 74 + } 75 + 76 + static inline void shift_mask(u32 *mask) 77 + { 78 + mask[3] = mask[3] << 1 | mask[2] >> 31; 79 + mask[2] = mask[2] << 1 | mask[1] >> 31; 80 + mask[1] = mask[1] << 1 | mask[0] >> 31; 81 + mask[0] <<= 1; 82 + } 83 + 84 + int qmgr_request_queue(unsigned int queue, unsigned int len /* dwords */, 85 + unsigned int nearly_empty_watermark, 86 + unsigned int nearly_full_watermark) 87 + { 88 + u32 cfg, addr = 0, mask[4]; /* in 16-dwords */ 89 + int err; 90 + 91 + if (queue >= HALF_QUEUES) 92 + return -ERANGE; 93 + 94 + if ((nearly_empty_watermark | nearly_full_watermark) & ~7) 95 + return -EINVAL; 96 + 97 + switch (len) { 98 + case 16: 99 + cfg = 0 << 24; 100 + mask[0] = 0x1; 101 + break; 102 + case 32: 103 + cfg = 1 << 24; 104 + mask[0] = 0x3; 105 + break; 106 + case 64: 107 + cfg = 2 << 24; 108 + mask[0] = 0xF; 109 + break; 110 + case 128: 111 + cfg = 3 << 24; 112 + mask[0] = 0xFF; 113 + break; 114 + default: 115 + return -EINVAL; 116 + } 117 + 118 + cfg |= nearly_empty_watermark << 26; 119 + cfg |= nearly_full_watermark << 29; 120 + len /= 16; /* in 16-dwords: 1, 2, 4 or 8 */ 121 + mask[1] = mask[2] = mask[3] = 0; 122 + 123 + if (!try_module_get(THIS_MODULE)) 124 + return -ENODEV; 125 + 126 + spin_lock_irq(&qmgr_lock); 127 + if (__raw_readl(&qmgr_regs->sram[queue])) { 128 + err = -EBUSY; 129 + goto err; 130 + } 131 + 132 + while (1) { 133 + if (!(used_sram_bitmap[0] & mask[0]) && 134 + !(used_sram_bitmap[1] & mask[1]) && 135 + !(used_sram_bitmap[2] & mask[2]) && 136 + !(used_sram_bitmap[3] & mask[3])) 137 + break; /* found free space */ 138 + 139 + addr++; 140 + shift_mask(mask); 141 + if (addr + len > ARRAY_SIZE(qmgr_regs->sram)) { 142 + printk(KERN_ERR "qmgr: no free SRAM space for" 143 + " queue %i\n", queue); 144 + err = -ENOMEM; 145 + goto err; 146 + } 147 + } 148 + 149 + used_sram_bitmap[0] |= mask[0]; 150 + used_sram_bitmap[1] |= mask[1]; 151 + used_sram_bitmap[2] |= mask[2]; 152 + used_sram_bitmap[3] |= mask[3]; 153 + __raw_writel(cfg | (addr << 14), &qmgr_regs->sram[queue]); 154 + spin_unlock_irq(&qmgr_lock); 155 + 156 + #if DEBUG 157 + printk(KERN_DEBUG "qmgr: requested queue %i, addr = 0x%02X\n", 158 + queue, addr); 159 + #endif 160 + return 0; 161 + 162 + err: 163 + spin_unlock_irq(&qmgr_lock); 164 + module_put(THIS_MODULE); 165 + return err; 166 + } 167 + 168 + void qmgr_release_queue(unsigned int queue) 169 + { 170 + u32 cfg, addr, mask[4]; 171 + 172 + BUG_ON(queue >= HALF_QUEUES); /* not in valid range */ 173 + 174 + spin_lock_irq(&qmgr_lock); 175 + cfg = __raw_readl(&qmgr_regs->sram[queue]); 176 + addr = (cfg >> 14) & 0xFF; 177 + 178 + BUG_ON(!addr); /* not requested */ 179 + 180 + switch ((cfg >> 24) & 3) { 181 + case 0: mask[0] = 0x1; break; 182 + case 1: mask[0] = 0x3; break; 183 + case 2: mask[0] = 0xF; break; 184 + case 3: mask[0] = 0xFF; break; 185 + } 186 + 187 + while (addr--) 188 + shift_mask(mask); 189 + 190 + __raw_writel(0, &qmgr_regs->sram[queue]); 191 + 192 + used_sram_bitmap[0] &= ~mask[0]; 193 + used_sram_bitmap[1] &= ~mask[1]; 194 + used_sram_bitmap[2] &= ~mask[2]; 195 + used_sram_bitmap[3] &= ~mask[3]; 196 + irq_handlers[queue] = NULL; /* catch IRQ bugs */ 197 + spin_unlock_irq(&qmgr_lock); 198 + 199 + module_put(THIS_MODULE); 200 + #if DEBUG 201 + printk(KERN_DEBUG "qmgr: released queue %i\n", queue); 202 + #endif 203 + } 204 + 205 + static int qmgr_init(void) 206 + { 207 + int i, err; 208 + mem_res = request_mem_region(IXP4XX_QMGR_BASE_PHYS, 209 + IXP4XX_QMGR_REGION_SIZE, 210 + "IXP4xx Queue Manager"); 211 + if (mem_res == NULL) 212 + return -EBUSY; 213 + 214 + qmgr_regs = ioremap(IXP4XX_QMGR_BASE_PHYS, IXP4XX_QMGR_REGION_SIZE); 215 + if (qmgr_regs == NULL) { 216 + err = -ENOMEM; 217 + goto error_map; 218 + } 219 + 220 + /* reset qmgr registers */ 221 + for (i = 0; i < 4; i++) { 222 + __raw_writel(0x33333333, &qmgr_regs->stat1[i]); 223 + __raw_writel(0, &qmgr_regs->irqsrc[i]); 224 + } 225 + for (i = 0; i < 2; i++) { 226 + __raw_writel(0, &qmgr_regs->stat2[i]); 227 + __raw_writel(0xFFFFFFFF, &qmgr_regs->irqstat[i]); /* clear */ 228 + __raw_writel(0, &qmgr_regs->irqen[i]); 229 + } 230 + 231 + for (i = 0; i < QUEUES; i++) 232 + __raw_writel(0, &qmgr_regs->sram[i]); 233 + 234 + err = request_irq(IRQ_IXP4XX_QM1, qmgr_irq1, 0, 235 + "IXP4xx Queue Manager", NULL); 236 + if (err) { 237 + printk(KERN_ERR "qmgr: failed to request IRQ%i\n", 238 + IRQ_IXP4XX_QM1); 239 + goto error_irq; 240 + } 241 + 242 + used_sram_bitmap[0] = 0xF; /* 4 first pages reserved for config */ 243 + spin_lock_init(&qmgr_lock); 244 + 245 + printk(KERN_INFO "IXP4xx Queue Manager initialized.\n"); 246 + return 0; 247 + 248 + error_irq: 249 + iounmap(qmgr_regs); 250 + error_map: 251 + release_mem_region(IXP4XX_QMGR_BASE_PHYS, IXP4XX_QMGR_REGION_SIZE); 252 + return err; 253 + } 254 + 255 + static void qmgr_remove(void) 256 + { 257 + free_irq(IRQ_IXP4XX_QM1, NULL); 258 + synchronize_irq(IRQ_IXP4XX_QM1); 259 + iounmap(qmgr_regs); 260 + release_mem_region(IXP4XX_QMGR_BASE_PHYS, IXP4XX_QMGR_REGION_SIZE); 261 + } 262 + 263 + module_init(qmgr_init); 264 + module_exit(qmgr_remove); 265 + 266 + MODULE_LICENSE("GPL v2"); 267 + MODULE_AUTHOR("Krzysztof Halasa"); 268 + 269 + EXPORT_SYMBOL(qmgr_regs); 270 + EXPORT_SYMBOL(qmgr_set_irq); 271 + EXPORT_SYMBOL(qmgr_enable_irq); 272 + EXPORT_SYMBOL(qmgr_disable_irq); 273 + EXPORT_SYMBOL(qmgr_request_queue); 274 + EXPORT_SYMBOL(qmgr_release_queue);
-69
arch/arm/mach-ixp4xx/nas100d-power.c
··· 1 - /* 2 - * arch/arm/mach-ixp4xx/nas100d-power.c 3 - * 4 - * NAS 100d Power/Reset driver 5 - * 6 - * Copyright (C) 2005 Tower Technologies 7 - * 8 - * based on nas100d-io.c 9 - * Copyright (C) 2004 Karen Spearel 10 - * 11 - * Author: Alessandro Zummo <a.zummo@towertech.it> 12 - * Maintainers: http://www.nslu2-linux.org/ 13 - * 14 - * This program is free software; you can redistribute it and/or modify 15 - * it under the terms of the GNU General Public License version 2 as 16 - * published by the Free Software Foundation. 17 - * 18 - */ 19 - 20 - #include <linux/interrupt.h> 21 - #include <linux/irq.h> 22 - #include <linux/module.h> 23 - #include <linux/reboot.h> 24 - 25 - #include <asm/mach-types.h> 26 - 27 - static irqreturn_t nas100d_reset_handler(int irq, void *dev_id) 28 - { 29 - /* Signal init to do the ctrlaltdel action, this will bypass init if 30 - * it hasn't started and do a kernel_restart. 31 - */ 32 - ctrl_alt_del(); 33 - 34 - return IRQ_HANDLED; 35 - } 36 - 37 - static int __init nas100d_power_init(void) 38 - { 39 - if (!(machine_is_nas100d())) 40 - return 0; 41 - 42 - set_irq_type(NAS100D_RB_IRQ, IRQT_LOW); 43 - 44 - if (request_irq(NAS100D_RB_IRQ, &nas100d_reset_handler, 45 - IRQF_DISABLED, "NAS100D reset button", NULL) < 0) { 46 - 47 - printk(KERN_DEBUG "Reset Button IRQ %d not available\n", 48 - NAS100D_RB_IRQ); 49 - 50 - return -EIO; 51 - } 52 - 53 - return 0; 54 - } 55 - 56 - static void __exit nas100d_power_exit(void) 57 - { 58 - if (!(machine_is_nas100d())) 59 - return; 60 - 61 - free_irq(NAS100D_RB_IRQ, NULL); 62 - } 63 - 64 - module_init(nas100d_power_init); 65 - module_exit(nas100d_power_exit); 66 - 67 - MODULE_AUTHOR("Alessandro Zummo <a.zummo@towertech.it>"); 68 - MODULE_DESCRIPTION("NAS100D Power/Reset driver"); 69 - MODULE_LICENSE("GPL");
···
+161 -29
arch/arm/mach-ixp4xx/nas100d-setup.c
··· 3 * 4 * NAS 100d board-setup 5 * 6 - * based ixdp425-setup.c: 7 * Copyright (C) 2003-2004 MontaVista Software, Inc. 8 * 9 * Author: Alessandro Zummo <a.zummo@towertech.it> 10 * Author: Rod Whitby <rod@whitby.id.au> ··· 18 * 19 */ 20 21 - #include <linux/kernel.h> 22 #include <linux/serial.h> 23 #include <linux/serial_8250.h> 24 #include <linux/leds.h> 25 #include <linux/i2c-gpio.h> 26 27 #include <asm/mach-types.h> 28 #include <asm/mach/arch.h> 29 #include <asm/mach/flash.h> 30 31 static struct flash_platform_data nas100d_flash_data = { 32 .map_name = "cfi_probe", ··· 52 .resource = &nas100d_flash_resource, 53 }; 54 55 - #ifdef CONFIG_LEDS_IXP4XX 56 - static struct resource nas100d_led_resources[] = { 57 { 58 - .name = "wlan", /* green led */ 59 - .start = 0, 60 - .end = 0, 61 - .flags = IXP4XX_GPIO_LOW, 62 - }, 63 - { 64 - .name = "ready", /* blue power led (off is flashing!) */ 65 - .start = 15, 66 - .end = 15, 67 - .flags = IXP4XX_GPIO_LOW, 68 - }, 69 - { 70 - .name = "disk", /* yellow led */ 71 - .start = 3, 72 - .end = 3, 73 - .flags = IXP4XX_GPIO_LOW, 74 }, 75 }; 76 77 - static struct platform_device nas100d_leds = { 78 - .name = "IXP4XX-GPIO-LED", 79 - .id = -1, 80 - .num_resources = ARRAY_SIZE(nas100d_led_resources), 81 - .resource = nas100d_led_resources, 82 }; 83 - #endif 84 85 static struct i2c_gpio_platform_data nas100d_i2c_gpio_data = { 86 .sda_pin = NAS100D_SDA_PIN, ··· 143 .resource = nas100d_uart_resources, 144 }; 145 146 static struct platform_device *nas100d_devices[] __initdata = { 147 &nas100d_i2c_gpio, 148 &nas100d_flash, 149 - #ifdef CONFIG_LEDS_IXP4XX 150 &nas100d_leds, 151 - #endif 152 }; 153 154 static void nas100d_power_off(void) ··· 178 gpio_line_set(NAS100D_PO_GPIO, IXP4XX_GPIO_HIGH); 179 } 180 181 static void __init nas100d_init(void) 182 { 183 ixp4xx_sys_init(); 184 185 /* gpio 14 and 15 are _not_ clocks */ ··· 244 nas100d_flash_resource.end = 245 IXP4XX_EXP_BUS_BASE(0) + ixp4xx_exp_bus_size - 1; 246 247 - pm_power_off = nas100d_power_off; 248 249 /* 250 * This is only useful on a modified machine, but it is valuable ··· 255 (void)platform_device_register(&nas100d_uart); 256 257 platform_add_devices(nas100d_devices, ARRAY_SIZE(nas100d_devices)); 258 } 259 260 MACHINE_START(NAS100D, "Iomega NAS 100d")
··· 3 * 4 * NAS 100d board-setup 5 * 6 + * Copyright (C) 2008 Rod Whitby <rod@whitby.id.au> 7 + * 8 + * based on ixdp425-setup.c: 9 * Copyright (C) 2003-2004 MontaVista Software, Inc. 10 + * based on nas100d-power.c: 11 + * Copyright (C) 2005 Tower Technologies 12 + * based on nas100d-io.c 13 + * Copyright (C) 2004 Karen Spearel 14 * 15 * Author: Alessandro Zummo <a.zummo@towertech.it> 16 * Author: Rod Whitby <rod@whitby.id.au> ··· 12 * 13 */ 14 15 + #include <linux/if_ether.h> 16 + #include <linux/irq.h> 17 + #include <linux/jiffies.h> 18 + #include <linux/timer.h> 19 #include <linux/serial.h> 20 #include <linux/serial_8250.h> 21 #include <linux/leds.h> 22 + #include <linux/reboot.h> 23 + #include <linux/i2c.h> 24 #include <linux/i2c-gpio.h> 25 26 #include <asm/mach-types.h> 27 #include <asm/mach/arch.h> 28 #include <asm/mach/flash.h> 29 + #include <asm/io.h> 30 + #include <asm/gpio.h> 31 32 static struct flash_platform_data nas100d_flash_data = { 33 .map_name = "cfi_probe", ··· 39 .resource = &nas100d_flash_resource, 40 }; 41 42 + static struct i2c_board_info __initdata nas100d_i2c_board_info [] = { 43 { 44 + I2C_BOARD_INFO("rtc-pcf8563", 0x51), 45 }, 46 }; 47 48 + static struct gpio_led nas100d_led_pins[] = { 49 + { 50 + .name = "wlan", /* green led */ 51 + .gpio = NAS100D_LED_WLAN_GPIO, 52 + .active_low = true, 53 + }, 54 + { 55 + .name = "power", /* blue power led (off=flashing) */ 56 + .gpio = NAS100D_LED_PWR_GPIO, 57 + .active_low = true, 58 + }, 59 + { 60 + .name = "disk", /* yellow led */ 61 + .gpio = NAS100D_LED_DISK_GPIO, 62 + .active_low = true, 63 + }, 64 }; 65 + 66 + static struct gpio_led_platform_data nas100d_led_data = { 67 + .num_leds = ARRAY_SIZE(nas100d_led_pins), 68 + .leds = nas100d_led_pins, 69 + }; 70 + 71 + static struct platform_device nas100d_leds = { 72 + .name = "leds-gpio", 73 + .id = -1, 74 + .dev.platform_data = &nas100d_led_data, 75 + }; 76 77 static struct i2c_gpio_platform_data nas100d_i2c_gpio_data = { 78 .sda_pin = NAS100D_SDA_PIN, ··· 125 .resource = nas100d_uart_resources, 126 }; 127 128 + /* Built-in 10/100 Ethernet MAC interfaces */ 129 + static struct eth_plat_info nas100d_plat_eth[] = { 130 + { 131 + .phy = 0, 132 + .rxq = 3, 133 + .txreadyq = 20, 134 + } 135 + }; 136 + 137 + static struct platform_device nas100d_eth[] = { 138 + { 139 + .name = "ixp4xx_eth", 140 + .id = IXP4XX_ETH_NPEB, 141 + .dev.platform_data = nas100d_plat_eth, 142 + } 143 + }; 144 + 145 static struct platform_device *nas100d_devices[] __initdata = { 146 &nas100d_i2c_gpio, 147 &nas100d_flash, 148 &nas100d_leds, 149 + &nas100d_eth[0], 150 }; 151 152 static void nas100d_power_off(void) ··· 144 gpio_line_set(NAS100D_PO_GPIO, IXP4XX_GPIO_HIGH); 145 } 146 147 + /* This is used to make sure the power-button pusher is serious. The button 148 + * must be held until the value of this counter reaches zero. 149 + */ 150 + static int power_button_countdown; 151 + 152 + /* Must hold the button down for at least this many counts to be processed */ 153 + #define PBUTTON_HOLDDOWN_COUNT 4 /* 2 secs */ 154 + 155 + static void nas100d_power_handler(unsigned long data); 156 + static DEFINE_TIMER(nas100d_power_timer, nas100d_power_handler, 0, 0); 157 + 158 + static void nas100d_power_handler(unsigned long data) 159 + { 160 + /* This routine is called twice per second to check the 161 + * state of the power button. 162 + */ 163 + 164 + if (gpio_get_value(NAS100D_PB_GPIO)) { 165 + 166 + /* IO Pin is 1 (button pushed) */ 167 + if (power_button_countdown > 0) 168 + power_button_countdown--; 169 + 170 + } else { 171 + 172 + /* Done on button release, to allow for auto-power-on mods. */ 173 + if (power_button_countdown == 0) { 174 + /* Signal init to do the ctrlaltdel action, 175 + * this will bypass init if it hasn't started 176 + * and do a kernel_restart. 177 + */ 178 + ctrl_alt_del(); 179 + 180 + /* Change the state of the power LED to "blink" */ 181 + gpio_line_set(NAS100D_LED_PWR_GPIO, IXP4XX_GPIO_LOW); 182 + } else { 183 + power_button_countdown = PBUTTON_HOLDDOWN_COUNT; 184 + } 185 + } 186 + 187 + mod_timer(&nas100d_power_timer, jiffies + msecs_to_jiffies(500)); 188 + } 189 + 190 + static irqreturn_t nas100d_reset_handler(int irq, void *dev_id) 191 + { 192 + /* This is the paper-clip reset, it shuts the machine down directly. */ 193 + machine_power_off(); 194 + 195 + return IRQ_HANDLED; 196 + } 197 + 198 static void __init nas100d_init(void) 199 { 200 + DECLARE_MAC_BUF(mac_buf); 201 + uint8_t __iomem *f; 202 + int i; 203 + 204 ixp4xx_sys_init(); 205 206 /* gpio 14 and 15 are _not_ clocks */ ··· 155 nas100d_flash_resource.end = 156 IXP4XX_EXP_BUS_BASE(0) + ixp4xx_exp_bus_size - 1; 157 158 + i2c_register_board_info(0, nas100d_i2c_board_info, 159 + ARRAY_SIZE(nas100d_i2c_board_info)); 160 161 /* 162 * This is only useful on a modified machine, but it is valuable ··· 165 (void)platform_device_register(&nas100d_uart); 166 167 platform_add_devices(nas100d_devices, ARRAY_SIZE(nas100d_devices)); 168 + 169 + pm_power_off = nas100d_power_off; 170 + 171 + if (request_irq(gpio_to_irq(NAS100D_RB_GPIO), &nas100d_reset_handler, 172 + IRQF_DISABLED | IRQF_TRIGGER_LOW, 173 + "NAS100D reset button", NULL) < 0) { 174 + 175 + printk(KERN_DEBUG "Reset Button IRQ %d not available\n", 176 + gpio_to_irq(NAS100D_RB_GPIO)); 177 + } 178 + 179 + /* The power button on the Iomega NAS100d is on GPIO 14, but 180 + * it cannot handle interrupts on that GPIO line. So we'll 181 + * have to poll it with a kernel timer. 182 + */ 183 + 184 + /* Make sure that the power button GPIO is set up as an input */ 185 + gpio_line_config(NAS100D_PB_GPIO, IXP4XX_GPIO_IN); 186 + 187 + /* Set the initial value for the power button IRQ handler */ 188 + power_button_countdown = PBUTTON_HOLDDOWN_COUNT; 189 + 190 + mod_timer(&nas100d_power_timer, jiffies + msecs_to_jiffies(500)); 191 + 192 + /* 193 + * Map in a portion of the flash and read the MAC address. 194 + * Since it is stored in BE in the flash itself, we need to 195 + * byteswap it if we're in LE mode. 196 + */ 197 + f = ioremap(IXP4XX_EXP_BUS_BASE(0), 0x1000000); 198 + if (f) { 199 + for (i = 0; i < 6; i++) 200 + #ifdef __ARMEB__ 201 + nas100d_plat_eth[0].hwaddr[i] = readb(f + 0xFC0FD8 + i); 202 + #else 203 + nas100d_plat_eth[0].hwaddr[i] = readb(f + 0xFC0FD8 + (i^3)); 204 + #endif 205 + iounmap(f); 206 + } 207 + printk(KERN_INFO "NAS100D: Using MAC address %s for port 0\n", 208 + print_mac(mac_buf, nas100d_plat_eth[0].hwaddr)); 209 + 210 } 211 212 MACHINE_START(NAS100D, "Iomega NAS 100d")
-91
arch/arm/mach-ixp4xx/nslu2-power.c
··· 1 - /* 2 - * arch/arm/mach-ixp4xx/nslu2-power.c 3 - * 4 - * NSLU2 Power/Reset driver 5 - * 6 - * Copyright (C) 2005 Tower Technologies 7 - * 8 - * based on nslu2-io.c 9 - * Copyright (C) 2004 Karen Spearel 10 - * 11 - * Author: Alessandro Zummo <a.zummo@towertech.it> 12 - * Maintainers: http://www.nslu2-linux.org/ 13 - * 14 - * This program is free software; you can redistribute it and/or modify 15 - * it under the terms of the GNU General Public License version 2 as 16 - * published by the Free Software Foundation. 17 - * 18 - */ 19 - 20 - #include <linux/module.h> 21 - #include <linux/reboot.h> 22 - #include <linux/irq.h> 23 - #include <linux/interrupt.h> 24 - 25 - #include <asm/mach-types.h> 26 - 27 - static irqreturn_t nslu2_power_handler(int irq, void *dev_id) 28 - { 29 - /* Signal init to do the ctrlaltdel action, this will bypass init if 30 - * it hasn't started and do a kernel_restart. 31 - */ 32 - ctrl_alt_del(); 33 - 34 - return IRQ_HANDLED; 35 - } 36 - 37 - static irqreturn_t nslu2_reset_handler(int irq, void *dev_id) 38 - { 39 - /* This is the paper-clip reset, it shuts the machine down directly. 40 - */ 41 - machine_power_off(); 42 - 43 - return IRQ_HANDLED; 44 - } 45 - 46 - static int __init nslu2_power_init(void) 47 - { 48 - if (!(machine_is_nslu2())) 49 - return 0; 50 - 51 - *IXP4XX_GPIO_GPISR = 0x20400000; /* read the 2 irqs to clr */ 52 - 53 - set_irq_type(NSLU2_RB_IRQ, IRQT_LOW); 54 - set_irq_type(NSLU2_PB_IRQ, IRQT_HIGH); 55 - 56 - if (request_irq(NSLU2_RB_IRQ, &nslu2_reset_handler, 57 - IRQF_DISABLED, "NSLU2 reset button", NULL) < 0) { 58 - 59 - printk(KERN_DEBUG "Reset Button IRQ %d not available\n", 60 - NSLU2_RB_IRQ); 61 - 62 - return -EIO; 63 - } 64 - 65 - if (request_irq(NSLU2_PB_IRQ, &nslu2_power_handler, 66 - IRQF_DISABLED, "NSLU2 power button", NULL) < 0) { 67 - 68 - printk(KERN_DEBUG "Power Button IRQ %d not available\n", 69 - NSLU2_PB_IRQ); 70 - 71 - return -EIO; 72 - } 73 - 74 - return 0; 75 - } 76 - 77 - static void __exit nslu2_power_exit(void) 78 - { 79 - if (!(machine_is_nslu2())) 80 - return; 81 - 82 - free_irq(NSLU2_RB_IRQ, NULL); 83 - free_irq(NSLU2_PB_IRQ, NULL); 84 - } 85 - 86 - module_init(nslu2_power_init); 87 - module_exit(nslu2_power_exit); 88 - 89 - MODULE_AUTHOR("Alessandro Zummo <a.zummo@towertech.it>"); 90 - MODULE_DESCRIPTION("NSLU2 Power/Reset driver"); 91 - MODULE_LICENSE("GPL");
···
+124 -37
arch/arm/mach-ixp4xx/nslu2-setup.c
··· 3 * 4 * NSLU2 board-setup 5 * 6 - * based ixdp425-setup.c: 7 * Copyright (C) 2003-2004 MontaVista Software, Inc. 8 * 9 * Author: Mark Rakes <mrakes at mac.com> 10 * Author: Rod Whitby <rod@whitby.id.au> 11 * Maintainers: http://www.nslu2-linux.org/ 12 * 13 - * Fixed missing init_time in MACHINE_START kas11 10/22/04 14 - * Changed to conform to new style __init ixdp425 kas11 10/22/04 15 */ 16 17 - #include <linux/kernel.h> 18 #include <linux/serial.h> 19 #include <linux/serial_8250.h> 20 #include <linux/leds.h> 21 #include <linux/i2c-gpio.h> 22 23 #include <asm/mach-types.h> 24 #include <asm/mach/arch.h> 25 #include <asm/mach/flash.h> 26 #include <asm/mach/time.h> 27 28 static struct flash_platform_data nslu2_flash_data = { 29 .map_name = "cfi_probe", ··· 55 .scl_pin = NSLU2_SCL_PIN, 56 }; 57 58 - #ifdef CONFIG_LEDS_IXP4XX 59 - static struct resource nslu2_led_resources[] = { 60 { 61 - .name = "ready", /* green led */ 62 - .start = NSLU2_LED_GRN_GPIO, 63 - .end = NSLU2_LED_GRN_GPIO, 64 - .flags = IXP4XX_GPIO_HIGH, 65 - }, 66 - { 67 - .name = "status", /* red led */ 68 - .start = NSLU2_LED_RED_GPIO, 69 - .end = NSLU2_LED_RED_GPIO, 70 - .flags = IXP4XX_GPIO_HIGH, 71 - }, 72 - { 73 - .name = "disk-1", 74 - .start = NSLU2_LED_DISK1_GPIO, 75 - .end = NSLU2_LED_DISK1_GPIO, 76 - .flags = IXP4XX_GPIO_LOW, 77 - }, 78 - { 79 - .name = "disk-2", 80 - .start = NSLU2_LED_DISK2_GPIO, 81 - .end = NSLU2_LED_DISK2_GPIO, 82 - .flags = IXP4XX_GPIO_LOW, 83 }, 84 }; 85 86 - static struct platform_device nslu2_leds = { 87 - .name = "IXP4XX-GPIO-LED", 88 - .id = -1, 89 - .num_resources = ARRAY_SIZE(nslu2_led_resources), 90 - .resource = nslu2_led_resources, 91 }; 92 - #endif 93 94 static struct platform_device nslu2_i2c_gpio = { 95 .name = "i2c-gpio", ··· 150 .resource = nslu2_uart_resources, 151 }; 152 153 static struct platform_device *nslu2_devices[] __initdata = { 154 &nslu2_i2c_gpio, 155 &nslu2_flash, 156 &nslu2_beeper, 157 - #ifdef CONFIG_LEDS_IXP4XX 158 &nslu2_leds, 159 - #endif 160 }; 161 162 static void nslu2_power_off(void) ··· 184 185 /* do the deed */ 186 gpio_line_set(NSLU2_PO_GPIO, IXP4XX_GPIO_HIGH); 187 } 188 189 static void __init nslu2_timer_init(void) ··· 220 221 static void __init nslu2_init(void) 222 { 223 ixp4xx_sys_init(); 224 225 nslu2_flash_resource.start = IXP4XX_EXP_BUS_BASE(0); 226 nslu2_flash_resource.end = 227 IXP4XX_EXP_BUS_BASE(0) + ixp4xx_exp_bus_size - 1; 228 229 - pm_power_off = nslu2_power_off; 230 231 /* 232 * This is only useful on a modified machine, but it is valuable ··· 241 (void)platform_device_register(&nslu2_uart); 242 243 platform_add_devices(nslu2_devices, ARRAY_SIZE(nslu2_devices)); 244 } 245 246 MACHINE_START(NSLU2, "Linksys NSLU2")
··· 3 * 4 * NSLU2 board-setup 5 * 6 + * Copyright (C) 2008 Rod Whitby <rod@whitby.id.au> 7 + * 8 + * based on ixdp425-setup.c: 9 * Copyright (C) 2003-2004 MontaVista Software, Inc. 10 + * based on nslu2-power.c: 11 + * Copyright (C) 2005 Tower Technologies 12 * 13 * Author: Mark Rakes <mrakes at mac.com> 14 * Author: Rod Whitby <rod@whitby.id.au> 15 + * Author: Alessandro Zummo <a.zummo@towertech.it> 16 * Maintainers: http://www.nslu2-linux.org/ 17 * 18 */ 19 20 + #include <linux/if_ether.h> 21 + #include <linux/irq.h> 22 #include <linux/serial.h> 23 #include <linux/serial_8250.h> 24 #include <linux/leds.h> 25 + #include <linux/reboot.h> 26 + #include <linux/i2c.h> 27 #include <linux/i2c-gpio.h> 28 29 #include <asm/mach-types.h> 30 #include <asm/mach/arch.h> 31 #include <asm/mach/flash.h> 32 #include <asm/mach/time.h> 33 + #include <asm/io.h> 34 + #include <asm/gpio.h> 35 36 static struct flash_platform_data nslu2_flash_data = { 37 .map_name = "cfi_probe", ··· 47 .scl_pin = NSLU2_SCL_PIN, 48 }; 49 50 + static struct i2c_board_info __initdata nslu2_i2c_board_info [] = { 51 { 52 + I2C_BOARD_INFO("rtc-x1205", 0x6f), 53 }, 54 }; 55 56 + static struct gpio_led nslu2_led_pins[] = { 57 + { 58 + .name = "ready", /* green led */ 59 + .gpio = NSLU2_LED_GRN_GPIO, 60 + }, 61 + { 62 + .name = "status", /* red led */ 63 + .gpio = NSLU2_LED_RED_GPIO, 64 + }, 65 + { 66 + .name = "disk-1", 67 + .gpio = NSLU2_LED_DISK1_GPIO, 68 + .active_low = true, 69 + }, 70 + { 71 + .name = "disk-2", 72 + .gpio = NSLU2_LED_DISK2_GPIO, 73 + .active_low = true, 74 + }, 75 }; 76 + 77 + static struct gpio_led_platform_data nslu2_led_data = { 78 + .num_leds = ARRAY_SIZE(nslu2_led_pins), 79 + .leds = nslu2_led_pins, 80 + }; 81 + 82 + static struct platform_device nslu2_leds = { 83 + .name = "leds-gpio", 84 + .id = -1, 85 + .dev.platform_data = &nslu2_led_data, 86 + }; 87 88 static struct platform_device nslu2_i2c_gpio = { 89 .name = "i2c-gpio", ··· 140 .resource = nslu2_uart_resources, 141 }; 142 143 + /* Built-in 10/100 Ethernet MAC interfaces */ 144 + static struct eth_plat_info nslu2_plat_eth[] = { 145 + { 146 + .phy = 1, 147 + .rxq = 3, 148 + .txreadyq = 20, 149 + } 150 + }; 151 + 152 + static struct platform_device nslu2_eth[] = { 153 + { 154 + .name = "ixp4xx_eth", 155 + .id = IXP4XX_ETH_NPEB, 156 + .dev.platform_data = nslu2_plat_eth, 157 + } 158 + }; 159 + 160 static struct platform_device *nslu2_devices[] __initdata = { 161 &nslu2_i2c_gpio, 162 &nslu2_flash, 163 &nslu2_beeper, 164 &nslu2_leds, 165 + &nslu2_eth[0], 166 }; 167 168 static void nslu2_power_off(void) ··· 158 159 /* do the deed */ 160 gpio_line_set(NSLU2_PO_GPIO, IXP4XX_GPIO_HIGH); 161 + } 162 + 163 + static irqreturn_t nslu2_power_handler(int irq, void *dev_id) 164 + { 165 + /* Signal init to do the ctrlaltdel action, this will bypass init if 166 + * it hasn't started and do a kernel_restart. 167 + */ 168 + ctrl_alt_del(); 169 + 170 + return IRQ_HANDLED; 171 + } 172 + 173 + static irqreturn_t nslu2_reset_handler(int irq, void *dev_id) 174 + { 175 + /* This is the paper-clip reset, it shuts the machine down directly. 176 + */ 177 + machine_power_off(); 178 + 179 + return IRQ_HANDLED; 180 } 181 182 static void __init nslu2_timer_init(void) ··· 175 176 static void __init nslu2_init(void) 177 { 178 + DECLARE_MAC_BUF(mac_buf); 179 + uint8_t __iomem *f; 180 + int i; 181 + 182 ixp4xx_sys_init(); 183 184 nslu2_flash_resource.start = IXP4XX_EXP_BUS_BASE(0); 185 nslu2_flash_resource.end = 186 IXP4XX_EXP_BUS_BASE(0) + ixp4xx_exp_bus_size - 1; 187 188 + i2c_register_board_info(0, nslu2_i2c_board_info, 189 + ARRAY_SIZE(nslu2_i2c_board_info)); 190 191 /* 192 * This is only useful on a modified machine, but it is valuable ··· 191 (void)platform_device_register(&nslu2_uart); 192 193 platform_add_devices(nslu2_devices, ARRAY_SIZE(nslu2_devices)); 194 + 195 + pm_power_off = nslu2_power_off; 196 + 197 + if (request_irq(gpio_to_irq(NSLU2_RB_GPIO), &nslu2_reset_handler, 198 + IRQF_DISABLED | IRQF_TRIGGER_LOW, 199 + "NSLU2 reset button", NULL) < 0) { 200 + 201 + printk(KERN_DEBUG "Reset Button IRQ %d not available\n", 202 + gpio_to_irq(NSLU2_RB_GPIO)); 203 + } 204 + 205 + if (request_irq(gpio_to_irq(NSLU2_PB_GPIO), &nslu2_power_handler, 206 + IRQF_DISABLED | IRQF_TRIGGER_HIGH, 207 + "NSLU2 power button", NULL) < 0) { 208 + 209 + printk(KERN_DEBUG "Power Button IRQ %d not available\n", 210 + gpio_to_irq(NSLU2_PB_GPIO)); 211 + } 212 + 213 + /* 214 + * Map in a portion of the flash and read the MAC address. 215 + * Since it is stored in BE in the flash itself, we need to 216 + * byteswap it if we're in LE mode. 217 + */ 218 + f = ioremap(IXP4XX_EXP_BUS_BASE(0), 0x40000); 219 + if (f) { 220 + for (i = 0; i < 6; i++) 221 + #ifdef __ARMEB__ 222 + nslu2_plat_eth[0].hwaddr[i] = readb(f + 0x3FFB0 + i); 223 + #else 224 + nslu2_plat_eth[0].hwaddr[i] = readb(f + 0x3FFB0 + (i^3)); 225 + #endif 226 + iounmap(f); 227 + } 228 + printk(KERN_INFO "NSLU2: Using MAC address %s for port 0\n", 229 + print_mac(mac_buf, nslu2_plat_eth[0].hwaddr)); 230 + 231 } 232 233 MACHINE_START(NSLU2, "Linksys NSLU2")
+1 -1
arch/arm/mach-pxa/Makefile
··· 6 obj-y += clock.o devices.o generic.o irq.o dma.o time.o 7 obj-$(CONFIG_PXA25x) += pxa25x.o 8 obj-$(CONFIG_PXA27x) += pxa27x.o 9 - obj-$(CONFIG_PXA3xx) += pxa3xx.o mfp.o 10 obj-$(CONFIG_CPU_PXA300) += pxa300.o 11 obj-$(CONFIG_CPU_PXA320) += pxa320.o 12
··· 6 obj-y += clock.o devices.o generic.o irq.o dma.o time.o 7 obj-$(CONFIG_PXA25x) += pxa25x.o 8 obj-$(CONFIG_PXA27x) += pxa27x.o 9 + obj-$(CONFIG_PXA3xx) += pxa3xx.o mfp.o smemc.o 10 obj-$(CONFIG_CPU_PXA300) += pxa300.o 11 obj-$(CONFIG_CPU_PXA320) += pxa320.o 12
+1
arch/arm/mach-pxa/cm-x270.c
··· 29 #include <asm/mach/map.h> 30 31 #include <asm/arch/pxa-regs.h> 32 #include <asm/arch/pxafb.h> 33 #include <asm/arch/ohci.h> 34 #include <asm/arch/mmc.h>
··· 29 #include <asm/mach/map.h> 30 31 #include <asm/arch/pxa-regs.h> 32 + #include <asm/arch/pxa2xx-regs.h> 33 #include <asm/arch/pxafb.h> 34 #include <asm/arch/ohci.h> 35 #include <asm/arch/mmc.h>
+1
arch/arm/mach-pxa/devices.c
··· 10 #include <asm/arch/mmc.h> 11 #include <asm/arch/irda.h> 12 #include <asm/arch/i2c.h> 13 14 #include "devices.h" 15
··· 10 #include <asm/arch/mmc.h> 11 #include <asm/arch/irda.h> 12 #include <asm/arch/i2c.h> 13 + #include <asm/arch/ohci.h> 14 15 #include "devices.h" 16
+57
arch/arm/mach-pxa/generic.c
··· 23 #include <linux/ioport.h> 24 #include <linux/pm.h> 25 #include <linux/string.h> 26 27 #include <asm/hardware.h> 28 #include <asm/irq.h> ··· 227 iotable_init(standard_io_desc, ARRAY_SIZE(standard_io_desc)); 228 get_clk_frequency_khz(1); 229 }
··· 23 #include <linux/ioport.h> 24 #include <linux/pm.h> 25 #include <linux/string.h> 26 + #include <linux/sysdev.h> 27 28 #include <asm/hardware.h> 29 #include <asm/irq.h> ··· 226 iotable_init(standard_io_desc, ARRAY_SIZE(standard_io_desc)); 227 get_clk_frequency_khz(1); 228 } 229 + 230 + #ifdef CONFIG_PM 231 + 232 + static unsigned long saved_gplr[4]; 233 + static unsigned long saved_gpdr[4]; 234 + static unsigned long saved_grer[4]; 235 + static unsigned long saved_gfer[4]; 236 + 237 + static int pxa_gpio_suspend(struct sys_device *dev, pm_message_t state) 238 + { 239 + int i, gpio; 240 + 241 + for (gpio = 0, i = 0; gpio < pxa_last_gpio; gpio += 32, i++) { 242 + saved_gplr[i] = GPLR(gpio); 243 + saved_gpdr[i] = GPDR(gpio); 244 + saved_grer[i] = GRER(gpio); 245 + saved_gfer[i] = GFER(gpio); 246 + 247 + /* Clear GPIO transition detect bits */ 248 + GEDR(gpio) = GEDR(gpio); 249 + } 250 + return 0; 251 + } 252 + 253 + static int pxa_gpio_resume(struct sys_device *dev) 254 + { 255 + int i, gpio; 256 + 257 + for (gpio = 0, i = 0; gpio < pxa_last_gpio; gpio += 32, i++) { 258 + /* restore level with set/clear */ 259 + GPSR(gpio) = saved_gplr[i]; 260 + GPCR(gpio) = ~saved_gplr[i]; 261 + 262 + GRER(gpio) = saved_grer[i]; 263 + GFER(gpio) = saved_gfer[i]; 264 + GPDR(gpio) = saved_gpdr[i]; 265 + } 266 + return 0; 267 + } 268 + #else 269 + #define pxa_gpio_suspend NULL 270 + #define pxa_gpio_resume NULL 271 + #endif 272 + 273 + struct sysdev_class pxa_gpio_sysclass = { 274 + .name = "gpio", 275 + .suspend = pxa_gpio_suspend, 276 + .resume = pxa_gpio_resume, 277 + }; 278 + 279 + static int __init pxa_gpio_init(void) 280 + { 281 + return sysdev_class_register(&pxa_gpio_sysclass); 282 + } 283 + 284 + core_initcall(pxa_gpio_init);
+3
arch/arm/mach-pxa/generic.h
··· 52 #define pxa3xx_get_clk_frequency_khz(x) (0) 53 #define pxa3xx_get_memclk_frequency_10khz() (0) 54 #endif
··· 52 #define pxa3xx_get_clk_frequency_khz(x) (0) 53 #define pxa3xx_get_memclk_frequency_10khz() (0) 54 #endif 55 + 56 + extern struct sysdev_class pxa_irq_sysclass; 57 + extern struct sysdev_class pxa_gpio_sysclass;
+62
arch/arm/mach-pxa/irq.c
··· 15 #include <linux/init.h> 16 #include <linux/module.h> 17 #include <linux/interrupt.h> 18 19 #include <asm/hardware.h> 20 #include <asm/irq.h> ··· 322 pxa_low_gpio_chip.set_wake = set_wake; 323 pxa_muxed_gpio_chip.set_wake = set_wake; 324 }
··· 15 #include <linux/init.h> 16 #include <linux/module.h> 17 #include <linux/interrupt.h> 18 + #include <linux/sysdev.h> 19 20 #include <asm/hardware.h> 21 #include <asm/irq.h> ··· 321 pxa_low_gpio_chip.set_wake = set_wake; 322 pxa_muxed_gpio_chip.set_wake = set_wake; 323 } 324 + 325 + #ifdef CONFIG_PM 326 + static unsigned long saved_icmr[2]; 327 + 328 + static int pxa_irq_suspend(struct sys_device *dev, pm_message_t state) 329 + { 330 + switch (dev->id) { 331 + case 0: 332 + saved_icmr[0] = ICMR; 333 + ICMR = 0; 334 + break; 335 + #if defined(CONFIG_PXA27x) || defined(CONFIG_PXA3xx) 336 + case 1: 337 + saved_icmr[1] = ICMR2; 338 + ICMR2 = 0; 339 + break; 340 + #endif 341 + default: 342 + return -EINVAL; 343 + } 344 + 345 + return 0; 346 + } 347 + 348 + static int pxa_irq_resume(struct sys_device *dev) 349 + { 350 + switch (dev->id) { 351 + case 0: 352 + ICMR = saved_icmr[0]; 353 + ICLR = 0; 354 + ICCR = 1; 355 + break; 356 + #if defined(CONFIG_PXA27x) || defined(CONFIG_PXA3xx) 357 + case 1: 358 + ICMR2 = saved_icmr[1]; 359 + ICLR2 = 0; 360 + break; 361 + #endif 362 + default: 363 + return -EINVAL; 364 + } 365 + 366 + return 0; 367 + } 368 + #else 369 + #define pxa_irq_suspend NULL 370 + #define pxa_irq_resume NULL 371 + #endif 372 + 373 + struct sysdev_class pxa_irq_sysclass = { 374 + .name = "irq", 375 + .suspend = pxa_irq_suspend, 376 + .resume = pxa_irq_resume, 377 + }; 378 + 379 + static int __init pxa_irq_init(void) 380 + { 381 + return sysdev_class_register(&pxa_irq_sysclass); 382 + } 383 + 384 + core_initcall(pxa_irq_init);
+10 -1
arch/arm/mach-pxa/mfp.c
··· 22 #include <asm/hardware.h> 23 #include <asm/arch/mfp.h> 24 #include <asm/arch/mfp-pxa3xx.h> 25 26 /* mfp_spin_lock is used to ensure that MFP register configuration 27 * (most likely a read-modify-write operation) is atomic, and that ··· 224 struct pxa3xx_mfp_pin *p = &mfp_table[pin]; 225 __mfp_config_run(p); 226 } 227 return 0; 228 } 229 230 static struct sysdev_class mfp_sysclass = { 231 - set_kset_name("mfp"), 232 .suspend = pxa3xx_mfp_suspend, 233 .resume = pxa3xx_mfp_resume, 234 };
··· 22 #include <asm/hardware.h> 23 #include <asm/arch/mfp.h> 24 #include <asm/arch/mfp-pxa3xx.h> 25 + #include <asm/arch/pxa3xx-regs.h> 26 27 /* mfp_spin_lock is used to ensure that MFP register configuration 28 * (most likely a read-modify-write operation) is atomic, and that ··· 223 struct pxa3xx_mfp_pin *p = &mfp_table[pin]; 224 __mfp_config_run(p); 225 } 226 + 227 + /* clear RDH bit when MFP settings are restored 228 + * 229 + * NOTE: the last 3 bits DxS are write-1-to-clear so carefully 230 + * preserve them here in case they will be referenced later 231 + */ 232 + ASCR &= ~(ASCR_RDH | ASCR_D1S | ASCR_D2S | ASCR_D3S); 233 + 234 return 0; 235 } 236 237 static struct sysdev_class mfp_sysclass = { 238 + .name = "mfp", 239 .suspend = pxa3xx_mfp_suspend, 240 .resume = pxa3xx_mfp_resume, 241 };
+1
arch/arm/mach-pxa/pcm027.c
··· 29 #include <asm/mach/arch.h> 30 #include <asm/arch/hardware.h> 31 #include <asm/arch/pxa-regs.h> 32 #include <asm/arch/pxa2xx_spi.h> 33 #include <asm/arch/pcm027.h> 34 #include "generic.h"
··· 29 #include <asm/mach/arch.h> 30 #include <asm/arch/hardware.h> 31 #include <asm/arch/pxa-regs.h> 32 + #include <asm/arch/pxa2xx-regs.h> 33 #include <asm/arch/pxa2xx_spi.h> 34 #include <asm/arch/pcm027.h> 35 #include "generic.h"
+4 -4
arch/arm/mach-pxa/poodle.c
··· 164 }, 165 }; 166 167 - static unsigned long poodle_get_hsync_len(void) 168 { 169 return 0; 170 } ··· 174 } 175 176 static struct corgits_machinfo poodle_ts_machinfo = { 177 - .get_hsync_len = poodle_get_hsync_len, 178 - .put_hsync = poodle_null_hsync, 179 - .wait_hsync = poodle_null_hsync, 180 }; 181 182 static struct platform_device poodle_ts_device = {
··· 164 }, 165 }; 166 167 + static unsigned long poodle_get_hsync_invperiod(void) 168 { 169 return 0; 170 } ··· 174 } 175 176 static struct corgits_machinfo poodle_ts_machinfo = { 177 + .get_hsync_invperiod = poodle_get_hsync_invperiod, 178 + .put_hsync = poodle_null_hsync, 179 + .wait_hsync = poodle_null_hsync, 180 }; 181 182 static struct platform_device poodle_ts_device = {
+19 -24
arch/arm/mach-pxa/pxa25x.c
··· 21 #include <linux/init.h> 22 #include <linux/platform_device.h> 23 #include <linux/suspend.h> 24 25 #include <asm/hardware.h> 26 #include <asm/arch/irqs.h> ··· 142 #define SAVE(x) sleep_save[SLEEP_SAVE_##x] = x 143 #define RESTORE(x) x = sleep_save[SLEEP_SAVE_##x] 144 145 - #define RESTORE_GPLEVEL(n) do { \ 146 - GPSR##n = sleep_save[SLEEP_SAVE_GPLR##n]; \ 147 - GPCR##n = ~sleep_save[SLEEP_SAVE_GPLR##n]; \ 148 - } while (0) 149 - 150 /* 151 * List of global PXA peripheral registers to preserve. 152 * More ones like CP and general purpose register values are preserved ··· 149 */ 150 enum { SLEEP_SAVE_START = 0, 151 152 - SLEEP_SAVE_GPLR0, SLEEP_SAVE_GPLR1, SLEEP_SAVE_GPLR2, 153 - SLEEP_SAVE_GPDR0, SLEEP_SAVE_GPDR1, SLEEP_SAVE_GPDR2, 154 - SLEEP_SAVE_GRER0, SLEEP_SAVE_GRER1, SLEEP_SAVE_GRER2, 155 - SLEEP_SAVE_GFER0, SLEEP_SAVE_GFER1, SLEEP_SAVE_GFER2, 156 SLEEP_SAVE_PGSR0, SLEEP_SAVE_PGSR1, SLEEP_SAVE_PGSR2, 157 158 SLEEP_SAVE_GAFR0_L, SLEEP_SAVE_GAFR0_U, ··· 157 158 SLEEP_SAVE_PSTR, 159 160 - SLEEP_SAVE_ICMR, 161 SLEEP_SAVE_CKEN, 162 163 SLEEP_SAVE_SIZE ··· 165 166 static void pxa25x_cpu_pm_save(unsigned long *sleep_save) 167 { 168 - SAVE(GPLR0); SAVE(GPLR1); SAVE(GPLR2); 169 - SAVE(GPDR0); SAVE(GPDR1); SAVE(GPDR2); 170 - SAVE(GRER0); SAVE(GRER1); SAVE(GRER2); 171 - SAVE(GFER0); SAVE(GFER1); SAVE(GFER2); 172 SAVE(PGSR0); SAVE(PGSR1); SAVE(PGSR2); 173 174 SAVE(GAFR0_L); SAVE(GAFR0_U); 175 SAVE(GAFR1_L); SAVE(GAFR1_U); 176 SAVE(GAFR2_L); SAVE(GAFR2_U); 177 178 - SAVE(ICMR); ICMR = 0; 179 SAVE(CKEN); 180 SAVE(PSTR); 181 ··· 184 PSPR = 0; 185 186 /* restore registers */ 187 - RESTORE_GPLEVEL(0); RESTORE_GPLEVEL(1); RESTORE_GPLEVEL(2); 188 - RESTORE(GPDR0); RESTORE(GPDR1); RESTORE(GPDR2); 189 RESTORE(GAFR0_L); RESTORE(GAFR0_U); 190 RESTORE(GAFR1_L); RESTORE(GAFR1_U); 191 RESTORE(GAFR2_L); RESTORE(GAFR2_U); 192 - RESTORE(GRER0); RESTORE(GRER1); RESTORE(GRER2); 193 - RESTORE(GFER0); RESTORE(GFER1); RESTORE(GFER2); 194 RESTORE(PGSR0); RESTORE(PGSR1); RESTORE(PGSR2); 195 196 PSSR = PSSR_RDH | PSSR_PH; 197 198 RESTORE(CKEN); 199 - 200 - ICLR = 0; 201 - ICCR = 1; 202 - RESTORE(ICMR); 203 RESTORE(PSTR); 204 } 205 ··· 282 &pxa25x_device_assp, 283 }; 284 285 static int __init pxa25x_init(void) 286 { 287 - int ret = 0; 288 289 /* Only add HWUART for PXA255/26x; PXA210/250/27x do not have it. */ 290 if (cpu_is_pxa25x()) ··· 306 307 pxa25x_init_pm(); 308 309 ret = platform_add_devices(pxa25x_devices, 310 ARRAY_SIZE(pxa25x_devices)); 311 } 312 /* Only add HWUART for PXA255/26x; PXA210/250/27x do not have it. */ 313 if (cpu_is_pxa25x()) 314 ret = platform_device_register(&pxa_device_hwuart);
··· 21 #include <linux/init.h> 22 #include <linux/platform_device.h> 23 #include <linux/suspend.h> 24 + #include <linux/sysdev.h> 25 26 #include <asm/hardware.h> 27 #include <asm/arch/irqs.h> ··· 141 #define SAVE(x) sleep_save[SLEEP_SAVE_##x] = x 142 #define RESTORE(x) x = sleep_save[SLEEP_SAVE_##x] 143 144 /* 145 * List of global PXA peripheral registers to preserve. 146 * More ones like CP and general purpose register values are preserved ··· 153 */ 154 enum { SLEEP_SAVE_START = 0, 155 156 SLEEP_SAVE_PGSR0, SLEEP_SAVE_PGSR1, SLEEP_SAVE_PGSR2, 157 158 SLEEP_SAVE_GAFR0_L, SLEEP_SAVE_GAFR0_U, ··· 165 166 SLEEP_SAVE_PSTR, 167 168 SLEEP_SAVE_CKEN, 169 170 SLEEP_SAVE_SIZE ··· 174 175 static void pxa25x_cpu_pm_save(unsigned long *sleep_save) 176 { 177 SAVE(PGSR0); SAVE(PGSR1); SAVE(PGSR2); 178 179 SAVE(GAFR0_L); SAVE(GAFR0_U); 180 SAVE(GAFR1_L); SAVE(GAFR1_U); 181 SAVE(GAFR2_L); SAVE(GAFR2_U); 182 183 SAVE(CKEN); 184 SAVE(PSTR); 185 ··· 198 PSPR = 0; 199 200 /* restore registers */ 201 RESTORE(GAFR0_L); RESTORE(GAFR0_U); 202 RESTORE(GAFR1_L); RESTORE(GAFR1_U); 203 RESTORE(GAFR2_L); RESTORE(GAFR2_U); 204 RESTORE(PGSR0); RESTORE(PGSR1); RESTORE(PGSR2); 205 206 PSSR = PSSR_RDH | PSSR_PH; 207 208 RESTORE(CKEN); 209 RESTORE(PSTR); 210 } 211 ··· 304 &pxa25x_device_assp, 305 }; 306 307 + static struct sys_device pxa25x_sysdev[] = { 308 + { 309 + .cls = &pxa_irq_sysclass, 310 + }, { 311 + .cls = &pxa_gpio_sysclass, 312 + }, 313 + }; 314 + 315 static int __init pxa25x_init(void) 316 { 317 + int i, ret = 0; 318 319 /* Only add HWUART for PXA255/26x; PXA210/250/27x do not have it. */ 320 if (cpu_is_pxa25x()) ··· 320 321 pxa25x_init_pm(); 322 323 + for (i = 0; i < ARRAY_SIZE(pxa25x_sysdev); i++) { 324 + ret = sysdev_register(&pxa25x_sysdev[i]); 325 + if (ret) 326 + pr_err("failed to register sysdev[%d]\n", i); 327 + } 328 + 329 ret = platform_add_devices(pxa25x_devices, 330 ARRAY_SIZE(pxa25x_devices)); 331 + if (ret) 332 + return ret; 333 } 334 + 335 /* Only add HWUART for PXA255/26x; PXA210/250/27x do not have it. */ 336 if (cpu_is_pxa25x()) 337 ret = platform_device_register(&pxa_device_hwuart);
+22 -27
arch/arm/mach-pxa/pxa27x.c
··· 16 #include <linux/init.h> 17 #include <linux/suspend.h> 18 #include <linux/platform_device.h> 19 20 #include <asm/hardware.h> 21 #include <asm/irq.h> ··· 172 #define SAVE(x) sleep_save[SLEEP_SAVE_##x] = x 173 #define RESTORE(x) x = sleep_save[SLEEP_SAVE_##x] 174 175 - #define RESTORE_GPLEVEL(n) do { \ 176 - GPSR##n = sleep_save[SLEEP_SAVE_GPLR##n]; \ 177 - GPCR##n = ~sleep_save[SLEEP_SAVE_GPLR##n]; \ 178 - } while (0) 179 - 180 /* 181 * List of global PXA peripheral registers to preserve. 182 * More ones like CP and general purpose register values are preserved ··· 179 */ 180 enum { SLEEP_SAVE_START = 0, 181 182 - SLEEP_SAVE_GPLR0, SLEEP_SAVE_GPLR1, SLEEP_SAVE_GPLR2, SLEEP_SAVE_GPLR3, 183 - SLEEP_SAVE_GPDR0, SLEEP_SAVE_GPDR1, SLEEP_SAVE_GPDR2, SLEEP_SAVE_GPDR3, 184 - SLEEP_SAVE_GRER0, SLEEP_SAVE_GRER1, SLEEP_SAVE_GRER2, SLEEP_SAVE_GRER3, 185 - SLEEP_SAVE_GFER0, SLEEP_SAVE_GFER1, SLEEP_SAVE_GFER2, SLEEP_SAVE_GFER3, 186 SLEEP_SAVE_PGSR0, SLEEP_SAVE_PGSR1, SLEEP_SAVE_PGSR2, SLEEP_SAVE_PGSR3, 187 188 SLEEP_SAVE_GAFR0_L, SLEEP_SAVE_GAFR0_U, ··· 188 189 SLEEP_SAVE_PSTR, 190 191 - SLEEP_SAVE_ICMR, 192 SLEEP_SAVE_CKEN, 193 194 SLEEP_SAVE_MDREFR, ··· 199 200 void pxa27x_cpu_pm_save(unsigned long *sleep_save) 201 { 202 - SAVE(GPLR0); SAVE(GPLR1); SAVE(GPLR2); SAVE(GPLR3); 203 - SAVE(GPDR0); SAVE(GPDR1); SAVE(GPDR2); SAVE(GPDR3); 204 - SAVE(GRER0); SAVE(GRER1); SAVE(GRER2); SAVE(GRER3); 205 - SAVE(GFER0); SAVE(GFER1); SAVE(GFER2); SAVE(GFER3); 206 SAVE(PGSR0); SAVE(PGSR1); SAVE(PGSR2); SAVE(PGSR3); 207 208 SAVE(GAFR0_L); SAVE(GAFR0_U); ··· 210 SAVE(PWER); SAVE(PCFR); SAVE(PRER); 211 SAVE(PFER); SAVE(PKWR); 212 213 - SAVE(ICMR); ICMR = 0; 214 SAVE(CKEN); 215 SAVE(PSTR); 216 - 217 - /* Clear GPIO transition detect bits */ 218 - GEDR0 = GEDR0; GEDR1 = GEDR1; GEDR2 = GEDR2; GEDR3 = GEDR3; 219 } 220 221 void pxa27x_cpu_pm_restore(unsigned long *sleep_save) ··· 220 PSPR = 0; 221 222 /* restore registers */ 223 - RESTORE_GPLEVEL(0); RESTORE_GPLEVEL(1); 224 - RESTORE_GPLEVEL(2); RESTORE_GPLEVEL(3); 225 - RESTORE(GPDR0); RESTORE(GPDR1); RESTORE(GPDR2); RESTORE(GPDR3); 226 RESTORE(GAFR0_L); RESTORE(GAFR0_U); 227 RESTORE(GAFR1_L); RESTORE(GAFR1_U); 228 RESTORE(GAFR2_L); RESTORE(GAFR2_U); 229 RESTORE(GAFR3_L); RESTORE(GAFR3_U); 230 - RESTORE(GRER0); RESTORE(GRER1); RESTORE(GRER2); RESTORE(GRER3); 231 - RESTORE(GFER0); RESTORE(GFER1); RESTORE(GFER2); RESTORE(GFER3); 232 RESTORE(PGSR0); RESTORE(PGSR1); RESTORE(PGSR2); RESTORE(PGSR3); 233 234 RESTORE(MDREFR); ··· 234 235 RESTORE(CKEN); 236 237 - ICLR = 0; 238 - ICCR = 1; 239 - RESTORE(ICMR); 240 RESTORE(PSTR); 241 } 242 ··· 384 &pxa27x_device_ssp3, 385 }; 386 387 static int __init pxa27x_init(void) 388 { 389 - int ret = 0; 390 if (cpu_is_pxa27x()) { 391 clks_register(pxa27x_clks, ARRAY_SIZE(pxa27x_clks)); 392 ··· 408 409 pxa27x_init_pm(); 410 411 ret = platform_add_devices(devices, ARRAY_SIZE(devices)); 412 } 413 return ret; 414 } 415
··· 16 #include <linux/init.h> 17 #include <linux/suspend.h> 18 #include <linux/platform_device.h> 19 + #include <linux/sysdev.h> 20 21 #include <asm/hardware.h> 22 #include <asm/irq.h> ··· 171 #define SAVE(x) sleep_save[SLEEP_SAVE_##x] = x 172 #define RESTORE(x) x = sleep_save[SLEEP_SAVE_##x] 173 174 /* 175 * List of global PXA peripheral registers to preserve. 176 * More ones like CP and general purpose register values are preserved ··· 183 */ 184 enum { SLEEP_SAVE_START = 0, 185 186 SLEEP_SAVE_PGSR0, SLEEP_SAVE_PGSR1, SLEEP_SAVE_PGSR2, SLEEP_SAVE_PGSR3, 187 188 SLEEP_SAVE_GAFR0_L, SLEEP_SAVE_GAFR0_U, ··· 196 197 SLEEP_SAVE_PSTR, 198 199 SLEEP_SAVE_CKEN, 200 201 SLEEP_SAVE_MDREFR, ··· 208 209 void pxa27x_cpu_pm_save(unsigned long *sleep_save) 210 { 211 SAVE(PGSR0); SAVE(PGSR1); SAVE(PGSR2); SAVE(PGSR3); 212 213 SAVE(GAFR0_L); SAVE(GAFR0_U); ··· 223 SAVE(PWER); SAVE(PCFR); SAVE(PRER); 224 SAVE(PFER); SAVE(PKWR); 225 226 SAVE(CKEN); 227 SAVE(PSTR); 228 } 229 230 void pxa27x_cpu_pm_restore(unsigned long *sleep_save) ··· 237 PSPR = 0; 238 239 /* restore registers */ 240 RESTORE(GAFR0_L); RESTORE(GAFR0_U); 241 RESTORE(GAFR1_L); RESTORE(GAFR1_U); 242 RESTORE(GAFR2_L); RESTORE(GAFR2_U); 243 RESTORE(GAFR3_L); RESTORE(GAFR3_U); 244 RESTORE(PGSR0); RESTORE(PGSR1); RESTORE(PGSR2); RESTORE(PGSR3); 245 246 RESTORE(MDREFR); ··· 256 257 RESTORE(CKEN); 258 259 RESTORE(PSTR); 260 } 261 ··· 409 &pxa27x_device_ssp3, 410 }; 411 412 + static struct sys_device pxa27x_sysdev[] = { 413 + { 414 + .id = 0, 415 + .cls = &pxa_irq_sysclass, 416 + }, { 417 + .id = 1, 418 + .cls = &pxa_irq_sysclass, 419 + }, { 420 + .cls = &pxa_gpio_sysclass, 421 + }, 422 + }; 423 + 424 static int __init pxa27x_init(void) 425 { 426 + int i, ret = 0; 427 + 428 if (cpu_is_pxa27x()) { 429 clks_register(pxa27x_clks, ARRAY_SIZE(pxa27x_clks)); 430 ··· 420 421 pxa27x_init_pm(); 422 423 + for (i = 0; i < ARRAY_SIZE(pxa27x_sysdev); i++) { 424 + ret = sysdev_register(&pxa27x_sysdev[i]); 425 + if (ret) 426 + pr_err("failed to register sysdev[%d]\n", i); 427 + } 428 + 429 ret = platform_add_devices(devices, ARRAY_SIZE(devices)); 430 } 431 + 432 return ret; 433 } 434
+82 -17
arch/arm/mach-pxa/pxa3xx.c
··· 20 #include <linux/platform_device.h> 21 #include <linux/irq.h> 22 #include <linux/io.h> 23 24 #include <asm/hardware.h> 25 #include <asm/arch/pxa3xx-regs.h> ··· 40 #define RO_CLK 60000000 41 42 #define ACCR_D0CS (1 << 26) 43 44 /* crystal frequency to static memory controller multiplier (SMCFS) */ 45 static unsigned char smcfs_mult[8] = { 6, 0, 8, 0, 0, 16, }; ··· 205 }; 206 207 #ifdef CONFIG_PM 208 - #define SLEEP_SAVE_SIZE 4 209 210 #define ISRAM_START 0x5c000000 211 #define ISRAM_SIZE SZ_256K ··· 212 static void __iomem *sram; 213 static unsigned long wakeup_src; 214 215 static void pxa3xx_cpu_pm_save(unsigned long *sleep_save) 216 { 217 - pr_debug("PM: CKENA=%08x CKENB=%08x\n", CKENA, CKENB); 218 - 219 - if (CKENA & (1 << CKEN_USBH)) { 220 - printk(KERN_ERR "PM: USB host clock not stopped?\n"); 221 - CKENA &= ~(1 << CKEN_USBH); 222 - } 223 - // CKENA |= 1 << (CKEN_ISC & 31); 224 - 225 - /* 226 - * Low power modes require the HSIO2 clock to be enabled. 227 - */ 228 - CKENB |= 1 << (CKEN_HSIO2 & 31); 229 } 230 231 static void pxa3xx_cpu_pm_restore(unsigned long *sleep_save) 232 { 233 - CKENB &= ~(1 << (CKEN_HSIO2 & 31)); 234 } 235 236 /* ··· 270 printk("PM: AD2D0SR=%08x ASCR=%08x\n", AD2D0SR, ASCR); 271 } 272 273 static void pxa3xx_cpu_pm_enter(suspend_state_t state) 274 { 275 /* ··· 324 break; 325 326 case PM_SUSPEND_MEM: 327 break; 328 } 329 } ··· 498 &pxa3xx_device_ssp4, 499 }; 500 501 static int __init pxa3xx_init(void) 502 { 503 - int ret = 0; 504 505 if (cpu_is_pxa3xx()) { 506 clks_register(pxa3xx_clks, ARRAY_SIZE(pxa3xx_clks)); ··· 522 523 pxa3xx_init_pm(); 524 525 - return platform_add_devices(devices, ARRAY_SIZE(devices)); 526 } 527 - return 0; 528 } 529 530 subsys_initcall(pxa3xx_init);
··· 20 #include <linux/platform_device.h> 21 #include <linux/irq.h> 22 #include <linux/io.h> 23 + #include <linux/sysdev.h> 24 25 #include <asm/hardware.h> 26 #include <asm/arch/pxa3xx-regs.h> ··· 39 #define RO_CLK 60000000 40 41 #define ACCR_D0CS (1 << 26) 42 + #define ACCR_PCCE (1 << 11) 43 44 /* crystal frequency to static memory controller multiplier (SMCFS) */ 45 static unsigned char smcfs_mult[8] = { 6, 0, 8, 0, 0, 16, }; ··· 203 }; 204 205 #ifdef CONFIG_PM 206 207 #define ISRAM_START 0x5c000000 208 #define ISRAM_SIZE SZ_256K ··· 211 static void __iomem *sram; 212 static unsigned long wakeup_src; 213 214 + #define SAVE(x) sleep_save[SLEEP_SAVE_##x] = x 215 + #define RESTORE(x) x = sleep_save[SLEEP_SAVE_##x] 216 + 217 + enum { SLEEP_SAVE_START = 0, 218 + SLEEP_SAVE_CKENA, 219 + SLEEP_SAVE_CKENB, 220 + SLEEP_SAVE_ACCR, 221 + 222 + SLEEP_SAVE_SIZE, 223 + }; 224 + 225 static void pxa3xx_cpu_pm_save(unsigned long *sleep_save) 226 { 227 + SAVE(CKENA); 228 + SAVE(CKENB); 229 + SAVE(ACCR); 230 } 231 232 static void pxa3xx_cpu_pm_restore(unsigned long *sleep_save) 233 { 234 + RESTORE(ACCR); 235 + RESTORE(CKENA); 236 + RESTORE(CKENB); 237 } 238 239 /* ··· 265 printk("PM: AD2D0SR=%08x ASCR=%08x\n", AD2D0SR, ASCR); 266 } 267 268 + /* 269 + * NOTE: currently, the OBM (OEM Boot Module) binary comes along with 270 + * PXA3xx development kits assumes that the resuming process continues 271 + * with the address stored within the first 4 bytes of SDRAM. The PSPR 272 + * register is used privately by BootROM and OBM, and _must_ be set to 273 + * 0x5c014000 for the moment. 274 + */ 275 + static void pxa3xx_cpu_pm_suspend(void) 276 + { 277 + volatile unsigned long *p = (volatile void *)0xc0000000; 278 + unsigned long saved_data = *p; 279 + 280 + extern void pxa3xx_cpu_suspend(void); 281 + extern void pxa3xx_cpu_resume(void); 282 + 283 + /* resuming from D2 requires the HSIO2/BOOT/TPM clocks enabled */ 284 + CKENA |= (1 << CKEN_BOOT) | (1 << CKEN_TPM); 285 + CKENB |= 1 << (CKEN_HSIO2 & 0x1f); 286 + 287 + /* clear and setup wakeup source */ 288 + AD3SR = ~0; 289 + AD3ER = wakeup_src; 290 + ASCR = ASCR; 291 + ARSR = ARSR; 292 + 293 + PCFR |= (1u << 13); /* L1_DIS */ 294 + PCFR &= ~((1u << 12) | (1u << 1)); /* L0_EN | SL_ROD */ 295 + 296 + PSPR = 0x5c014000; 297 + 298 + /* overwrite with the resume address */ 299 + *p = virt_to_phys(pxa3xx_cpu_resume); 300 + 301 + pxa3xx_cpu_suspend(); 302 + 303 + *p = saved_data; 304 + 305 + AD3ER = 0; 306 + } 307 + 308 static void pxa3xx_cpu_pm_enter(suspend_state_t state) 309 { 310 /* ··· 279 break; 280 281 case PM_SUSPEND_MEM: 282 + pxa3xx_cpu_pm_suspend(); 283 break; 284 } 285 } ··· 452 &pxa3xx_device_ssp4, 453 }; 454 455 + static struct sys_device pxa3xx_sysdev[] = { 456 + { 457 + .id = 0, 458 + .cls = &pxa_irq_sysclass, 459 + }, { 460 + .id = 1, 461 + .cls = &pxa_irq_sysclass, 462 + }, { 463 + .cls = &pxa_gpio_sysclass, 464 + }, 465 + }; 466 + 467 static int __init pxa3xx_init(void) 468 { 469 + int i, ret = 0; 470 471 if (cpu_is_pxa3xx()) { 472 clks_register(pxa3xx_clks, ARRAY_SIZE(pxa3xx_clks)); ··· 464 465 pxa3xx_init_pm(); 466 467 + for (i = 0; i < ARRAY_SIZE(pxa3xx_sysdev); i++) { 468 + ret = sysdev_register(&pxa3xx_sysdev[i]); 469 + if (ret) 470 + pr_err("failed to register sysdev[%d]\n", i); 471 + } 472 + 473 + ret = platform_add_devices(devices, ARRAY_SIZE(devices)); 474 } 475 + 476 + return ret; 477 } 478 479 subsys_initcall(pxa3xx_init);
+102
arch/arm/mach-pxa/sleep.S
··· 50 str r0, [r1] 51 ldr pc, [sp], #4 52 53 #ifdef CONFIG_PXA27x 54 /* 55 * pxa27x_cpu_suspend()
··· 50 str r0, [r1] 51 ldr pc, [sp], #4 52 53 + #ifdef CONFIG_PXA3xx 54 + /* 55 + * pxa3xx_cpu_suspend() - forces CPU into sleep state (S2D3C4) 56 + * 57 + * NOTE: unfortunately, pxa_cpu_save_cp can not be reused here since 58 + * the auxiliary control register address is different between pxa3xx 59 + * and pxa{25x,27x} 60 + */ 61 + 62 + ENTRY(pxa3xx_cpu_suspend) 63 + 64 + #ifndef CONFIG_IWMMXT 65 + mra r2, r3, acc0 66 + #endif 67 + stmfd sp!, {r2 - r12, lr} @ save registers on stack 68 + 69 + mrc p14, 0, r3, c6, c0, 0 @ clock configuration, for turbo mode 70 + mrc p15, 0, r4, c15, c1, 0 @ CP access reg 71 + mrc p15, 0, r5, c13, c0, 0 @ PID 72 + mrc p15, 0, r6, c3, c0, 0 @ domain ID 73 + mrc p15, 0, r7, c2, c0, 0 @ translation table base addr 74 + mrc p15, 0, r8, c1, c0, 1 @ auxiliary control reg 75 + mrc p15, 0, r9, c1, c0, 0 @ control reg 76 + 77 + bic r3, r3, #2 @ clear frequency change bit 78 + 79 + @ store them plus current virtual stack ptr on stack 80 + mov r10, sp 81 + stmfd sp!, {r3 - r10} 82 + 83 + @ store physical address of stack pointer 84 + mov r0, sp 85 + bl sleep_phys_sp 86 + ldr r1, =sleep_save_sp 87 + str r0, [r1] 88 + 89 + @ clean data cache 90 + bl xsc3_flush_kern_cache_all 91 + 92 + mov r0, #0x06 @ S2D3C4 mode 93 + mcr p14, 0, r0, c7, c0, 0 @ enter sleep 94 + 95 + 20: b 20b @ waiting for sleep 96 + 97 + .data 98 + .align 5 99 + /* 100 + * pxa3xx_cpu_resume 101 + */ 102 + 103 + ENTRY(pxa3xx_cpu_resume) 104 + 105 + mov r0, #PSR_I_BIT | PSR_F_BIT | SVC_MODE @ set SVC, irqs off 106 + msr cpsr_c, r0 107 + 108 + ldr r0, sleep_save_sp @ stack phys addr 109 + ldmfd r0, {r3 - r9, sp} @ CP regs + virt stack ptr 110 + 111 + mov r1, #0 112 + mcr p15, 0, r1, c7, c7, 0 @ invalidate I & D caches, BTB 113 + mcr p15, 0, r1, c7, c10, 4 @ drain write (&fill) buffer 114 + mcr p15, 0, r1, c7, c5, 4 @ flush prefetch buffer 115 + mcr p15, 0, r1, c8, c7, 0 @ invalidate I & D TLBs 116 + 117 + mcr p14, 0, r3, c6, c0, 0 @ clock configuration, turbo mode. 118 + mcr p15, 0, r4, c15, c1, 0 @ CP access reg 119 + mcr p15, 0, r5, c13, c0, 0 @ PID 120 + mcr p15, 0, r6, c3, c0, 0 @ domain ID 121 + mcr p15, 0, r7, c2, c0, 0 @ translation table base addr 122 + mcr p15, 0, r8, c1, c0, 1 @ auxiliary control reg 123 + 124 + @ temporarily map resume_turn_on_mmu into the page table, 125 + @ otherwise prefetch abort occurs after MMU is turned on 126 + mov r1, r7 127 + bic r1, r1, #0x00ff 128 + bic r1, r1, #0x3f00 129 + ldr r2, =0x542e 130 + 131 + adr r3, resume_turn_on_mmu 132 + mov r3, r3, lsr #20 133 + orr r4, r2, r3, lsl #20 134 + ldr r5, [r1, r3, lsl #2] 135 + str r4, [r1, r3, lsl #2] 136 + 137 + @ Mapping page table address in the page table 138 + mov r6, r1, lsr #20 139 + orr r7, r2, r6, lsl #20 140 + ldr r8, [r1, r6, lsl #2] 141 + str r7, [r1, r6, lsl #2] 142 + 143 + ldr r2, =pxa3xx_resume_after_mmu @ absolute virtual address 144 + b resume_turn_on_mmu @ cache align execution 145 + 146 + .text 147 + pxa3xx_resume_after_mmu: 148 + /* restore the temporary mapping */ 149 + str r5, [r1, r3, lsl #2] 150 + str r8, [r1, r6, lsl #2] 151 + b resume_after_mmu 152 + 153 + #endif /* CONFIG_PXA3xx */ 154 + 155 #ifdef CONFIG_PXA27x 156 /* 157 * pxa27x_cpu_suspend()
+88
arch/arm/mach-pxa/smemc.c
···
··· 1 + /* 2 + * Static Memory Controller 3 + */ 4 + 5 + #include <linux/module.h> 6 + #include <linux/kernel.h> 7 + #include <linux/init.h> 8 + #include <linux/io.h> 9 + #include <linux/sysdev.h> 10 + 11 + #define SMEMC_PHYS_BASE (0x4A000000) 12 + #define SMEMC_PHYS_SIZE (0x90) 13 + 14 + #define MSC0 (0x08) /* Static Memory Controller Register 0 */ 15 + #define MSC1 (0x0C) /* Static Memory Controller Register 1 */ 16 + #define SXCNFG (0x1C) /* Synchronous Static Memory Control Register */ 17 + #define MEMCLKCFG (0x68) /* Clock Configuration */ 18 + #define CSADRCFG0 (0x80) /* Address Configuration Register for CS0 */ 19 + #define CSADRCFG1 (0x84) /* Address Configuration Register for CS1 */ 20 + #define CSADRCFG2 (0x88) /* Address Configuration Register for CS2 */ 21 + #define CSADRCFG3 (0x8C) /* Address Configuration Register for CS3 */ 22 + 23 + #ifdef CONFIG_PM 24 + static void __iomem *smemc_mmio_base; 25 + 26 + static unsigned long msc[2]; 27 + static unsigned long sxcnfg, memclkcfg; 28 + static unsigned long csadrcfg[4]; 29 + 30 + static int pxa3xx_smemc_suspend(struct sys_device *dev, pm_message_t state) 31 + { 32 + msc[0] = __raw_readl(smemc_mmio_base + MSC0); 33 + msc[1] = __raw_readl(smemc_mmio_base + MSC1); 34 + sxcnfg = __raw_readl(smemc_mmio_base + SXCNFG); 35 + memclkcfg = __raw_readl(smemc_mmio_base + MEMCLKCFG); 36 + csadrcfg[0] = __raw_readl(smemc_mmio_base + CSADRCFG0); 37 + csadrcfg[1] = __raw_readl(smemc_mmio_base + CSADRCFG1); 38 + csadrcfg[2] = __raw_readl(smemc_mmio_base + CSADRCFG2); 39 + csadrcfg[3] = __raw_readl(smemc_mmio_base + CSADRCFG3); 40 + 41 + return 0; 42 + } 43 + 44 + static int pxa3xx_smemc_resume(struct sys_device *dev) 45 + { 46 + __raw_writel(msc[0], smemc_mmio_base + MSC0); 47 + __raw_writel(msc[1], smemc_mmio_base + MSC1); 48 + __raw_writel(sxcnfg, smemc_mmio_base + SXCNFG); 49 + __raw_writel(memclkcfg, smemc_mmio_base + MEMCLKCFG); 50 + __raw_writel(csadrcfg[0], smemc_mmio_base + CSADRCFG0); 51 + __raw_writel(csadrcfg[1], smemc_mmio_base + CSADRCFG1); 52 + __raw_writel(csadrcfg[2], smemc_mmio_base + CSADRCFG2); 53 + __raw_writel(csadrcfg[3], smemc_mmio_base + CSADRCFG3); 54 + 55 + return 0; 56 + } 57 + 58 + static struct sysdev_class smemc_sysclass = { 59 + .name = "smemc", 60 + .suspend = pxa3xx_smemc_suspend, 61 + .resume = pxa3xx_smemc_resume, 62 + }; 63 + 64 + static struct sys_device smemc_sysdev = { 65 + .id = 0, 66 + .cls = &smemc_sysclass, 67 + }; 68 + 69 + static int __init smemc_init(void) 70 + { 71 + int ret = 0; 72 + 73 + if (cpu_is_pxa3xx()) { 74 + smemc_mmio_base = ioremap(SMEMC_PHYS_BASE, SMEMC_PHYS_SIZE); 75 + if (smemc_mmio_base == NULL) 76 + return -ENODEV; 77 + 78 + ret = sysdev_class_register(&smemc_sysclass); 79 + if (ret) 80 + return ret; 81 + 82 + ret = sysdev_register(&smemc_sysdev); 83 + } 84 + 85 + return ret; 86 + } 87 + subsys_initcall(smemc_init); 88 + #endif
+1
arch/arm/mach-pxa/spitz.c
··· 36 #include <asm/mach/irq.h> 37 38 #include <asm/arch/pxa-regs.h> 39 #include <asm/arch/irda.h> 40 #include <asm/arch/mmc.h> 41 #include <asm/arch/ohci.h>
··· 36 #include <asm/mach/irq.h> 37 38 #include <asm/arch/pxa-regs.h> 39 + #include <asm/arch/pxa2xx-regs.h> 40 #include <asm/arch/irda.h> 41 #include <asm/arch/mmc.h> 42 #include <asm/arch/ohci.h>
+1
arch/arm/mach-pxa/tosa.c
··· 29 #include <asm/irq.h> 30 #include <asm/system.h> 31 #include <asm/arch/pxa-regs.h> 32 #include <asm/arch/irda.h> 33 #include <asm/arch/mmc.h> 34 #include <asm/arch/udc.h>
··· 29 #include <asm/irq.h> 30 #include <asm/system.h> 31 #include <asm/arch/pxa-regs.h> 32 + #include <asm/arch/pxa2xx-regs.h> 33 #include <asm/arch/irda.h> 34 #include <asm/arch/mmc.h> 35 #include <asm/arch/udc.h>
+9 -12
arch/arm/mach-realview/Kconfig
··· 7 help 8 Include support for the ARM(R) RealView Emulation Baseboard platform. 9 10 - config REALVIEW_MPCORE 11 - bool "Support MPcore tile" 12 depends on MACH_REALVIEW_EB 13 select CACHE_L2X0 14 help 15 - Enable support for the MPCore tile on the Realview platform. 16 - Since there are device address and interrupt differences, a 17 - kernel built with this option enabled is not compatible with 18 - other tiles. 19 20 - config REALVIEW_MPCORE_REVB 21 - bool "Support MPcore RevB tile" 22 - depends on REALVIEW_MPCORE 23 default n 24 help 25 - Enable support for the MPCore RevB tile on the Realview platform. 26 - Since there are device address differences, a 27 kernel built with this option enabled is not compatible with 28 - other tiles. 29 30 endmenu
··· 7 help 8 Include support for the ARM(R) RealView Emulation Baseboard platform. 9 10 + config REALVIEW_EB_ARM11MP 11 + bool "Support ARM11MPCore tile" 12 depends on MACH_REALVIEW_EB 13 select CACHE_L2X0 14 help 15 + Enable support for the ARM11MPCore tile on the Realview platform. 16 17 + config REALVIEW_EB_ARM11MP_REVB 18 + bool "Support ARM11MPCore RevB tile" 19 + depends on REALVIEW_EB_ARM11MP 20 default n 21 help 22 + Enable support for the ARM11MPCore RevB tile on the Realview 23 + platform. Since there are device address differences, a 24 kernel built with this option enabled is not compatible with 25 + other revisions of the ARM11MPCore tile. 26 27 endmenu
+1 -2
arch/arm/mach-realview/Makefile
··· 4 5 obj-y := core.o clock.o 6 obj-$(CONFIG_MACH_REALVIEW_EB) += realview_eb.o 7 - obj-$(CONFIG_SMP) += platsmp.o headsmp.o 8 obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o 9 - obj-$(CONFIG_LOCAL_TIMERS) += localtimer.o
··· 4 5 obj-y := core.o clock.o 6 obj-$(CONFIG_MACH_REALVIEW_EB) += realview_eb.o 7 + obj-$(CONFIG_SMP) += platsmp.o headsmp.o localtimer.o 8 obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o
+104 -75
arch/arm/mach-realview/core.c
··· 25 #include <linux/interrupt.h> 26 #include <linux/amba/bus.h> 27 #include <linux/amba/clcd.h> 28 29 #include <asm/system.h> 30 #include <asm/hardware.h> ··· 39 #include <asm/mach/arch.h> 40 #include <asm/mach/flash.h> 41 #include <asm/mach/irq.h> 42 - #include <asm/mach/time.h> 43 #include <asm/mach/map.h> 44 #include <asm/mach/mmc.h> 45 ··· 48 #include "clock.h" 49 50 #define REALVIEW_REFCOUNTER (__io_address(REALVIEW_SYS_BASE) + REALVIEW_SYS_24MHz_OFFSET) 51 52 /* 53 * This is the RealView sched_clock implementation. This has ··· 123 }, 124 .num_resources = 1, 125 .resource = &realview_flash_resource, 126 - }; 127 - 128 - static struct resource realview_smc91x_resources[] = { 129 - [0] = { 130 - .start = REALVIEW_ETH_BASE, 131 - .end = REALVIEW_ETH_BASE + SZ_64K - 1, 132 - .flags = IORESOURCE_MEM, 133 - }, 134 - [1] = { 135 - .start = IRQ_ETH, 136 - .end = IRQ_ETH, 137 - .flags = IORESOURCE_IRQ, 138 - }, 139 - }; 140 - 141 - struct platform_device realview_smc91x_device = { 142 - .name = "smc91x", 143 - .id = 0, 144 - .num_resources = ARRAY_SIZE(realview_smc91x_resources), 145 - .resource = realview_smc91x_resources, 146 }; 147 148 static struct resource realview_i2c_resource = { ··· 468 #define TICKS2USECS(x) ((x) / TICKS_PER_uSEC) 469 #endif 470 471 - /* 472 - * Returns number of ms since last clock interrupt. Note that interrupts 473 - * will have been disabled by do_gettimeoffset() 474 - */ 475 - static unsigned long realview_gettimeoffset(void) 476 { 477 - unsigned long ticks1, ticks2, status; 478 479 - /* 480 - * Get the current number of ticks. Note that there is a race 481 - * condition between us reading the timer and checking for 482 - * an interrupt. We get around this by ensuring that the 483 - * counter has not reloaded between our two reads. 484 - */ 485 - ticks2 = readl(TIMER0_VA_BASE + TIMER_VALUE) & 0xffff; 486 - do { 487 - ticks1 = ticks2; 488 - status = __raw_readl(__io_address(REALVIEW_GIC_DIST_BASE + GIC_DIST_PENDING_SET) 489 - + ((IRQ_TIMERINT0_1 >> 5) << 2)); 490 - ticks2 = readl(TIMER0_VA_BASE + TIMER_VALUE) & 0xffff; 491 - } while (ticks2 > ticks1); 492 493 - /* 494 - * Number of ticks since last interrupt. 495 - */ 496 - ticks1 = TIMER_RELOAD - ticks2; 497 498 - /* 499 - * Interrupt pending? If so, we've reloaded once already. 500 - * 501 - * FIXME: Need to check this is effectively timer 0 that expires 502 - */ 503 - if (status & IRQMASK_TIMERINT0_1) 504 - ticks1 += TIMER_RELOAD; 505 506 - /* 507 - * Convert the ticks to usecs 508 - */ 509 - return TICKS2USECS(ticks1); 510 } 511 512 /* ··· 533 */ 534 static irqreturn_t realview_timer_interrupt(int irq, void *dev_id) 535 { 536 - // ...clear the interrupt 537 writel(1, TIMER0_VA_BASE + TIMER_INTCLR); 538 539 - timer_tick(); 540 - 541 - #if defined(CONFIG_SMP) && !defined(CONFIG_LOCAL_TIMERS) 542 - smp_send_timer(); 543 - update_process_times(user_mode(get_irq_regs())); 544 - #endif 545 546 return IRQ_HANDLED; 547 } ··· 549 .handler = realview_timer_interrupt, 550 }; 551 552 /* 553 - * Set up timer interrupt, and return the current time in seconds. 554 */ 555 - static void __init realview_timer_init(void) 556 { 557 u32 val; 558 559 /* 560 * set clock frequency: ··· 612 writel(0, TIMER2_VA_BASE + TIMER_CTRL); 613 writel(0, TIMER3_VA_BASE + TIMER_CTRL); 614 615 - writel(TIMER_RELOAD, TIMER0_VA_BASE + TIMER_LOAD); 616 - writel(TIMER_RELOAD, TIMER0_VA_BASE + TIMER_VALUE); 617 - writel(TIMER_DIVISOR | TIMER_CTRL_ENABLE | TIMER_CTRL_PERIODIC | 618 - TIMER_CTRL_IE, TIMER0_VA_BASE + TIMER_CTRL); 619 - 620 /* 621 * Make irqs happen for the system timer 622 */ 623 - setup_irq(IRQ_TIMERINT0_1, &realview_timer_irq); 624 - } 625 626 - struct sys_timer realview_timer = { 627 - .init = realview_timer_init, 628 - .offset = realview_gettimeoffset, 629 - };
··· 25 #include <linux/interrupt.h> 26 #include <linux/amba/bus.h> 27 #include <linux/amba/clcd.h> 28 + #include <linux/clocksource.h> 29 + #include <linux/clockchips.h> 30 31 #include <asm/system.h> 32 #include <asm/hardware.h> ··· 37 #include <asm/mach/arch.h> 38 #include <asm/mach/flash.h> 39 #include <asm/mach/irq.h> 40 #include <asm/mach/map.h> 41 #include <asm/mach/mmc.h> 42 ··· 47 #include "clock.h" 48 49 #define REALVIEW_REFCOUNTER (__io_address(REALVIEW_SYS_BASE) + REALVIEW_SYS_24MHz_OFFSET) 50 + 51 + /* used by entry-macro.S */ 52 + void __iomem *gic_cpu_base_addr; 53 54 /* 55 * This is the RealView sched_clock implementation. This has ··· 119 }, 120 .num_resources = 1, 121 .resource = &realview_flash_resource, 122 }; 123 124 static struct resource realview_i2c_resource = { ··· 484 #define TICKS2USECS(x) ((x) / TICKS_PER_uSEC) 485 #endif 486 487 + static void timer_set_mode(enum clock_event_mode mode, 488 + struct clock_event_device *clk) 489 { 490 + unsigned long ctrl; 491 492 + switch(mode) { 493 + case CLOCK_EVT_MODE_PERIODIC: 494 + writel(TIMER_RELOAD, TIMER0_VA_BASE + TIMER_LOAD); 495 496 + ctrl = TIMER_CTRL_PERIODIC; 497 + ctrl |= TIMER_CTRL_32BIT | TIMER_CTRL_IE | TIMER_CTRL_ENABLE; 498 + break; 499 + case CLOCK_EVT_MODE_ONESHOT: 500 + /* period set, and timer enabled in 'next_event' hook */ 501 + ctrl = TIMER_CTRL_ONESHOT; 502 + ctrl |= TIMER_CTRL_32BIT | TIMER_CTRL_IE; 503 + break; 504 + case CLOCK_EVT_MODE_UNUSED: 505 + case CLOCK_EVT_MODE_SHUTDOWN: 506 + default: 507 + ctrl = 0; 508 + } 509 510 + writel(ctrl, TIMER0_VA_BASE + TIMER_CTRL); 511 + } 512 513 + static int timer_set_next_event(unsigned long evt, 514 + struct clock_event_device *unused) 515 + { 516 + unsigned long ctrl = readl(TIMER0_VA_BASE + TIMER_CTRL); 517 + 518 + writel(evt, TIMER0_VA_BASE + TIMER_LOAD); 519 + writel(ctrl | TIMER_CTRL_ENABLE, TIMER0_VA_BASE + TIMER_CTRL); 520 + 521 + return 0; 522 + } 523 + 524 + static struct clock_event_device timer0_clockevent = { 525 + .name = "timer0", 526 + .shift = 32, 527 + .features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT, 528 + .set_mode = timer_set_mode, 529 + .set_next_event = timer_set_next_event, 530 + .rating = 300, 531 + .cpumask = CPU_MASK_ALL, 532 + }; 533 + 534 + static void __init realview_clockevents_init(unsigned int timer_irq) 535 + { 536 + timer0_clockevent.irq = timer_irq; 537 + timer0_clockevent.mult = 538 + div_sc(1000000, NSEC_PER_SEC, timer0_clockevent.shift); 539 + timer0_clockevent.max_delta_ns = 540 + clockevent_delta2ns(0xffffffff, &timer0_clockevent); 541 + timer0_clockevent.min_delta_ns = 542 + clockevent_delta2ns(0xf, &timer0_clockevent); 543 + 544 + clockevents_register_device(&timer0_clockevent); 545 } 546 547 /* ··· 530 */ 531 static irqreturn_t realview_timer_interrupt(int irq, void *dev_id) 532 { 533 + struct clock_event_device *evt = &timer0_clockevent; 534 + 535 + /* clear the interrupt */ 536 writel(1, TIMER0_VA_BASE + TIMER_INTCLR); 537 538 + evt->event_handler(evt); 539 540 return IRQ_HANDLED; 541 } ··· 549 .handler = realview_timer_interrupt, 550 }; 551 552 + static cycle_t realview_get_cycles(void) 553 + { 554 + return ~readl(TIMER3_VA_BASE + TIMER_VALUE); 555 + } 556 + 557 + static struct clocksource clocksource_realview = { 558 + .name = "timer3", 559 + .rating = 200, 560 + .read = realview_get_cycles, 561 + .mask = CLOCKSOURCE_MASK(32), 562 + .shift = 20, 563 + .flags = CLOCK_SOURCE_IS_CONTINUOUS, 564 + }; 565 + 566 + static void __init realview_clocksource_init(void) 567 + { 568 + /* setup timer 0 as free-running clocksource */ 569 + writel(0, TIMER3_VA_BASE + TIMER_CTRL); 570 + writel(0xffffffff, TIMER3_VA_BASE + TIMER_LOAD); 571 + writel(0xffffffff, TIMER3_VA_BASE + TIMER_VALUE); 572 + writel(TIMER_CTRL_32BIT | TIMER_CTRL_ENABLE | TIMER_CTRL_PERIODIC, 573 + TIMER3_VA_BASE + TIMER_CTRL); 574 + 575 + clocksource_realview.mult = 576 + clocksource_khz2mult(1000, clocksource_realview.shift); 577 + clocksource_register(&clocksource_realview); 578 + } 579 + 580 /* 581 + * Set up the clock source and clock events devices 582 */ 583 + void __init realview_timer_init(unsigned int timer_irq) 584 { 585 u32 val; 586 + 587 + #ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST 588 + /* 589 + * The dummy clock device has to be registered before the main device 590 + * so that the latter will broadcast the clock events 591 + */ 592 + local_timer_setup(smp_processor_id()); 593 + #endif 594 595 /* 596 * set clock frequency: ··· 576 writel(0, TIMER2_VA_BASE + TIMER_CTRL); 577 writel(0, TIMER3_VA_BASE + TIMER_CTRL); 578 579 /* 580 * Make irqs happen for the system timer 581 */ 582 + setup_irq(timer_irq, &realview_timer_irq); 583 584 + realview_clocksource_init(); 585 + realview_clockevents_init(timer_irq); 586 + }
+7 -64
arch/arm/mach-realview/core.h
··· 27 #include <asm/leds.h> 28 #include <asm/io.h> 29 30 - extern struct sys_timer realview_timer; 31 - 32 #define AMBA_DEVICE(name,busid,base,plat) \ 33 static struct amba_device name##_device = { \ 34 .dev = { \ ··· 36 }, \ 37 .res = { \ 38 .start = REALVIEW_##base##_BASE, \ 39 - .end = (REALVIEW_##base##_BASE) + SZ_4K - 1,\ 40 .flags = IORESOURCE_MEM, \ 41 }, \ 42 .dma_mask = ~0, \ ··· 44 /* .dma = base##_DMA,*/ \ 45 } 46 47 - /* 48 - * These devices are connected via the core APB bridge 49 - */ 50 - #define GPIO2_IRQ { IRQ_GPIOINT2, NO_IRQ } 51 - #define GPIO2_DMA { 0, 0 } 52 - #define GPIO3_IRQ { IRQ_GPIOINT3, NO_IRQ } 53 - #define GPIO3_DMA { 0, 0 } 54 - 55 - #define AACI_IRQ { IRQ_AACI, NO_IRQ } 56 - #define AACI_DMA { 0x80, 0x81 } 57 - #define MMCI0_IRQ { IRQ_MMCI0A,IRQ_MMCI0B } 58 - #define MMCI0_DMA { 0x84, 0 } 59 - #define KMI0_IRQ { IRQ_KMI0, NO_IRQ } 60 - #define KMI0_DMA { 0, 0 } 61 - #define KMI1_IRQ { IRQ_KMI1, NO_IRQ } 62 - #define KMI1_DMA { 0, 0 } 63 - 64 - /* 65 - * These devices are connected directly to the multi-layer AHB switch 66 - */ 67 - #define SMC_IRQ { NO_IRQ, NO_IRQ } 68 - #define SMC_DMA { 0, 0 } 69 - #define MPMC_IRQ { NO_IRQ, NO_IRQ } 70 - #define MPMC_DMA { 0, 0 } 71 - #define CLCD_IRQ { IRQ_CLCDINT, NO_IRQ } 72 - #define CLCD_DMA { 0, 0 } 73 - #define DMAC_IRQ { IRQ_DMAINT, NO_IRQ } 74 - #define DMAC_DMA { 0, 0 } 75 - 76 - /* 77 - * These devices are connected via the core APB bridge 78 - */ 79 - #define SCTL_IRQ { NO_IRQ, NO_IRQ } 80 - #define SCTL_DMA { 0, 0 } 81 - #define WATCHDOG_IRQ { IRQ_WDOGINT, NO_IRQ } 82 - #define WATCHDOG_DMA { 0, 0 } 83 - #define GPIO0_IRQ { IRQ_GPIOINT0, NO_IRQ } 84 - #define GPIO0_DMA { 0, 0 } 85 - #define GPIO1_IRQ { IRQ_GPIOINT1, NO_IRQ } 86 - #define GPIO1_DMA { 0, 0 } 87 - #define RTC_IRQ { IRQ_RTCINT, NO_IRQ } 88 - #define RTC_DMA { 0, 0 } 89 - 90 - /* 91 - * These devices are connected via the DMA APB bridge 92 - */ 93 - #define SCI_IRQ { IRQ_SCIINT, NO_IRQ } 94 - #define SCI_DMA { 7, 6 } 95 - #define UART0_IRQ { IRQ_UARTINT0, NO_IRQ } 96 - #define UART0_DMA { 15, 14 } 97 - #define UART1_IRQ { IRQ_UARTINT1, NO_IRQ } 98 - #define UART1_DMA { 13, 12 } 99 - #define UART2_IRQ { IRQ_UARTINT2, NO_IRQ } 100 - #define UART2_DMA { 11, 10 } 101 - #define UART3_IRQ { IRQ_UART3, NO_IRQ } 102 - #define UART3_DMA { 0x86, 0x87 } 103 - #define SSP_IRQ { IRQ_SSPINT, NO_IRQ } 104 - #define SSP_DMA { 9, 8 } 105 - 106 - 107 extern struct platform_device realview_flash_device; 108 - extern struct platform_device realview_smc91x_device; 109 extern struct platform_device realview_i2c_device; 110 extern struct mmc_platform_data realview_mmc0_plat_data; 111 extern struct mmc_platform_data realview_mmc1_plat_data; 112 extern struct clk realview_clcd_clk; 113 extern struct clcd_board clcd_plat_data; 114 115 extern void realview_leds_event(led_event_t ledevt); 116 117 #endif
··· 27 #include <asm/leds.h> 28 #include <asm/io.h> 29 30 #define AMBA_DEVICE(name,busid,base,plat) \ 31 static struct amba_device name##_device = { \ 32 .dev = { \ ··· 38 }, \ 39 .res = { \ 40 .start = REALVIEW_##base##_BASE, \ 41 + .end = (REALVIEW_##base##_BASE) + SZ_4K - 1, \ 42 .flags = IORESOURCE_MEM, \ 43 }, \ 44 .dma_mask = ~0, \ ··· 46 /* .dma = base##_DMA,*/ \ 47 } 48 49 extern struct platform_device realview_flash_device; 50 extern struct platform_device realview_i2c_device; 51 extern struct mmc_platform_data realview_mmc0_plat_data; 52 extern struct mmc_platform_data realview_mmc1_plat_data; 53 extern struct clk realview_clcd_clk; 54 extern struct clcd_board clcd_plat_data; 55 + extern void __iomem *gic_cpu_base_addr; 56 + #ifdef CONFIG_LOCAL_TIMERS 57 + extern void __iomem *twd_base_addr; 58 + extern unsigned int twd_size; 59 + #endif 60 61 extern void realview_leds_event(led_event_t ledevt); 62 + extern void realview_timer_init(unsigned int timer_irq); 63 64 #endif
+109 -31
arch/arm/mach-realview/localtimer.c
··· 14 #include <linux/device.h> 15 #include <linux/smp.h> 16 #include <linux/jiffies.h> 17 18 - #include <asm/mach/time.h> 19 #include <asm/hardware/arm_twd.h> 20 #include <asm/hardware/gic.h> 21 #include <asm/hardware.h> 22 #include <asm/io.h> 23 #include <asm/irq.h> 24 25 - #define TWD_BASE(cpu) (__io_address(REALVIEW_TWD_BASE) + \ 26 - ((cpu) * REALVIEW_TWD_SIZE)) 27 28 static unsigned long mpcore_timer_rate; 29 30 /* 31 * local_timer_ack: checks for a local timer interrupt. ··· 101 return 0; 102 } 103 104 - void __cpuinit local_timer_setup(unsigned int cpu) 105 { 106 void __iomem *base = TWD_BASE(cpu); 107 - unsigned int load, offset; 108 u64 waitjiffies; 109 - unsigned int count; 110 111 /* 112 * If this is the first time round, we need to work out how fast ··· 143 load = mpcore_timer_rate / HZ; 144 145 __raw_writel(load, base + TWD_TIMER_LOAD); 146 - __raw_writel(0x7, base + TWD_TIMER_CONTROL); 147 148 - /* 149 - * Now maneuver our local tick into the right part of the jiffy. 150 - * Start by working out where within the tick our local timer 151 - * interrupt should go. 152 - */ 153 - offset = ((mpcore_timer_rate / HZ) / (NR_CPUS + 1)) * (cpu + 1); 154 155 - /* 156 - * gettimeoffset() will return a number of us since the last tick. 157 - * Convert this number of us to a local timer tick count. 158 - * Be careful of integer overflow whilst keeping maximum precision. 159 - * 160 - * with HZ=100 and 1MHz (fpga) ~ 1GHz processor: 161 - * load = 1 ~ 10,000 162 - * mpcore_timer_rate/10000 = 100 ~ 100,000 163 - * 164 - * so the multiply value will be less than 10^9 always. 165 - */ 166 - load = (system_timer->offset() * (mpcore_timer_rate / 10000)) / 100; 167 168 - /* Add on our offset to get the load value */ 169 - load = (load + offset) % (mpcore_timer_rate / HZ); 170 - 171 - __raw_writel(load, base + TWD_TIMER_COUNTER); 172 173 /* Make sure our local interrupt controller has this enabled */ 174 - __raw_writel(1 << IRQ_LOCALTIMER, 175 - __io_address(REALVIEW_GIC_DIST_BASE) + GIC_DIST_ENABLE_SET); 176 } 177 178 /* ··· 182 { 183 __raw_writel(0, TWD_BASE(cpu) + TWD_TIMER_CONTROL); 184 }
··· 14 #include <linux/device.h> 15 #include <linux/smp.h> 16 #include <linux/jiffies.h> 17 + #include <linux/percpu.h> 18 + #include <linux/clockchips.h> 19 + #include <linux/irq.h> 20 21 #include <asm/hardware/arm_twd.h> 22 #include <asm/hardware/gic.h> 23 #include <asm/hardware.h> 24 #include <asm/io.h> 25 #include <asm/irq.h> 26 27 + static DEFINE_PER_CPU(struct clock_event_device, local_clockevent); 28 + 29 + /* 30 + * Used on SMP for either the local timer or IPI_TIMER 31 + */ 32 + void local_timer_interrupt(void) 33 + { 34 + struct clock_event_device *clk = &__get_cpu_var(local_clockevent); 35 + 36 + clk->event_handler(clk); 37 + } 38 + 39 + #ifdef CONFIG_LOCAL_TIMERS 40 + 41 + #define TWD_BASE(cpu) (twd_base_addr + (cpu) * twd_size) 42 + 43 + /* set up by the platform code */ 44 + void __iomem *twd_base_addr; 45 + unsigned int twd_size; 46 47 static unsigned long mpcore_timer_rate; 48 + 49 + static void local_timer_set_mode(enum clock_event_mode mode, 50 + struct clock_event_device *clk) 51 + { 52 + void __iomem *base = TWD_BASE(smp_processor_id()); 53 + unsigned long ctrl; 54 + 55 + switch(mode) { 56 + case CLOCK_EVT_MODE_PERIODIC: 57 + /* timer load already set up */ 58 + ctrl = TWD_TIMER_CONTROL_ENABLE | TWD_TIMER_CONTROL_IT_ENABLE 59 + | TWD_TIMER_CONTROL_PERIODIC; 60 + break; 61 + case CLOCK_EVT_MODE_ONESHOT: 62 + /* period set, and timer enabled in 'next_event' hook */ 63 + ctrl = TWD_TIMER_CONTROL_IT_ENABLE | TWD_TIMER_CONTROL_ONESHOT; 64 + break; 65 + case CLOCK_EVT_MODE_UNUSED: 66 + case CLOCK_EVT_MODE_SHUTDOWN: 67 + default: 68 + ctrl = 0; 69 + } 70 + 71 + __raw_writel(ctrl, base + TWD_TIMER_CONTROL); 72 + } 73 + 74 + static int local_timer_set_next_event(unsigned long evt, 75 + struct clock_event_device *unused) 76 + { 77 + void __iomem *base = TWD_BASE(smp_processor_id()); 78 + unsigned long ctrl = __raw_readl(base + TWD_TIMER_CONTROL); 79 + 80 + __raw_writel(evt, base + TWD_TIMER_COUNTER); 81 + __raw_writel(ctrl | TWD_TIMER_CONTROL_ENABLE, base + TWD_TIMER_CONTROL); 82 + 83 + return 0; 84 + } 85 86 /* 87 * local_timer_ack: checks for a local timer interrupt. ··· 45 return 0; 46 } 47 48 + static void __cpuinit twd_calibrate_rate(unsigned int cpu) 49 { 50 void __iomem *base = TWD_BASE(cpu); 51 + unsigned long load, count; 52 u64 waitjiffies; 53 54 /* 55 * If this is the first time round, we need to work out how fast ··· 88 load = mpcore_timer_rate / HZ; 89 90 __raw_writel(load, base + TWD_TIMER_LOAD); 91 + } 92 93 + /* 94 + * Setup the local clock events for a CPU. 95 + */ 96 + void __cpuinit local_timer_setup(unsigned int cpu) 97 + { 98 + struct clock_event_device *clk = &per_cpu(local_clockevent, cpu); 99 + unsigned long flags; 100 101 + twd_calibrate_rate(cpu); 102 103 + clk->name = "local_timer"; 104 + clk->features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT; 105 + clk->rating = 350; 106 + clk->set_mode = local_timer_set_mode; 107 + clk->set_next_event = local_timer_set_next_event; 108 + clk->irq = IRQ_LOCALTIMER; 109 + clk->cpumask = cpumask_of_cpu(cpu); 110 + clk->shift = 20; 111 + clk->mult = div_sc(mpcore_timer_rate, NSEC_PER_SEC, clk->shift); 112 + clk->max_delta_ns = clockevent_delta2ns(0xffffffff, clk); 113 + clk->min_delta_ns = clockevent_delta2ns(0xf, clk); 114 115 /* Make sure our local interrupt controller has this enabled */ 116 + local_irq_save(flags); 117 + get_irq_chip(IRQ_LOCALTIMER)->unmask(IRQ_LOCALTIMER); 118 + local_irq_restore(flags); 119 + 120 + clockevents_register_device(clk); 121 } 122 123 /* ··· 127 { 128 __raw_writel(0, TWD_BASE(cpu) + TWD_TIMER_CONTROL); 129 } 130 + 131 + #else /* CONFIG_LOCAL_TIMERS */ 132 + 133 + static void dummy_timer_set_mode(enum clock_event_mode mode, 134 + struct clock_event_device *clk) 135 + { 136 + } 137 + 138 + void __cpuinit local_timer_setup(unsigned int cpu) 139 + { 140 + struct clock_event_device *clk = &per_cpu(local_clockevent, cpu); 141 + 142 + clk->name = "dummy_timer"; 143 + clk->features = CLOCK_EVT_FEAT_DUMMY; 144 + clk->rating = 200; 145 + clk->set_mode = dummy_timer_set_mode; 146 + clk->broadcast = smp_timer_broadcast; 147 + clk->cpumask = cpumask_of_cpu(cpu); 148 + 149 + clockevents_register_device(clk); 150 + } 151 + 152 + #endif /* !CONFIG_LOCAL_TIMERS */
+15 -5
arch/arm/mach-realview/platsmp.c
··· 18 #include <asm/hardware/arm_scu.h> 19 #include <asm/hardware.h> 20 #include <asm/io.h> 21 22 extern void realview_secondary_startup(void); 23 ··· 32 { 33 unsigned int ncores; 34 35 - ncores = __raw_readl(__io_address(REALVIEW_MPCORE_SCU_BASE) + SCU_CONFIG); 36 37 - return (ncores & 0x03) + 1; 38 } 39 40 static DEFINE_SPINLOCK(boot_lock); ··· 57 * core (e.g. timer irq), then they will not have been enabled 58 * for us: do so 59 */ 60 - gic_cpu_init(0, __io_address(REALVIEW_GIC_CPU_BASE)); 61 62 /* 63 * let the primary processor know we're out of the ··· 192 if (max_cpus > ncores) 193 max_cpus = ncores; 194 195 /* 196 - * Enable the local timer for primary CPU 197 */ 198 - local_timer_setup(cpu); 199 200 /* 201 * Initialise the present map, which describes the set of CPUs
··· 18 #include <asm/hardware/arm_scu.h> 19 #include <asm/hardware.h> 20 #include <asm/io.h> 21 + #include <asm/mach-types.h> 22 23 extern void realview_secondary_startup(void); 24 ··· 31 { 32 unsigned int ncores; 33 34 + if (machine_is_realview_eb() && core_tile_eb11mp()) { 35 + ncores = __raw_readl(__io_address(REALVIEW_EB11MP_SCU_BASE) + SCU_CONFIG); 36 + ncores = (ncores & 0x03) + 1; 37 + } else 38 + ncores = 1; 39 40 + return ncores; 41 } 42 43 static DEFINE_SPINLOCK(boot_lock); ··· 52 * core (e.g. timer irq), then they will not have been enabled 53 * for us: do so 54 */ 55 + gic_cpu_init(0, __io_address(REALVIEW_EB11MP_GIC_CPU_BASE)); 56 57 /* 58 * let the primary processor know we're out of the ··· 187 if (max_cpus > ncores) 188 max_cpus = ncores; 189 190 + #ifdef CONFIG_LOCAL_TIMERS 191 /* 192 + * Enable the local timer for primary CPU. If the device is 193 + * dummy (!CONFIG_LOCAL_TIMERS), it was already registers in 194 + * realview_timer_init 195 */ 196 + if (machine_is_realview_eb() && core_tile_eb11mp()) 197 + local_timer_setup(cpu); 198 + #endif 199 200 /* 201 * Initialise the present map, which describes the set of CPUs
+196 -40
arch/arm/mach-realview/realview_eb.c
··· 36 #include <asm/mach/arch.h> 37 #include <asm/mach/map.h> 38 #include <asm/mach/mmc.h> 39 40 #include <asm/arch/irqs.h> 41 42 #include "core.h" ··· 60 .pfn = __phys_to_pfn(REALVIEW_GIC_DIST_BASE), 61 .length = SZ_4K, 62 .type = MT_DEVICE, 63 - }, 64 - #ifdef CONFIG_REALVIEW_MPCORE 65 - { 66 - .virtual = IO_ADDRESS(REALVIEW_GIC1_CPU_BASE), 67 - .pfn = __phys_to_pfn(REALVIEW_GIC1_CPU_BASE), 68 - .length = SZ_4K, 69 - .type = MT_DEVICE, 70 }, { 71 - .virtual = IO_ADDRESS(REALVIEW_GIC1_DIST_BASE), 72 - .pfn = __phys_to_pfn(REALVIEW_GIC1_DIST_BASE), 73 - .length = SZ_4K, 74 - .type = MT_DEVICE, 75 - }, { 76 - .virtual = IO_ADDRESS(REALVIEW_MPCORE_L220_BASE), 77 - .pfn = __phys_to_pfn(REALVIEW_MPCORE_L220_BASE), 78 - .length = SZ_8K, 79 - .type = MT_DEVICE, 80 - }, 81 - #endif 82 - { 83 .virtual = IO_ADDRESS(REALVIEW_SCTL_BASE), 84 .pfn = __phys_to_pfn(REALVIEW_SCTL_BASE), 85 .length = SZ_4K, ··· 86 #endif 87 }; 88 89 static void __init realview_eb_map_io(void) 90 { 91 iotable_init(realview_eb_io_desc, ARRAY_SIZE(realview_eb_io_desc)); 92 } 93 94 /* FPGA Primecells */ 95 AMBA_DEVICE(aaci, "fpga:04", AACI, NULL); ··· 220 &kmi1_device, 221 }; 222 223 static void __init gic_init_irq(void) 224 { 225 - #ifdef CONFIG_REALVIEW_MPCORE 226 - unsigned int pldctrl; 227 - writel(0x0000a05f, __io_address(REALVIEW_SYS_LOCK)); 228 - pldctrl = readl(__io_address(REALVIEW_SYS_BASE) + REALVIEW_MPCORE_SYS_PLD_CTRL1); 229 - pldctrl |= 0x00800000; /* New irq mode */ 230 - writel(pldctrl, __io_address(REALVIEW_SYS_BASE) + REALVIEW_MPCORE_SYS_PLD_CTRL1); 231 - writel(0x00000000, __io_address(REALVIEW_SYS_LOCK)); 232 #endif 233 - gic_dist_init(0, __io_address(REALVIEW_GIC_DIST_BASE), 29); 234 - gic_cpu_init(0, __io_address(REALVIEW_GIC_CPU_BASE)); 235 - #if defined(CONFIG_REALVIEW_MPCORE) && !defined(CONFIG_REALVIEW_MPCORE_REVB) 236 - gic_dist_init(1, __io_address(REALVIEW_GIC1_DIST_BASE), 64); 237 - gic_cpu_init(1, __io_address(REALVIEW_GIC1_CPU_BASE)); 238 - gic_cascade_irq(1, IRQ_EB_IRQ1); 239 - #endif 240 } 241 242 static void __init realview_eb_init(void) 243 { 244 int i; 245 246 - #ifdef CONFIG_REALVIEW_MPCORE 247 - /* 1MB (128KB/way), 8-way associativity, evmon/parity/share enabled 248 - * Bits: .... ...0 0111 1001 0000 .... .... .... */ 249 - l2x0_init(__io_address(REALVIEW_MPCORE_L220_BASE), 0x00790000, 0xfe000fff); 250 - #endif 251 clk_register(&realview_clcd_clk); 252 253 platform_device_register(&realview_flash_device); 254 - platform_device_register(&realview_smc91x_device); 255 platform_device_register(&realview_i2c_device); 256 257 for (i = 0; i < ARRAY_SIZE(amba_devs); i++) { ··· 360 .boot_params = 0x00000100, 361 .map_io = realview_eb_map_io, 362 .init_irq = gic_init_irq, 363 - .timer = &realview_timer, 364 .init_machine = realview_eb_init, 365 MACHINE_END
··· 36 #include <asm/mach/arch.h> 37 #include <asm/mach/map.h> 38 #include <asm/mach/mmc.h> 39 + #include <asm/mach/time.h> 40 41 + #include <asm/arch/board-eb.h> 42 #include <asm/arch/irqs.h> 43 44 #include "core.h" ··· 58 .pfn = __phys_to_pfn(REALVIEW_GIC_DIST_BASE), 59 .length = SZ_4K, 60 .type = MT_DEVICE, 61 }, { 62 .virtual = IO_ADDRESS(REALVIEW_SCTL_BASE), 63 .pfn = __phys_to_pfn(REALVIEW_SCTL_BASE), 64 .length = SZ_4K, ··· 103 #endif 104 }; 105 106 + static struct map_desc realview_eb11mp_io_desc[] __initdata = { 107 + { 108 + .virtual = IO_ADDRESS(REALVIEW_EB11MP_GIC_CPU_BASE), 109 + .pfn = __phys_to_pfn(REALVIEW_EB11MP_GIC_CPU_BASE), 110 + .length = SZ_4K, 111 + .type = MT_DEVICE, 112 + }, { 113 + .virtual = IO_ADDRESS(REALVIEW_EB11MP_GIC_DIST_BASE), 114 + .pfn = __phys_to_pfn(REALVIEW_EB11MP_GIC_DIST_BASE), 115 + .length = SZ_4K, 116 + .type = MT_DEVICE, 117 + }, { 118 + .virtual = IO_ADDRESS(REALVIEW_EB11MP_L220_BASE), 119 + .pfn = __phys_to_pfn(REALVIEW_EB11MP_L220_BASE), 120 + .length = SZ_8K, 121 + .type = MT_DEVICE, 122 + } 123 + }; 124 + 125 static void __init realview_eb_map_io(void) 126 { 127 iotable_init(realview_eb_io_desc, ARRAY_SIZE(realview_eb_io_desc)); 128 + if (core_tile_eb11mp()) 129 + iotable_init(realview_eb11mp_io_desc, ARRAY_SIZE(realview_eb11mp_io_desc)); 130 } 131 + 132 + /* 133 + * RealView EB AMBA devices 134 + */ 135 + 136 + /* 137 + * These devices are connected via the core APB bridge 138 + */ 139 + #define GPIO2_IRQ { IRQ_EB_GPIO2, NO_IRQ } 140 + #define GPIO2_DMA { 0, 0 } 141 + #define GPIO3_IRQ { IRQ_EB_GPIO3, NO_IRQ } 142 + #define GPIO3_DMA { 0, 0 } 143 + 144 + #define AACI_IRQ { IRQ_EB_AACI, NO_IRQ } 145 + #define AACI_DMA { 0x80, 0x81 } 146 + #define MMCI0_IRQ { IRQ_EB_MMCI0A, IRQ_EB_MMCI0B } 147 + #define MMCI0_DMA { 0x84, 0 } 148 + #define KMI0_IRQ { IRQ_EB_KMI0, NO_IRQ } 149 + #define KMI0_DMA { 0, 0 } 150 + #define KMI1_IRQ { IRQ_EB_KMI1, NO_IRQ } 151 + #define KMI1_DMA { 0, 0 } 152 + 153 + /* 154 + * These devices are connected directly to the multi-layer AHB switch 155 + */ 156 + #define SMC_IRQ { NO_IRQ, NO_IRQ } 157 + #define SMC_DMA { 0, 0 } 158 + #define MPMC_IRQ { NO_IRQ, NO_IRQ } 159 + #define MPMC_DMA { 0, 0 } 160 + #define CLCD_IRQ { IRQ_EB_CLCD, NO_IRQ } 161 + #define CLCD_DMA { 0, 0 } 162 + #define DMAC_IRQ { IRQ_EB_DMA, NO_IRQ } 163 + #define DMAC_DMA { 0, 0 } 164 + 165 + /* 166 + * These devices are connected via the core APB bridge 167 + */ 168 + #define SCTL_IRQ { NO_IRQ, NO_IRQ } 169 + #define SCTL_DMA { 0, 0 } 170 + #define WATCHDOG_IRQ { IRQ_EB_WDOG, NO_IRQ } 171 + #define WATCHDOG_DMA { 0, 0 } 172 + #define GPIO0_IRQ { IRQ_EB_GPIO0, NO_IRQ } 173 + #define GPIO0_DMA { 0, 0 } 174 + #define GPIO1_IRQ { IRQ_EB_GPIO1, NO_IRQ } 175 + #define GPIO1_DMA { 0, 0 } 176 + #define RTC_IRQ { IRQ_EB_RTC, NO_IRQ } 177 + #define RTC_DMA { 0, 0 } 178 + 179 + /* 180 + * These devices are connected via the DMA APB bridge 181 + */ 182 + #define SCI_IRQ { IRQ_EB_SCI, NO_IRQ } 183 + #define SCI_DMA { 7, 6 } 184 + #define UART0_IRQ { IRQ_EB_UART0, NO_IRQ } 185 + #define UART0_DMA { 15, 14 } 186 + #define UART1_IRQ { IRQ_EB_UART1, NO_IRQ } 187 + #define UART1_DMA { 13, 12 } 188 + #define UART2_IRQ { IRQ_EB_UART2, NO_IRQ } 189 + #define UART2_DMA { 11, 10 } 190 + #define UART3_IRQ { IRQ_EB_UART3, NO_IRQ } 191 + #define UART3_DMA { 0x86, 0x87 } 192 + #define SSP_IRQ { IRQ_EB_SSP, NO_IRQ } 193 + #define SSP_DMA { 9, 8 } 194 195 /* FPGA Primecells */ 196 AMBA_DEVICE(aaci, "fpga:04", AACI, NULL); ··· 153 &kmi1_device, 154 }; 155 156 + /* 157 + * RealView EB platform devices 158 + */ 159 + 160 + static struct resource realview_eb_smc91x_resources[] = { 161 + [0] = { 162 + .start = REALVIEW_ETH_BASE, 163 + .end = REALVIEW_ETH_BASE + SZ_64K - 1, 164 + .flags = IORESOURCE_MEM, 165 + }, 166 + [1] = { 167 + .start = IRQ_EB_ETH, 168 + .end = IRQ_EB_ETH, 169 + .flags = IORESOURCE_IRQ, 170 + }, 171 + }; 172 + 173 + static struct platform_device realview_eb_smc91x_device = { 174 + .name = "smc91x", 175 + .id = 0, 176 + .num_resources = ARRAY_SIZE(realview_eb_smc91x_resources), 177 + .resource = realview_eb_smc91x_resources, 178 + }; 179 + 180 static void __init gic_init_irq(void) 181 { 182 + if (core_tile_eb11mp()) { 183 + unsigned int pldctrl; 184 + 185 + /* new irq mode */ 186 + writel(0x0000a05f, __io_address(REALVIEW_SYS_LOCK)); 187 + pldctrl = readl(__io_address(REALVIEW_SYS_BASE) + REALVIEW_EB11MP_SYS_PLD_CTRL1); 188 + pldctrl |= 0x00800000; 189 + writel(pldctrl, __io_address(REALVIEW_SYS_BASE) + REALVIEW_EB11MP_SYS_PLD_CTRL1); 190 + writel(0x00000000, __io_address(REALVIEW_SYS_LOCK)); 191 + 192 + /* core tile GIC, primary */ 193 + gic_cpu_base_addr = __io_address(REALVIEW_EB11MP_GIC_CPU_BASE); 194 + gic_dist_init(0, __io_address(REALVIEW_EB11MP_GIC_DIST_BASE), 29); 195 + gic_cpu_init(0, gic_cpu_base_addr); 196 + 197 + #ifndef CONFIG_REALVIEW_EB_ARM11MP_REVB 198 + /* board GIC, secondary */ 199 + gic_dist_init(1, __io_address(REALVIEW_GIC_DIST_BASE), 64); 200 + gic_cpu_init(1, __io_address(REALVIEW_GIC_CPU_BASE)); 201 + gic_cascade_irq(1, IRQ_EB11MP_EB_IRQ1); 202 #endif 203 + } else { 204 + /* board GIC, primary */ 205 + gic_cpu_base_addr = __io_address(REALVIEW_GIC_CPU_BASE); 206 + gic_dist_init(0, __io_address(REALVIEW_GIC_DIST_BASE), 29); 207 + gic_cpu_init(0, gic_cpu_base_addr); 208 + } 209 } 210 + 211 + /* 212 + * Fix up the IRQ numbers for the RealView EB/ARM11MPCore tile 213 + */ 214 + static void realview_eb11mp_fixup(void) 215 + { 216 + /* AMBA devices */ 217 + dmac_device.irq[0] = IRQ_EB11MP_DMA; 218 + uart0_device.irq[0] = IRQ_EB11MP_UART0; 219 + uart1_device.irq[0] = IRQ_EB11MP_UART1; 220 + uart2_device.irq[0] = IRQ_EB11MP_UART2; 221 + uart3_device.irq[0] = IRQ_EB11MP_UART3; 222 + clcd_device.irq[0] = IRQ_EB11MP_CLCD; 223 + wdog_device.irq[0] = IRQ_EB11MP_WDOG; 224 + gpio0_device.irq[0] = IRQ_EB11MP_GPIO0; 225 + gpio1_device.irq[0] = IRQ_EB11MP_GPIO1; 226 + gpio2_device.irq[0] = IRQ_EB11MP_GPIO2; 227 + rtc_device.irq[0] = IRQ_EB11MP_RTC; 228 + sci0_device.irq[0] = IRQ_EB11MP_SCI; 229 + ssp0_device.irq[0] = IRQ_EB11MP_SSP; 230 + aaci_device.irq[0] = IRQ_EB11MP_AACI; 231 + mmc0_device.irq[0] = IRQ_EB11MP_MMCI0A; 232 + mmc0_device.irq[1] = IRQ_EB11MP_MMCI0B; 233 + kmi0_device.irq[0] = IRQ_EB11MP_KMI0; 234 + kmi1_device.irq[0] = IRQ_EB11MP_KMI1; 235 + 236 + /* platform devices */ 237 + realview_eb_smc91x_resources[1].start = IRQ_EB11MP_ETH; 238 + realview_eb_smc91x_resources[1].end = IRQ_EB11MP_ETH; 239 + } 240 + 241 + static void __init realview_eb_timer_init(void) 242 + { 243 + unsigned int timer_irq; 244 + 245 + if (core_tile_eb11mp()) { 246 + #ifdef CONFIG_LOCAL_TIMERS 247 + twd_base_addr = __io_address(REALVIEW_EB11MP_TWD_BASE); 248 + twd_size = REALVIEW_EB11MP_TWD_SIZE; 249 + #endif 250 + timer_irq = IRQ_EB11MP_TIMER0_1; 251 + } else 252 + timer_irq = IRQ_EB_TIMER0_1; 253 + 254 + realview_timer_init(timer_irq); 255 + } 256 + 257 + static struct sys_timer realview_eb_timer = { 258 + .init = realview_eb_timer_init, 259 + }; 260 261 static void __init realview_eb_init(void) 262 { 263 int i; 264 265 + if (core_tile_eb11mp()) { 266 + realview_eb11mp_fixup(); 267 + 268 + /* 1MB (128KB/way), 8-way associativity, evmon/parity/share enabled 269 + * Bits: .... ...0 0111 1001 0000 .... .... .... */ 270 + l2x0_init(__io_address(REALVIEW_EB11MP_L220_BASE), 0x00790000, 0xfe000fff); 271 + } 272 + 273 clk_register(&realview_clcd_clk); 274 275 platform_device_register(&realview_flash_device); 276 + platform_device_register(&realview_eb_smc91x_device); 277 platform_device_register(&realview_i2c_device); 278 279 for (i = 0; i < ARRAY_SIZE(amba_devs); i++) { ··· 204 .boot_params = 0x00000100, 205 .map_io = realview_eb_map_io, 206 .init_irq = gic_init_irq, 207 + .timer = &realview_eb_timer, 208 .init_machine = realview_eb_init, 209 MACHINE_END
+1 -1
arch/arm/mach-sa1100/generic.c
··· 470 * If the system is going to use the SA-1111 DMA engines, set up 471 * the memory bus request/grant pins. 472 */ 473 - void __init sa1110_mb_enable(void) 474 { 475 unsigned long flags; 476
··· 470 * If the system is going to use the SA-1111 DMA engines, set up 471 * the memory bus request/grant pins. 472 */ 473 + void __devinit sa1110_mb_enable(void) 474 { 475 unsigned long flags; 476
-4
arch/arm/plat-iop/time.c
··· 57 static irqreturn_t 58 iop_timer_interrupt(int irq, void *dev_id) 59 { 60 - write_seqlock(&xtime_lock); 61 - 62 write_tisr(1); 63 64 while ((signed long)(next_jiffy_time - read_tcr1()) ··· 64 timer_tick(); 65 next_jiffy_time -= ticks_per_jiffy; 66 } 67 - 68 - write_sequnlock(&xtime_lock); 69 70 return IRQ_HANDLED; 71 }
··· 57 static irqreturn_t 58 iop_timer_interrupt(int irq, void *dev_id) 59 { 60 write_tisr(1); 61 62 while ((signed long)(next_jiffy_time - read_tcr1()) ··· 66 timer_tick(); 67 next_jiffy_time -= ticks_per_jiffy; 68 } 69 70 return IRQ_HANDLED; 71 }
-2
arch/arm/plat-s3c24xx/time.c
··· 130 static irqreturn_t 131 s3c2410_timer_interrupt(int irq, void *dev_id) 132 { 133 - write_seqlock(&xtime_lock); 134 timer_tick(); 135 - write_sequnlock(&xtime_lock); 136 return IRQ_HANDLED; 137 } 138
··· 130 static irqreturn_t 131 s3c2410_timer_interrupt(int irq, void *dev_id) 132 { 133 timer_tick(); 134 return IRQ_HANDLED; 135 } 136
+1 -1
drivers/pcmcia/sa1100_jornada720.c
··· 101 .socket_suspend = sa1111_pcmcia_socket_suspend, 102 }; 103 104 - int __init pcmcia_jornada720_init(struct device *dev) 105 { 106 int ret = -ENODEV; 107
··· 101 .socket_suspend = sa1111_pcmcia_socket_suspend, 102 }; 103 104 + int __devinit pcmcia_jornada720_init(struct device *dev) 105 { 106 int ret = -ENODEV; 107
+6 -2
drivers/serial/21285.c
··· 237 baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/16); 238 quot = uart_get_divisor(port, baud); 239 240 switch (termios->c_cflag & CSIZE) { 241 case CS5: 242 h_lcr = 0x00; ··· 282 port->read_status_mask = RXSTAT_OVERRUN; 283 if (termios->c_iflag & INPCK) 284 port->read_status_mask |= RXSTAT_FRAME | RXSTAT_PARITY; 285 - 286 - tty_encode_baud_rate(tty, baud, baud); 287 288 /* 289 * Which character status flags should we ignore?
··· 237 baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/16); 238 quot = uart_get_divisor(port, baud); 239 240 + if (port->info && port->info->tty) { 241 + struct tty_struct *tty = port->info->tty; 242 + unsigned int b = port->uartclk / (16 * quot); 243 + tty_encode_baud_rate(tty, b, b); 244 + } 245 + 246 switch (termios->c_cflag & CSIZE) { 247 case CS5: 248 h_lcr = 0x00; ··· 276 port->read_status_mask = RXSTAT_OVERRUN; 277 if (termios->c_iflag & INPCK) 278 port->read_status_mask |= RXSTAT_FRAME | RXSTAT_PARITY; 279 280 /* 281 * Which character status flags should we ignore?
+1 -2
drivers/serial/atmel_serial.c
··· 34 #include <linux/tty_flip.h> 35 #include <linux/platform_device.h> 36 #include <linux/atmel_pdc.h> 37 38 #include <asm/io.h> 39 ··· 45 #include <asm/arch/cpu.h> 46 #include <asm/arch/gpio.h> 47 #endif 48 - 49 - #include "atmel_serial.h" 50 51 #if defined(CONFIG_SERIAL_ATMEL_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ) 52 #define SUPPORT_SYSRQ
··· 34 #include <linux/tty_flip.h> 35 #include <linux/platform_device.h> 36 #include <linux/atmel_pdc.h> 37 + #include <linux/atmel_serial.h> 38 39 #include <asm/io.h> 40 ··· 44 #include <asm/arch/cpu.h> 45 #include <asm/arch/gpio.h> 46 #endif 47 48 #if defined(CONFIG_SERIAL_ATMEL_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ) 49 #define SUPPORT_SYSRQ
+1 -1
drivers/serial/atmel_serial.h include/linux/atmel_serial.h
··· 1 /* 2 - * drivers/serial/atmel_serial.h 3 * 4 * Copyright (C) 2005 Ivan Kokshaysky 5 * Copyright (C) SAN People
··· 1 /* 2 + * include/linux/atmel_serial.h 3 * 4 * Copyright (C) 2005 Ivan Kokshaysky 5 * Copyright (C) SAN People
+1 -1
include/asm-arm/arch-at91/at91_mci.h
··· 89 #define AT91_MCI_ENDRX (1 << 6) /* End of RX Buffer */ 90 #define AT91_MCI_ENDTX (1 << 7) /* End fo TX Buffer */ 91 #define AT91_MCI_SDIOIRQA (1 << 8) /* SDIO Interrupt for Slot A */ 92 - #define At91_MCI_SDIOIRQB (1 << 9) /* SDIO Interrupt for Slot B [AT91RM9200 only] */ 93 #define AT91_MCI_RXBUFF (1 << 14) /* RX Buffer Full */ 94 #define AT91_MCI_TXBUFE (1 << 15) /* TX Buffer Empty */ 95 #define AT91_MCI_RINDE (1 << 16) /* Response Index Error */
··· 89 #define AT91_MCI_ENDRX (1 << 6) /* End of RX Buffer */ 90 #define AT91_MCI_ENDTX (1 << 7) /* End fo TX Buffer */ 91 #define AT91_MCI_SDIOIRQA (1 << 8) /* SDIO Interrupt for Slot A */ 92 + #define AT91_MCI_SDIOIRQB (1 << 9) /* SDIO Interrupt for Slot B */ 93 #define AT91_MCI_RXBUFF (1 << 14) /* RX Buffer Full */ 94 #define AT91_MCI_TXBUFE (1 << 15) /* TX Buffer Empty */ 95 #define AT91_MCI_RINDE (1 << 16) /* Response Index Error */
+5
include/asm-arm/arch-at91/at91rm9200.h
··· 93 #define AT91_RTC (0xfffffe00 - AT91_BASE_SYS) /* Real-Time Clock */ 94 #define AT91_MC (0xffffff00 - AT91_BASE_SYS) /* Memory Controllers */ 95 96 #define AT91_MATRIX 0 /* not supported */ 97 98 /*
··· 93 #define AT91_RTC (0xfffffe00 - AT91_BASE_SYS) /* Real-Time Clock */ 94 #define AT91_MC (0xffffff00 - AT91_BASE_SYS) /* Memory Controllers */ 95 96 + #define AT91_USART0 AT91RM9200_BASE_US0 97 + #define AT91_USART1 AT91RM9200_BASE_US1 98 + #define AT91_USART2 AT91RM9200_BASE_US2 99 + #define AT91_USART3 AT91RM9200_BASE_US3 100 + 101 #define AT91_MATRIX 0 /* not supported */ 102 103 /*
+7
include/asm-arm/arch-at91/at91sam9260.h
··· 99 #define AT91_WDT (0xfffffd40 - AT91_BASE_SYS) 100 #define AT91_GPBR (0xfffffd50 - AT91_BASE_SYS) 101 102 103 /* 104 * Internal Memory.
··· 99 #define AT91_WDT (0xfffffd40 - AT91_BASE_SYS) 100 #define AT91_GPBR (0xfffffd50 - AT91_BASE_SYS) 101 102 + #define AT91_USART0 AT91SAM9260_BASE_US0 103 + #define AT91_USART1 AT91SAM9260_BASE_US1 104 + #define AT91_USART2 AT91SAM9260_BASE_US2 105 + #define AT91_USART3 AT91SAM9260_BASE_US3 106 + #define AT91_USART4 AT91SAM9260_BASE_US4 107 + #define AT91_USART5 AT91SAM9260_BASE_US5 108 + 109 110 /* 111 * Internal Memory.
+4
include/asm-arm/arch-at91/at91sam9261.h
··· 84 #define AT91_WDT (0xfffffd40 - AT91_BASE_SYS) 85 #define AT91_GPBR (0xfffffd50 - AT91_BASE_SYS) 86 87 88 /* 89 * Internal Memory.
··· 84 #define AT91_WDT (0xfffffd40 - AT91_BASE_SYS) 85 #define AT91_GPBR (0xfffffd50 - AT91_BASE_SYS) 86 87 + #define AT91_USART0 AT91SAM9261_BASE_US0 88 + #define AT91_USART1 AT91SAM9261_BASE_US1 89 + #define AT91_USART2 AT91SAM9261_BASE_US2 90 + 91 92 /* 93 * Internal Memory.
+4
include/asm-arm/arch-at91/at91sam9263.h
··· 101 #define AT91_RTT1 (0xfffffd50 - AT91_BASE_SYS) 102 #define AT91_GPBR (0xfffffd60 - AT91_BASE_SYS) 103 104 #define AT91_SMC AT91_SMC0 105 106 /*
··· 101 #define AT91_RTT1 (0xfffffd50 - AT91_BASE_SYS) 102 #define AT91_GPBR (0xfffffd60 - AT91_BASE_SYS) 103 104 + #define AT91_USART0 AT91SAM9263_BASE_US0 105 + #define AT91_USART1 AT91SAM9263_BASE_US1 106 + #define AT91_USART2 AT91SAM9263_BASE_US2 107 + 108 #define AT91_SMC AT91_SMC0 109 110 /*
+5
include/asm-arm/arch-at91/at91sam9rl.h
··· 94 #define AT91_GPBR (0xfffffd60 - AT91_BASE_SYS) 95 #define AT91_RTC (0xfffffe00 - AT91_BASE_SYS) 96 97 98 /* 99 * Internal Memory.
··· 94 #define AT91_GPBR (0xfffffd60 - AT91_BASE_SYS) 95 #define AT91_RTC (0xfffffe00 - AT91_BASE_SYS) 96 97 + #define AT91_USART0 AT91SAM9RL_BASE_US0 98 + #define AT91_USART1 AT91SAM9RL_BASE_US1 99 + #define AT91_USART2 AT91SAM9RL_BASE_US2 100 + #define AT91_USART3 AT91SAM9RL_BASE_US3 101 + 102 103 /* 104 * Internal Memory.
+24 -8
include/asm-arm/arch-at91/uncompress.h
··· 22 #define __ASM_ARCH_UNCOMPRESS_H 23 24 #include <asm/io.h> 25 - #include <asm/arch/at91_dbgu.h> 26 27 /* 28 * The following code assumes the serial port has already been ··· 49 */ 50 static void putc(int c) 51 { 52 - #ifdef AT91_DBGU 53 - void __iomem *sys = (void __iomem *) AT91_BASE_SYS; /* physical address */ 54 55 - while (!(__raw_readl(sys + AT91_DBGU_SR) & AT91_DBGU_TXRDY)) 56 barrier(); 57 - __raw_writel(c, sys + AT91_DBGU_THR); 58 #endif 59 } 60 61 static inline void flush(void) 62 { 63 - #ifdef AT91_DBGU 64 - void __iomem *sys = (void __iomem *) AT91_BASE_SYS; /* physical address */ 65 66 /* wait for transmission to complete */ 67 - while (!(__raw_readl(sys + AT91_DBGU_SR) & AT91_DBGU_TXEMPTY)) 68 barrier(); 69 #endif 70 }
··· 22 #define __ASM_ARCH_UNCOMPRESS_H 23 24 #include <asm/io.h> 25 + #include <linux/atmel_serial.h> 26 + 27 + #if defined(CONFIG_AT91_EARLY_DBGU) 28 + #define UART_OFFSET (AT91_DBGU + AT91_BASE_SYS) 29 + #elif defined(CONFIG_AT91_EARLY_USART0) 30 + #define UART_OFFSET AT91_USART0 31 + #elif defined(CONFIG_AT91_EARLY_USART1) 32 + #define UART_OFFSET AT91_USART1 33 + #elif defined(CONFIG_AT91_EARLY_USART2) 34 + #define UART_OFFSET AT91_USART2 35 + #elif defined(CONFIG_AT91_EARLY_USART3) 36 + #define UART_OFFSET AT91_USART3 37 + #elif defined(CONFIG_AT91_EARLY_USART4) 38 + #define UART_OFFSET AT91_USART4 39 + #elif defined(CONFIG_AT91_EARLY_USART5) 40 + #define UART_OFFSET AT91_USART5 41 + #endif 42 43 /* 44 * The following code assumes the serial port has already been ··· 33 */ 34 static void putc(int c) 35 { 36 + #ifdef UART_OFFSET 37 + void __iomem *sys = (void __iomem *) UART_OFFSET; /* physical address */ 38 39 + while (!(__raw_readl(sys + ATMEL_US_CSR) & ATMEL_US_TXRDY)) 40 barrier(); 41 + __raw_writel(c, sys + ATMEL_US_THR); 42 #endif 43 } 44 45 static inline void flush(void) 46 { 47 + #ifdef UART_OFFSET 48 + void __iomem *sys = (void __iomem *) UART_OFFSET; /* physical address */ 49 50 /* wait for transmission to complete */ 51 + while (!(__raw_readl(sys + ATMEL_US_CSR) & ATMEL_US_TXEMPTY)) 52 barrier(); 53 #endif 54 }
+15
include/asm-arm/arch-ixp4xx/cpu.h
··· 28 #define cpu_is_ixp46x() ((processor_id & IXP4XX_PROCESSOR_ID_MASK) == \ 29 IXP465_PROCESSOR_ID_VALUE) 30 31 #endif /* _ASM_ARCH_CPU_H */
··· 28 #define cpu_is_ixp46x() ((processor_id & IXP4XX_PROCESSOR_ID_MASK) == \ 29 IXP465_PROCESSOR_ID_VALUE) 30 31 + static inline u32 ixp4xx_read_feature_bits(void) 32 + { 33 + unsigned int val = ~*IXP4XX_EXP_CFG2; 34 + val &= ~IXP4XX_FEATURE_RESERVED; 35 + if (!cpu_is_ixp46x()) 36 + val &= ~IXP4XX_FEATURE_IXP46X_ONLY; 37 + 38 + return val; 39 + } 40 + 41 + static inline void ixp4xx_write_feature_bits(u32 value) 42 + { 43 + *IXP4XX_EXP_CFG2 = ~value; 44 + } 45 + 46 #endif /* _ASM_ARCH_CPU_H */
+1 -6
include/asm-arm/arch-ixp4xx/dsmg600.h
··· 40 /* Buttons */ 41 42 #define DSMG600_PB_GPIO 15 /* power button */ 43 - #define DSMG600_PB_BM (1L << DSMG600_PB_GPIO) 44 - 45 #define DSMG600_RB_GPIO 3 /* reset button */ 46 47 - #define DSMG600_RB_IRQ IRQ_IXP4XX_GPIO3 48 49 #define DSMG600_PO_GPIO 2 /* power off */ 50 51 /* LEDs */ 52 53 #define DSMG600_LED_PWR_GPIO 0 54 - #define DSMG600_LED_PWR_BM (1L << DSMG600_LED_PWR_GPIO) 55 - 56 #define DSMG600_LED_WLAN_GPIO 14 57 - #define DSMG600_LED_WLAN_BM (1L << DSMG600_LED_WLAN_GPIO)
··· 40 /* Buttons */ 41 42 #define DSMG600_PB_GPIO 15 /* power button */ 43 #define DSMG600_RB_GPIO 3 /* reset button */ 44 45 + /* Power control */ 46 47 #define DSMG600_PO_GPIO 2 /* power off */ 48 49 /* LEDs */ 50 51 #define DSMG600_LED_PWR_GPIO 0 52 #define DSMG600_LED_WLAN_GPIO 14
+3 -3
include/asm-arm/arch-ixp4xx/hardware.h
··· 27 28 #define pcibios_assign_all_busses() 1 29 30 #ifndef __ASSEMBLER__ 31 #include <asm/arch/cpu.h> 32 #endif 33 - 34 - /* Register locations and bits */ 35 - #include "ixp4xx-regs.h" 36 37 /* Platform helper functions and definitions */ 38 #include "platform.h"
··· 27 28 #define pcibios_assign_all_busses() 1 29 30 + /* Register locations and bits */ 31 + #include "ixp4xx-regs.h" 32 + 33 #ifndef __ASSEMBLER__ 34 #include <asm/arch/cpu.h> 35 #endif 36 37 /* Platform helper functions and definitions */ 38 #include "platform.h"
+2
include/asm-arm/arch-ixp4xx/io.h
··· 13 #ifndef __ASM_ARM_ARCH_IO_H 14 #define __ASM_ARM_ARCH_IO_H 15 16 #include <asm/hardware.h> 17 18 #define IO_SPACE_LIMIT 0xffff0000
··· 13 #ifndef __ASM_ARM_ARCH_IO_H 14 #define __ASM_ARM_ARCH_IO_H 15 16 + #include <linux/bitops.h> 17 + 18 #include <asm/hardware.h> 19 20 #define IO_SPACE_LIMIT 0xffff0000
+32 -4
include/asm-arm/arch-ixp4xx/ixp4xx-regs.h
··· 15 * 16 */ 17 18 - #ifndef __ASM_ARCH_HARDWARE_H__ 19 - #error "Do not include this directly, instead #include <asm/hardware.h>" 20 - #endif 21 - 22 #ifndef _ASM_ARM_IXP4XX_H_ 23 #define _ASM_ARM_IXP4XX_H_ 24 ··· 602 #define USIR1_IR15 (1 << 7) /* Interrupt request ep 15 */ 603 604 #define DCMD_LENGTH 0x01fff /* length mask (max = 8K - 1) */ 605 606 #endif
··· 15 * 16 */ 17 18 #ifndef _ASM_ARM_IXP4XX_H_ 19 #define _ASM_ARM_IXP4XX_H_ 20 ··· 606 #define USIR1_IR15 (1 << 7) /* Interrupt request ep 15 */ 607 608 #define DCMD_LENGTH 0x01fff /* length mask (max = 8K - 1) */ 609 + 610 + /* "fuse" bits of IXP_EXP_CFG2 */ 611 + #define IXP4XX_FEATURE_RCOMP (1 << 0) 612 + #define IXP4XX_FEATURE_USB_DEVICE (1 << 1) 613 + #define IXP4XX_FEATURE_HASH (1 << 2) 614 + #define IXP4XX_FEATURE_AES (1 << 3) 615 + #define IXP4XX_FEATURE_DES (1 << 4) 616 + #define IXP4XX_FEATURE_HDLC (1 << 5) 617 + #define IXP4XX_FEATURE_AAL (1 << 6) 618 + #define IXP4XX_FEATURE_HSS (1 << 7) 619 + #define IXP4XX_FEATURE_UTOPIA (1 << 8) 620 + #define IXP4XX_FEATURE_NPEB_ETH0 (1 << 9) 621 + #define IXP4XX_FEATURE_NPEC_ETH (1 << 10) 622 + #define IXP4XX_FEATURE_RESET_NPEA (1 << 11) 623 + #define IXP4XX_FEATURE_RESET_NPEB (1 << 12) 624 + #define IXP4XX_FEATURE_RESET_NPEC (1 << 13) 625 + #define IXP4XX_FEATURE_PCI (1 << 14) 626 + #define IXP4XX_FEATURE_ECC_TIMESYNC (1 << 15) 627 + #define IXP4XX_FEATURE_UTOPIA_PHY_LIMIT (3 << 16) 628 + #define IXP4XX_FEATURE_USB_HOST (1 << 18) 629 + #define IXP4XX_FEATURE_NPEA_ETH (1 << 19) 630 + #define IXP4XX_FEATURE_NPEB_ETH_1_TO_3 (1 << 20) 631 + #define IXP4XX_FEATURE_RSA (1 << 21) 632 + #define IXP4XX_FEATURE_XSCALE_MAX_FREQ (3 << 22) 633 + #define IXP4XX_FEATURE_RESERVED (0xFF << 24) 634 + 635 + #define IXP4XX_FEATURE_IXP46X_ONLY (IXP4XX_FEATURE_ECC_TIMESYNC | \ 636 + IXP4XX_FEATURE_USB_HOST | \ 637 + IXP4XX_FEATURE_NPEA_ETH | \ 638 + IXP4XX_FEATURE_NPEB_ETH_1_TO_3 | \ 639 + IXP4XX_FEATURE_RSA | \ 640 + IXP4XX_FEATURE_XSCALE_MAX_FREQ) 641 642 #endif
+9 -9
include/asm-arm/arch-ixp4xx/nas100d.h
··· 38 39 /* Buttons */ 40 41 - #define NAS100D_PB_GPIO 14 42 - #define NAS100D_RB_GPIO 4 43 #define NAS100D_PO_GPIO 12 /* power off */ 44 45 - #define NAS100D_PB_IRQ IRQ_IXP4XX_GPIO14 46 - #define NAS100D_RB_IRQ IRQ_IXP4XX_GPIO4 47 48 - /* 49 - #define NAS100D_PB_BM (1L << NAS100D_PB_GPIO) 50 - #define NAS100D_PO_BM (1L << NAS100D_PO_GPIO) 51 - #define NAS100D_RB_BM (1L << NAS100D_RB_GPIO) 52 - */
··· 38 39 /* Buttons */ 40 41 + #define NAS100D_PB_GPIO 14 /* power button */ 42 + #define NAS100D_RB_GPIO 4 /* reset button */ 43 + 44 + /* Power control */ 45 + 46 #define NAS100D_PO_GPIO 12 /* power off */ 47 48 + /* LEDs */ 49 50 + #define NAS100D_LED_WLAN_GPIO 0 51 + #define NAS100D_LED_DISK_GPIO 3 52 + #define NAS100D_LED_PWR_GPIO 15
+39
include/asm-arm/arch-ixp4xx/npe.h
···
··· 1 + #ifndef __IXP4XX_NPE_H 2 + #define __IXP4XX_NPE_H 3 + 4 + #include <linux/kernel.h> 5 + 6 + extern const char *npe_names[]; 7 + 8 + struct npe_regs { 9 + u32 exec_addr, exec_data, exec_status_cmd, exec_count; 10 + u32 action_points[4]; 11 + u32 watchpoint_fifo, watch_count; 12 + u32 profile_count; 13 + u32 messaging_status, messaging_control; 14 + u32 mailbox_status, /*messaging_*/ in_out_fifo; 15 + }; 16 + 17 + struct npe { 18 + struct resource *mem_res; 19 + struct npe_regs __iomem *regs; 20 + u32 regs_phys; 21 + int id; 22 + int valid; 23 + }; 24 + 25 + 26 + static inline const char *npe_name(struct npe *npe) 27 + { 28 + return npe_names[npe->id]; 29 + } 30 + 31 + int npe_running(struct npe *npe); 32 + int npe_send_message(struct npe *npe, const void *msg, const char *what); 33 + int npe_recv_message(struct npe *npe, void *msg, const char *what); 34 + int npe_send_recv_message(struct npe *npe, void *msg, const char *what); 35 + int npe_load_firmware(struct npe *npe, const char *name, struct device *dev); 36 + struct npe *npe_request(int id); 37 + void npe_release(struct npe *npe); 38 + 39 + #endif /* __IXP4XX_NPE_H */
+2 -19
include/asm-arm/arch-ixp4xx/nslu2.h
··· 39 40 /* Buttons */ 41 42 - #define NSLU2_PB_GPIO 5 43 #define NSLU2_PO_GPIO 8 /* power off */ 44 - #define NSLU2_RB_GPIO 12 45 - 46 - #define NSLU2_PB_IRQ IRQ_IXP4XX_GPIO5 47 - #define NSLU2_RB_IRQ IRQ_IXP4XX_GPIO12 48 - 49 - #define NSLU2_PB_BM (1L << NSLU2_PB_GPIO) 50 - #define NSLU2_PO_BM (1L << NSLU2_PO_GPIO) 51 - #define NSLU2_RB_BM (1L << NSLU2_RB_GPIO) 52 53 /* Buzzer */ 54 55 #define NSLU2_GPIO_BUZZ 4 56 - #define NSLU2_BZ_BM (1L << NSLU2_GPIO_BUZZ) 57 58 /* LEDs */ 59 60 #define NSLU2_LED_RED_GPIO 0 61 #define NSLU2_LED_GRN_GPIO 1 62 - 63 - #define NSLU2_LED_RED_BM (1L << NSLU2_LED_RED_GPIO) 64 - #define NSLU2_LED_GRN_BM (1L << NSLU2_LED_GRN_GPIO) 65 - 66 #define NSLU2_LED_DISK1_GPIO 3 67 #define NSLU2_LED_DISK2_GPIO 2 68 - 69 - #define NSLU2_LED_DISK1_BM (1L << NSLU2_LED_DISK1_GPIO) 70 - #define NSLU2_LED_DISK2_BM (1L << NSLU2_LED_DISK2_GPIO) 71 - 72 -
··· 39 40 /* Buttons */ 41 42 + #define NSLU2_PB_GPIO 5 /* power button */ 43 #define NSLU2_PO_GPIO 8 /* power off */ 44 + #define NSLU2_RB_GPIO 12 /* reset button */ 45 46 /* Buzzer */ 47 48 #define NSLU2_GPIO_BUZZ 4 49 50 /* LEDs */ 51 52 #define NSLU2_LED_RED_GPIO 0 53 #define NSLU2_LED_GRN_GPIO 1 54 #define NSLU2_LED_DISK1_GPIO 3 55 #define NSLU2_LED_DISK2_GPIO 2
+21
include/asm-arm/arch-ixp4xx/platform.h
··· 91 92 struct sys_timer; 93 94 /* 95 * Frequency of clock used for primary clocksource 96 */
··· 91 92 struct sys_timer; 93 94 + #define IXP4XX_ETH_NPEA 0x00 95 + #define IXP4XX_ETH_NPEB 0x10 96 + #define IXP4XX_ETH_NPEC 0x20 97 + 98 + /* Information about built-in Ethernet MAC interfaces */ 99 + struct eth_plat_info { 100 + u8 phy; /* MII PHY ID, 0 - 31 */ 101 + u8 rxq; /* configurable, currently 0 - 31 only */ 102 + u8 txreadyq; 103 + u8 hwaddr[6]; 104 + }; 105 + 106 + /* Information about built-in HSS (synchronous serial) interfaces */ 107 + struct hss_plat_info { 108 + int (*set_clock)(int port, unsigned int clock_type); 109 + int (*open)(int port, void *pdev, 110 + void (*set_carrier_cb)(void *pdev, int carrier)); 111 + void (*close)(int port, void *pdev); 112 + u8 txreadyq; 113 + }; 114 + 115 /* 116 * Frequency of clock used for primary clocksource 117 */
+126
include/asm-arm/arch-ixp4xx/qmgr.h
···
··· 1 + /* 2 + * Copyright (C) 2007 Krzysztof Halasa <khc@pm.waw.pl> 3 + * 4 + * This program is free software; you can redistribute it and/or modify it 5 + * under the terms of version 2 of the GNU General Public License 6 + * as published by the Free Software Foundation. 7 + */ 8 + 9 + #ifndef IXP4XX_QMGR_H 10 + #define IXP4XX_QMGR_H 11 + 12 + #include <linux/io.h> 13 + #include <linux/kernel.h> 14 + 15 + #define HALF_QUEUES 32 16 + #define QUEUES 64 /* only 32 lower queues currently supported */ 17 + #define MAX_QUEUE_LENGTH 4 /* in dwords */ 18 + 19 + #define QUEUE_STAT1_EMPTY 1 /* queue status bits */ 20 + #define QUEUE_STAT1_NEARLY_EMPTY 2 21 + #define QUEUE_STAT1_NEARLY_FULL 4 22 + #define QUEUE_STAT1_FULL 8 23 + #define QUEUE_STAT2_UNDERFLOW 1 24 + #define QUEUE_STAT2_OVERFLOW 2 25 + 26 + #define QUEUE_WATERMARK_0_ENTRIES 0 27 + #define QUEUE_WATERMARK_1_ENTRY 1 28 + #define QUEUE_WATERMARK_2_ENTRIES 2 29 + #define QUEUE_WATERMARK_4_ENTRIES 3 30 + #define QUEUE_WATERMARK_8_ENTRIES 4 31 + #define QUEUE_WATERMARK_16_ENTRIES 5 32 + #define QUEUE_WATERMARK_32_ENTRIES 6 33 + #define QUEUE_WATERMARK_64_ENTRIES 7 34 + 35 + /* queue interrupt request conditions */ 36 + #define QUEUE_IRQ_SRC_EMPTY 0 37 + #define QUEUE_IRQ_SRC_NEARLY_EMPTY 1 38 + #define QUEUE_IRQ_SRC_NEARLY_FULL 2 39 + #define QUEUE_IRQ_SRC_FULL 3 40 + #define QUEUE_IRQ_SRC_NOT_EMPTY 4 41 + #define QUEUE_IRQ_SRC_NOT_NEARLY_EMPTY 5 42 + #define QUEUE_IRQ_SRC_NOT_NEARLY_FULL 6 43 + #define QUEUE_IRQ_SRC_NOT_FULL 7 44 + 45 + struct qmgr_regs { 46 + u32 acc[QUEUES][MAX_QUEUE_LENGTH]; /* 0x000 - 0x3FF */ 47 + u32 stat1[4]; /* 0x400 - 0x40F */ 48 + u32 stat2[2]; /* 0x410 - 0x417 */ 49 + u32 statne_h; /* 0x418 - queue nearly empty */ 50 + u32 statf_h; /* 0x41C - queue full */ 51 + u32 irqsrc[4]; /* 0x420 - 0x42F IRC source */ 52 + u32 irqen[2]; /* 0x430 - 0x437 IRQ enabled */ 53 + u32 irqstat[2]; /* 0x438 - 0x43F - IRQ access only */ 54 + u32 reserved[1776]; 55 + u32 sram[2048]; /* 0x2000 - 0x3FFF - config and buffer */ 56 + }; 57 + 58 + void qmgr_set_irq(unsigned int queue, int src, 59 + void (*handler)(void *pdev), void *pdev); 60 + void qmgr_enable_irq(unsigned int queue); 61 + void qmgr_disable_irq(unsigned int queue); 62 + 63 + /* request_ and release_queue() must be called from non-IRQ context */ 64 + int qmgr_request_queue(unsigned int queue, unsigned int len /* dwords */, 65 + unsigned int nearly_empty_watermark, 66 + unsigned int nearly_full_watermark); 67 + void qmgr_release_queue(unsigned int queue); 68 + 69 + 70 + static inline void qmgr_put_entry(unsigned int queue, u32 val) 71 + { 72 + extern struct qmgr_regs __iomem *qmgr_regs; 73 + __raw_writel(val, &qmgr_regs->acc[queue][0]); 74 + } 75 + 76 + static inline u32 qmgr_get_entry(unsigned int queue) 77 + { 78 + extern struct qmgr_regs __iomem *qmgr_regs; 79 + return __raw_readl(&qmgr_regs->acc[queue][0]); 80 + } 81 + 82 + static inline int qmgr_get_stat1(unsigned int queue) 83 + { 84 + extern struct qmgr_regs __iomem *qmgr_regs; 85 + return (__raw_readl(&qmgr_regs->stat1[queue >> 3]) 86 + >> ((queue & 7) << 2)) & 0xF; 87 + } 88 + 89 + static inline int qmgr_get_stat2(unsigned int queue) 90 + { 91 + extern struct qmgr_regs __iomem *qmgr_regs; 92 + return (__raw_readl(&qmgr_regs->stat2[queue >> 4]) 93 + >> ((queue & 0xF) << 1)) & 0x3; 94 + } 95 + 96 + static inline int qmgr_stat_empty(unsigned int queue) 97 + { 98 + return !!(qmgr_get_stat1(queue) & QUEUE_STAT1_EMPTY); 99 + } 100 + 101 + static inline int qmgr_stat_nearly_empty(unsigned int queue) 102 + { 103 + return !!(qmgr_get_stat1(queue) & QUEUE_STAT1_NEARLY_EMPTY); 104 + } 105 + 106 + static inline int qmgr_stat_nearly_full(unsigned int queue) 107 + { 108 + return !!(qmgr_get_stat1(queue) & QUEUE_STAT1_NEARLY_FULL); 109 + } 110 + 111 + static inline int qmgr_stat_full(unsigned int queue) 112 + { 113 + return !!(qmgr_get_stat1(queue) & QUEUE_STAT1_FULL); 114 + } 115 + 116 + static inline int qmgr_stat_underflow(unsigned int queue) 117 + { 118 + return !!(qmgr_get_stat2(queue) & QUEUE_STAT2_UNDERFLOW); 119 + } 120 + 121 + static inline int qmgr_stat_overflow(unsigned int queue) 122 + { 123 + return !!(qmgr_get_stat2(queue) & QUEUE_STAT2_OVERFLOW); 124 + } 125 + 126 + #endif
+1 -1
include/asm-arm/arch-ixp4xx/uncompress.h
··· 13 #ifndef _ARCH_UNCOMPRESS_H_ 14 #define _ARCH_UNCOMPRESS_H_ 15 16 - #include <asm/hardware.h> 17 #include <asm/mach-types.h> 18 #include <linux/serial_reg.h> 19
··· 13 #ifndef _ARCH_UNCOMPRESS_H_ 14 #define _ARCH_UNCOMPRESS_H_ 15 16 + #include "ixp4xx-regs.h" 17 #include <asm/mach-types.h> 18 #include <linux/serial_reg.h> 19
+13
include/asm-arm/arch-pxa/pxa3xx-regs.h
··· 12 13 #ifndef __ASM_ARCH_PXA3XX_REGS_H 14 #define __ASM_ARCH_PXA3XX_REGS_H 15 16 /* 17 * Slave Power Managment Unit
··· 12 13 #ifndef __ASM_ARCH_PXA3XX_REGS_H 14 #define __ASM_ARCH_PXA3XX_REGS_H 15 + /* 16 + * Service Power Management Unit (MPMU) 17 + */ 18 + #define PMCR __REG(0x40F50000) /* Power Manager Control Register */ 19 + #define PSR __REG(0x40F50004) /* Power Manager S2 Status Register */ 20 + #define PSPR __REG(0x40F50008) /* Power Manager Scratch Pad Register */ 21 + #define PCFR __REG(0x40F5000C) /* Power Manager General Configuration Register */ 22 + #define PWER __REG(0x40F50010) /* Power Manager Wake-up Enable Register */ 23 + #define PWSR __REG(0x40F50014) /* Power Manager Wake-up Status Register */ 24 + #define PECR __REG(0x40F50018) /* Power Manager EXT_WAKEUP[1:0] Control Register */ 25 + #define DCDCSR __REG(0x40F50080) /* DC-DC Controller Status Register */ 26 + #define PVCR __REG(0x40F50100) /* Power Manager Voltage Change Control Register */ 27 + #define PCMD(x) __REG(0x40F50110 + ((x) << 2)) 28 29 /* 30 * Slave Power Managment Unit
+171
include/asm-arm/arch-realview/board-eb.h
···
··· 1 + /* 2 + * include/asm-arm/arch-realview/board-eb.h 3 + * 4 + * Copyright (C) 2007 ARM Limited 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 + * 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., 51 Franklin Street, Fifth Floor, Boston, 18 + * MA 02110-1301, USA. 19 + */ 20 + 21 + #ifndef __ASM_ARCH_BOARD_EB_H 22 + #define __ASM_ARCH_BOARD_EB_H 23 + 24 + #include <asm/arch/platform.h> 25 + 26 + /* 27 + * RealView EB + ARM11MPCore peripheral addresses 28 + */ 29 + #ifdef CONFIG_REALVIEW_EB_ARM11MP_REVB 30 + #define REALVIEW_EB11MP_SCU_BASE 0x10100000 /* SCU registers */ 31 + #define REALVIEW_EB11MP_GIC_CPU_BASE 0x10100100 /* Generic interrupt controller CPU interface */ 32 + #define REALVIEW_EB11MP_TWD_BASE 0x10100700 33 + #define REALVIEW_EB11MP_TWD_SIZE 0x00000100 34 + #define REALVIEW_EB11MP_GIC_DIST_BASE 0x10101000 /* Generic interrupt controller distributor */ 35 + #define REALVIEW_EB11MP_L220_BASE 0x10102000 /* L220 registers */ 36 + #define REALVIEW_EB11MP_SYS_PLD_CTRL1 0xD8 /* Register offset for MPCore sysctl */ 37 + #else 38 + #define REALVIEW_EB11MP_SCU_BASE 0x1F000000 /* SCU registers */ 39 + #define REALVIEW_EB11MP_GIC_CPU_BASE 0x1F000100 /* Generic interrupt controller CPU interface */ 40 + #define REALVIEW_EB11MP_TWD_BASE 0x1F000700 41 + #define REALVIEW_EB11MP_TWD_SIZE 0x00000100 42 + #define REALVIEW_EB11MP_GIC_DIST_BASE 0x1F001000 /* Generic interrupt controller distributor */ 43 + #define REALVIEW_EB11MP_L220_BASE 0x1F002000 /* L220 registers */ 44 + #define REALVIEW_EB11MP_SYS_PLD_CTRL1 0x74 /* Register offset for MPCore sysctl */ 45 + #endif 46 + 47 + #define IRQ_EB_GIC_START 32 48 + 49 + /* 50 + * RealView EB interrupt sources 51 + */ 52 + #define IRQ_EB_WDOG (IRQ_EB_GIC_START + 0) /* Watchdog timer */ 53 + #define IRQ_EB_SOFT (IRQ_EB_GIC_START + 1) /* Software interrupt */ 54 + #define IRQ_EB_COMMRx (IRQ_EB_GIC_START + 2) /* Debug Comm Rx interrupt */ 55 + #define IRQ_EB_COMMTx (IRQ_EB_GIC_START + 3) /* Debug Comm Tx interrupt */ 56 + #define IRQ_EB_TIMER0_1 (IRQ_EB_GIC_START + 4) /* Timer 0 and 1 */ 57 + #define IRQ_EB_TIMER2_3 (IRQ_EB_GIC_START + 5) /* Timer 2 and 3 */ 58 + #define IRQ_EB_GPIO0 (IRQ_EB_GIC_START + 6) /* GPIO 0 */ 59 + #define IRQ_EB_GPIO1 (IRQ_EB_GIC_START + 7) /* GPIO 1 */ 60 + #define IRQ_EB_GPIO2 (IRQ_EB_GIC_START + 8) /* GPIO 2 */ 61 + /* 9 reserved */ 62 + #define IRQ_EB_RTC (IRQ_EB_GIC_START + 10) /* Real Time Clock */ 63 + #define IRQ_EB_SSP (IRQ_EB_GIC_START + 11) /* Synchronous Serial Port */ 64 + #define IRQ_EB_UART0 (IRQ_EB_GIC_START + 12) /* UART 0 on development chip */ 65 + #define IRQ_EB_UART1 (IRQ_EB_GIC_START + 13) /* UART 1 on development chip */ 66 + #define IRQ_EB_UART2 (IRQ_EB_GIC_START + 14) /* UART 2 on development chip */ 67 + #define IRQ_EB_UART3 (IRQ_EB_GIC_START + 15) /* UART 3 on development chip */ 68 + #define IRQ_EB_SCI (IRQ_EB_GIC_START + 16) /* Smart Card Interface */ 69 + #define IRQ_EB_MMCI0A (IRQ_EB_GIC_START + 17) /* Multimedia Card 0A */ 70 + #define IRQ_EB_MMCI0B (IRQ_EB_GIC_START + 18) /* Multimedia Card 0B */ 71 + #define IRQ_EB_AACI (IRQ_EB_GIC_START + 19) /* Audio Codec */ 72 + #define IRQ_EB_KMI0 (IRQ_EB_GIC_START + 20) /* Keyboard/Mouse port 0 */ 73 + #define IRQ_EB_KMI1 (IRQ_EB_GIC_START + 21) /* Keyboard/Mouse port 1 */ 74 + #define IRQ_EB_CHARLCD (IRQ_EB_GIC_START + 22) /* Character LCD */ 75 + #define IRQ_EB_CLCD (IRQ_EB_GIC_START + 23) /* CLCD controller */ 76 + #define IRQ_EB_DMA (IRQ_EB_GIC_START + 24) /* DMA controller */ 77 + #define IRQ_EB_PWRFAIL (IRQ_EB_GIC_START + 25) /* Power failure */ 78 + #define IRQ_EB_PISMO (IRQ_EB_GIC_START + 26) /* PISMO interface */ 79 + #define IRQ_EB_DoC (IRQ_EB_GIC_START + 27) /* Disk on Chip memory controller */ 80 + #define IRQ_EB_ETH (IRQ_EB_GIC_START + 28) /* Ethernet controller */ 81 + #define IRQ_EB_USB (IRQ_EB_GIC_START + 29) /* USB controller */ 82 + #define IRQ_EB_TSPEN (IRQ_EB_GIC_START + 30) /* Touchscreen pen */ 83 + #define IRQ_EB_TSKPAD (IRQ_EB_GIC_START + 31) /* Touchscreen keypad */ 84 + 85 + /* 86 + * RealView EB + ARM11MPCore interrupt sources (primary GIC on the core tile) 87 + */ 88 + #define IRQ_EB11MP_AACI (IRQ_EB_GIC_START + 0) 89 + #define IRQ_EB11MP_TIMER0_1 (IRQ_EB_GIC_START + 1) 90 + #define IRQ_EB11MP_TIMER2_3 (IRQ_EB_GIC_START + 2) 91 + #define IRQ_EB11MP_USB (IRQ_EB_GIC_START + 3) 92 + #define IRQ_EB11MP_UART0 (IRQ_EB_GIC_START + 4) 93 + #define IRQ_EB11MP_UART1 (IRQ_EB_GIC_START + 5) 94 + #define IRQ_EB11MP_RTC (IRQ_EB_GIC_START + 6) 95 + #define IRQ_EB11MP_KMI0 (IRQ_EB_GIC_START + 7) 96 + #define IRQ_EB11MP_KMI1 (IRQ_EB_GIC_START + 8) 97 + #define IRQ_EB11MP_ETH (IRQ_EB_GIC_START + 9) 98 + #define IRQ_EB11MP_EB_IRQ1 (IRQ_EB_GIC_START + 10) /* main GIC */ 99 + #define IRQ_EB11MP_EB_IRQ2 (IRQ_EB_GIC_START + 11) /* tile GIC */ 100 + #define IRQ_EB11MP_EB_FIQ1 (IRQ_EB_GIC_START + 12) /* main GIC */ 101 + #define IRQ_EB11MP_EB_FIQ2 (IRQ_EB_GIC_START + 13) /* tile GIC */ 102 + #define IRQ_EB11MP_MMCI0A (IRQ_EB_GIC_START + 14) 103 + #define IRQ_EB11MP_MMCI0B (IRQ_EB_GIC_START + 15) 104 + 105 + #define IRQ_EB11MP_PMU_CPU0 (IRQ_EB_GIC_START + 17) 106 + #define IRQ_EB11MP_PMU_CPU1 (IRQ_EB_GIC_START + 18) 107 + #define IRQ_EB11MP_PMU_CPU2 (IRQ_EB_GIC_START + 19) 108 + #define IRQ_EB11MP_PMU_CPU3 (IRQ_EB_GIC_START + 20) 109 + #define IRQ_EB11MP_PMU_SCU0 (IRQ_EB_GIC_START + 21) 110 + #define IRQ_EB11MP_PMU_SCU1 (IRQ_EB_GIC_START + 22) 111 + #define IRQ_EB11MP_PMU_SCU2 (IRQ_EB_GIC_START + 23) 112 + #define IRQ_EB11MP_PMU_SCU3 (IRQ_EB_GIC_START + 24) 113 + #define IRQ_EB11MP_PMU_SCU4 (IRQ_EB_GIC_START + 25) 114 + #define IRQ_EB11MP_PMU_SCU5 (IRQ_EB_GIC_START + 26) 115 + #define IRQ_EB11MP_PMU_SCU6 (IRQ_EB_GIC_START + 27) 116 + #define IRQ_EB11MP_PMU_SCU7 (IRQ_EB_GIC_START + 28) 117 + 118 + #define IRQ_EB11MP_L220_EVENT (IRQ_EB_GIC_START + 29) 119 + #define IRQ_EB11MP_L220_SLAVE (IRQ_EB_GIC_START + 30) 120 + #define IRQ_EB11MP_L220_DECODE (IRQ_EB_GIC_START + 31) 121 + 122 + #define IRQ_EB11MP_UART2 -1 123 + #define IRQ_EB11MP_UART3 -1 124 + #define IRQ_EB11MP_CLCD -1 125 + #define IRQ_EB11MP_DMA -1 126 + #define IRQ_EB11MP_WDOG -1 127 + #define IRQ_EB11MP_GPIO0 -1 128 + #define IRQ_EB11MP_GPIO1 -1 129 + #define IRQ_EB11MP_GPIO2 -1 130 + #define IRQ_EB11MP_SCI -1 131 + #define IRQ_EB11MP_SSP -1 132 + 133 + #define NR_GIC_EB11MP 2 134 + 135 + /* 136 + * Only define NR_IRQS if less than NR_IRQS_EB 137 + */ 138 + #define NR_IRQS_EB (IRQ_EB_GIC_START + 96) 139 + 140 + #if defined(CONFIG_MACH_REALVIEW_EB) \ 141 + && (!defined(NR_IRQS) || (NR_IRQS < NR_IRQS_EB)) 142 + #undef NR_IRQS 143 + #define NR_IRQS NR_IRQS_EB 144 + #endif 145 + 146 + #if defined(CONFIG_REALVIEW_EB_ARM11MP) \ 147 + && (!defined(MAX_GIC_NR) || (MAX_GIC_NR < NR_GIC_EB11MP)) 148 + #undef MAX_GIC_NR 149 + #define MAX_GIC_NR NR_GIC_EB11MP 150 + #endif 151 + 152 + /* 153 + * Core tile identification (REALVIEW_SYS_PROCID) 154 + */ 155 + #define REALVIEW_EB_PROC_MASK 0xFF000000 156 + #define REALVIEW_EB_PROC_ARM7TDMI 0x00000000 157 + #define REALVIEW_EB_PROC_ARM9 0x02000000 158 + #define REALVIEW_EB_PROC_ARM11 0x04000000 159 + #define REALVIEW_EB_PROC_ARM11MP 0x06000000 160 + 161 + #define check_eb_proc(proc_type) \ 162 + ((readl(__io_address(REALVIEW_SYS_PROCID)) & REALVIEW_EB_PROC_MASK) \ 163 + == proc_type) 164 + 165 + #ifdef CONFIG_REALVIEW_EB_ARM11MP 166 + #define core_tile_eb11mp() check_eb_proc(REALVIEW_EB_PROC_ARM11MP) 167 + #else 168 + #define core_tile_eb11mp() 0 169 + #endif 170 + 171 + #endif /* __ASM_ARCH_BOARD_EB_H */
+2 -1
include/asm-arm/arch-realview/entry-macro.S
··· 14 .endm 15 16 .macro get_irqnr_preamble, base, tmp 17 - ldr \base, =IO_ADDRESS(REALVIEW_GIC_CPU_BASE) 18 .endm 19 20 .macro arch_ret_to_user, tmp1, tmp2
··· 14 .endm 15 16 .macro get_irqnr_preamble, base, tmp 17 + ldr \base, =gic_cpu_base_addr 18 + ldr \base, [\base] 19 .endm 20 21 .macro arch_ret_to_user, tmp1, tmp2
-1
include/asm-arm/arch-realview/hardware.h
··· 23 #define __ASM_ARCH_HARDWARE_H 24 25 #include <asm/sizes.h> 26 - #include <asm/arch/platform.h> 27 28 /* macro to get at IO space when running virtually */ 29 #define IO_ADDRESS(x) ((((x) & 0x0effffff) | (((x) >> 4) & 0x0f000000)) + 0xf0000000)
··· 23 #define __ASM_ARCH_HARDWARE_H 24 25 #include <asm/sizes.h> 26 27 /* macro to get at IO space when running virtually */ 28 #define IO_ADDRESS(x) ((((x) & 0x0effffff) | (((x) >> 4) & 0x0f000000)) + 0xf0000000)
+10 -95
include/asm-arm/arch-realview/irqs.h
··· 19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 */ 21 22 - #include <asm/arch/platform.h> 23 24 - #define IRQ_LOCALTIMER 29 25 - #define IRQ_LOCALWDOG 30 26 27 - /* 28 - * IRQ interrupts definitions are the same the INT definitions 29 - * held within platform.h 30 - */ 31 #define IRQ_GIC_START 32 32 - #define IRQ_WDOGINT (IRQ_GIC_START + INT_WDOGINT) 33 - #define IRQ_SOFTINT (IRQ_GIC_START + INT_SOFTINT) 34 - #define IRQ_COMMRx (IRQ_GIC_START + INT_COMMRx) 35 - #define IRQ_COMMTx (IRQ_GIC_START + INT_COMMTx) 36 - #define IRQ_TIMERINT0_1 (IRQ_GIC_START + INT_TIMERINT0_1) 37 - #define IRQ_TIMERINT2_3 (IRQ_GIC_START + INT_TIMERINT2_3) 38 - #define IRQ_GPIOINT0 (IRQ_GIC_START + INT_GPIOINT0) 39 - #define IRQ_GPIOINT1 (IRQ_GIC_START + INT_GPIOINT1) 40 - #define IRQ_GPIOINT2 (IRQ_GIC_START + INT_GPIOINT2) 41 - #define IRQ_GPIOINT3 (IRQ_GIC_START + INT_GPIOINT3) 42 - #define IRQ_RTCINT (IRQ_GIC_START + INT_RTCINT) 43 - #define IRQ_SSPINT (IRQ_GIC_START + INT_SSPINT) 44 - #define IRQ_UARTINT0 (IRQ_GIC_START + INT_UARTINT0) 45 - #define IRQ_UARTINT1 (IRQ_GIC_START + INT_UARTINT1) 46 - #define IRQ_UARTINT2 (IRQ_GIC_START + INT_UARTINT2) 47 - #define IRQ_UART3 (IRQ_GIC_START + INT_UARTINT3) 48 - #define IRQ_SCIINT (IRQ_GIC_START + INT_SCIINT) 49 - #define IRQ_CLCDINT (IRQ_GIC_START + INT_CLCDINT) 50 - #define IRQ_DMAINT (IRQ_GIC_START + INT_DMAINT) 51 - #define IRQ_PWRFAILINT (IRQ_GIC_START + INT_PWRFAILINT) 52 - #define IRQ_MBXINT (IRQ_GIC_START + INT_MBXINT) 53 - #define IRQ_GNDINT (IRQ_GIC_START + INT_GNDINT) 54 - #define IRQ_MMCI0B (IRQ_GIC_START + INT_MMCI0B) 55 - #define IRQ_MMCI1B (IRQ_GIC_START + INT_MMCI1B) 56 - #define IRQ_KMI0 (IRQ_GIC_START + INT_KMI0) 57 - #define IRQ_KMI1 (IRQ_GIC_START + INT_KMI1) 58 - #define IRQ_SCI3 (IRQ_GIC_START + INT_SCI3) 59 - #define IRQ_CLCD (IRQ_GIC_START + INT_CLCD) 60 - #define IRQ_TOUCH (IRQ_GIC_START + INT_TOUCH) 61 - #define IRQ_KEYPAD (IRQ_GIC_START + INT_KEYPAD) 62 - #define IRQ_DoC (IRQ_GIC_START + INT_DoC) 63 - #define IRQ_MMCI0A (IRQ_GIC_START + INT_MMCI0A) 64 - #define IRQ_MMCI1A (IRQ_GIC_START + INT_MMCI1A) 65 - #define IRQ_AACI (IRQ_GIC_START + INT_AACI) 66 - #define IRQ_ETH (IRQ_GIC_START + INT_ETH) 67 - #define IRQ_USB (IRQ_GIC_START + INT_USB) 68 - #define IRQ_PMU_CPU0 (IRQ_GIC_START + INT_PMU_CPU0) 69 - #define IRQ_PMU_CPU1 (IRQ_GIC_START + INT_PMU_CPU1) 70 - #define IRQ_PMU_CPU2 (IRQ_GIC_START + INT_PMU_CPU2) 71 - #define IRQ_PMU_CPU3 (IRQ_GIC_START + INT_PMU_CPU3) 72 - #define IRQ_PMU_SCU0 (IRQ_GIC_START + INT_PMU_SCU0) 73 - #define IRQ_PMU_SCU1 (IRQ_GIC_START + INT_PMU_SCU1) 74 - #define IRQ_PMU_SCU2 (IRQ_GIC_START + INT_PMU_SCU2) 75 - #define IRQ_PMU_SCU3 (IRQ_GIC_START + INT_PMU_SCU3) 76 - #define IRQ_PMU_SCU4 (IRQ_GIC_START + INT_PMU_SCU4) 77 - #define IRQ_PMU_SCU5 (IRQ_GIC_START + INT_PMU_SCU5) 78 - #define IRQ_PMU_SCU6 (IRQ_GIC_START + INT_PMU_SCU6) 79 - #define IRQ_PMU_SCU7 (IRQ_GIC_START + INT_PMU_SCU7) 80 81 - #define IRQ_EB_IRQ1 (IRQ_GIC_START + INT_EB_IRQ1) 82 - #define IRQ_EB_IRQ2 (IRQ_GIC_START + INT_EB_IRQ2) 83 84 - #define IRQMASK_WDOGINT INTMASK_WDOGINT 85 - #define IRQMASK_SOFTINT INTMASK_SOFTINT 86 - #define IRQMASK_COMMRx INTMASK_COMMRx 87 - #define IRQMASK_COMMTx INTMASK_COMMTx 88 - #define IRQMASK_TIMERINT0_1 INTMASK_TIMERINT0_1 89 - #define IRQMASK_TIMERINT2_3 INTMASK_TIMERINT2_3 90 - #define IRQMASK_GPIOINT0 INTMASK_GPIOINT0 91 - #define IRQMASK_GPIOINT1 INTMASK_GPIOINT1 92 - #define IRQMASK_GPIOINT2 INTMASK_GPIOINT2 93 - #define IRQMASK_GPIOINT3 INTMASK_GPIOINT3 94 - #define IRQMASK_RTCINT INTMASK_RTCINT 95 - #define IRQMASK_SSPINT INTMASK_SSPINT 96 - #define IRQMASK_UARTINT0 INTMASK_UARTINT0 97 - #define IRQMASK_UARTINT1 INTMASK_UARTINT1 98 - #define IRQMASK_UARTINT2 INTMASK_UARTINT2 99 - #define IRQMASK_SCIINT INTMASK_SCIINT 100 - #define IRQMASK_CLCDINT INTMASK_CLCDINT 101 - #define IRQMASK_DMAINT INTMASK_DMAINT 102 - #define IRQMASK_PWRFAILINT INTMASK_PWRFAILINT 103 - #define IRQMASK_MBXINT INTMASK_MBXINT 104 - #define IRQMASK_GNDINT INTMASK_GNDINT 105 - #define IRQMASK_MMCI0B INTMASK_MMCI0B 106 - #define IRQMASK_MMCI1B INTMASK_MMCI1B 107 - #define IRQMASK_KMI0 INTMASK_KMI0 108 - #define IRQMASK_KMI1 INTMASK_KMI1 109 - #define IRQMASK_SCI3 INTMASK_SCI3 110 - #define IRQMASK_UART3 INTMASK_UART3 111 - #define IRQMASK_CLCD INTMASK_CLCD 112 - #define IRQMASK_TOUCH INTMASK_TOUCH 113 - #define IRQMASK_KEYPAD INTMASK_KEYPAD 114 - #define IRQMASK_DoC INTMASK_DoC 115 - #define IRQMASK_MMCI0A INTMASK_MMCI0A 116 - #define IRQMASK_MMCI1A INTMASK_MMCI1A 117 - #define IRQMASK_AACI INTMASK_AACI 118 - #define IRQMASK_ETH INTMASK_ETH 119 - #define IRQMASK_USB INTMASK_USB 120 - 121 - #define NR_IRQS (IRQ_GIC_START + 96)
··· 19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 */ 21 22 + #ifndef __ASM_ARCH_IRQS_H 23 + #define __ASM_ARCH_IRQS_H 24 25 + #include <asm/arch/board-eb.h> 26 27 + #define IRQ_LOCALTIMER 29 28 + #define IRQ_LOCALWDOG 30 29 + 30 #define IRQ_GIC_START 32 31 32 + #ifndef NR_IRQS 33 + #error "NR_IRQS not defined by the board-specific files" 34 + #endif 35 36 + #endif
+10 -160
include/asm-arm/arch-realview/platform.h
··· 18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 19 */ 20 21 - #ifndef __address_h 22 - #define __address_h 1 23 24 /* 25 * Memory definitions ··· 81 #define REALVIEW_SYS_24MHz_OFFSET 0x5C 82 #define REALVIEW_SYS_MISC_OFFSET 0x60 83 #define REALVIEW_SYS_IOSEL_OFFSET 0x70 84 - #define REALVIEW_SYS_TEST_OSC0_OFFSET 0x80 85 - #define REALVIEW_SYS_TEST_OSC1_OFFSET 0x84 86 - #define REALVIEW_SYS_TEST_OSC2_OFFSET 0x88 87 - #define REALVIEW_SYS_TEST_OSC3_OFFSET 0x8C 88 - #define REALVIEW_SYS_TEST_OSC4_OFFSET 0x90 89 90 #define REALVIEW_SYS_BASE 0x10000000 91 #define REALVIEW_SYS_ID (REALVIEW_SYS_BASE + REALVIEW_SYS_ID_OFFSET) ··· 115 #define REALVIEW_SYS_24MHz (REALVIEW_SYS_BASE + REALVIEW_SYS_24MHz_OFFSET) 116 #define REALVIEW_SYS_MISC (REALVIEW_SYS_BASE + REALVIEW_SYS_MISC_OFFSET) 117 #define REALVIEW_SYS_IOSEL (REALVIEW_SYS_BASE + REALVIEW_SYS_IOSEL_OFFSET) 118 #define REALVIEW_SYS_TEST_OSC0 (REALVIEW_SYS_BASE + REALVIEW_SYS_TEST_OSC0_OFFSET) 119 #define REALVIEW_SYS_TEST_OSC1 (REALVIEW_SYS_BASE + REALVIEW_SYS_TEST_OSC1_OFFSET) 120 #define REALVIEW_SYS_TEST_OSC2 (REALVIEW_SYS_BASE + REALVIEW_SYS_TEST_OSC2_OFFSET) ··· 205 /* Reserved 0x1001A000 - 0x1001FFFF */ 206 #define REALVIEW_CLCD_BASE 0x10020000 /* CLCD */ 207 #define REALVIEW_DMAC_BASE 0x10030000 /* DMA controller */ 208 - #ifndef CONFIG_REALVIEW_MPCORE 209 #define REALVIEW_GIC_CPU_BASE 0x10040000 /* Generic interrupt controller CPU interface */ 210 #define REALVIEW_GIC_DIST_BASE 0x10041000 /* Generic interrupt controller distributor */ 211 - #else 212 - #ifdef CONFIG_REALVIEW_MPCORE_REVB 213 - #define REALVIEW_MPCORE_SCU_BASE 0x10100000 /* SCU registers */ 214 - #define REALVIEW_GIC_CPU_BASE 0x10100100 /* Generic interrupt controller CPU interface */ 215 - #define REALVIEW_TWD_BASE 0x10100700 216 - #define REALVIEW_TWD_SIZE 0x00000100 217 - #define REALVIEW_GIC_DIST_BASE 0x10101000 /* Generic interrupt controller distributor */ 218 - #define REALVIEW_MPCORE_L220_BASE 0x10102000 /* L220 registers */ 219 - #define REALVIEW_MPCORE_SYS_PLD_CTRL1 0xD8 /* Register offset for MPCore sysctl */ 220 - #else 221 - #define REALVIEW_MPCORE_SCU_BASE 0x1F000000 /* SCU registers */ 222 - #define REALVIEW_GIC_CPU_BASE 0x1F000100 /* Generic interrupt controller CPU interface */ 223 - #define REALVIEW_TWD_BASE 0x1F000700 224 - #define REALVIEW_TWD_SIZE 0x00000100 225 - #define REALVIEW_GIC_DIST_BASE 0x1F001000 /* Generic interrupt controller distributor */ 226 - #define REALVIEW_MPCORE_L220_BASE 0x1F002000 /* L220 registers */ 227 - #define REALVIEW_MPCORE_SYS_PLD_CTRL1 0x74 /* Register offset for MPCore sysctl */ 228 - #endif 229 - #define REALVIEW_GIC1_CPU_BASE 0x10040000 /* Generic interrupt controller CPU interface */ 230 - #define REALVIEW_GIC1_DIST_BASE 0x10041000 /* Generic interrupt controller distributor */ 231 - #endif 232 #define REALVIEW_SMC_BASE 0x10080000 /* SMC */ 233 /* Reserved 0x10090000 - 0x100EFFFF */ 234 ··· 263 #define REALVIEW_INTREG_OFFSET 0x8 /* Interrupt control */ 264 #define REALVIEW_DECODE_OFFSET 0xC /* Fitted logic modules */ 265 266 - /* ------------------------------------------------------------------------ 267 - * Interrupts - bit assignment (primary) 268 - * ------------------------------------------------------------------------ 269 - */ 270 - #ifndef CONFIG_REALVIEW_MPCORE 271 - #define INT_WDOGINT 0 /* Watchdog timer */ 272 - #define INT_SOFTINT 1 /* Software interrupt */ 273 - #define INT_COMMRx 2 /* Debug Comm Rx interrupt */ 274 - #define INT_COMMTx 3 /* Debug Comm Tx interrupt */ 275 - #define INT_TIMERINT0_1 4 /* Timer 0 and 1 */ 276 - #define INT_TIMERINT2_3 5 /* Timer 2 and 3 */ 277 - #define INT_GPIOINT0 6 /* GPIO 0 */ 278 - #define INT_GPIOINT1 7 /* GPIO 1 */ 279 - #define INT_GPIOINT2 8 /* GPIO 2 */ 280 - /* 9 reserved */ 281 - #define INT_RTCINT 10 /* Real Time Clock */ 282 - #define INT_SSPINT 11 /* Synchronous Serial Port */ 283 - #define INT_UARTINT0 12 /* UART 0 on development chip */ 284 - #define INT_UARTINT1 13 /* UART 1 on development chip */ 285 - #define INT_UARTINT2 14 /* UART 2 on development chip */ 286 - #define INT_UARTINT3 15 /* UART 3 on development chip */ 287 - #define INT_SCIINT 16 /* Smart Card Interface */ 288 - #define INT_MMCI0A 17 /* Multimedia Card 0A */ 289 - #define INT_MMCI0B 18 /* Multimedia Card 0B */ 290 - #define INT_AACI 19 /* Audio Codec */ 291 - #define INT_KMI0 20 /* Keyboard/Mouse port 0 */ 292 - #define INT_KMI1 21 /* Keyboard/Mouse port 1 */ 293 - #define INT_CHARLCD 22 /* Character LCD */ 294 - #define INT_CLCDINT 23 /* CLCD controller */ 295 - #define INT_DMAINT 24 /* DMA controller */ 296 - #define INT_PWRFAILINT 25 /* Power failure */ 297 - #define INT_PISMO 26 298 - #define INT_DoC 27 /* Disk on Chip memory controller */ 299 - #define INT_ETH 28 /* Ethernet controller */ 300 - #define INT_USB 29 /* USB controller */ 301 - #define INT_TSPENINT 30 /* Touchscreen pen */ 302 - #define INT_TSKPADINT 31 /* Touchscreen keypad */ 303 - 304 - #else 305 - 306 - #define MAX_GIC_NR 2 307 - 308 - #define INT_AACI 0 309 - #define INT_TIMERINT0_1 1 310 - #define INT_TIMERINT2_3 2 311 - #define INT_USB 3 312 - #define INT_UARTINT0 4 313 - #define INT_UARTINT1 5 314 - #define INT_RTCINT 6 315 - #define INT_KMI0 7 316 - #define INT_KMI1 8 317 - #define INT_ETH 9 318 - #define INT_EB_IRQ1 10 /* main GIC */ 319 - #define INT_EB_IRQ2 11 /* tile GIC */ 320 - #define INT_EB_FIQ1 12 /* main GIC */ 321 - #define INT_EB_FIQ2 13 /* tile GIC */ 322 - #define INT_MMCI0A 14 323 - #define INT_MMCI0B 15 324 - 325 - #define INT_PMU_CPU0 17 326 - #define INT_PMU_CPU1 18 327 - #define INT_PMU_CPU2 19 328 - #define INT_PMU_CPU3 20 329 - #define INT_PMU_SCU0 21 330 - #define INT_PMU_SCU1 22 331 - #define INT_PMU_SCU2 23 332 - #define INT_PMU_SCU3 24 333 - #define INT_PMU_SCU4 25 334 - #define INT_PMU_SCU5 26 335 - #define INT_PMU_SCU6 27 336 - #define INT_PMU_SCU7 28 337 - 338 - #define INT_L220_EVENT 29 339 - #define INT_L220_SLAVE 30 340 - #define INT_L220_DECODE 31 341 - 342 - #define INT_UARTINT2 -1 343 - #define INT_UARTINT3 -1 344 - #define INT_CLCDINT -1 345 - #define INT_DMAINT -1 346 - #define INT_WDOGINT -1 347 - #define INT_GPIOINT0 -1 348 - #define INT_GPIOINT1 -1 349 - #define INT_GPIOINT2 -1 350 - #define INT_SCIINT -1 351 - #define INT_SSPINT -1 352 - #endif 353 - 354 - /* 355 - * Interrupt bit positions 356 - * 357 - */ 358 - #define INTMASK_WDOGINT (1 << INT_WDOGINT) 359 - #define INTMASK_SOFTINT (1 << INT_SOFTINT) 360 - #define INTMASK_COMMRx (1 << INT_COMMRx) 361 - #define INTMASK_COMMTx (1 << INT_COMMTx) 362 - #define INTMASK_TIMERINT0_1 (1 << INT_TIMERINT0_1) 363 - #define INTMASK_TIMERINT2_3 (1 << INT_TIMERINT2_3) 364 - #define INTMASK_GPIOINT0 (1 << INT_GPIOINT0) 365 - #define INTMASK_GPIOINT1 (1 << INT_GPIOINT1) 366 - #define INTMASK_GPIOINT2 (1 << INT_GPIOINT2) 367 - #define INTMASK_RTCINT (1 << INT_RTCINT) 368 - #define INTMASK_SSPINT (1 << INT_SSPINT) 369 - #define INTMASK_UARTINT0 (1 << INT_UARTINT0) 370 - #define INTMASK_UARTINT1 (1 << INT_UARTINT1) 371 - #define INTMASK_UARTINT2 (1 << INT_UARTINT2) 372 - #define INTMASK_UARTINT3 (1 << INT_UARTINT3) 373 - #define INTMASK_SCIINT (1 << INT_SCIINT) 374 - #define INTMASK_MMCI0A (1 << INT_MMCI0A) 375 - #define INTMASK_MMCI0B (1 << INT_MMCI0B) 376 - #define INTMASK_AACI (1 << INT_AACI) 377 - #define INTMASK_KMI0 (1 << INT_KMI0) 378 - #define INTMASK_KMI1 (1 << INT_KMI1) 379 - #define INTMASK_CHARLCD (1 << INT_CHARLCD) 380 - #define INTMASK_CLCDINT (1 << INT_CLCDINT) 381 - #define INTMASK_DMAINT (1 << INT_DMAINT) 382 - #define INTMASK_PWRFAILINT (1 << INT_PWRFAILINT) 383 - #define INTMASK_PISMO (1 << INT_PISMO) 384 - #define INTMASK_DoC (1 << INT_DoC) 385 - #define INTMASK_ETH (1 << INT_ETH) 386 - #define INTMASK_USB (1 << INT_USB) 387 - #define INTMASK_TSPENINT (1 << INT_TSPENINT) 388 - #define INTMASK_TSKPADINT (1 << INT_TSKPADINT) 389 - 390 - #define MAXIRQNUM 31 391 - #define MAXFIQNUM 31 392 - #define MAXSWINUM 31 393 - 394 /* 395 * Application Flash 396 * ··· 315 #define REALVIEW_CSR_BASE 0x10000000 316 #define REALVIEW_CSR_SIZE 0x10000000 317 318 - #endif 319 - 320 - /* END */
··· 18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 19 */ 20 21 + #ifndef __ASM_ARCH_PLATFORM_H 22 + #define __ASM_ARCH_PLATFORM_H 23 24 /* 25 * Memory definitions ··· 81 #define REALVIEW_SYS_24MHz_OFFSET 0x5C 82 #define REALVIEW_SYS_MISC_OFFSET 0x60 83 #define REALVIEW_SYS_IOSEL_OFFSET 0x70 84 + #define REALVIEW_SYS_PROCID_OFFSET 0x84 85 + #define REALVIEW_SYS_TEST_OSC0_OFFSET 0xC0 86 + #define REALVIEW_SYS_TEST_OSC1_OFFSET 0xC4 87 + #define REALVIEW_SYS_TEST_OSC2_OFFSET 0xC8 88 + #define REALVIEW_SYS_TEST_OSC3_OFFSET 0xCC 89 + #define REALVIEW_SYS_TEST_OSC4_OFFSET 0xD0 90 91 #define REALVIEW_SYS_BASE 0x10000000 92 #define REALVIEW_SYS_ID (REALVIEW_SYS_BASE + REALVIEW_SYS_ID_OFFSET) ··· 114 #define REALVIEW_SYS_24MHz (REALVIEW_SYS_BASE + REALVIEW_SYS_24MHz_OFFSET) 115 #define REALVIEW_SYS_MISC (REALVIEW_SYS_BASE + REALVIEW_SYS_MISC_OFFSET) 116 #define REALVIEW_SYS_IOSEL (REALVIEW_SYS_BASE + REALVIEW_SYS_IOSEL_OFFSET) 117 + #define REALVIEW_SYS_PROCID (REALVIEW_SYS_BASE + REALVIEW_SYS_PROCID_OFFSET) 118 #define REALVIEW_SYS_TEST_OSC0 (REALVIEW_SYS_BASE + REALVIEW_SYS_TEST_OSC0_OFFSET) 119 #define REALVIEW_SYS_TEST_OSC1 (REALVIEW_SYS_BASE + REALVIEW_SYS_TEST_OSC1_OFFSET) 120 #define REALVIEW_SYS_TEST_OSC2 (REALVIEW_SYS_BASE + REALVIEW_SYS_TEST_OSC2_OFFSET) ··· 203 /* Reserved 0x1001A000 - 0x1001FFFF */ 204 #define REALVIEW_CLCD_BASE 0x10020000 /* CLCD */ 205 #define REALVIEW_DMAC_BASE 0x10030000 /* DMA controller */ 206 #define REALVIEW_GIC_CPU_BASE 0x10040000 /* Generic interrupt controller CPU interface */ 207 #define REALVIEW_GIC_DIST_BASE 0x10041000 /* Generic interrupt controller distributor */ 208 #define REALVIEW_SMC_BASE 0x10080000 /* SMC */ 209 /* Reserved 0x10090000 - 0x100EFFFF */ 210 ··· 283 #define REALVIEW_INTREG_OFFSET 0x8 /* Interrupt control */ 284 #define REALVIEW_DECODE_OFFSET 0xC /* Fitted logic modules */ 285 286 /* 287 * Application Flash 288 * ··· 463 #define REALVIEW_CSR_BASE 0x10000000 464 #define REALVIEW_CSR_SIZE 0x10000000 465 466 + #endif /* __ASM_ARCH_PLATFORM_H */
+2 -2
include/asm-arm/arch-realview/scu.h
··· 1 #ifndef __ASMARM_ARCH_SCU_H 2 #define __ASMARM_ARCH_SCU_H 3 4 - #include <asm/arch/platform.h> 5 6 - #define SCU_BASE REALVIEW_MPCORE_SCU_BASE 7 8 #endif
··· 1 #ifndef __ASMARM_ARCH_SCU_H 2 #define __ASMARM_ARCH_SCU_H 3 4 + #include <asm/arch/board-eb.h> 5 6 + #define SCU_BASE REALVIEW_EB11MP_SCU_BASE 7 8 #endif
+2
include/asm-arm/arch-realview/uncompress.h
··· 19 */ 20 #include <asm/hardware.h> 21 22 #define AMBA_UART_DR (*(volatile unsigned char *) (REALVIEW_UART0_BASE + 0x00)) 23 #define AMBA_UART_LCRH (*(volatile unsigned char *) (REALVIEW_UART0_BASE + 0x2c)) 24 #define AMBA_UART_CR (*(volatile unsigned char *) (REALVIEW_UART0_BASE + 0x30))
··· 19 */ 20 #include <asm/hardware.h> 21 22 + #include <asm/arch/platform.h> 23 + 24 #define AMBA_UART_DR (*(volatile unsigned char *) (REALVIEW_UART0_BASE + 0x00)) 25 #define AMBA_UART_LCRH (*(volatile unsigned char *) (REALVIEW_UART0_BASE + 0x2c)) 26 #define AMBA_UART_CR (*(volatile unsigned char *) (REALVIEW_UART0_BASE + 0x30))
+6 -1
include/asm-arm/hardware/arm_twd.h
··· 1 #ifndef __ASM_HARDWARE_TWD_H 2 #define __ASM_HARDWARE_TWD_H 3 4 - #define TWD_TIMER_LOAD 0x00 5 #define TWD_TIMER_COUNTER 0x04 6 #define TWD_TIMER_CONTROL 0x08 7 #define TWD_TIMER_INTSTAT 0x0C ··· 12 #define TWD_WDOG_INTSTAT 0x2C 13 #define TWD_WDOG_RESETSTAT 0x30 14 #define TWD_WDOG_DISABLE 0x34 15 16 #endif
··· 1 #ifndef __ASM_HARDWARE_TWD_H 2 #define __ASM_HARDWARE_TWD_H 3 4 + #define TWD_TIMER_LOAD 0x00 5 #define TWD_TIMER_COUNTER 0x04 6 #define TWD_TIMER_CONTROL 0x08 7 #define TWD_TIMER_INTSTAT 0x0C ··· 12 #define TWD_WDOG_INTSTAT 0x2C 13 #define TWD_WDOG_RESETSTAT 0x30 14 #define TWD_WDOG_DISABLE 0x34 15 + 16 + #define TWD_TIMER_CONTROL_ENABLE (1 << 0) 17 + #define TWD_TIMER_CONTROL_ONESHOT (0 << 1) 18 + #define TWD_TIMER_CONTROL_PERIODIC (1 << 1) 19 + #define TWD_TIMER_CONTROL_IT_ENABLE (1 << 2) 20 21 #endif
+3
include/asm-arm/kexec.h
··· 16 17 #define KEXEC_BOOT_PARAMS_SIZE 1536 18 19 #ifndef __ASSEMBLY__ 20 21 struct kimage;
··· 16 17 #define KEXEC_BOOT_PARAMS_SIZE 1536 18 19 + #define KEXEC_ARM_ATAGS_OFFSET 0x1000 20 + #define KEXEC_ARM_ZIMAGE_OFFSET 0x8000 21 + 22 #ifndef __ASSEMBLY__ 23 24 struct kimage;
+14 -7
include/asm-arm/smp.h
··· 61 extern void smp_send_timer(void); 62 63 /* 64 * Boot a secondary CPU, and assign it the specified idle task. 65 * This also gives us the initial stack to use for this CPU. 66 */ ··· 101 extern int platform_cpu_kill(unsigned int cpu); 102 extern void platform_cpu_enable(unsigned int cpu); 103 104 - #ifdef CONFIG_LOCAL_TIMERS 105 /* 106 - * Setup a local timer interrupt for a CPU. 107 */ 108 - extern void local_timer_setup(unsigned int cpu); 109 110 /* 111 * Stop a local timer interrupt. ··· 120 121 #else 122 123 - static inline void local_timer_setup(unsigned int cpu) 124 - { 125 - } 126 - 127 static inline void local_timer_stop(unsigned int cpu) 128 { 129 } 130 131 #endif 132 133 /* 134 * show local interrupt info
··· 61 extern void smp_send_timer(void); 62 63 /* 64 + * Broadcast a clock event to other CPUs. 65 + */ 66 + extern void smp_timer_broadcast(cpumask_t mask); 67 + 68 + /* 69 * Boot a secondary CPU, and assign it the specified idle task. 70 * This also gives us the initial stack to use for this CPU. 71 */ ··· 96 extern int platform_cpu_kill(unsigned int cpu); 97 extern void platform_cpu_enable(unsigned int cpu); 98 99 /* 100 + * Local timer interrupt handling function (can be IPI'ed). 101 */ 102 + extern void local_timer_interrupt(void); 103 + 104 + #ifdef CONFIG_LOCAL_TIMERS 105 106 /* 107 * Stop a local timer interrupt. ··· 114 115 #else 116 117 static inline void local_timer_stop(unsigned int cpu) 118 { 119 } 120 121 #endif 122 + 123 + /* 124 + * Setup a local timer interrupt for a CPU. 125 + */ 126 + extern void local_timer_setup(unsigned int cpu); 127 128 /* 129 * show local interrupt info