Orion: orion -> orion5x rename
authorLennert Buytenhek <buytenh@wantstofly.org>
Thu, 27 Mar 2008 18:51:41 +0000 (14:51 -0400)
committerNicolas Pitre <nico@marvell.com>
Thu, 27 Mar 2008 18:51:41 +0000 (14:51 -0400)
Do a global s/orion/orion5x/ of the Orion 5x-specific bits (i.e.
not the plat-orion bits.)

Signed-off-by: Lennert Buytenhek <buytenh@marvell.com>
Reviewed-by: Tzachi Perelstein <tzachi@marvell.com>
Acked-by: Saeed Bishara <saeed@marvell.com>
Acked-by: Russell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: Nicolas Pitre <nico@marvell.com>
59 files changed:
arch/arm/Kconfig
arch/arm/Makefile
arch/arm/configs/orion5x_defconfig [new file with mode: 0644]
arch/arm/configs/orion_defconfig [deleted file]
arch/arm/mach-orion/Kconfig [deleted file]
arch/arm/mach-orion/Makefile [deleted file]
arch/arm/mach-orion/Makefile.boot [deleted file]
arch/arm/mach-orion/addr-map.c [deleted file]
arch/arm/mach-orion/common.c [deleted file]
arch/arm/mach-orion/common.h [deleted file]
arch/arm/mach-orion/db88f5281-setup.c [deleted file]
arch/arm/mach-orion/dns323-setup.c [deleted file]
arch/arm/mach-orion/gpio.c [deleted file]
arch/arm/mach-orion/irq.c [deleted file]
arch/arm/mach-orion/kurobox_pro-setup.c [deleted file]
arch/arm/mach-orion/pci.c [deleted file]
arch/arm/mach-orion/rd88f5182-setup.c [deleted file]
arch/arm/mach-orion/ts209-setup.c [deleted file]
arch/arm/mach-orion5x/Kconfig [new file with mode: 0644]
arch/arm/mach-orion5x/Makefile [new file with mode: 0644]
arch/arm/mach-orion5x/Makefile.boot [new file with mode: 0644]
arch/arm/mach-orion5x/addr-map.c [new file with mode: 0644]
arch/arm/mach-orion5x/common.c [new file with mode: 0644]
arch/arm/mach-orion5x/common.h [new file with mode: 0644]
arch/arm/mach-orion5x/db88f5281-setup.c [new file with mode: 0644]
arch/arm/mach-orion5x/dns323-setup.c [new file with mode: 0644]
arch/arm/mach-orion5x/gpio.c [new file with mode: 0644]
arch/arm/mach-orion5x/irq.c [new file with mode: 0644]
arch/arm/mach-orion5x/kurobox_pro-setup.c [new file with mode: 0644]
arch/arm/mach-orion5x/pci.c [new file with mode: 0644]
arch/arm/mach-orion5x/rd88f5182-setup.c [new file with mode: 0644]
arch/arm/mach-orion5x/ts209-setup.c [new file with mode: 0644]
arch/arm/mm/Kconfig
include/asm-arm/arch-orion/debug-macro.S [deleted file]
include/asm-arm/arch-orion/dma.h [deleted file]
include/asm-arm/arch-orion/entry-macro.S [deleted file]
include/asm-arm/arch-orion/gpio.h [deleted file]
include/asm-arm/arch-orion/hardware.h [deleted file]
include/asm-arm/arch-orion/io.h [deleted file]
include/asm-arm/arch-orion/irqs.h [deleted file]
include/asm-arm/arch-orion/memory.h [deleted file]
include/asm-arm/arch-orion/orion.h [deleted file]
include/asm-arm/arch-orion/system.h [deleted file]
include/asm-arm/arch-orion/timex.h [deleted file]
include/asm-arm/arch-orion/uncompress.h [deleted file]
include/asm-arm/arch-orion/vmalloc.h [deleted file]
include/asm-arm/arch-orion5x/debug-macro.S [new file with mode: 0644]
include/asm-arm/arch-orion5x/dma.h [new file with mode: 0644]
include/asm-arm/arch-orion5x/entry-macro.S [new file with mode: 0644]
include/asm-arm/arch-orion5x/gpio.h [new file with mode: 0644]
include/asm-arm/arch-orion5x/hardware.h [new file with mode: 0644]
include/asm-arm/arch-orion5x/io.h [new file with mode: 0644]
include/asm-arm/arch-orion5x/irqs.h [new file with mode: 0644]
include/asm-arm/arch-orion5x/memory.h [new file with mode: 0644]
include/asm-arm/arch-orion5x/orion5x.h [new file with mode: 0644]
include/asm-arm/arch-orion5x/system.h [new file with mode: 0644]
include/asm-arm/arch-orion5x/timex.h [new file with mode: 0644]
include/asm-arm/arch-orion5x/uncompress.h [new file with mode: 0644]
include/asm-arm/arch-orion5x/vmalloc.h [new file with mode: 0644]

index 845f96e9f0d092842dee1f7fdb972f070c093428..2f4fb773f3e8dc71d530d272220a7d5fa442eed5 100644 (file)
@@ -377,7 +377,7 @@ config ARCH_MXC
        help
          Support for Freescale MXC/iMX-based family of processors
 
-config ARCH_ORION
+config ARCH_ORION5X
        bool "Marvell Orion"
        depends on MMU
        select PCI
@@ -386,7 +386,8 @@ config ARCH_ORION
        select GENERIC_CLOCKEVENTS
        select PLAT_ORION
        help
-         Support for Marvell Orion System on Chip family.
+         Support for the following Marvell Orion 5x series SoCs:
+         Orion-1 (5181), Orion-NAS (5182), Orion-2 (5281.)
 
 config ARCH_PNX4008
        bool "Philips Nexperia PNX4008 Mobile"
@@ -517,7 +518,7 @@ source "arch/arm/mach-omap1/Kconfig"
 
 source "arch/arm/mach-omap2/Kconfig"
 
-source "arch/arm/mach-orion/Kconfig"
+source "arch/arm/mach-orion5x/Kconfig"
 
 source "arch/arm/plat-s3c24xx/Kconfig"
 source "arch/arm/plat-s3c/Kconfig"
index 27866cf0c180bd94fd91e697261dbaebeabd6533..6f9975053759887444b5315fbac28b2f18fcbdcf 100644 (file)
@@ -139,7 +139,7 @@ endif
  machine-$(CONFIG_ARCH_KS8695)     := ks8695
   incdir-$(CONFIG_ARCH_MXC)       := mxc
  machine-$(CONFIG_ARCH_MX3)       := mx3
- machine-$(CONFIG_ARCH_ORION)     := orion
+ machine-$(CONFIG_ARCH_ORION5X)           := orion5x
  machine-$(CONFIG_ARCH_MSM7X00A)   := msm
 
 ifeq ($(CONFIG_ARCH_EBSA110),y)
diff --git a/arch/arm/configs/orion5x_defconfig b/arch/arm/configs/orion5x_defconfig
new file mode 100644 (file)
index 0000000..52cd99b
--- /dev/null
@@ -0,0 +1,1383 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.24
+# Thu Feb  7 14:10:30 2008
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_PID_NS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_CGROUPS is not set
+CONFIG_FAIR_GROUP_SCHED=y
+CONFIG_FAIR_USER_SCHED=y
+# CONFIG_FAIR_CGROUP_SCHED is not set
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+# CONFIG_BLK_DEV_INITRD is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_COMPAT_BRK=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+# CONFIG_PROFILING is not set
+# CONFIG_MARKERS is not set
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+CONFIG_HAVE_KPROBES=y
+CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+# CONFIG_KMOD is not set
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+CONFIG_DEFAULT_CFQ=y
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="cfq"
+CONFIG_CLASSIC_RCU=y
+# CONFIG_PREEMPT_RCU is not set
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_MXC is not set
+CONFIG_ARCH_ORION5X=y
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_ARCH_MSM7X00A is not set
+
+#
+# Orion Implementations
+#
+CONFIG_MACH_DB88F5281=y
+CONFIG_MACH_RD88F5182=y
+CONFIG_MACH_KUROBOX_PRO=y
+CONFIG_MACH_DNS323=y
+CONFIG_MACH_TS209=y
+
+#
+# Boot options
+#
+
+#
+# Power management
+#
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_FEROCEON=y
+CONFIG_CPU_FEROCEON_OLD_ID=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_COPY_V4WB=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
+# CONFIG_OUTER_CACHE is not set
+
+#
+# Bus support
+#
+CONFIG_PCI=y
+CONFIG_PCI_SYSCALL=y
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+CONFIG_PCI_LEGACY=y
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_PREEMPT=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+CONFIG_LEDS=y
+CONFIG_LEDS_CPU=y
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE=""
+# CONFIG_XIP_KERNEL is not set
+# CONFIG_KEXEC is not set
+# CONFIG_ATAGS_PROC is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+CONFIG_VFP=y
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+# CONFIG_PM is not set
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_XFRM_STATISTICS is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
+# CONFIG_INET_LRO is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+CONFIG_NET_PKTGEN=m
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_AF_RXRPC is not set
+
+#
+# Wireless
+#
+# CONFIG_CFG80211 is not set
+CONFIG_WIRELESS_EXT=y
+# CONFIG_MAC80211 is not set
+# CONFIG_IEEE80211 is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_SYS_HYPERVISOR is not set
+# CONFIG_CONNECTOR is not set
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+CONFIG_FTL=y
+CONFIG_NFTL=y
+# CONFIG_NFTL_RW is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_MTD_OOPS is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+CONFIG_MTD_JEDECPROBE=y
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+CONFIG_MTD_CFI_NOSWAP=y
+# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+CONFIG_MTD_CFI_GEOMETRY=y
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+CONFIG_MTD_CFI_I4=y
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_OTP is not set
+CONFIG_MTD_CFI_INTELEXT=y
+CONFIG_MTD_CFI_AMDSTD=y
+CONFIG_MTD_CFI_STAA=y
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+CONFIG_MTD_PHYSMAP=y
+CONFIG_MTD_PHYSMAP_START=0x0
+CONFIG_MTD_PHYSMAP_LEN=0x0
+CONFIG_MTD_PHYSMAP_BANKWIDTH=0
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_IMPA7 is not set
+# CONFIG_MTD_INTEL_VR_NOR is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_PMC551 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_VERIFY_WRITE=y
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_CAFE is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_ALAUDA is not set
+CONFIG_MTD_NAND_ORION=y
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_SX8 is not set
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_PHANTOM is not set
+# CONFIG_EEPROM_93CX6 is not set
+# CONFIG_SGI_IOC4 is not set
+# CONFIG_TIFM_CORE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_DMA=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+# CONFIG_SCSI_PROC_FS is not set
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+CONFIG_BLK_DEV_SR=m
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=m
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+CONFIG_SCSI_LOWLEVEL=y
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
+# CONFIG_SCSI_3W_9XXX is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_AIC79XX is not set
+# CONFIG_SCSI_AIC94XX is not set
+# CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_SCSI_ADVANSYS is not set
+# CONFIG_SCSI_ARCMSR is not set
+# CONFIG_MEGARAID_NEWGEN is not set
+# CONFIG_MEGARAID_LEGACY is not set
+# CONFIG_MEGARAID_SAS is not set
+# CONFIG_SCSI_HPTIOP is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_IPS is not set
+# CONFIG_SCSI_INITIO is not set
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_STEX is not set
+# CONFIG_SCSI_SYM53C8XX_2 is not set
+# CONFIG_SCSI_IPR is not set
+# CONFIG_SCSI_QLOGIC_1280 is not set
+# CONFIG_SCSI_QLA_FC is not set
+# CONFIG_SCSI_QLA_ISCSI is not set
+# CONFIG_SCSI_LPFC is not set
+# CONFIG_SCSI_DC395x is not set
+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_NSP32 is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_SRP is not set
+CONFIG_ATA=y
+# CONFIG_ATA_NONSTANDARD is not set
+# CONFIG_SATA_AHCI is not set
+# CONFIG_SATA_SVW is not set
+# CONFIG_ATA_PIIX is not set
+CONFIG_SATA_MV=y
+# CONFIG_SATA_NV is not set
+# CONFIG_PDC_ADMA is not set
+# CONFIG_SATA_QSTOR is not set
+# CONFIG_SATA_PROMISE is not set
+# CONFIG_SATA_SX4 is not set
+# CONFIG_SATA_SIL is not set
+# CONFIG_SATA_SIL24 is not set
+# CONFIG_SATA_SIS is not set
+# CONFIG_SATA_ULI is not set
+# CONFIG_SATA_VIA is not set
+# CONFIG_SATA_VITESSE is not set
+# CONFIG_SATA_INIC162X is not set
+# CONFIG_PATA_ALI is not set
+# CONFIG_PATA_AMD is not set
+# CONFIG_PATA_ARTOP is not set
+# CONFIG_PATA_ATIIXP is not set
+# CONFIG_PATA_CMD640_PCI is not set
+# CONFIG_PATA_CMD64X is not set
+# CONFIG_PATA_CS5520 is not set
+# CONFIG_PATA_CS5530 is not set
+# CONFIG_PATA_CYPRESS is not set
+# CONFIG_PATA_EFAR is not set
+# CONFIG_ATA_GENERIC is not set
+# CONFIG_PATA_HPT366 is not set
+# CONFIG_PATA_HPT37X is not set
+# CONFIG_PATA_HPT3X2N is not set
+# CONFIG_PATA_HPT3X3 is not set
+# CONFIG_PATA_IT821X is not set
+# CONFIG_PATA_IT8213 is not set
+# CONFIG_PATA_JMICRON is not set
+# CONFIG_PATA_TRIFLEX is not set
+# CONFIG_PATA_MARVELL is not set
+# CONFIG_PATA_MPIIX is not set
+# CONFIG_PATA_OLDPIIX is not set
+# CONFIG_PATA_NETCELL is not set
+# CONFIG_PATA_NINJA32 is not set
+# CONFIG_PATA_NS87410 is not set
+# CONFIG_PATA_NS87415 is not set
+# CONFIG_PATA_OPTI is not set
+# CONFIG_PATA_OPTIDMA is not set
+# CONFIG_PATA_PDC_OLD is not set
+# CONFIG_PATA_RADISYS is not set
+# CONFIG_PATA_RZ1000 is not set
+# CONFIG_PATA_SC1200 is not set
+# CONFIG_PATA_SERVERWORKS is not set
+# CONFIG_PATA_PDC2027X is not set
+# CONFIG_PATA_SIL680 is not set
+# CONFIG_PATA_SIS is not set
+# CONFIG_PATA_VIA is not set
+# CONFIG_PATA_WINBOND is not set
+# CONFIG_PATA_PLATFORM is not set
+# CONFIG_MD is not set
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_FIREWIRE is not set
+# CONFIG_IEEE1394 is not set
+# CONFIG_I2O is not set
+CONFIG_NETDEVICES=y
+# CONFIG_NETDEVICES_MULTIQUEUE is not set
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_VETH is not set
+# CONFIG_ARCNET is not set
+# CONFIG_PHYLIB is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_AX88796 is not set
+# CONFIG_HAPPYMEAL is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_CASSINI is not set
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_NET_TULIP is not set
+# CONFIG_HP100 is not set
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+CONFIG_NET_PCI=y
+# CONFIG_PCNET32 is not set
+# CONFIG_AMD8111_ETH is not set
+# CONFIG_ADAPTEC_STARFIRE is not set
+# CONFIG_B44 is not set
+# CONFIG_FORCEDETH is not set
+# CONFIG_EEPRO100 is not set
+CONFIG_E100=y
+# CONFIG_FEALNX is not set
+# CONFIG_NATSEMI is not set
+# CONFIG_NE2K_PCI is not set
+# CONFIG_8139CP is not set
+# CONFIG_8139TOO is not set
+# CONFIG_R6040 is not set
+# CONFIG_SIS900 is not set
+# CONFIG_EPIC100 is not set
+# CONFIG_SUNDANCE is not set
+# CONFIG_TLAN is not set
+# CONFIG_VIA_RHINE is not set
+# CONFIG_SC92031 is not set
+CONFIG_NETDEV_1000=y
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+CONFIG_E1000=y
+CONFIG_E1000_NAPI=y
+# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
+# CONFIG_E1000E is not set
+# CONFIG_E1000E_ENABLED is not set
+# CONFIG_IP1000 is not set
+# CONFIG_IGB is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+# CONFIG_R8169 is not set
+# CONFIG_SIS190 is not set
+CONFIG_SKGE=y
+CONFIG_SKY2=y
+# CONFIG_SK98LIN is not set
+# CONFIG_VIA_VELOCITY is not set
+CONFIG_TIGON3=y
+# CONFIG_BNX2 is not set
+CONFIG_MV643XX_ETH=y
+# CONFIG_QLA3XXX is not set
+# CONFIG_ATL1 is not set
+CONFIG_NETDEV_10000=y
+# CONFIG_CHELSIO_T1 is not set
+# CONFIG_CHELSIO_T3 is not set
+# CONFIG_IXGBE is not set
+# CONFIG_IXGB is not set
+# CONFIG_S2IO is not set
+# CONFIG_MYRI10GE is not set
+# CONFIG_NETXEN_NIC is not set
+# CONFIG_NIU is not set
+# CONFIG_MLX4_CORE is not set
+# CONFIG_TEHUTI is not set
+# CONFIG_BNX2X is not set
+# CONFIG_TR is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+# CONFIG_WLAN_80211 is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_NET_FC is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+# CONFIG_INPUT_KEYBOARD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+# CONFIG_NOZOMI is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_PCI=y
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=2
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_JSM is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=16
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_HW_RANDOM=m
+# CONFIG_NVRAM is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_DEVPORT=y
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_CHARDEV=y
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_ALI1535 is not set
+# CONFIG_I2C_ALI1563 is not set
+# CONFIG_I2C_ALI15X3 is not set
+# CONFIG_I2C_AMD756 is not set
+# CONFIG_I2C_AMD8111 is not set
+# CONFIG_I2C_GPIO is not set
+# CONFIG_I2C_I801 is not set
+# CONFIG_I2C_I810 is not set
+# CONFIG_I2C_PIIX4 is not set
+# CONFIG_I2C_NFORCE2 is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_PROSAVAGE is not set
+# CONFIG_I2C_SAVAGE4 is not set
+# CONFIG_I2C_SIMTEC is not set
+# CONFIG_I2C_SIS5595 is not set
+# CONFIG_I2C_SIS630 is not set
+# CONFIG_I2C_SIS96X is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_TINY_USB is not set
+# CONFIG_I2C_VIA is not set
+# CONFIG_I2C_VIAPRO is not set
+# CONFIG_I2C_VOODOO3 is not set
+CONFIG_I2C_MV64XXX=y
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_DS1682 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_PCF8575 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_TPS65010 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+# CONFIG_W1 is not set
+# CONFIG_POWER_SUPPLY is not set
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_AD7418 is not set
+# CONFIG_SENSORS_ADM1021 is not set
+# CONFIG_SENSORS_ADM1025 is not set
+# CONFIG_SENSORS_ADM1026 is not set
+# CONFIG_SENSORS_ADM1029 is not set
+# CONFIG_SENSORS_ADM1031 is not set
+# CONFIG_SENSORS_ADM9240 is not set
+# CONFIG_SENSORS_ADT7470 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_I5K_AMB is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_F71882FG is not set
+# CONFIG_SENSORS_F75375S is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_LM63 is not set
+# CONFIG_SENSORS_LM75 is not set
+# CONFIG_SENSORS_LM77 is not set
+# CONFIG_SENSORS_LM78 is not set
+# CONFIG_SENSORS_LM80 is not set
+# CONFIG_SENSORS_LM83 is not set
+# CONFIG_SENSORS_LM85 is not set
+# CONFIG_SENSORS_LM87 is not set
+# CONFIG_SENSORS_LM90 is not set
+# CONFIG_SENSORS_LM92 is not set
+# CONFIG_SENSORS_LM93 is not set
+# CONFIG_SENSORS_MAX1619 is not set
+# CONFIG_SENSORS_MAX6650 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_SIS5595 is not set
+# CONFIG_SENSORS_DME1737 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47M192 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_THMC50 is not set
+# CONFIG_SENSORS_VIA686A is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_SENSORS_VT8231 is not set
+# CONFIG_SENSORS_W83781D is not set
+# CONFIG_SENSORS_W83791D is not set
+# CONFIG_SENSORS_W83792D is not set
+# CONFIG_SENSORS_W83793 is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+# CONFIG_WATCHDOG is not set
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB_POSSIBLE=y
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+# CONFIG_DVB_CORE is not set
+CONFIG_DAB=y
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+# CONFIG_DRM is not set
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+# CONFIG_FB is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=y
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+CONFIG_USB_DEVICE_CLASS=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_EHCI_ROOT_HUB_TT=y
+CONFIG_USB_EHCI_TT_NEWSCHED=y
+# CONFIG_USB_ISP116X_HCD is not set
+# CONFIG_USB_OHCI_HCD is not set
+# CONFIG_USB_UHCI_HCD is not set
+# CONFIG_USB_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+CONFIG_USB_PRINTER=y
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+CONFIG_USB_STORAGE_DATAFAB=y
+CONFIG_USB_STORAGE_FREECOM=y
+# CONFIG_USB_STORAGE_ISD200 is not set
+CONFIG_USB_STORAGE_DPCM=y
+# CONFIG_USB_STORAGE_USBAT is not set
+CONFIG_USB_STORAGE_SDDR09=y
+CONFIG_USB_STORAGE_SDDR55=y
+CONFIG_USB_STORAGE_JUMPSHOT=y
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+# CONFIG_USB_MON is not set
+
+#
+# USB port drivers
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_SISUSBVGA is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+# CONFIG_USB_TEST is not set
+# CONFIG_USB_GADGET is not set
+# CONFIG_MMC is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_GPIO is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+CONFIG_RTC_DRV_DS1307=y
+# CONFIG_RTC_DRV_DS1374 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_MAX6900 is not set
+CONFIG_RTC_DRV_RS5C372=y
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+CONFIG_RTC_DRV_M41T80=y
+# CONFIG_RTC_DRV_M41T80_WDT is not set
+
+#
+# SPI RTC drivers
+#
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_FS_XATTR is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=y
+# CONFIG_JOLIET is not set
+# CONFIG_ZISOFS is not set
+CONFIG_UDF_FS=m
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+# CONFIG_JFFS2_LZO is not set
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+CONFIG_CRAMFS=y
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_SUNRPC_BIND34 is not set
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+CONFIG_BSD_DISKLABEL=y
+CONFIG_MINIX_SUBPARTITION=y
+CONFIG_SOLARIS_X86_PARTITION=y
+CONFIG_UNIXWARE_DISKLABEL=y
+CONFIG_LDM_PARTITION=y
+CONFIG_LDM_DEBUG=y
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+CONFIG_SUN_PARTITION=y
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+# CONFIG_SYSV68_PARTITION is not set
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+CONFIG_NLS_CODEPAGE_850=y
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=y
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+# CONFIG_NLS_UTF8 is not set
+# CONFIG_DLM is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_SAMPLES is not set
+CONFIG_DEBUG_USER=y
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+# CONFIG_CRYPTO_SEQIV is not set
+CONFIG_CRYPTO_MANAGER=m
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+# CONFIG_CRYPTO_SHA1 is not set
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=m
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_XTS is not set
+# CONFIG_CRYPTO_CTR is not set
+# CONFIG_CRYPTO_GCM is not set
+# CONFIG_CRYPTO_CCM is not set
+# CONFIG_CRYPTO_CRYPTD is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+# CONFIG_CRYPTO_ARC4 is not set
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_SEED is not set
+# CONFIG_CRYPTO_SALSA20 is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+# CONFIG_CRYPTO_AUTHENC is not set
+# CONFIG_CRYPTO_LZO is not set
+CONFIG_CRYPTO_HW=y
+# CONFIG_CRYPTO_DEV_HIFN_795X is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+CONFIG_CRC16=y
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+CONFIG_LIBCRC32C=y
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/arch/arm/configs/orion_defconfig b/arch/arm/configs/orion_defconfig
deleted file mode 100644 (file)
index 1e5aaa6..0000000
+++ /dev/null
@@ -1,1383 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.24
-# Thu Feb  7 14:10:30 2008
-#
-CONFIG_ARM=y
-CONFIG_SYS_SUPPORTS_APM_EMULATION=y
-CONFIG_GENERIC_GPIO=y
-CONFIG_GENERIC_TIME=y
-CONFIG_GENERIC_CLOCKEVENTS=y
-CONFIG_MMU=y
-# CONFIG_NO_IOPORT is not set
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_STACKTRACE_SUPPORT=y
-CONFIG_LOCKDEP_SUPPORT=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ZONE_DMA=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# General setup
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_USER_NS is not set
-# CONFIG_PID_NS is not set
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_LOG_BUF_SHIFT=14
-# CONFIG_CGROUPS is not set
-CONFIG_FAIR_GROUP_SCHED=y
-CONFIG_FAIR_USER_SCHED=y
-# CONFIG_FAIR_CGROUP_SCHED is not set
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-# CONFIG_BLK_DEV_INITRD is not set
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-CONFIG_UID16=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_COMPAT_BRK=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_ANON_INODES=y
-CONFIG_EPOLL=y
-CONFIG_SIGNALFD=y
-CONFIG_TIMERFD=y
-CONFIG_EVENTFD=y
-CONFIG_SHMEM=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_SLAB=y
-# CONFIG_SLUB is not set
-# CONFIG_SLOB is not set
-# CONFIG_PROFILING is not set
-# CONFIG_MARKERS is not set
-CONFIG_HAVE_OPROFILE=y
-# CONFIG_KPROBES is not set
-CONFIG_HAVE_KPROBES=y
-CONFIG_PROC_PAGE_MONITOR=y
-CONFIG_SLABINFO=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-# CONFIG_MODULE_FORCE_UNLOAD is not set
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-# CONFIG_KMOD is not set
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-# CONFIG_BLK_DEV_BSG is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-CONFIG_IOSCHED_CFQ=y
-# CONFIG_DEFAULT_AS is not set
-# CONFIG_DEFAULT_DEADLINE is not set
-CONFIG_DEFAULT_CFQ=y
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="cfq"
-CONFIG_CLASSIC_RCU=y
-# CONFIG_PREEMPT_RCU is not set
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_KS8695 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_MXC is not set
-CONFIG_ARCH_ORION=y
-# CONFIG_ARCH_PNX4008 is not set
-# CONFIG_ARCH_PXA is not set
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_DAVINCI is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_MSM7X00A is not set
-
-#
-# Orion Implementations
-#
-CONFIG_MACH_DB88F5281=y
-CONFIG_MACH_RD88F5182=y
-CONFIG_MACH_KUROBOX_PRO=y
-CONFIG_MACH_DNS323=y
-CONFIG_MACH_TS209=y
-
-#
-# Boot options
-#
-
-#
-# Power management
-#
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_FEROCEON=y
-CONFIG_CPU_FEROCEON_OLD_ID=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_COPY_V4WB=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_ICACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
-# CONFIG_OUTER_CACHE is not set
-
-#
-# Bus support
-#
-CONFIG_PCI=y
-CONFIG_PCI_SYSCALL=y
-# CONFIG_ARCH_SUPPORTS_MSI is not set
-CONFIG_PCI_LEGACY=y
-# CONFIG_PCCARD is not set
-
-#
-# Kernel Features
-#
-CONFIG_TICK_ONESHOT=y
-CONFIG_NO_HZ=y
-CONFIG_HIGH_RES_TIMERS=y
-CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-CONFIG_PREEMPT=y
-CONFIG_HZ=100
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_BOUNCE=y
-CONFIG_VIRT_TO_BUS=y
-CONFIG_LEDS=y
-CONFIG_LEDS_CPU=y
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE=""
-# CONFIG_XIP_KERNEL is not set
-# CONFIG_KEXEC is not set
-# CONFIG_ATAGS_PROC is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-CONFIG_VFP=y
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-# CONFIG_BINFMT_MISC is not set
-
-#
-# Power management options
-#
-# CONFIG_PM is not set
-CONFIG_ARCH_SUSPEND_POSSIBLE=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_XFRM_MIGRATE is not set
-# CONFIG_XFRM_STATISTICS is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-CONFIG_IP_PNP_DHCP=y
-CONFIG_IP_PNP_BOOTP=y
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_XFRM_MODE_TRANSPORT=y
-CONFIG_INET_XFRM_MODE_TUNNEL=y
-CONFIG_INET_XFRM_MODE_BEET=y
-# CONFIG_INET_LRO is not set
-CONFIG_INET_DIAG=y
-CONFIG_INET_TCP_DIAG=y
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-# CONFIG_IPV6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-# CONFIG_NETWORK_SECMARK is not set
-# CONFIG_NETFILTER is not set
-# CONFIG_IP_DCCP is not set
-# CONFIG_IP_SCTP is not set
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-CONFIG_NET_PKTGEN=m
-# CONFIG_HAMRADIO is not set
-# CONFIG_CAN is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-# CONFIG_AF_RXRPC is not set
-
-#
-# Wireless
-#
-# CONFIG_CFG80211 is not set
-CONFIG_WIRELESS_EXT=y
-# CONFIG_MAC80211 is not set
-# CONFIG_IEEE80211 is not set
-# CONFIG_RFKILL is not set
-# CONFIG_NET_9P is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_SYS_HYPERVISOR is not set
-# CONFIG_CONNECTOR is not set
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLKDEVS=y
-CONFIG_MTD_BLOCK=y
-CONFIG_FTL=y
-CONFIG_NFTL=y
-# CONFIG_NFTL_RW is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-# CONFIG_MTD_OOPS is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-CONFIG_MTD_CFI=y
-CONFIG_MTD_JEDECPROBE=y
-CONFIG_MTD_GEN_PROBE=y
-CONFIG_MTD_CFI_ADV_OPTIONS=y
-CONFIG_MTD_CFI_NOSWAP=y
-# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
-# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
-CONFIG_MTD_CFI_GEOMETRY=y
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-CONFIG_MTD_CFI_I4=y
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_OTP is not set
-CONFIG_MTD_CFI_INTELEXT=y
-CONFIG_MTD_CFI_AMDSTD=y
-CONFIG_MTD_CFI_STAA=y
-CONFIG_MTD_CFI_UTIL=y
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-CONFIG_MTD_PHYSMAP=y
-CONFIG_MTD_PHYSMAP_START=0x0
-CONFIG_MTD_PHYSMAP_LEN=0x0
-CONFIG_MTD_PHYSMAP_BANKWIDTH=0
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_IMPA7 is not set
-# CONFIG_MTD_INTEL_VR_NOR is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_PMC551 is not set
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-# CONFIG_MTD_NAND_ECC_SMC is not set
-# CONFIG_MTD_NAND_MUSEUM_IDS is not set
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-# CONFIG_MTD_NAND_CAFE is not set
-# CONFIG_MTD_NAND_NANDSIM is not set
-# CONFIG_MTD_NAND_PLATFORM is not set
-# CONFIG_MTD_ALAUDA is not set
-CONFIG_MTD_NAND_ORION=y
-# CONFIG_MTD_ONENAND is not set
-
-#
-# UBI - Unsorted block images
-#
-# CONFIG_MTD_UBI is not set
-# CONFIG_PARPORT is not set
-CONFIG_BLK_DEV=y
-# CONFIG_BLK_CPQ_DA is not set
-# CONFIG_BLK_CPQ_CISS_DA is not set
-# CONFIG_BLK_DEV_DAC960 is not set
-# CONFIG_BLK_DEV_UMEM is not set
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_SX8 is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-CONFIG_MISC_DEVICES=y
-# CONFIG_PHANTOM is not set
-# CONFIG_EEPROM_93CX6 is not set
-# CONFIG_SGI_IOC4 is not set
-# CONFIG_TIFM_CORE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=y
-CONFIG_SCSI_DMA=y
-# CONFIG_SCSI_TGT is not set
-# CONFIG_SCSI_NETLINK is not set
-# CONFIG_SCSI_PROC_FS is not set
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=y
-# CONFIG_CHR_DEV_ST is not set
-# CONFIG_CHR_DEV_OSST is not set
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-# CONFIG_SCSI_MULTI_LUN is not set
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-# CONFIG_SCSI_SCAN_ASYNC is not set
-CONFIG_SCSI_WAIT_SCAN=m
-
-#
-# SCSI Transports
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_LIBSAS is not set
-# CONFIG_SCSI_SRP_ATTRS is not set
-CONFIG_SCSI_LOWLEVEL=y
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
-# CONFIG_SCSI_3W_9XXX is not set
-# CONFIG_SCSI_ACARD is not set
-# CONFIG_SCSI_AACRAID is not set
-# CONFIG_SCSI_AIC7XXX is not set
-# CONFIG_SCSI_AIC7XXX_OLD is not set
-# CONFIG_SCSI_AIC79XX is not set
-# CONFIG_SCSI_AIC94XX is not set
-# CONFIG_SCSI_DPT_I2O is not set
-# CONFIG_SCSI_ADVANSYS is not set
-# CONFIG_SCSI_ARCMSR is not set
-# CONFIG_MEGARAID_NEWGEN is not set
-# CONFIG_MEGARAID_LEGACY is not set
-# CONFIG_MEGARAID_SAS is not set
-# CONFIG_SCSI_HPTIOP is not set
-# CONFIG_SCSI_DMX3191D is not set
-# CONFIG_SCSI_FUTURE_DOMAIN is not set
-# CONFIG_SCSI_IPS is not set
-# CONFIG_SCSI_INITIO is not set
-# CONFIG_SCSI_INIA100 is not set
-# CONFIG_SCSI_STEX is not set
-# CONFIG_SCSI_SYM53C8XX_2 is not set
-# CONFIG_SCSI_IPR is not set
-# CONFIG_SCSI_QLOGIC_1280 is not set
-# CONFIG_SCSI_QLA_FC is not set
-# CONFIG_SCSI_QLA_ISCSI is not set
-# CONFIG_SCSI_LPFC is not set
-# CONFIG_SCSI_DC395x is not set
-# CONFIG_SCSI_DC390T is not set
-# CONFIG_SCSI_NSP32 is not set
-# CONFIG_SCSI_DEBUG is not set
-# CONFIG_SCSI_SRP is not set
-CONFIG_ATA=y
-# CONFIG_ATA_NONSTANDARD is not set
-# CONFIG_SATA_AHCI is not set
-# CONFIG_SATA_SVW is not set
-# CONFIG_ATA_PIIX is not set
-CONFIG_SATA_MV=y
-# CONFIG_SATA_NV is not set
-# CONFIG_PDC_ADMA is not set
-# CONFIG_SATA_QSTOR is not set
-# CONFIG_SATA_PROMISE is not set
-# CONFIG_SATA_SX4 is not set
-# CONFIG_SATA_SIL is not set
-# CONFIG_SATA_SIL24 is not set
-# CONFIG_SATA_SIS is not set
-# CONFIG_SATA_ULI is not set
-# CONFIG_SATA_VIA is not set
-# CONFIG_SATA_VITESSE is not set
-# CONFIG_SATA_INIC162X is not set
-# CONFIG_PATA_ALI is not set
-# CONFIG_PATA_AMD is not set
-# CONFIG_PATA_ARTOP is not set
-# CONFIG_PATA_ATIIXP is not set
-# CONFIG_PATA_CMD640_PCI is not set
-# CONFIG_PATA_CMD64X is not set
-# CONFIG_PATA_CS5520 is not set
-# CONFIG_PATA_CS5530 is not set
-# CONFIG_PATA_CYPRESS is not set
-# CONFIG_PATA_EFAR is not set
-# CONFIG_ATA_GENERIC is not set
-# CONFIG_PATA_HPT366 is not set
-# CONFIG_PATA_HPT37X is not set
-# CONFIG_PATA_HPT3X2N is not set
-# CONFIG_PATA_HPT3X3 is not set
-# CONFIG_PATA_IT821X is not set
-# CONFIG_PATA_IT8213 is not set
-# CONFIG_PATA_JMICRON is not set
-# CONFIG_PATA_TRIFLEX is not set
-# CONFIG_PATA_MARVELL is not set
-# CONFIG_PATA_MPIIX is not set
-# CONFIG_PATA_OLDPIIX is not set
-# CONFIG_PATA_NETCELL is not set
-# CONFIG_PATA_NINJA32 is not set
-# CONFIG_PATA_NS87410 is not set
-# CONFIG_PATA_NS87415 is not set
-# CONFIG_PATA_OPTI is not set
-# CONFIG_PATA_OPTIDMA is not set
-# CONFIG_PATA_PDC_OLD is not set
-# CONFIG_PATA_RADISYS is not set
-# CONFIG_PATA_RZ1000 is not set
-# CONFIG_PATA_SC1200 is not set
-# CONFIG_PATA_SERVERWORKS is not set
-# CONFIG_PATA_PDC2027X is not set
-# CONFIG_PATA_SIL680 is not set
-# CONFIG_PATA_SIS is not set
-# CONFIG_PATA_VIA is not set
-# CONFIG_PATA_WINBOND is not set
-# CONFIG_PATA_PLATFORM is not set
-# CONFIG_MD is not set
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-# CONFIG_FIREWIRE is not set
-# CONFIG_IEEE1394 is not set
-# CONFIG_I2O is not set
-CONFIG_NETDEVICES=y
-# CONFIG_NETDEVICES_MULTIQUEUE is not set
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_MACVLAN is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
-# CONFIG_VETH is not set
-# CONFIG_ARCNET is not set
-# CONFIG_PHYLIB is not set
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=y
-# CONFIG_AX88796 is not set
-# CONFIG_HAPPYMEAL is not set
-# CONFIG_SUNGEM is not set
-# CONFIG_CASSINI is not set
-# CONFIG_NET_VENDOR_3COM is not set
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-# CONFIG_NET_TULIP is not set
-# CONFIG_HP100 is not set
-# CONFIG_IBM_NEW_EMAC_ZMII is not set
-# CONFIG_IBM_NEW_EMAC_RGMII is not set
-# CONFIG_IBM_NEW_EMAC_TAH is not set
-# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
-CONFIG_NET_PCI=y
-# CONFIG_PCNET32 is not set
-# CONFIG_AMD8111_ETH is not set
-# CONFIG_ADAPTEC_STARFIRE is not set
-# CONFIG_B44 is not set
-# CONFIG_FORCEDETH is not set
-# CONFIG_EEPRO100 is not set
-CONFIG_E100=y
-# CONFIG_FEALNX is not set
-# CONFIG_NATSEMI is not set
-# CONFIG_NE2K_PCI is not set
-# CONFIG_8139CP is not set
-# CONFIG_8139TOO is not set
-# CONFIG_R6040 is not set
-# CONFIG_SIS900 is not set
-# CONFIG_EPIC100 is not set
-# CONFIG_SUNDANCE is not set
-# CONFIG_TLAN is not set
-# CONFIG_VIA_RHINE is not set
-# CONFIG_SC92031 is not set
-CONFIG_NETDEV_1000=y
-# CONFIG_ACENIC is not set
-# CONFIG_DL2K is not set
-CONFIG_E1000=y
-CONFIG_E1000_NAPI=y
-# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
-# CONFIG_E1000E is not set
-# CONFIG_E1000E_ENABLED is not set
-# CONFIG_IP1000 is not set
-# CONFIG_IGB is not set
-# CONFIG_NS83820 is not set
-# CONFIG_HAMACHI is not set
-# CONFIG_YELLOWFIN is not set
-# CONFIG_R8169 is not set
-# CONFIG_SIS190 is not set
-CONFIG_SKGE=y
-CONFIG_SKY2=y
-# CONFIG_SK98LIN is not set
-# CONFIG_VIA_VELOCITY is not set
-CONFIG_TIGON3=y
-# CONFIG_BNX2 is not set
-CONFIG_MV643XX_ETH=y
-# CONFIG_QLA3XXX is not set
-# CONFIG_ATL1 is not set
-CONFIG_NETDEV_10000=y
-# CONFIG_CHELSIO_T1 is not set
-# CONFIG_CHELSIO_T3 is not set
-# CONFIG_IXGBE is not set
-# CONFIG_IXGB is not set
-# CONFIG_S2IO is not set
-# CONFIG_MYRI10GE is not set
-# CONFIG_NETXEN_NIC is not set
-# CONFIG_NIU is not set
-# CONFIG_MLX4_CORE is not set
-# CONFIG_TEHUTI is not set
-# CONFIG_BNX2X is not set
-# CONFIG_TR is not set
-
-#
-# Wireless LAN
-#
-# CONFIG_WLAN_PRE80211 is not set
-# CONFIG_WLAN_80211 is not set
-
-#
-# USB Network Adapters
-#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET is not set
-# CONFIG_WAN is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
-# CONFIG_NET_FC is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-# CONFIG_INPUT_POLLDEV is not set
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=y
-CONFIG_INPUT_MOUSEDEV_PSAUX=y
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_EVDEV is not set
-# CONFIG_INPUT_EVBUG is not set
-
-#
-# Input Device Drivers
-#
-# CONFIG_INPUT_KEYBOARD is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TABLET is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-# CONFIG_NOZOMI is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=y
-CONFIG_SERIAL_8250_CONSOLE=y
-CONFIG_SERIAL_8250_PCI=y
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=2
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-# CONFIG_SERIAL_JSM is not set
-CONFIG_UNIX98_PTYS=y
-CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=16
-# CONFIG_IPMI_HANDLER is not set
-CONFIG_HW_RANDOM=m
-# CONFIG_NVRAM is not set
-# CONFIG_R3964 is not set
-# CONFIG_APPLICOM is not set
-# CONFIG_RAW_DRIVER is not set
-# CONFIG_TCG_TPM is not set
-CONFIG_DEVPORT=y
-CONFIG_I2C=y
-CONFIG_I2C_BOARDINFO=y
-CONFIG_I2C_CHARDEV=y
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-# CONFIG_I2C_ALI1535 is not set
-# CONFIG_I2C_ALI1563 is not set
-# CONFIG_I2C_ALI15X3 is not set
-# CONFIG_I2C_AMD756 is not set
-# CONFIG_I2C_AMD8111 is not set
-# CONFIG_I2C_GPIO is not set
-# CONFIG_I2C_I801 is not set
-# CONFIG_I2C_I810 is not set
-# CONFIG_I2C_PIIX4 is not set
-# CONFIG_I2C_NFORCE2 is not set
-# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_PROSAVAGE is not set
-# CONFIG_I2C_SAVAGE4 is not set
-# CONFIG_I2C_SIMTEC is not set
-# CONFIG_I2C_SIS5595 is not set
-# CONFIG_I2C_SIS630 is not set
-# CONFIG_I2C_SIS96X is not set
-# CONFIG_I2C_TAOS_EVM is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_TINY_USB is not set
-# CONFIG_I2C_VIA is not set
-# CONFIG_I2C_VIAPRO is not set
-# CONFIG_I2C_VOODOO3 is not set
-CONFIG_I2C_MV64XXX=y
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_DS1682 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_PCF8575 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_TPS65010 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_SENSORS_TSL2550 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-# CONFIG_W1 is not set
-# CONFIG_POWER_SUPPLY is not set
-CONFIG_HWMON=y
-# CONFIG_HWMON_VID is not set
-# CONFIG_SENSORS_AD7418 is not set
-# CONFIG_SENSORS_ADM1021 is not set
-# CONFIG_SENSORS_ADM1025 is not set
-# CONFIG_SENSORS_ADM1026 is not set
-# CONFIG_SENSORS_ADM1029 is not set
-# CONFIG_SENSORS_ADM1031 is not set
-# CONFIG_SENSORS_ADM9240 is not set
-# CONFIG_SENSORS_ADT7470 is not set
-# CONFIG_SENSORS_ATXP1 is not set
-# CONFIG_SENSORS_DS1621 is not set
-# CONFIG_SENSORS_I5K_AMB is not set
-# CONFIG_SENSORS_F71805F is not set
-# CONFIG_SENSORS_F71882FG is not set
-# CONFIG_SENSORS_F75375S is not set
-# CONFIG_SENSORS_GL518SM is not set
-# CONFIG_SENSORS_GL520SM is not set
-# CONFIG_SENSORS_IT87 is not set
-# CONFIG_SENSORS_LM63 is not set
-# CONFIG_SENSORS_LM75 is not set
-# CONFIG_SENSORS_LM77 is not set
-# CONFIG_SENSORS_LM78 is not set
-# CONFIG_SENSORS_LM80 is not set
-# CONFIG_SENSORS_LM83 is not set
-# CONFIG_SENSORS_LM85 is not set
-# CONFIG_SENSORS_LM87 is not set
-# CONFIG_SENSORS_LM90 is not set
-# CONFIG_SENSORS_LM92 is not set
-# CONFIG_SENSORS_LM93 is not set
-# CONFIG_SENSORS_MAX1619 is not set
-# CONFIG_SENSORS_MAX6650 is not set
-# CONFIG_SENSORS_PC87360 is not set
-# CONFIG_SENSORS_PC87427 is not set
-# CONFIG_SENSORS_SIS5595 is not set
-# CONFIG_SENSORS_DME1737 is not set
-# CONFIG_SENSORS_SMSC47M1 is not set
-# CONFIG_SENSORS_SMSC47M192 is not set
-# CONFIG_SENSORS_SMSC47B397 is not set
-# CONFIG_SENSORS_THMC50 is not set
-# CONFIG_SENSORS_VIA686A is not set
-# CONFIG_SENSORS_VT1211 is not set
-# CONFIG_SENSORS_VT8231 is not set
-# CONFIG_SENSORS_W83781D is not set
-# CONFIG_SENSORS_W83791D is not set
-# CONFIG_SENSORS_W83792D is not set
-# CONFIG_SENSORS_W83793 is not set
-# CONFIG_SENSORS_W83L785TS is not set
-# CONFIG_SENSORS_W83627HF is not set
-# CONFIG_SENSORS_W83627EHF is not set
-# CONFIG_HWMON_DEBUG_CHIP is not set
-# CONFIG_WATCHDOG is not set
-
-#
-# Sonics Silicon Backplane
-#
-CONFIG_SSB_POSSIBLE=y
-# CONFIG_SSB is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-# CONFIG_DVB_CORE is not set
-CONFIG_DAB=y
-# CONFIG_USB_DABUSB is not set
-
-#
-# Graphics support
-#
-# CONFIG_DRM is not set
-# CONFIG_VGASTATE is not set
-# CONFIG_VIDEO_OUTPUT_CONTROL is not set
-# CONFIG_FB is not set
-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-
-#
-# Display device support
-#
-# CONFIG_DISPLAY_SUPPORT is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-
-#
-# Sound
-#
-# CONFIG_SOUND is not set
-CONFIG_HID_SUPPORT=y
-CONFIG_HID=y
-# CONFIG_HID_DEBUG is not set
-# CONFIG_HIDRAW is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=y
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-CONFIG_USB_SUPPORT=y
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-CONFIG_USB_ARCH_HAS_EHCI=y
-CONFIG_USB=y
-# CONFIG_USB_DEBUG is not set
-# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-CONFIG_USB_DEVICE_CLASS=y
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-CONFIG_USB_EHCI_HCD=y
-CONFIG_USB_EHCI_ROOT_HUB_TT=y
-CONFIG_USB_EHCI_TT_NEWSCHED=y
-# CONFIG_USB_ISP116X_HCD is not set
-# CONFIG_USB_OHCI_HCD is not set
-# CONFIG_USB_UHCI_HCD is not set
-# CONFIG_USB_SL811_HCD is not set
-# CONFIG_USB_R8A66597_HCD is not set
-
-#
-# USB Device Class drivers
-#
-# CONFIG_USB_ACM is not set
-CONFIG_USB_PRINTER=y
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=y
-# CONFIG_USB_STORAGE_DEBUG is not set
-CONFIG_USB_STORAGE_DATAFAB=y
-CONFIG_USB_STORAGE_FREECOM=y
-# CONFIG_USB_STORAGE_ISD200 is not set
-CONFIG_USB_STORAGE_DPCM=y
-# CONFIG_USB_STORAGE_USBAT is not set
-CONFIG_USB_STORAGE_SDDR09=y
-CONFIG_USB_STORAGE_SDDR55=y
-CONFIG_USB_STORAGE_JUMPSHOT=y
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_STORAGE_KARMA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_MICROTEK is not set
-# CONFIG_USB_MON is not set
-
-#
-# USB port drivers
-#
-# CONFIG_USB_SERIAL is not set
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_ADUTUX is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_BERRY_CHARGE is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_CYPRESS_CY7C63 is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_PHIDGET is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_FTDI_ELAN is not set
-# CONFIG_USB_APPLEDISPLAY is not set
-# CONFIG_USB_SISUSBVGA is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TRANCEVIBRATOR is not set
-# CONFIG_USB_IOWARRIOR is not set
-# CONFIG_USB_TEST is not set
-# CONFIG_USB_GADGET is not set
-# CONFIG_MMC is not set
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-# CONFIG_LEDS_GPIO is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_HEARTBEAT=y
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-# CONFIG_RTC_DEBUG is not set
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# I2C RTC drivers
-#
-CONFIG_RTC_DRV_DS1307=y
-# CONFIG_RTC_DRV_DS1374 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_MAX6900 is not set
-CONFIG_RTC_DRV_RS5C372=y
-# CONFIG_RTC_DRV_ISL1208 is not set
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_PCF8583 is not set
-CONFIG_RTC_DRV_M41T80=y
-# CONFIG_RTC_DRV_M41T80_WDT is not set
-
-#
-# SPI RTC drivers
-#
-
-#
-# Platform RTC drivers
-#
-# CONFIG_RTC_DRV_CMOS is not set
-# CONFIG_RTC_DRV_DS1511 is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_STK17TA8 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-# CONFIG_RTC_DRV_M48T59 is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# on-CPU RTC drivers
-#
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-CONFIG_EXT3_FS=y
-# CONFIG_EXT3_FS_XATTR is not set
-# CONFIG_EXT4DEV_FS is not set
-CONFIG_JBD=y
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-CONFIG_ISO9660_FS=y
-# CONFIG_JOLIET is not set
-# CONFIG_ZISOFS is not set
-CONFIG_UDF_FS=m
-CONFIG_UDF_NLS=y
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-CONFIG_MSDOS_FS=y
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
-# CONFIG_JFFS2_SUMMARY is not set
-# CONFIG_JFFS2_FS_XATTR is not set
-# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
-CONFIG_JFFS2_ZLIB=y
-# CONFIG_JFFS2_LZO is not set
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-CONFIG_CRAMFS=y
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-CONFIG_NETWORK_FILESYSTEMS=y
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_SUNRPC_BIND34 is not set
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-CONFIG_BSD_DISKLABEL=y
-CONFIG_MINIX_SUBPARTITION=y
-CONFIG_SOLARIS_X86_PARTITION=y
-CONFIG_UNIXWARE_DISKLABEL=y
-CONFIG_LDM_PARTITION=y
-CONFIG_LDM_DEBUG=y
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-CONFIG_SUN_PARTITION=y
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-# CONFIG_SYSV68_PARTITION is not set
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="iso8859-1"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-CONFIG_NLS_CODEPAGE_850=y
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=y
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-# CONFIG_NLS_UTF8 is not set
-# CONFIG_DLM is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_ENABLE_WARN_DEPRECATED=y
-CONFIG_ENABLE_MUST_CHECK=y
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-# CONFIG_DEBUG_KERNEL is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_SAMPLES is not set
-CONFIG_DEBUG_USER=y
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=m
-CONFIG_CRYPTO_BLKCIPHER=m
-# CONFIG_CRYPTO_SEQIV is not set
-CONFIG_CRYPTO_MANAGER=m
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-# CONFIG_CRYPTO_SHA1 is not set
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-CONFIG_CRYPTO_CBC=m
-CONFIG_CRYPTO_PCBC=m
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_XTS is not set
-# CONFIG_CRYPTO_CTR is not set
-# CONFIG_CRYPTO_GCM is not set
-# CONFIG_CRYPTO_CCM is not set
-# CONFIG_CRYPTO_CRYPTD is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-# CONFIG_CRYPTO_ARC4 is not set
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_SEED is not set
-# CONFIG_CRYPTO_SALSA20 is not set
-# CONFIG_CRYPTO_DEFLATE is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_TEST is not set
-# CONFIG_CRYPTO_AUTHENC is not set
-# CONFIG_CRYPTO_LZO is not set
-CONFIG_CRYPTO_HW=y
-# CONFIG_CRYPTO_DEV_HIFN_795X is not set
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=y
-CONFIG_CRC16=y
-# CONFIG_CRC_ITU_T is not set
-CONFIG_CRC32=y
-# CONFIG_CRC7 is not set
-CONFIG_LIBCRC32C=y
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAS_DMA=y
diff --git a/arch/arm/mach-orion/Kconfig b/arch/arm/mach-orion/Kconfig
deleted file mode 100644 (file)
index 1dcbb6a..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-if ARCH_ORION
-
-menu "Orion Implementations"
-
-config MACH_DB88F5281
-       bool "Marvell Orion-2 Development Board"
-       select I2C_BOARDINFO
-       help
-         Say 'Y' here if you want your kernel to support the
-         Marvell Orion-2 (88F5281) Development Board
-
-config MACH_RD88F5182
-       bool "Marvell Orion-NAS Reference Design"
-       select I2C_BOARDINFO
-       help
-         Say 'Y' here if you want your kernel to support the
-         Marvell Orion-NAS (88F5182) RD2
-
-config MACH_KUROBOX_PRO
-       bool "KuroBox Pro"
-       select I2C_BOARDINFO
-       help
-         Say 'Y' here if you want your kernel to support the
-         KuroBox Pro platform.
-
-config MACH_DNS323
-       bool "D-Link DNS-323"
-       select I2C_BOARDINFO
-       help
-         Say 'Y' here if you want your kernel to support the
-         D-Link DNS-323 platform.
-
-config MACH_TS209
-       bool "QNAP TS-109/TS-209"
-       help
-         Say 'Y' here if you want your kernel to support the
-         QNAP TS-109/TS-209 platform.
-
-endmenu
-
-endif
diff --git a/arch/arm/mach-orion/Makefile b/arch/arm/mach-orion/Makefile
deleted file mode 100644 (file)
index d894caa..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-obj-y                          += common.o addr-map.o pci.o gpio.o irq.o
-obj-$(CONFIG_MACH_DB88F5281)   += db88f5281-setup.o
-obj-$(CONFIG_MACH_RD88F5182)   += rd88f5182-setup.o
-obj-$(CONFIG_MACH_KUROBOX_PRO) += kurobox_pro-setup.o
-obj-$(CONFIG_MACH_DNS323)      += dns323-setup.o
-obj-$(CONFIG_MACH_TS209)       += ts209-setup.o
diff --git a/arch/arm/mach-orion/Makefile.boot b/arch/arm/mach-orion/Makefile.boot
deleted file mode 100644 (file)
index 67039c3..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-   zreladdr-y  := 0x00008000
-params_phys-y  := 0x00000100
-initrd_phys-y  := 0x00800000
diff --git a/arch/arm/mach-orion/addr-map.c b/arch/arm/mach-orion/addr-map.c
deleted file mode 100644 (file)
index 738de61..0000000
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * arch/arm/mach-orion/addr-map.c
- *
- * Address map functions for Marvell Orion System On Chip
- *
- * Maintainer: Tzachi Perelstein <tzachi@marvell.com>
- *
- * This file is licensed under the terms of the GNU General Public
- * License version 2.  This program is licensed "as is" without any
- * warranty of any kind, whether express or implied.
- */
-
-#include <linux/kernel.h>
-#include <linux/init.h>
-#include <linux/mbus.h>
-#include <asm/hardware.h>
-#include <asm/io.h>
-#include "common.h"
-
-/*
- * The Orion has fully programable address map. There's a separate address
- * map for each of the device _master_ interfaces, e.g. CPU, PCI, PCIE, USB,
- * Gigabit Ethernet, DMA/XOR engines, etc. Each interface has its own
- * address decode windows that allow it to access any of the Orion resources.
- *
- * CPU address decoding --
- * Linux assumes that it is the boot loader that already setup the access to
- * DDR and internal registers.
- * Setup access to PCI and PCI-E IO/MEM space is issued by this file.
- * Setup access to various devices located on the device bus interface (e.g.
- * flashes, RTC, etc) should be issued by machine-setup.c according to
- * specific board population (by using orion_setup_*_win()).
- *
- * Non-CPU Masters address decoding --
- * Unlike the CPU, we setup the access from Orion's master interfaces to DDR
- * banks only (the typical use case).
- * Setup access for each master to DDR is issued by common.c.
- *
- * Note: although orion_setbits() and orion_clrbits() are not atomic
- * no locking is necessary here since code in this file is only called
- * at boot time when there is no concurrency issues.
- */
-
-/*
- * Generic Address Decode Windows bit settings
- */
-#define TARGET_DDR             0
-#define TARGET_DEV_BUS         1
-#define TARGET_PCI             3
-#define TARGET_PCIE            4
-#define ATTR_DDR_CS(n)         (((n) ==0) ? 0xe :      \
-                               ((n) == 1) ? 0xd :      \
-                               ((n) == 2) ? 0xb :      \
-                               ((n) == 3) ? 0x7 : 0xf)
-#define ATTR_PCIE_MEM          0x59
-#define ATTR_PCIE_IO           0x51
-#define ATTR_PCIE_WA           0x79
-#define ATTR_PCI_MEM           0x59
-#define ATTR_PCI_IO            0x51
-#define ATTR_DEV_CS0           0x1e
-#define ATTR_DEV_CS1           0x1d
-#define ATTR_DEV_CS2           0x1b
-#define ATTR_DEV_BOOT          0xf
-#define WIN_EN                 1
-
-/*
- * Helpers to get DDR bank info
- */
-#define DDR_BASE_CS(n)         ORION_DDR_REG(0x1500 + ((n) * 8))
-#define DDR_SIZE_CS(n)         ORION_DDR_REG(0x1504 + ((n) * 8))
-#define DDR_MAX_CS             4
-#define DDR_REG_TO_SIZE(reg)   (((reg) | 0xffffff) + 1)
-#define DDR_REG_TO_BASE(reg)   ((reg) & 0xff000000)
-#define DDR_BANK_EN            1
-
-/*
- * CPU Address Decode Windows registers
- */
-#define CPU_WIN_CTRL(n)                ORION_BRIDGE_REG(0x000 | ((n) << 4))
-#define CPU_WIN_BASE(n)                ORION_BRIDGE_REG(0x004 | ((n) << 4))
-#define CPU_WIN_REMAP_LO(n)    ORION_BRIDGE_REG(0x008 | ((n) << 4))
-#define CPU_WIN_REMAP_HI(n)    ORION_BRIDGE_REG(0x00c | ((n) << 4))
-
-/*
- * Gigabit Ethernet Address Decode Windows registers
- */
-#define ETH_WIN_BASE(win)      ORION_ETH_REG(0x200 + ((win) * 8))
-#define ETH_WIN_SIZE(win)      ORION_ETH_REG(0x204 + ((win) * 8))
-#define ETH_WIN_REMAP(win)     ORION_ETH_REG(0x280 + ((win) * 4))
-#define ETH_WIN_EN             ORION_ETH_REG(0x290)
-#define ETH_WIN_PROT           ORION_ETH_REG(0x294)
-#define ETH_MAX_WIN            6
-#define ETH_MAX_REMAP_WIN      4
-
-
-struct mbus_dram_target_info orion_mbus_dram_info;
-
-static int __init orion_cpu_win_can_remap(int win)
-{
-       u32 dev, rev;
-
-       orion_pcie_id(&dev, &rev);
-       if ((dev == MV88F5281_DEV_ID && win < 4)
-           || (dev == MV88F5182_DEV_ID && win < 2)
-           || (dev == MV88F5181_DEV_ID && win < 2))
-               return 1;
-
-       return 0;
-}
-
-static void __init setup_cpu_win(int win, u32 base, u32 size,
-                                u8 target, u8 attr, int remap)
-{
-       orion_write(CPU_WIN_BASE(win), base & 0xffff0000);
-       orion_write(CPU_WIN_CTRL(win),
-               ((size - 1) & 0xffff0000) | (attr << 8) | (target << 4) | 1);
-
-       if (orion_cpu_win_can_remap(win)) {
-               if (remap < 0)
-                       remap = base;
-
-               orion_write(CPU_WIN_REMAP_LO(win), remap & 0xffff0000);
-               orion_write(CPU_WIN_REMAP_HI(win), 0);
-       }
-}
-
-void __init orion_setup_cpu_mbus_bridge(void)
-{
-       int i;
-       int cs;
-
-       /*
-        * First, disable and clear windows.
-        */
-       for (i = 0; i < 8; i++) {
-               orion_write(CPU_WIN_BASE(i), 0);
-               orion_write(CPU_WIN_CTRL(i), 0);
-               if (orion_cpu_win_can_remap(i)) {
-                       orion_write(CPU_WIN_REMAP_LO(i), 0);
-                       orion_write(CPU_WIN_REMAP_HI(i), 0);
-               }
-       }
-
-       /*
-        * Setup windows for PCI+PCIe IO+MEM space.
-        */
-       setup_cpu_win(0, ORION_PCIE_IO_PHYS_BASE, ORION_PCIE_IO_SIZE,
-               TARGET_PCIE, ATTR_PCIE_IO, ORION_PCIE_IO_BUS_BASE);
-       setup_cpu_win(1, ORION_PCI_IO_PHYS_BASE, ORION_PCI_IO_SIZE,
-               TARGET_PCI, ATTR_PCI_IO, ORION_PCI_IO_BUS_BASE);
-       setup_cpu_win(2, ORION_PCIE_MEM_PHYS_BASE, ORION_PCIE_MEM_SIZE,
-               TARGET_PCIE, ATTR_PCIE_MEM, -1);
-       setup_cpu_win(3, ORION_PCI_MEM_PHYS_BASE, ORION_PCI_MEM_SIZE,
-               TARGET_PCI, ATTR_PCI_MEM, -1);
-
-       /*
-        * Setup MBUS dram target info.
-        */
-       orion_mbus_dram_info.mbus_dram_target_id = TARGET_DDR;
-
-       for (i = 0, cs = 0; i < 4; i++) {
-               u32 base = readl(DDR_BASE_CS(i));
-               u32 size = readl(DDR_SIZE_CS(i));
-
-               /*
-                * Chip select enabled?
-                */
-               if (size & 1) {
-                       struct mbus_dram_window *w;
-
-                       w = &orion_mbus_dram_info.cs[cs++];
-                       w->cs_index = i;
-                       w->mbus_attr = 0xf & ~(1 << i);
-                       w->base = base & 0xff000000;
-                       w->size = (size | 0x00ffffff) + 1;
-               }
-       }
-       orion_mbus_dram_info.num_cs = cs;
-}
-
-void __init orion_setup_dev_boot_win(u32 base, u32 size)
-{
-       setup_cpu_win(4, base, size, TARGET_DEV_BUS, ATTR_DEV_BOOT, -1);
-}
-
-void __init orion_setup_dev0_win(u32 base, u32 size)
-{
-       setup_cpu_win(5, base, size, TARGET_DEV_BUS, ATTR_DEV_CS0, -1);
-}
-
-void __init orion_setup_dev1_win(u32 base, u32 size)
-{
-       setup_cpu_win(6, base, size, TARGET_DEV_BUS, ATTR_DEV_CS1, -1);
-}
-
-void __init orion_setup_dev2_win(u32 base, u32 size)
-{
-       setup_cpu_win(7, base, size, TARGET_DEV_BUS, ATTR_DEV_CS2, -1);
-}
-
-void __init orion_setup_pcie_wa_win(u32 base, u32 size)
-{
-       setup_cpu_win(7, base, size, TARGET_PCIE, ATTR_PCIE_WA, -1);
-}
-
-void __init orion_setup_eth_wins(void)
-{
-       int i;
-
-       /*
-        * First, disable and clear windows
-        */
-       for (i = 0; i < ETH_MAX_WIN; i++) {
-               orion_write(ETH_WIN_BASE(i), 0);
-               orion_write(ETH_WIN_SIZE(i), 0);
-               orion_setbits(ETH_WIN_EN, 1 << i);
-               orion_clrbits(ETH_WIN_PROT, 0x3 << (i * 2));
-               if (i < ETH_MAX_REMAP_WIN)
-                       orion_write(ETH_WIN_REMAP(i), 0);
-       }
-
-       /*
-        * Setup windows for DDR banks.
-        */
-       for (i = 0; i < DDR_MAX_CS; i++) {
-               u32 base, size;
-               size = orion_read(DDR_SIZE_CS(i));
-               base = orion_read(DDR_BASE_CS(i));
-               if (size & DDR_BANK_EN) {
-                       base = DDR_REG_TO_BASE(base);
-                       size = DDR_REG_TO_SIZE(size);
-                       orion_write(ETH_WIN_SIZE(i), (size-1) & 0xffff0000);
-                       orion_write(ETH_WIN_BASE(i), (base & 0xffff0000) |
-                                       (ATTR_DDR_CS(i) << 8) |
-                                       TARGET_DDR);
-                       orion_clrbits(ETH_WIN_EN, 1 << i);
-                       orion_setbits(ETH_WIN_PROT, 0x3 << (i * 2));
-               }
-       }
-}
diff --git a/arch/arm/mach-orion/common.c b/arch/arm/mach-orion/common.c
deleted file mode 100644 (file)
index 85c8f18..0000000
+++ /dev/null
@@ -1,391 +0,0 @@
-/*
- * arch/arm/mach-orion/common.c
- *
- * Core functions for Marvell Orion System On Chip
- *
- * Maintainer: Tzachi Perelstein <tzachi@marvell.com>
- *
- * This file is licensed under the terms of the GNU General Public
- * License version 2.  This program is licensed "as is" without any
- * warranty of any kind, whether express or implied.
- */
-
-#include <linux/kernel.h>
-#include <linux/init.h>
-#include <linux/platform_device.h>
-#include <linux/serial_8250.h>
-#include <linux/mbus.h>
-#include <linux/mv643xx_eth.h>
-#include <linux/mv643xx_i2c.h>
-#include <linux/ata_platform.h>
-#include <asm/page.h>
-#include <asm/setup.h>
-#include <asm/timex.h>
-#include <asm/mach/arch.h>
-#include <asm/mach/map.h>
-#include <asm/mach/time.h>
-#include <asm/arch/hardware.h>
-#include <asm/arch/orion.h>
-#include <asm/plat-orion/ehci-orion.h>
-#include <asm/plat-orion/orion_nand.h>
-#include <asm/plat-orion/time.h>
-#include "common.h"
-
-/*****************************************************************************
- * I/O Address Mapping
- ****************************************************************************/
-static struct map_desc orion_io_desc[] __initdata = {
-       {
-               .virtual        = ORION_REGS_VIRT_BASE,
-               .pfn            = __phys_to_pfn(ORION_REGS_PHYS_BASE),
-               .length         = ORION_REGS_SIZE,
-               .type           = MT_DEVICE
-       },
-       {
-               .virtual        = ORION_PCIE_IO_VIRT_BASE,
-               .pfn            = __phys_to_pfn(ORION_PCIE_IO_PHYS_BASE),
-               .length         = ORION_PCIE_IO_SIZE,
-               .type           = MT_DEVICE
-       },
-       {
-               .virtual        = ORION_PCI_IO_VIRT_BASE,
-               .pfn            = __phys_to_pfn(ORION_PCI_IO_PHYS_BASE),
-               .length         = ORION_PCI_IO_SIZE,
-               .type           = MT_DEVICE
-       },
-       {
-               .virtual        = ORION_PCIE_WA_VIRT_BASE,
-               .pfn            = __phys_to_pfn(ORION_PCIE_WA_PHYS_BASE),
-               .length         = ORION_PCIE_WA_SIZE,
-               .type           = MT_DEVICE
-       },
-};
-
-void __init orion_map_io(void)
-{
-       iotable_init(orion_io_desc, ARRAY_SIZE(orion_io_desc));
-}
-
-/*****************************************************************************
- * UART
- ****************************************************************************/
-
-static struct resource orion_uart_resources[] = {
-       {
-               .start          = UART0_PHYS_BASE,
-               .end            = UART0_PHYS_BASE + 0xff,
-               .flags          = IORESOURCE_MEM,
-       },
-       {
-               .start          = IRQ_ORION_UART0,
-               .end            = IRQ_ORION_UART0,
-               .flags          = IORESOURCE_IRQ,
-       },
-       {
-               .start          = UART1_PHYS_BASE,
-               .end            = UART1_PHYS_BASE + 0xff,
-               .flags          = IORESOURCE_MEM,
-       },
-       {
-               .start          = IRQ_ORION_UART1,
-               .end            = IRQ_ORION_UART1,
-               .flags          = IORESOURCE_IRQ,
-       },
-};
-
-static struct plat_serial8250_port orion_uart_data[] = {
-       {
-               .mapbase        = UART0_PHYS_BASE,
-               .membase        = (char *)UART0_VIRT_BASE,
-               .irq            = IRQ_ORION_UART0,
-               .flags          = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF,
-               .iotype         = UPIO_MEM,
-               .regshift       = 2,
-               .uartclk        = ORION_TCLK,
-       },
-       {
-               .mapbase        = UART1_PHYS_BASE,
-               .membase        = (char *)UART1_VIRT_BASE,
-               .irq            = IRQ_ORION_UART1,
-               .flags          = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF,
-               .iotype         = UPIO_MEM,
-               .regshift       = 2,
-               .uartclk        = ORION_TCLK,
-       },
-       { },
-};
-
-static struct platform_device orion_uart = {
-       .name                   = "serial8250",
-       .id                     = PLAT8250_DEV_PLATFORM,
-       .dev                    = {
-               .platform_data  = orion_uart_data,
-       },
-       .resource               = orion_uart_resources,
-       .num_resources          = ARRAY_SIZE(orion_uart_resources),
-};
-
-/*******************************************************************************
- * USB Controller - 2 interfaces
- ******************************************************************************/
-
-static struct resource orion_ehci0_resources[] = {
-       {
-               .start  = ORION_USB0_PHYS_BASE,
-               .end    = ORION_USB0_PHYS_BASE + SZ_4K,
-               .flags  = IORESOURCE_MEM,
-       },
-       {
-               .start  = IRQ_ORION_USB0_CTRL,
-               .end    = IRQ_ORION_USB0_CTRL,
-               .flags  = IORESOURCE_IRQ,
-       },
-};
-
-static struct resource orion_ehci1_resources[] = {
-       {
-               .start  = ORION_USB1_PHYS_BASE,
-               .end    = ORION_USB1_PHYS_BASE + SZ_4K,
-               .flags  = IORESOURCE_MEM,
-       },
-       {
-               .start  = IRQ_ORION_USB1_CTRL,
-               .end    = IRQ_ORION_USB1_CTRL,
-               .flags  = IORESOURCE_IRQ,
-       },
-};
-
-static struct orion_ehci_data orion_ehci_data = {
-       .dram           = &orion_mbus_dram_info,
-};
-
-static u64 ehci_dmamask = 0xffffffffUL;
-
-static struct platform_device orion_ehci0 = {
-       .name           = "orion-ehci",
-       .id             = 0,
-       .dev            = {
-               .dma_mask               = &ehci_dmamask,
-               .coherent_dma_mask      = 0xffffffff,
-               .platform_data          = &orion_ehci_data,
-       },
-       .resource       = orion_ehci0_resources,
-       .num_resources  = ARRAY_SIZE(orion_ehci0_resources),
-};
-
-static struct platform_device orion_ehci1 = {
-       .name           = "orion-ehci",
-       .id             = 1,
-       .dev            = {
-               .dma_mask               = &ehci_dmamask,
-               .coherent_dma_mask      = 0xffffffff,
-               .platform_data          = &orion_ehci_data,
-       },
-       .resource       = orion_ehci1_resources,
-       .num_resources  = ARRAY_SIZE(orion_ehci1_resources),
-};
-
-/*****************************************************************************
- * Gigabit Ethernet port
- * (The Orion and Discovery (MV643xx) families use the same Ethernet driver)
- ****************************************************************************/
-
-static struct resource orion_eth_shared_resources[] = {
-       {
-               .start  = ORION_ETH_PHYS_BASE + 0x2000,
-               .end    = ORION_ETH_PHYS_BASE + 0x3fff,
-               .flags  = IORESOURCE_MEM,
-       },
-};
-
-static struct platform_device orion_eth_shared = {
-       .name           = MV643XX_ETH_SHARED_NAME,
-       .id             = 0,
-       .num_resources  = 1,
-       .resource       = orion_eth_shared_resources,
-};
-
-static struct resource orion_eth_resources[] = {
-       {
-               .name   = "eth irq",
-               .start  = IRQ_ORION_ETH_SUM,
-               .end    = IRQ_ORION_ETH_SUM,
-               .flags  = IORESOURCE_IRQ,
-       }
-};
-
-static struct platform_device orion_eth = {
-       .name           = MV643XX_ETH_NAME,
-       .id             = 0,
-       .num_resources  = 1,
-       .resource       = orion_eth_resources,
-};
-
-void __init orion_eth_init(struct mv643xx_eth_platform_data *eth_data)
-{
-       orion_eth.dev.platform_data = eth_data;
-       platform_device_register(&orion_eth_shared);
-       platform_device_register(&orion_eth);
-}
-
-/*****************************************************************************
- * I2C controller
- * (The Orion and Discovery (MV643xx) families share the same I2C controller)
- ****************************************************************************/
-
-static struct mv64xxx_i2c_pdata orion_i2c_pdata = {
-       .freq_m         = 8, /* assumes 166 MHz TCLK */
-       .freq_n         = 3,
-       .timeout        = 1000, /* Default timeout of 1 second */
-};
-
-static struct resource orion_i2c_resources[] = {
-       {
-               .name   = "i2c base",
-               .start  = I2C_PHYS_BASE,
-               .end    = I2C_PHYS_BASE + 0x20 -1,
-               .flags  = IORESOURCE_MEM,
-       },
-       {
-               .name   = "i2c irq",
-               .start  = IRQ_ORION_I2C,
-               .end    = IRQ_ORION_I2C,
-               .flags  = IORESOURCE_IRQ,
-       },
-};
-
-static struct platform_device orion_i2c = {
-       .name           = MV64XXX_I2C_CTLR_NAME,
-       .id             = 0,
-       .num_resources  = ARRAY_SIZE(orion_i2c_resources),
-       .resource       = orion_i2c_resources,
-       .dev            = {
-               .platform_data = &orion_i2c_pdata,
-       },
-};
-
-/*****************************************************************************
- * Sata port
- ****************************************************************************/
-static struct resource orion_sata_resources[] = {
-        {
-                .name   = "sata base",
-                .start  = ORION_SATA_PHYS_BASE,
-                .end    = ORION_SATA_PHYS_BASE + 0x5000 - 1,
-                .flags  = IORESOURCE_MEM,
-        },
-       {
-                .name   = "sata irq",
-                .start  = IRQ_ORION_SATA,
-                .end    = IRQ_ORION_SATA,
-                .flags  = IORESOURCE_IRQ,
-        },
-};
-
-static struct platform_device orion_sata = {
-       .name           = "sata_mv",
-       .id             = 0,
-       .dev            = {
-               .coherent_dma_mask      = 0xffffffff,
-       },
-       .num_resources  = ARRAY_SIZE(orion_sata_resources),
-       .resource       = orion_sata_resources,
-};
-
-void __init orion_sata_init(struct mv_sata_platform_data *sata_data)
-{
-       sata_data->dram = &orion_mbus_dram_info;
-       orion_sata.dev.platform_data = sata_data;
-       platform_device_register(&orion_sata);
-}
-
-/*****************************************************************************
- * Time handling
- ****************************************************************************/
-
-static void orion_timer_init(void)
-{
-       orion_time_init(IRQ_ORION_BRIDGE, ORION_TCLK);
-}
-
-struct sys_timer orion_timer = {
-        .init = orion_timer_init,
-};
-
-/*****************************************************************************
- * General
- ****************************************************************************/
-
-/*
- * Identify device ID and rev from PCIE configuration header space '0'.
- */
-static void __init orion_id(u32 *dev, u32 *rev, char **dev_name)
-{
-       orion_pcie_id(dev, rev);
-
-       if (*dev == MV88F5281_DEV_ID) {
-               if (*rev == MV88F5281_REV_D2) {
-                       *dev_name = "MV88F5281-D2";
-               } else if (*rev == MV88F5281_REV_D1) {
-                       *dev_name = "MV88F5281-D1";
-               } else {
-                       *dev_name = "MV88F5281-Rev-Unsupported";
-               }
-       } else if (*dev == MV88F5182_DEV_ID) {
-               if (*rev == MV88F5182_REV_A2) {
-                       *dev_name = "MV88F5182-A2";
-               } else {
-                       *dev_name = "MV88F5182-Rev-Unsupported";
-               }
-       } else if (*dev == MV88F5181_DEV_ID) {
-               if (*rev == MV88F5181_REV_B1) {
-                       *dev_name = "MV88F5181-Rev-B1";
-               } else {
-                       *dev_name = "MV88F5181-Rev-Unsupported";
-               }
-       } else {
-               *dev_name = "Device-Unknown";
-       }
-}
-
-void __init orion_init(void)
-{
-       char *dev_name;
-       u32 dev, rev;
-
-       orion_id(&dev, &rev, &dev_name);
-       printk(KERN_INFO "Orion ID: %s. TCLK=%d.\n", dev_name, ORION_TCLK);
-
-       /*
-        * Setup Orion address map
-        */
-       orion_setup_cpu_mbus_bridge();
-       orion_setup_eth_wins();
-
-       /*
-        * Register devices.
-        */
-       platform_device_register(&orion_uart);
-       platform_device_register(&orion_ehci0);
-       if (dev == MV88F5182_DEV_ID)
-               platform_device_register(&orion_ehci1);
-       platform_device_register(&orion_i2c);
-}
-
-/*
- * Many orion-based systems have buggy bootloader implementations.
- * This is a common fixup for bogus memory tags.
- */
-void __init tag_fixup_mem32(struct machine_desc *mdesc, struct tag *t,
-                           char **from, struct meminfo *meminfo)
-{
-       for (; t->hdr.size; t = tag_next(t))
-               if (t->hdr.tag == ATAG_MEM &&
-                   (!t->u.mem.size || t->u.mem.size & ~PAGE_MASK ||
-                    t->u.mem.start & ~PAGE_MASK)) {
-                       printk(KERN_WARNING
-                              "Clearing invalid memory bank %dKB@0x%08x\n",
-                              t->u.mem.size / 1024, t->u.mem.start);
-                       t->hdr.tag = 0;
-               }
-}
diff --git a/arch/arm/mach-orion/common.h b/arch/arm/mach-orion/common.h
deleted file mode 100644 (file)
index bcc31ad..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-#ifndef __ARCH_ORION_COMMON_H
-#define __ARCH_ORION_COMMON_H
-
-/*
- * Basic Orion init functions used early by machine-setup.
- */
-
-void orion_map_io(void);
-void orion_init_irq(void);
-void orion_init(void);
-extern struct sys_timer orion_timer;
-
-/*
- * Enumerations and functions for Orion windows mapping. Used by Orion core
- * functions to map its interfaces and by the machine-setup to map its on-
- * board devices. Details in /mach-orion/addr-map.c
- */
-extern struct mbus_dram_target_info orion_mbus_dram_info;
-void orion_setup_cpu_mbus_bridge(void);
-void orion_setup_dev_boot_win(u32 base, u32 size);
-void orion_setup_dev0_win(u32 base, u32 size);
-void orion_setup_dev1_win(u32 base, u32 size);
-void orion_setup_dev2_win(u32 base, u32 size);
-void orion_setup_pcie_wa_win(u32 base, u32 size);
-void orion_setup_eth_wins(void);
-
-/*
- * Shared code used internally by other Orion core functions.
- * (/mach-orion/pci.c)
- */
-
-struct pci_sys_data;
-struct pci_bus;
-
-void orion_pcie_id(u32 *dev, u32 *rev);
-int orion_pcie_local_bus_nr(void);
-int orion_pci_local_bus_nr(void);
-int orion_pci_sys_setup(int nr, struct pci_sys_data *sys);
-struct pci_bus *orion_pci_sys_scan_bus(int nr, struct pci_sys_data *sys);
-
-/*
- * Valid GPIO pins according to MPP setup, used by machine-setup.
- * (/mach-orion/gpio.c).
- */
-
-void orion_gpio_set_valid_pins(u32 pins);
-void gpio_display(void);       /* debug */
-
-/*
- * Pull in Orion Ethernet platform_data, used by machine-setup
- */
-
-struct mv643xx_eth_platform_data;
-
-void orion_eth_init(struct mv643xx_eth_platform_data *eth_data);
-
-/*
- * Orion Sata platform_data, used by machine-setup
- */
-
-struct mv_sata_platform_data;
-
-void orion_sata_init(struct mv_sata_platform_data *sata_data);
-
-struct machine_desc;
-struct meminfo;
-struct tag;
-extern void __init tag_fixup_mem32(struct machine_desc *, struct tag *,
-                                  char **, struct meminfo *);
-
-
-#endif
diff --git a/arch/arm/mach-orion/db88f5281-setup.c b/arch/arm/mach-orion/db88f5281-setup.c
deleted file mode 100644 (file)
index a0a9e48..0000000
+++ /dev/null
@@ -1,361 +0,0 @@
-/*
- * arch/arm/mach-orion/db88f5281-setup.c
- *
- * Marvell Orion-2 Development Board Setup
- *
- * Maintainer: Tzachi Perelstein <tzachi@marvell.com>
- *
- * This file is licensed under the terms of the GNU General Public
- * License version 2.  This program is licensed "as is" without any
- * warranty of any kind, whether express or implied.
- */
-
-#include <linux/kernel.h>
-#include <linux/init.h>
-#include <linux/platform_device.h>
-#include <linux/pci.h>
-#include <linux/irq.h>
-#include <linux/mtd/physmap.h>
-#include <linux/mtd/nand.h>
-#include <linux/timer.h>
-#include <linux/mv643xx_eth.h>
-#include <linux/i2c.h>
-#include <asm/mach-types.h>
-#include <asm/gpio.h>
-#include <asm/mach/arch.h>
-#include <asm/mach/pci.h>
-#include <asm/arch/orion.h>
-#include <asm/plat-orion/orion_nand.h>
-#include "common.h"
-
-/*****************************************************************************
- * DB-88F5281 on board devices
- ****************************************************************************/
-
-/*
- * 512K NOR flash Device bus boot chip select
- */
-
-#define DB88F5281_NOR_BOOT_BASE                0xf4000000
-#define DB88F5281_NOR_BOOT_SIZE                SZ_512K
-
-/*
- * 7-Segment on Device bus chip select 0
- */
-
-#define DB88F5281_7SEG_BASE            0xfa000000
-#define DB88F5281_7SEG_SIZE            SZ_1K
-
-/*
- * 32M NOR flash on Device bus chip select 1
- */
-
-#define DB88F5281_NOR_BASE             0xfc000000
-#define DB88F5281_NOR_SIZE             SZ_32M
-
-/*
- * 32M NAND flash on Device bus chip select 2
- */
-
-#define DB88F5281_NAND_BASE            0xfa800000
-#define DB88F5281_NAND_SIZE            SZ_1K
-
-/*
- * PCI
- */
-
-#define DB88F5281_PCI_SLOT0_OFFS               7
-#define DB88F5281_PCI_SLOT0_IRQ_PIN            12
-#define DB88F5281_PCI_SLOT1_SLOT2_IRQ_PIN      13
-
-/*****************************************************************************
- * 512M NOR Flash on Device bus Boot CS
- ****************************************************************************/
-
-static struct physmap_flash_data db88f5281_boot_flash_data = {
-       .width          = 1,    /* 8 bit bus width */
-};
-
-static struct resource db88f5281_boot_flash_resource = {
-       .flags          = IORESOURCE_MEM,
-       .start          = DB88F5281_NOR_BOOT_BASE,
-       .end            = DB88F5281_NOR_BOOT_BASE + DB88F5281_NOR_BOOT_SIZE - 1,
-};
-
-static struct platform_device db88f5281_boot_flash = {
-       .name           = "physmap-flash",
-       .id             = 0,
-       .dev            = {
-               .platform_data = &db88f5281_boot_flash_data,
-       },
-       .num_resources  = 1,
-       .resource       = &db88f5281_boot_flash_resource,
-};
-
-/*****************************************************************************
- * 32M NOR Flash on Device bus CS1
- ****************************************************************************/
-
-static struct physmap_flash_data db88f5281_nor_flash_data = {
-       .width          = 4,    /* 32 bit bus width */
-};
-
-static struct resource db88f5281_nor_flash_resource = {
-       .flags          = IORESOURCE_MEM,
-       .start          = DB88F5281_NOR_BASE,
-       .end            = DB88F5281_NOR_BASE + DB88F5281_NOR_SIZE - 1,
-};
-
-static struct platform_device db88f5281_nor_flash = {
-       .name           = "physmap-flash",
-       .id             = 1,
-       .dev            = {
-               .platform_data = &db88f5281_nor_flash_data,
-       },
-       .num_resources  = 1,
-       .resource       = &db88f5281_nor_flash_resource,
-};
-
-/*****************************************************************************
- * 32M NAND Flash on Device bus CS2
- ****************************************************************************/
-
-static struct mtd_partition db88f5281_nand_parts[] = {
-       {
-               .name = "kernel",
-               .offset = 0,
-               .size = SZ_2M,
-       },
-       {
-               .name = "root",
-               .offset = SZ_2M,
-               .size = (SZ_16M - SZ_2M),
-       },
-       {
-               .name = "user",
-               .offset = SZ_16M,
-               .size = SZ_8M,
-       },
-       {
-               .name = "recovery",
-               .offset = (SZ_16M + SZ_8M),
-               .size = SZ_8M,
-       },
-};
-
-static struct resource db88f5281_nand_resource = {
-       .flags          = IORESOURCE_MEM,
-       .start          = DB88F5281_NAND_BASE,
-       .end            = DB88F5281_NAND_BASE + DB88F5281_NAND_SIZE - 1,
-};
-
-static struct orion_nand_data db88f5281_nand_data = {
-       .parts          = db88f5281_nand_parts,
-       .nr_parts       = ARRAY_SIZE(db88f5281_nand_parts),
-       .cle            = 0,
-       .ale            = 1,
-       .width          = 8,
-};
-
-static struct platform_device db88f5281_nand_flash = {
-       .name           = "orion_nand",
-       .id             = -1,
-       .dev            = {
-               .platform_data  = &db88f5281_nand_data,
-       },
-       .resource       = &db88f5281_nand_resource,
-       .num_resources  = 1,
-};
-
-/*****************************************************************************
- * 7-Segment on Device bus CS0
- * Dummy counter every 2 sec
- ****************************************************************************/
-
-static void __iomem *db88f5281_7seg;
-static struct timer_list db88f5281_timer;
-
-static void db88f5281_7seg_event(unsigned long data)
-{
-       static int count = 0;
-       writel(0, db88f5281_7seg + (count << 4));
-       count = (count + 1) & 7;
-       mod_timer(&db88f5281_timer, jiffies + 2 * HZ);
-}
-
-static int __init db88f5281_7seg_init(void)
-{
-       if (machine_is_db88f5281()) {
-               db88f5281_7seg = ioremap(DB88F5281_7SEG_BASE,
-                                       DB88F5281_7SEG_SIZE);
-               if (!db88f5281_7seg) {
-                       printk(KERN_ERR "Failed to ioremap db88f5281_7seg\n");
-                       return -EIO;
-               }
-               setup_timer(&db88f5281_timer, db88f5281_7seg_event, 0);
-               mod_timer(&db88f5281_timer, jiffies + 2 * HZ);
-       }
-
-       return 0;
-}
-
-__initcall(db88f5281_7seg_init);
-
-/*****************************************************************************
- * PCI
- ****************************************************************************/
-
-void __init db88f5281_pci_preinit(void)
-{
-       int pin;
-
-       /*
-        * Configure PCI GPIO IRQ pins
-        */
-       pin = DB88F5281_PCI_SLOT0_IRQ_PIN;
-       if (gpio_request(pin, "PCI Int1") == 0) {
-               if (gpio_direction_input(pin) == 0) {
-                       set_irq_type(gpio_to_irq(pin), IRQT_LOW);
-               } else {
-                       printk(KERN_ERR "db88f5281_pci_preinit faield to "
-                                       "set_irq_type pin %d\n", pin);
-                       gpio_free(pin);
-               }
-       } else {
-               printk(KERN_ERR "db88f5281_pci_preinit failed to gpio_request %d\n", pin);
-       }
-
-       pin = DB88F5281_PCI_SLOT1_SLOT2_IRQ_PIN;
-       if (gpio_request(pin, "PCI Int2") == 0) {
-               if (gpio_direction_input(pin) == 0) {
-                       set_irq_type(gpio_to_irq(pin), IRQT_LOW);
-               } else {
-                       printk(KERN_ERR "db88f5281_pci_preinit faield "
-                                       "to set_irq_type pin %d\n", pin);
-                       gpio_free(pin);
-               }
-       } else {
-               printk(KERN_ERR "db88f5281_pci_preinit failed to gpio_request %d\n", pin);
-       }
-}
-
-static int __init db88f5281_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
-{
-       /*
-        * PCIE IRQ is connected internally (not GPIO)
-        */
-       if (dev->bus->number == orion_pcie_local_bus_nr())
-               return IRQ_ORION_PCIE0_INT;
-
-       /*
-        * PCI IRQs are connected via GPIOs
-        */
-       switch (slot - DB88F5281_PCI_SLOT0_OFFS) {
-       case 0:
-               return gpio_to_irq(DB88F5281_PCI_SLOT0_IRQ_PIN);
-       case 1:
-       case 2:
-               return gpio_to_irq(DB88F5281_PCI_SLOT1_SLOT2_IRQ_PIN);
-       default:
-               return -1;
-       }
-}
-
-static struct hw_pci db88f5281_pci __initdata = {
-       .nr_controllers = 2,
-       .preinit        = db88f5281_pci_preinit,
-       .swizzle        = pci_std_swizzle,
-       .setup          = orion_pci_sys_setup,
-       .scan           = orion_pci_sys_scan_bus,
-       .map_irq        = db88f5281_pci_map_irq,
-};
-
-static int __init db88f5281_pci_init(void)
-{
-       if (machine_is_db88f5281())
-               pci_common_init(&db88f5281_pci);
-
-       return 0;
-}
-
-subsys_initcall(db88f5281_pci_init);
-
-/*****************************************************************************
- * Ethernet
- ****************************************************************************/
-static struct mv643xx_eth_platform_data db88f5281_eth_data = {
-       .phy_addr       = 8,
-       .force_phy_addr = 1,
-};
-
-/*****************************************************************************
- * RTC DS1339 on I2C bus
- ****************************************************************************/
-static struct i2c_board_info __initdata db88f5281_i2c_rtc = {
-       .driver_name    = "rtc-ds1307",
-       .type           = "ds1339",
-       .addr           = 0x68,
-};
-
-/*****************************************************************************
- * General Setup
- ****************************************************************************/
-
-static struct platform_device *db88f5281_devs[] __initdata = {
-       &db88f5281_boot_flash,
-       &db88f5281_nor_flash,
-       &db88f5281_nand_flash,
-};
-
-static void __init db88f5281_init(void)
-{
-       /*
-        * Basic Orion setup. Need to be called early.
-        */
-       orion_init();
-
-       /*
-        * Setup the CPU address decode windows for our on-board devices
-        */
-       orion_setup_dev_boot_win(DB88F5281_NOR_BOOT_BASE,
-                               DB88F5281_NOR_BOOT_SIZE);
-       orion_setup_dev0_win(DB88F5281_7SEG_BASE, DB88F5281_7SEG_SIZE);
-       orion_setup_dev1_win(DB88F5281_NOR_BASE, DB88F5281_NOR_SIZE);
-       orion_setup_dev2_win(DB88F5281_NAND_BASE, DB88F5281_NAND_SIZE);
-
-       /*
-        * Setup Multiplexing Pins:
-        * MPP0: GPIO (USB Over Current)        MPP1: GPIO (USB Vbat input)
-        * MPP2: PCI_REQn[2]                    MPP3: PCI_GNTn[2]
-        * MPP4: PCI_REQn[3]                    MPP5: PCI_GNTn[3]
-        * MPP6: GPIO (JP0, CON17.2)            MPP7: GPIO (JP1, CON17.1)
-        * MPP8: GPIO (JP2, CON11.2)            MPP9: GPIO (JP3, CON11.3)
-        * MPP10: GPIO (RTC int)                MPP11: GPIO (Baud Rate Generator)
-        * MPP12: GPIO (PCI int 1)              MPP13: GPIO (PCI int 2)
-        * MPP14: NAND_REn[2]                   MPP15: NAND_WEn[2]
-        * MPP16: UART1_RX                      MPP17: UART1_TX
-        * MPP18: UART1_CTS                     MPP19: UART1_RTS
-        * MPP-DEV: DEV_D[16:31]
-        */
-       orion_write(MPP_0_7_CTRL, 0x00222203);
-       orion_write(MPP_8_15_CTRL, 0x44000000);
-       orion_write(MPP_16_19_CTRL, 0);
-       orion_write(MPP_DEV_CTRL, 0);
-
-       orion_gpio_set_valid_pins(0x00003fc3);
-
-       platform_add_devices(db88f5281_devs, ARRAY_SIZE(db88f5281_devs));
-       i2c_register_board_info(0, &db88f5281_i2c_rtc, 1);
-       orion_eth_init(&db88f5281_eth_data);
-}
-
-MACHINE_START(DB88F5281, "Marvell Orion-2 Development Board")
-       /* Maintainer: Tzachi Perelstein <tzachi@marvell.com> */
-       .phys_io        = ORION_REGS_PHYS_BASE,
-       .io_pg_offst    = ((ORION_REGS_VIRT_BASE) >> 18) & 0xfffc,
-       .boot_params    = 0x00000100,
-       .init_machine   = db88f5281_init,
-       .map_io         = orion_map_io,
-       .init_irq       = orion_init_irq,
-       .timer          = &orion_timer,
-MACHINE_END
diff --git a/arch/arm/mach-orion/dns323-setup.c b/arch/arm/mach-orion/dns323-setup.c
deleted file mode 100644 (file)
index 88991f7..0000000
+++ /dev/null
@@ -1,319 +0,0 @@
-/*
- * arch/arm/mach-orion/dns323-setup.c
- *
- * Copyright (C) 2007 Herbert Valerio Riedel <hvr@gnu.org>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- */
-
-#include <linux/kernel.h>
-#include <linux/init.h>
-#include <linux/platform_device.h>
-#include <linux/pci.h>
-#include <linux/irq.h>
-#include <linux/mtd/physmap.h>
-#include <linux/mv643xx_eth.h>
-#include <linux/leds.h>
-#include <linux/gpio_keys.h>
-#include <linux/input.h>
-#include <linux/i2c.h>
-#include <asm/mach-types.h>
-#include <asm/gpio.h>
-#include <asm/mach/arch.h>
-#include <asm/mach/pci.h>
-#include <asm/arch/orion.h>
-#include "common.h"
-
-#define DNS323_GPIO_LED_RIGHT_AMBER    1
-#define DNS323_GPIO_LED_LEFT_AMBER     2
-#define DNS323_GPIO_LED_POWER          5
-#define DNS323_GPIO_OVERTEMP           6
-#define DNS323_GPIO_RTC                        7
-#define DNS323_GPIO_POWER_OFF          8
-#define DNS323_GPIO_KEY_POWER          9
-#define DNS323_GPIO_KEY_RESET          10
-
-/****************************************************************************
- * PCI setup
- */
-
-static int __init dns323_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
-{
-       /* PCI-E */
-       if (dev->bus->number == orion_pcie_local_bus_nr())
-               return IRQ_ORION_PCIE0_INT;
-
-       pr_err("%s: requested mapping for unknown bus\n", __func__);
-
-       return -1;
-}
-
-static struct hw_pci dns323_pci __initdata = {
-       .nr_controllers = 1,
-       .swizzle        = pci_std_swizzle,
-       .setup          = orion_pci_sys_setup,
-       .scan           = orion_pci_sys_scan_bus,
-       .map_irq        = dns323_pci_map_irq,
-};
-
-static int __init dns323_pci_init(void)
-{
-       if (machine_is_dns323())
-               pci_common_init(&dns323_pci);
-
-       return 0;
-}
-
-subsys_initcall(dns323_pci_init);
-
-/****************************************************************************
- * Ethernet
- */
-
-static struct mv643xx_eth_platform_data dns323_eth_data = {
-       .phy_addr = 8,
-       .force_phy_addr = 1,
-};
-
-/****************************************************************************
- * 8MiB NOR flash (Spansion S29GL064M90TFIR4)
- *
- * Layout as used by D-Link:
- *  0x00000000-0x00010000 : "MTD1"
- *  0x00010000-0x00020000 : "MTD2"
- *  0x00020000-0x001a0000 : "Linux Kernel"
- *  0x001a0000-0x007d0000 : "File System"
- *  0x007d0000-0x00800000 : "u-boot"
- */
-
-#define DNS323_NOR_BOOT_BASE 0xf4000000
-#define DNS323_NOR_BOOT_SIZE SZ_8M
-
-static struct mtd_partition dns323_partitions[] = {
-       {
-               .name   = "MTD1",
-               .size   = 0x00010000,
-               .offset = 0,
-       }, {
-               .name   = "MTD2",
-               .size   = 0x00010000,
-               .offset = 0x00010000,
-       }, {
-               .name   = "Linux Kernel",
-               .size   = 0x00180000,
-               .offset = 0x00020000,
-       }, {
-               .name   = "File System",
-               .size   = 0x00630000,
-               .offset = 0x001A0000,
-       }, {
-               .name   = "u-boot",
-               .size   = 0x00030000,
-               .offset = 0x007d0000,
-       }
-};
-
-static struct physmap_flash_data dns323_nor_flash_data = {
-       .width          = 1,
-       .parts          = dns323_partitions,
-       .nr_parts       = ARRAY_SIZE(dns323_partitions)
-};
-
-static struct resource dns323_nor_flash_resource = {
-       .flags          = IORESOURCE_MEM,
-       .start          = DNS323_NOR_BOOT_BASE,
-       .end            = DNS323_NOR_BOOT_BASE + DNS323_NOR_BOOT_SIZE - 1,
-};
-
-static struct platform_device dns323_nor_flash = {
-       .name           = "physmap-flash",
-       .id             = 0,
-       .dev            = { .platform_data = &dns323_nor_flash_data, },
-       .resource       = &dns323_nor_flash_resource,
-       .num_resources  = 1,
-};
-
-/****************************************************************************
- * GPIO LEDs (simple - doesn't use hardware blinking support)
- */
-
-static struct gpio_led dns323_leds[] = {
-       {
-               .name = "power:blue",
-               .gpio = DNS323_GPIO_LED_POWER,
-               .active_low = 1,
-       }, {
-               .name = "right:amber",
-               .gpio = DNS323_GPIO_LED_RIGHT_AMBER,
-               .active_low = 1,
-       }, {
-               .name = "left:amber",
-               .gpio = DNS323_GPIO_LED_LEFT_AMBER,
-               .active_low = 1,
-       },
-};
-
-static struct gpio_led_platform_data dns323_led_data = {
-       .num_leds       = ARRAY_SIZE(dns323_leds),
-       .leds           = dns323_leds,
-};
-
-static struct platform_device dns323_gpio_leds = {
-       .name           = "leds-gpio",
-       .id             = -1,
-       .dev            = { .platform_data = &dns323_led_data, },
-};
-
-/****************************************************************************
- * GPIO Attached Keys
- */
-
-static struct gpio_keys_button dns323_buttons[] = {
-       {
-               .code           = KEY_RESTART,
-               .gpio           = DNS323_GPIO_KEY_RESET,
-               .desc           = "Reset Button",
-               .active_low     = 1,
-       },
-       {
-               .code           = KEY_POWER,
-               .gpio           = DNS323_GPIO_KEY_POWER,
-               .desc           = "Power Button",
-               .active_low     = 1,
-       }
-};
-
-static struct gpio_keys_platform_data dns323_button_data = {
-       .buttons        = dns323_buttons,
-       .nbuttons       = ARRAY_SIZE(dns323_buttons),
-};
-
-static struct platform_device dns323_button_device = {
-       .name           = "gpio-keys",
-       .id             = -1,
-       .num_resources  = 0,
-       .dev            = { .platform_data  = &dns323_button_data, },
-};
-
-/****************************************************************************
- * General Setup
- */
-
-static struct platform_device *dns323_plat_devices[] __initdata = {
-       &dns323_nor_flash,
-       &dns323_gpio_leds,
-       &dns323_button_device,
-};
-
-/*
- * On the DNS-323 the following devices are attached via I2C:
- *
- *  i2c addr | chip        | description
- *  0x3e     | GMT G760Af  | fan speed PWM controller
- *  0x48     | GMT G751-2f | temp. sensor and therm. watchdog (LM75 compatible)
- *  0x68     | ST M41T80   | RTC w/ alarm
- */
-static struct i2c_board_info __initdata dns323_i2c_devices[] = {
-       {
-               I2C_BOARD_INFO("g760a", 0x3e),
-               .type = "g760a",
-       },
-#if 0
-       /* this entry requires the new-style driver model lm75 driver,
-        * for the meantime "insmod lm75.ko force_lm75=0,0x48" is needed */
-       {
-               I2C_BOARD_INFO("lm75", 0x48),
-               .type = "g751",
-       },
-#endif
-       {
-               I2C_BOARD_INFO("rtc-m41t80", 0x68),
-               .type = "m41t80",
-       }
-};
-
-/* DNS-323 specific power off method */
-static void dns323_power_off(void)
-{
-       pr_info("%s: triggering power-off...\n", __func__);
-       gpio_set_value(DNS323_GPIO_POWER_OFF, 1);
-}
-
-static void __init dns323_init(void)
-{
-       /* Setup basic Orion functions. Need to be called early. */
-       orion_init();
-
-       /* setup flash mapping
-        * CS3 holds a 8 MB Spansion S29GL064M90TFIR4
-        */
-       orion_setup_dev_boot_win(DNS323_NOR_BOOT_BASE, DNS323_NOR_BOOT_SIZE);
-
-       /* DNS-323 has a Marvell 88X7042 SATA controller attached via PCIE
-        *
-        * Open a special address decode windows for the PCIE WA.
-        */
-       orion_setup_pcie_wa_win(ORION_PCIE_WA_PHYS_BASE, ORION_PCIE_WA_SIZE);
-
-       /* set MPP to 0 as D-Link's 2.6.12.6 kernel did */
-       orion_write(MPP_0_7_CTRL, 0);
-       orion_write(MPP_8_15_CTRL, 0);
-       orion_write(MPP_16_19_CTRL, 0);
-       orion_write(MPP_DEV_CTRL, 0);
-
-       /* Define used GPIO pins
-
-         GPIO Map:
-
-         |  0 |     | PEX_RST_OUT (not controlled by GPIO)
-         |  1 | Out | right amber LED (= sata ch0 LED)  (low-active)
-         |  2 | Out | left  amber LED (= sata ch1 LED)  (low-active)
-         |  3 | Out | //unknown//
-         |  4 | Out | power button LED (low-active, together with pin #5)
-         |  5 | Out | power button LED (low-active, together with pin #4)
-         |  6 | In  | GMT G751-2f overtemp. shutdown signal (low-active)
-         |  7 | In  | M41T80 nIRQ/OUT/SQW signal
-         |  8 | Out | triggers power off (high-active)
-         |  9 | In  | power button switch (low-active)
-         | 10 | In  | reset button switch (low-active)
-         | 11 | Out | //unknown//
-         | 12 | Out | //unknown//
-         | 13 | Out | //unknown//
-         | 14 | Out | //unknown//
-         | 15 | Out | //unknown//
-       */
-       orion_gpio_set_valid_pins(0x07f6);
-
-       /* register dns323 specific power-off method */
-       if ((gpio_request(DNS323_GPIO_POWER_OFF, "POWEROFF") != 0)
-           || (gpio_direction_output(DNS323_GPIO_POWER_OFF, 0) != 0))
-               pr_err("DNS323: failed to setup power-off GPIO\n");
-
-       pm_power_off = dns323_power_off;
-
-       /* register flash and other platform devices */
-       platform_add_devices(dns323_plat_devices,
-                            ARRAY_SIZE(dns323_plat_devices));
-
-       i2c_register_board_info(0, dns323_i2c_devices,
-                               ARRAY_SIZE(dns323_i2c_devices));
-
-       orion_eth_init(&dns323_eth_data);
-}
-
-/* Warning: D-Link uses a wrong mach-type (=526) in their bootloader */
-MACHINE_START(DNS323, "D-Link DNS-323")
-       /* Maintainer: Herbert Valerio Riedel <hvr@gnu.org> */
-       .phys_io        = ORION_REGS_PHYS_BASE,
-       .io_pg_offst    = ((ORION_REGS_VIRT_BASE) >> 18) & 0xFFFC,
-       .boot_params    = 0x00000100,
-       .init_machine   = dns323_init,
-       .map_io         = orion_map_io,
-       .init_irq       = orion_init_irq,
-       .timer          = &orion_timer,
-       .fixup          = tag_fixup_mem32,
-MACHINE_END
diff --git a/arch/arm/mach-orion/gpio.c b/arch/arm/mach-orion/gpio.c
deleted file mode 100644 (file)
index afc7be0..0000000
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- * arch/arm/mach-orion/gpio.c
- *
- * GPIO functions for Marvell Orion System On Chip
- *
- * Maintainer: Tzachi Perelstein <tzachi@marvell.com>
- *
- * This file is licensed under the terms of the GNU General Public
- * License version 2.  This program is licensed "as is" without any
- * warranty of any kind, whether express or implied.
- */
-
-#include <linux/kernel.h>
-#include <linux/init.h>
-#include <linux/module.h>
-#include <linux/spinlock.h>
-#include <linux/bitops.h>
-#include <asm/gpio.h>
-#include <asm/io.h>
-#include <asm/arch/orion.h>
-#include "common.h"
-
-static DEFINE_SPINLOCK(gpio_lock);
-static unsigned long gpio_valid[BITS_TO_LONGS(GPIO_MAX)];
-static const char *gpio_label[GPIO_MAX];  /* non null for allocated GPIOs */
-
-void __init orion_gpio_set_valid_pins(u32 pins)
-{
-       gpio_valid[0] = pins;
-}
-
-/*
- * GENERIC_GPIO primitives
- */
-int gpio_direction_input(unsigned pin)
-{
-       unsigned long flags;
-
-       if (pin >= GPIO_MAX || !test_bit(pin, gpio_valid)) {
-               pr_debug("%s: invalid GPIO %d\n", __func__, pin);
-               return -EINVAL;
-       }
-
-       spin_lock_irqsave(&gpio_lock, flags);
-
-       /*
-        * Some callers might have not used the gpio_request(),
-        * so flag this pin as requested now.
-        */
-       if (!gpio_label[pin])
-               gpio_label[pin] = "?";
-
-       orion_setbits(GPIO_IO_CONF, 1 << pin);
-
-       spin_unlock_irqrestore(&gpio_lock, flags);
-       return 0;
-}
-EXPORT_SYMBOL(gpio_direction_input);
-
-int gpio_direction_output(unsigned pin, int value)
-{
-       unsigned long flags;
-       int mask;
-
-       if (pin >= GPIO_MAX || !test_bit(pin, gpio_valid)) {
-               pr_debug("%s: invalid GPIO %d\n", __func__, pin);
-               return -EINVAL;
-       }
-
-       spin_lock_irqsave(&gpio_lock, flags);
-
-       /*
-        * Some callers might have not used the gpio_request(),
-        * so flag this pin as requested now.
-        */
-       if (!gpio_label[pin])
-               gpio_label[pin] = "?";
-
-       mask = 1 << pin;
-       orion_clrbits(GPIO_BLINK_EN, mask);
-       if (value)
-               orion_setbits(GPIO_OUT, mask);
-       else
-               orion_clrbits(GPIO_OUT, mask);
-       orion_clrbits(GPIO_IO_CONF, mask);
-
-       spin_unlock_irqrestore(&gpio_lock, flags);
-       return 0;
-}
-EXPORT_SYMBOL(gpio_direction_output);
-
-int gpio_get_value(unsigned pin)
-{
-       int val, mask = 1 << pin;
-
-       if (orion_read(GPIO_IO_CONF) & mask)
-               val = orion_read(GPIO_DATA_IN) ^ orion_read(GPIO_IN_POL);
-       else
-               val = orion_read(GPIO_OUT);
-
-       return val & mask;
-}
-EXPORT_SYMBOL(gpio_get_value);
-
-void gpio_set_value(unsigned pin, int value)
-{
-       unsigned long flags;
-       int mask = 1 << pin;
-
-       spin_lock_irqsave(&gpio_lock, flags);
-
-       orion_clrbits(GPIO_BLINK_EN, mask);
-       if (value)
-               orion_setbits(GPIO_OUT, mask);
-       else
-               orion_clrbits(GPIO_OUT, mask);
-
-       spin_unlock_irqrestore(&gpio_lock, flags);
-}
-EXPORT_SYMBOL(gpio_set_value);
-
-void orion_gpio_set_blink(unsigned pin, int blink)
-{
-       unsigned long flags;
-       int mask = 1 << pin;
-
-       spin_lock_irqsave(&gpio_lock, flags);
-
-       orion_clrbits(GPIO_OUT, mask);
-       if (blink)
-               orion_setbits(GPIO_BLINK_EN, mask);
-       else
-               orion_clrbits(GPIO_BLINK_EN, mask);
-
-       spin_unlock_irqrestore(&gpio_lock, flags);
-}
-EXPORT_SYMBOL(orion_gpio_set_blink);
-
-int gpio_request(unsigned pin, const char *label)
-{
-       int ret = 0;
-       unsigned long flags;
-
-       if (pin >= GPIO_MAX || !test_bit(pin, gpio_valid)) {
-               pr_debug("%s: invalid GPIO %d\n", __func__, pin);
-               return -EINVAL;
-       }
-
-       spin_lock_irqsave(&gpio_lock, flags);
-
-       if (gpio_label[pin]) {
-               pr_debug("%s: GPIO %d already used as %s\n",
-                        __func__, pin, gpio_label[pin]);
-               ret = -EBUSY;
-       } else
-               gpio_label[pin] = label ? label : "?";
-
-       spin_unlock_irqrestore(&gpio_lock, flags);
-       return ret;
-}
-EXPORT_SYMBOL(gpio_request);
-
-void gpio_free(unsigned pin)
-{
-       if (pin >= GPIO_MAX || !test_bit(pin, gpio_valid)) {
-               pr_debug("%s: invalid GPIO %d\n", __func__, pin);
-               return;
-       }
-
-       if (!gpio_label[pin])
-               pr_warning("%s: GPIO %d already freed\n", __func__, pin);
-       else
-               gpio_label[pin] = NULL;
-}
-EXPORT_SYMBOL(gpio_free);
-
-/* Debug helper */
-void gpio_display(void)
-{
-       int i;
-
-       for (i = 0; i < GPIO_MAX; i++) {
-               printk(KERN_DEBUG "Pin-%d: ", i);
-
-               if (!test_bit(i, gpio_valid)) {
-                       printk("non-GPIO\n");
-               } else if (!gpio_label[i]) {
-                       printk("GPIO, free\n");
-               } else {
-                       printk("GPIO, used by %s, ", gpio_label[i]);
-                       if (orion_read(GPIO_IO_CONF) & (1 << i)) {
-                               printk("input, active %s, level %s, edge %s\n",
-                               ((orion_read(GPIO_IN_POL) >> i) & 1) ? "low" : "high",
-                               ((orion_read(GPIO_LEVEL_MASK) >> i) & 1) ? "enabled" : "masked",
-                               ((orion_read(GPIO_EDGE_MASK) >> i) & 1) ? "enabled" : "masked");
-                       } else {
-                               printk("output, val=%d\n", (orion_read(GPIO_OUT) >> i) & 1);
-                       }
-               }
-       }
-
-       printk(KERN_DEBUG "MPP_0_7_CTRL (0x%08x) = 0x%08x\n",
-                               MPP_0_7_CTRL, orion_read(MPP_0_7_CTRL));
-       printk(KERN_DEBUG "MPP_8_15_CTRL (0x%08x) = 0x%08x\n",
-                               MPP_8_15_CTRL, orion_read(MPP_8_15_CTRL));
-       printk(KERN_DEBUG "MPP_16_19_CTRL (0x%08x) = 0x%08x\n",
-                               MPP_16_19_CTRL, orion_read(MPP_16_19_CTRL));
-       printk(KERN_DEBUG "MPP_DEV_CTRL (0x%08x) = 0x%08x\n",
-                               MPP_DEV_CTRL, orion_read(MPP_DEV_CTRL));
-       printk(KERN_DEBUG "GPIO_OUT (0x%08x) = 0x%08x\n",
-                               GPIO_OUT, orion_read(GPIO_OUT));
-       printk(KERN_DEBUG "GPIO_IO_CONF (0x%08x) = 0x%08x\n",
-                               GPIO_IO_CONF, orion_read(GPIO_IO_CONF));
-       printk(KERN_DEBUG "GPIO_BLINK_EN (0x%08x) = 0x%08x\n",
-                               GPIO_BLINK_EN, orion_read(GPIO_BLINK_EN));
-       printk(KERN_DEBUG "GPIO_IN_POL (0x%08x) = 0x%08x\n",
-                               GPIO_IN_POL, orion_read(GPIO_IN_POL));
-       printk(KERN_DEBUG "GPIO_DATA_IN (0x%08x) = 0x%08x\n",
-                               GPIO_DATA_IN, orion_read(GPIO_DATA_IN));
-       printk(KERN_DEBUG "GPIO_LEVEL_MASK (0x%08x) = 0x%08x\n",
-                               GPIO_LEVEL_MASK, orion_read(GPIO_LEVEL_MASK));
-       printk(KERN_DEBUG "GPIO_EDGE_CAUSE (0x%08x) = 0x%08x\n",
-                               GPIO_EDGE_CAUSE, orion_read(GPIO_EDGE_CAUSE));
-       printk(KERN_DEBUG "GPIO_EDGE_MASK (0x%08x) = 0x%08x\n",
-                               GPIO_EDGE_MASK, orion_read(GPIO_EDGE_MASK));
-}
diff --git a/arch/arm/mach-orion/irq.c b/arch/arm/mach-orion/irq.c
deleted file mode 100644 (file)
index 7033cc1..0000000
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- * arch/arm/mach-orion/irq.c
- *
- * Core IRQ functions for Marvell Orion System On Chip
- *
- * Maintainer: Tzachi Perelstein <tzachi@marvell.com>
- *
- * This file is licensed under the terms of the GNU General Public
- * License version 2.  This program is licensed "as is" without any
- * warranty of any kind, whether express or implied.
- */
-
-#include <linux/kernel.h>
-#include <linux/init.h>
-#include <linux/irq.h>
-#include <asm/gpio.h>
-#include <asm/io.h>
-#include <asm/arch/orion.h>
-#include <asm/plat-orion/irq.h>
-#include "common.h"
-
-/*****************************************************************************
- * Orion GPIO IRQ
- *
- * GPIO_IN_POL register controlls whether GPIO_DATA_IN will hold the same
- * value of the line or the opposite value.
- *
- * Level IRQ handlers: DATA_IN is used directly as cause register.
- *                     Interrupt are masked by LEVEL_MASK registers.
- * Edge IRQ handlers:  Change in DATA_IN are latched in EDGE_CAUSE.
- *                     Interrupt are masked by EDGE_MASK registers.
- * Both-edge handlers: Similar to regular Edge handlers, but also swaps
- *                     the polarity to catch the next line transaction.
- *                     This is a race condition that might not perfectly
- *                     work on some use cases.
- *
- * Every eight GPIO lines are grouped (OR'ed) before going up to main
- * cause register.
- *
- *                    EDGE  cause    mask
- *        data-in   /--------| |-----| |----\
- *     -----| |-----                         ---- to main cause reg
- *           X      \----------------| |----/
- *        polarity    LEVEL          mask
- *
- ****************************************************************************/
-static void orion_gpio_irq_ack(u32 irq)
-{
-       int pin = irq_to_gpio(irq);
-       if (irq_desc[irq].status & IRQ_LEVEL)
-               /*
-                * Mask bit for level interrupt
-                */
-               orion_clrbits(GPIO_LEVEL_MASK, 1 << pin);
-       else
-               /*
-                * Clear casue bit for egde interrupt
-                */
-               orion_clrbits(GPIO_EDGE_CAUSE, 1 << pin);
-}
-
-static void orion_gpio_irq_mask(u32 irq)
-{
-       int pin = irq_to_gpio(irq);
-       if (irq_desc[irq].status & IRQ_LEVEL)
-               orion_clrbits(GPIO_LEVEL_MASK, 1 << pin);
-       else
-               orion_clrbits(GPIO_EDGE_MASK, 1 << pin);
-}
-
-static void orion_gpio_irq_unmask(u32 irq)
-{
-       int pin = irq_to_gpio(irq);
-       if (irq_desc[irq].status & IRQ_LEVEL)
-               orion_setbits(GPIO_LEVEL_MASK, 1 << pin);
-       else
-               orion_setbits(GPIO_EDGE_MASK, 1 << pin);
-}
-
-static int orion_gpio_set_irq_type(u32 irq, u32 type)
-{
-       int pin = irq_to_gpio(irq);
-       struct irq_desc *desc;
-
-       if ((orion_read(GPIO_IO_CONF) & (1 << pin)) == 0) {
-               printk(KERN_ERR "orion_gpio_set_irq_type failed "
-                               "(irq %d, pin %d).\n", irq, pin);
-               return -EINVAL;
-       }
-
-       desc = irq_desc + irq;
-
-       switch (type) {
-       case IRQT_HIGH:
-               desc->handle_irq = handle_level_irq;
-               desc->status |= IRQ_LEVEL;
-               orion_clrbits(GPIO_IN_POL, (1 << pin));
-               break;
-       case IRQT_LOW:
-               desc->handle_irq = handle_level_irq;
-               desc->status |= IRQ_LEVEL;
-               orion_setbits(GPIO_IN_POL, (1 << pin));
-               break;
-       case IRQT_RISING:
-               desc->handle_irq = handle_edge_irq;
-               desc->status &= ~IRQ_LEVEL;
-               orion_clrbits(GPIO_IN_POL, (1 << pin));
-               break;
-       case IRQT_FALLING:
-               desc->handle_irq = handle_edge_irq;
-               desc->status &= ~IRQ_LEVEL;
-               orion_setbits(GPIO_IN_POL, (1 << pin));
-               break;
-       case IRQT_BOTHEDGE:
-               desc->handle_irq = handle_edge_irq;
-               desc->status &= ~IRQ_LEVEL;
-               /*
-                * set initial polarity based on current input level
-                */
-               if ((orion_read(GPIO_IN_POL) ^ orion_read(GPIO_DATA_IN))
-                   & (1 << pin))
-                       orion_setbits(GPIO_IN_POL, (1 << pin)); /* falling */
-               else
-                       orion_clrbits(GPIO_IN_POL, (1 << pin)); /* rising */
-
-               break;
-       default:
-               printk(KERN_ERR "failed to set irq=%d (type=%d)\n", irq, type);
-               return -EINVAL;
-       }
-
-       desc->status &= ~IRQ_TYPE_SENSE_MASK;
-       desc->status |= type & IRQ_TYPE_SENSE_MASK;
-
-       return 0;
-}
-
-static struct irq_chip orion_gpio_irq_chip = {
-       .name           = "Orion-IRQ-GPIO",
-       .ack            = orion_gpio_irq_ack,
-       .mask           = orion_gpio_irq_mask,
-       .unmask         = orion_gpio_irq_unmask,
-       .set_type       = orion_gpio_set_irq_type,
-};
-
-static void orion_gpio_irq_handler(unsigned int irq, struct irq_desc *desc)
-{
-       u32 cause, offs, pin;
-
-       BUG_ON(irq < IRQ_ORION_GPIO_0_7 || irq > IRQ_ORION_GPIO_24_31);
-       offs = (irq - IRQ_ORION_GPIO_0_7) * 8;
-       cause = (orion_read(GPIO_DATA_IN) & orion_read(GPIO_LEVEL_MASK)) |
-               (orion_read(GPIO_EDGE_CAUSE) & orion_read(GPIO_EDGE_MASK));
-
-       for (pin = offs; pin < offs + 8; pin++) {
-               if (cause & (1 << pin)) {
-                       irq = gpio_to_irq(pin);
-                       desc = irq_desc + irq;
-                       if ((desc->status & IRQ_TYPE_SENSE_MASK) == IRQT_BOTHEDGE) {
-                               /* Swap polarity (race with GPIO line) */
-                               u32 polarity = orion_read(GPIO_IN_POL);
-                               polarity ^= 1 << pin;
-                               orion_write(GPIO_IN_POL, polarity);
-                       }
-                       desc_handle_irq(irq, desc);
-               }
-       }
-}
-
-static void __init orion_init_gpio_irq(void)
-{
-       int i;
-       struct irq_desc *desc;
-
-       /*
-        * Mask and clear GPIO IRQ interrupts
-        */
-       orion_write(GPIO_LEVEL_MASK, 0x0);
-       orion_write(GPIO_EDGE_MASK, 0x0);
-       orion_write(GPIO_EDGE_CAUSE, 0x0);
-
-       /*
-        * Register chained level handlers for GPIO IRQs by default.
-        * User can use set_type() if he wants to use edge types handlers.
-        */
-       for (i = IRQ_ORION_GPIO_START; i < NR_IRQS; i++) {
-               set_irq_chip(i, &orion_gpio_irq_chip);
-               set_irq_handler(i, handle_level_irq);
-               desc = irq_desc + i;
-               desc->status |= IRQ_LEVEL;
-               set_irq_flags(i, IRQF_VALID);
-       }
-       set_irq_chained_handler(IRQ_ORION_GPIO_0_7, orion_gpio_irq_handler);
-       set_irq_chained_handler(IRQ_ORION_GPIO_8_15, orion_gpio_irq_handler);
-       set_irq_chained_handler(IRQ_ORION_GPIO_16_23, orion_gpio_irq_handler);
-       set_irq_chained_handler(IRQ_ORION_GPIO_24_31, orion_gpio_irq_handler);
-}
-
-/*****************************************************************************
- * Orion Main IRQ
- ****************************************************************************/
-static void __init orion_init_main_irq(void)
-{
-       orion_irq_init(0, (void __iomem *)MAIN_IRQ_MASK);
-}
-
-void __init orion_init_irq(void)
-{
-       orion_init_main_irq();
-       orion_init_gpio_irq();
-}
diff --git a/arch/arm/mach-orion/kurobox_pro-setup.c b/arch/arm/mach-orion/kurobox_pro-setup.c
deleted file mode 100644 (file)
index be417e7..0000000
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
- * arch/arm/mach-orion/kurobox_pro-setup.c
- *
- * Maintainer: Ronen Shitrit <rshitrit@marvell.com>
- *
- * This file is licensed under the terms of the GNU General Public
- * License version 2.  This program is licensed "as is" without any
- * warranty of any kind, whether express or implied.
- */
-
-#include <linux/kernel.h>
-#include <linux/init.h>
-#include <linux/platform_device.h>
-#include <linux/pci.h>
-#include <linux/irq.h>
-#include <linux/mtd/physmap.h>
-#include <linux/mtd/nand.h>
-#include <linux/mv643xx_eth.h>
-#include <linux/i2c.h>
-#include <linux/ata_platform.h>
-#include <asm/mach-types.h>
-#include <asm/gpio.h>
-#include <asm/mach/arch.h>
-#include <asm/mach/pci.h>
-#include <asm/arch/orion.h>
-#include <asm/plat-orion/orion_nand.h>
-#include "common.h"
-
-/*****************************************************************************
- * KUROBOX-PRO Info
- ****************************************************************************/
-
-/*
- * 256K NOR flash Device bus boot chip select
- */
-
-#define KUROBOX_PRO_NOR_BOOT_BASE      0xf4000000
-#define KUROBOX_PRO_NOR_BOOT_SIZE      SZ_256K
-
-/*
- * 256M NAND flash on Device bus chip select 1
- */
-
-#define KUROBOX_PRO_NAND_BASE          0xfc000000
-#define KUROBOX_PRO_NAND_SIZE          SZ_2M
-
-/*****************************************************************************
- * 256MB NAND Flash on Device bus CS0
- ****************************************************************************/
-
-static struct mtd_partition kurobox_pro_nand_parts[] = {
-       {
-               .name   = "uImage",
-               .offset = 0,
-               .size   = SZ_4M,
-       },
-       {
-               .name   = "rootfs",
-               .offset = SZ_4M,
-               .size   = SZ_64M,
-       },
-       {
-               .name   = "extra",
-               .offset = SZ_4M + SZ_64M,
-               .size   = SZ_256M - (SZ_4M + SZ_64M),
-       },
-};
-
-static struct resource kurobox_pro_nand_resource = {
-       .flags          = IORESOURCE_MEM,
-       .start          = KUROBOX_PRO_NAND_BASE,
-       .end            = KUROBOX_PRO_NAND_BASE + KUROBOX_PRO_NAND_SIZE - 1,
-};
-
-static struct orion_nand_data kurobox_pro_nand_data = {
-       .parts          = kurobox_pro_nand_parts,
-       .nr_parts       = ARRAY_SIZE(kurobox_pro_nand_parts),
-       .cle            = 0,
-       .ale            = 1,
-       .width          = 8,
-};
-
-static struct platform_device kurobox_pro_nand_flash = {
-       .name           = "orion_nand",
-       .id             = -1,
-       .dev            = {
-               .platform_data  = &kurobox_pro_nand_data,
-       },
-       .resource       = &kurobox_pro_nand_resource,
-       .num_resources  = 1,
-};
-
-/*****************************************************************************
- * 256KB NOR Flash on BOOT Device
- ****************************************************************************/
-
-static struct physmap_flash_data kurobox_pro_nor_flash_data = {
-       .width          = 1,
-};
-
-static struct resource kurobox_pro_nor_flash_resource = {
-       .flags                  = IORESOURCE_MEM,
-       .start                  = KUROBOX_PRO_NOR_BOOT_BASE,
-       .end                    = KUROBOX_PRO_NOR_BOOT_BASE + KUROBOX_PRO_NOR_BOOT_SIZE - 1,
-};
-
-static struct platform_device kurobox_pro_nor_flash = {
-       .name                   = "physmap-flash",
-       .id                     = 0,
-       .dev            = {
-               .platform_data  = &kurobox_pro_nor_flash_data,
-       },
-       .num_resources          = 1,
-       .resource               = &kurobox_pro_nor_flash_resource,
-};
-
-/*****************************************************************************
- * PCI
- ****************************************************************************/
-
-static int __init kurobox_pro_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
-{
-       /*
-        * PCI isn't used on the Kuro
-        */
-       if (dev->bus->number == orion_pcie_local_bus_nr())
-               return IRQ_ORION_PCIE0_INT;
-       else
-               printk(KERN_ERR "kurobox_pro_pci_map_irq failed, unknown bus\n");
-
-       return -1;
-}
-
-static struct hw_pci kurobox_pro_pci __initdata = {
-       .nr_controllers = 1,
-       .swizzle        = pci_std_swizzle,
-       .setup          = orion_pci_sys_setup,
-       .scan           = orion_pci_sys_scan_bus,
-       .map_irq        = kurobox_pro_pci_map_irq,
-};
-
-static int __init kurobox_pro_pci_init(void)
-{
-       if (machine_is_kurobox_pro())
-               pci_common_init(&kurobox_pro_pci);
-
-       return 0;
-}
-
-subsys_initcall(kurobox_pro_pci_init);
-
-/*****************************************************************************
- * Ethernet
- ****************************************************************************/
-
-static struct mv643xx_eth_platform_data kurobox_pro_eth_data = {
-       .phy_addr       = 8,
-       .force_phy_addr = 1,
-};
-
-/*****************************************************************************
- * RTC 5C372a on I2C bus
- ****************************************************************************/
-static struct i2c_board_info __initdata kurobox_pro_i2c_rtc = {
-       .driver_name    = "rtc-rs5c372",
-       .type           = "rs5c372a",
-       .addr           = 0x32,
-};
-
-/*****************************************************************************
- * SATA
- ****************************************************************************/
-static struct mv_sata_platform_data kurobox_pro_sata_data = {
-       .n_ports        = 2,
-};
-
-/*****************************************************************************
- * General Setup
- ****************************************************************************/
-
-static struct platform_device *kurobox_pro_devices[] __initdata = {
-       &kurobox_pro_nor_flash,
-       &kurobox_pro_nand_flash,
-};
-
-static void __init kurobox_pro_init(void)
-{
-       /*
-        * Setup basic Orion functions. Need to be called early.
-        */
-       orion_init();
-
-       /*
-        * Setup the CPU address decode windows for our devices
-        */
-       orion_setup_dev_boot_win(KUROBOX_PRO_NOR_BOOT_BASE,
-                               KUROBOX_PRO_NOR_BOOT_SIZE);
-       orion_setup_dev0_win(KUROBOX_PRO_NAND_BASE, KUROBOX_PRO_NAND_SIZE);
-
-       /*
-        * Open a special address decode windows for the PCIE WA.
-        */
-       orion_setup_pcie_wa_win(ORION_PCIE_WA_PHYS_BASE, ORION_PCIE_WA_SIZE);
-
-       /*
-        * Setup Multiplexing Pins --
-        * MPP[0-1] Not used
-        * MPP[2] GPIO Micon
-        * MPP[3] GPIO RTC
-        * MPP[4-5] Not used
-        * MPP[6] Nand Flash REn
-        * MPP[7] Nand Flash WEn
-        * MPP[8-11] Not used
-        * MPP[12] SATA 0 presence Indication
-        * MPP[13] SATA 1 presence Indication
-        * MPP[14] SATA 0 active Indication
-        * MPP[15] SATA 1 active indication
-        * MPP[16-19] Not used
-        */
-       orion_write(MPP_0_7_CTRL, 0x44220003);
-       orion_write(MPP_8_15_CTRL, 0x55550000);
-       orion_write(MPP_16_19_CTRL, 0x0);
-
-       orion_gpio_set_valid_pins(0x0000000c);
-
-       platform_add_devices(kurobox_pro_devices, ARRAY_SIZE(kurobox_pro_devices));
-       i2c_register_board_info(0, &kurobox_pro_i2c_rtc, 1);
-       orion_eth_init(&kurobox_pro_eth_data);
-       orion_sata_init(&kurobox_pro_sata_data);
-}
-
-MACHINE_START(KUROBOX_PRO, "Buffalo/Revogear Kurobox Pro")
-       /* Maintainer: Ronen Shitrit <rshitrit@marvell.com> */
-       .phys_io        = ORION_REGS_PHYS_BASE,
-       .io_pg_offst    = ((ORION_REGS_VIRT_BASE) >> 18) & 0xFFFC,
-       .boot_params    = 0x00000100,
-       .init_machine   = kurobox_pro_init,
-       .map_io         = orion_map_io,
-       .init_irq       = orion_init_irq,
-       .timer          = &orion_timer,
-       .fixup          = tag_fixup_mem32,
-MACHINE_END
diff --git a/arch/arm/mach-orion/pci.c b/arch/arm/mach-orion/pci.c
deleted file mode 100644 (file)
index 59684cc..0000000
+++ /dev/null
@@ -1,559 +0,0 @@
-/*
- * arch/arm/mach-orion/pci.c
- *
- * PCI and PCIe functions for Marvell Orion System On Chip
- *
- * Maintainer: Tzachi Perelstein <tzachi@marvell.com>
- *
- * This file is licensed under the terms of the GNU General Public
- * License version 2.  This program is licensed "as is" without any
- * warranty of any kind, whether express or implied.
- */
-
-#include <linux/kernel.h>
-#include <linux/pci.h>
-#include <linux/mbus.h>
-#include <asm/mach/pci.h>
-#include <asm/plat-orion/pcie.h>
-#include "common.h"
-
-/*****************************************************************************
- * Orion has one PCIe controller and one PCI controller.
- *
- * Note1: The local PCIe bus number is '0'. The local PCI bus number
- * follows the scanned PCIe bridged busses, if any.
- *
- * Note2: It is possible for PCI/PCIe agents to access many subsystem's
- * space, by configuring BARs and Address Decode Windows, e.g. flashes on
- * device bus, Orion registers, etc. However this code only enable the
- * access to DDR banks.
- ****************************************************************************/
-
-
-/*****************************************************************************
- * PCIe controller
- ****************************************************************************/
-#define PCIE_BASE      ((void __iomem *)ORION_PCIE_VIRT_BASE)
-
-void __init orion_pcie_id(u32 *dev, u32 *rev)
-{
-       *dev = orion_pcie_dev_id(PCIE_BASE);
-       *rev = orion_pcie_rev(PCIE_BASE);
-}
-
-int orion_pcie_local_bus_nr(void)
-{
-       return orion_pcie_get_local_bus_nr(PCIE_BASE);
-}
-
-static int pcie_valid_config(int bus, int dev)
-{
-       /*
-        * Don't go out when trying to access --
-        * 1. nonexisting device on local bus
-        * 2. where there's no device connected (no link)
-        */
-       if (bus == 0 && dev == 0)
-               return 1;
-
-       if (!orion_pcie_link_up(PCIE_BASE))
-               return 0;
-
-       if (bus == 0 && dev != 1)
-               return 0;
-
-       return 1;
-}
-
-
-/*
- * PCIe config cycles are done by programming the PCIE_CONF_ADDR register
- * and then reading the PCIE_CONF_DATA register. Need to make sure these
- * transactions are atomic.
- */
-static DEFINE_SPINLOCK(orion_pcie_lock);
-
-static int pcie_rd_conf(struct pci_bus *bus, u32 devfn, int where,
-                       int size, u32 *val)
-{
-       unsigned long flags;
-       int ret;
-
-       if (pcie_valid_config(bus->number, PCI_SLOT(devfn)) == 0) {
-               *val = 0xffffffff;
-               return PCIBIOS_DEVICE_NOT_FOUND;
-       }
-
-       spin_lock_irqsave(&orion_pcie_lock, flags);
-       ret = orion_pcie_rd_conf(PCIE_BASE, bus, devfn, where, size, val);
-       spin_unlock_irqrestore(&orion_pcie_lock, flags);
-
-       return ret;
-}
-
-static int pcie_rd_conf_wa(struct pci_bus *bus, u32 devfn,
-                          int where, int size, u32 *val)
-{
-       int ret;
-
-       if (pcie_valid_config(bus->number, PCI_SLOT(devfn)) == 0) {
-               *val = 0xffffffff;
-               return PCIBIOS_DEVICE_NOT_FOUND;
-       }
-
-       /*
-        * We only support access to the non-extended configuration
-        * space when using the WA access method (or we would have to
-        * sacrifice 256M of CPU virtual address space.)
-        */
-       if (where >= 0x100) {
-               *val = 0xffffffff;
-               return PCIBIOS_DEVICE_NOT_FOUND;
-       }
-
-       ret = orion_pcie_rd_conf_wa((void __iomem *)ORION_PCIE_WA_VIRT_BASE,
-                                   bus, devfn, where, size, val);
-
-       return ret;
-}
-
-static int pcie_wr_conf(struct pci_bus *bus, u32 devfn,
-                       int where, int size, u32 val)
-{
-       unsigned long flags;
-       int ret;
-
-       if (pcie_valid_config(bus->number, PCI_SLOT(devfn)) == 0)
-               return PCIBIOS_DEVICE_NOT_FOUND;
-
-       spin_lock_irqsave(&orion_pcie_lock, flags);
-       ret = orion_pcie_wr_conf(PCIE_BASE, bus, devfn, where, size, val);
-       spin_unlock_irqrestore(&orion_pcie_lock, flags);
-
-       return ret;
-}
-
-static struct pci_ops pcie_ops = {
-       .read = pcie_rd_conf,
-       .write = pcie_wr_conf,
-};
-
-
-static int __init pcie_setup(struct pci_sys_data *sys)
-{
-       struct resource *res;
-       int dev;
-
-       /*
-        * Generic PCIe unit setup.
-        */
-       orion_pcie_setup(PCIE_BASE, &orion_mbus_dram_info);
-
-       /*
-        * Check whether to apply Orion-1/Orion-NAS PCIe config
-        * read transaction workaround.
-        */
-       dev = orion_pcie_dev_id(PCIE_BASE);
-       if (dev == MV88F5181_DEV_ID || dev == MV88F5182_DEV_ID) {
-               printk(KERN_NOTICE "Applying Orion-1/Orion-NAS PCIe config "
-                                  "read transaction workaround\n");
-               pcie_ops.read = pcie_rd_conf_wa;
-       }
-
-       /*
-        * Request resources.
-        */
-       res = kzalloc(sizeof(struct resource) * 2, GFP_KERNEL);
-       if (!res)
-               panic("pcie_setup unable to alloc resources");
-
-       /*
-        * IORESOURCE_IO
-        */
-       res[0].name = "PCIe I/O Space";
-       res[0].flags = IORESOURCE_IO;
-       res[0].start = ORION_PCIE_IO_BUS_BASE;
-       res[0].end = res[0].start + ORION_PCIE_IO_SIZE - 1;
-       if (request_resource(&ioport_resource, &res[0]))
-               panic("Request PCIe IO resource failed\n");
-       sys->resource[0] = &res[0];
-
-       /*
-        * IORESOURCE_MEM
-        */
-       res[1].name = "PCIe Memory Space";
-       res[1].flags = IORESOURCE_MEM;
-       res[1].start = ORION_PCIE_MEM_PHYS_BASE;
-       res[1].end = res[1].start + ORION_PCIE_MEM_SIZE - 1;
-       if (request_resource(&iomem_resource, &res[1]))
-               panic("Request PCIe Memory resource failed\n");
-       sys->resource[1] = &res[1];
-
-       sys->resource[2] = NULL;
-       sys->io_offset = 0;
-
-       return 1;
-}
-
-/*****************************************************************************
- * PCI controller
- ****************************************************************************/
-#define PCI_MODE               ORION_PCI_REG(0xd00)
-#define PCI_CMD                        ORION_PCI_REG(0xc00)
-#define PCI_P2P_CONF           ORION_PCI_REG(0x1d14)
-#define PCI_CONF_ADDR          ORION_PCI_REG(0xc78)
-#define PCI_CONF_DATA          ORION_PCI_REG(0xc7c)
-
-/*
- * PCI_MODE bits
- */
-#define PCI_MODE_64BIT                 (1 << 2)
-#define PCI_MODE_PCIX                  ((1 << 4) | (1 << 5))
-
-/*
- * PCI_CMD bits
- */
-#define PCI_CMD_HOST_REORDER           (1 << 29)
-
-/*
- * PCI_P2P_CONF bits
- */
-#define PCI_P2P_BUS_OFFS               16
-#define PCI_P2P_BUS_MASK               (0xff << PCI_P2P_BUS_OFFS)
-#define PCI_P2P_DEV_OFFS               24
-#define PCI_P2P_DEV_MASK               (0x1f << PCI_P2P_DEV_OFFS)
-
-/*
- * PCI_CONF_ADDR bits
- */
-#define PCI_CONF_REG(reg)              ((reg) & 0xfc)
-#define PCI_CONF_FUNC(func)            (((func) & 0x3) << 8)
-#define PCI_CONF_DEV(dev)              (((dev) & 0x1f) << 11)
-#define PCI_CONF_BUS(bus)              (((bus) & 0xff) << 16)
-#define PCI_CONF_ADDR_EN               (1 << 31)
-
-/*
- * Internal configuration space
- */
-#define PCI_CONF_FUNC_STAT_CMD         0
-#define PCI_CONF_REG_STAT_CMD          4
-#define PCIX_STAT                      0x64
-#define PCIX_STAT_BUS_OFFS             8
-#define PCIX_STAT_BUS_MASK             (0xff << PCIX_STAT_BUS_OFFS)
-
-/*
- * PCI Address Decode Windows registers
- */
-#define PCI_BAR_SIZE_DDR_CS(n) (((n) == 0) ? ORION_PCI_REG(0xc08) : \
-                               ((n) == 1) ? ORION_PCI_REG(0xd08) :  \
-                               ((n) == 2) ? ORION_PCI_REG(0xc0c) :  \
-                               ((n) == 3) ? ORION_PCI_REG(0xd0c) : 0)
-#define PCI_BAR_REMAP_DDR_CS(n)        (((n) ==0) ? ORION_PCI_REG(0xc48) :  \
-                               ((n) == 1) ? ORION_PCI_REG(0xd48) :  \
-                               ((n) == 2) ? ORION_PCI_REG(0xc4c) :  \
-                               ((n) == 3) ? ORION_PCI_REG(0xd4c) : 0)
-#define PCI_BAR_ENABLE         ORION_PCI_REG(0xc3c)
-#define PCI_ADDR_DECODE_CTRL   ORION_PCI_REG(0xd3c)
-
-/*
- * PCI configuration helpers for BAR settings
- */
-#define PCI_CONF_FUNC_BAR_CS(n)                ((n) >> 1)
-#define PCI_CONF_REG_BAR_LO_CS(n)      (((n) & 1) ? 0x18 : 0x10)
-#define PCI_CONF_REG_BAR_HI_CS(n)      (((n) & 1) ? 0x1c : 0x14)
-
-/*
- * PCI config cycles are done by programming the PCI_CONF_ADDR register
- * and then reading the PCI_CONF_DATA register. Need to make sure these
- * transactions are atomic.
- */
-static DEFINE_SPINLOCK(orion_pci_lock);
-
-int orion_pci_local_bus_nr(void)
-{
-       u32 conf = orion_read(PCI_P2P_CONF);
-       return((conf & PCI_P2P_BUS_MASK) >> PCI_P2P_BUS_OFFS);
-}
-
-static int orion_pci_hw_rd_conf(int bus, int dev, u32 func,
-                                       u32 where, u32 size, u32 *val)
-{
-       unsigned long flags;
-       spin_lock_irqsave(&orion_pci_lock, flags);
-
-       orion_write(PCI_CONF_ADDR, PCI_CONF_BUS(bus) |
-                       PCI_CONF_DEV(dev) | PCI_CONF_REG(where) |
-                       PCI_CONF_FUNC(func) | PCI_CONF_ADDR_EN);
-
-       *val = orion_read(PCI_CONF_DATA);
-
-       if (size == 1)
-               *val = (*val >> (8*(where & 0x3))) & 0xff;
-       else if (size == 2)
-               *val = (*val >> (8*(where & 0x3))) & 0xffff;
-
-       spin_unlock_irqrestore(&orion_pci_lock, flags);
-
-       return PCIBIOS_SUCCESSFUL;
-}
-
-static int orion_pci_hw_wr_conf(int bus, int dev, u32 func,
-                                       u32 where, u32 size, u32 val)
-{
-       unsigned long flags;
-       int ret = PCIBIOS_SUCCESSFUL;
-
-       spin_lock_irqsave(&orion_pci_lock, flags);
-
-       orion_write(PCI_CONF_ADDR, PCI_CONF_BUS(bus) |
-                       PCI_CONF_DEV(dev) | PCI_CONF_REG(where) |
-                       PCI_CONF_FUNC(func) | PCI_CONF_ADDR_EN);
-
-       if (size == 4) {
-               __raw_writel(val, PCI_CONF_DATA);
-       } else if (size == 2) {
-               __raw_writew(val, PCI_CONF_DATA + (where & 0x3));
-       } else if (size == 1) {
-               __raw_writeb(val, PCI_CONF_DATA + (where & 0x3));
-       } else {
-               ret = PCIBIOS_BAD_REGISTER_NUMBER;
-       }
-
-       spin_unlock_irqrestore(&orion_pci_lock, flags);
-
-       return ret;
-}
-
-static int orion_pci_rd_conf(struct pci_bus *bus, u32 devfn,
-                               int where, int size, u32 *val)
-{
-       /*
-        * Don't go out for local device
-        */
-       if (bus->number == orion_pci_local_bus_nr() &&
-           PCI_SLOT(devfn) == 0 && PCI_FUNC(devfn) != 0) {
-               *val = 0xffffffff;
-               return PCIBIOS_DEVICE_NOT_FOUND;
-       }
-
-       return orion_pci_hw_rd_conf(bus->number, PCI_SLOT(devfn),
-                                       PCI_FUNC(devfn), where, size, val);
-}
-
-static int orion_pci_wr_conf(struct pci_bus *bus, u32 devfn,
-                               int where, int size, u32 val)
-{
-       if (bus->number == orion_pci_local_bus_nr() &&
-           PCI_SLOT(devfn) == 0 && PCI_FUNC(devfn) != 0)
-               return PCIBIOS_DEVICE_NOT_FOUND;
-
-       return orion_pci_hw_wr_conf(bus->number, PCI_SLOT(devfn),
-                                       PCI_FUNC(devfn), where, size, val);
-}
-
-static struct pci_ops pci_ops = {
-       .read = orion_pci_rd_conf,
-       .write = orion_pci_wr_conf,
-};
-
-static void __init orion_pci_set_bus_nr(int nr)
-{
-       u32 p2p = orion_read(PCI_P2P_CONF);
-
-       if (orion_read(PCI_MODE) & PCI_MODE_PCIX) {
-               /*
-                * PCI-X mode
-                */
-               u32 pcix_status, bus, dev;
-               bus = (p2p & PCI_P2P_BUS_MASK) >> PCI_P2P_BUS_OFFS;
-               dev = (p2p & PCI_P2P_DEV_MASK) >> PCI_P2P_DEV_OFFS;
-               orion_pci_hw_rd_conf(bus, dev, 0, PCIX_STAT, 4, &pcix_status);
-               pcix_status &= ~PCIX_STAT_BUS_MASK;
-               pcix_status |= (nr << PCIX_STAT_BUS_OFFS);
-               orion_pci_hw_wr_conf(bus, dev, 0, PCIX_STAT, 4, pcix_status);
-       } else {
-               /*
-                * PCI Conventional mode
-                */
-               p2p &= ~PCI_P2P_BUS_MASK;
-               p2p |= (nr << PCI_P2P_BUS_OFFS);
-               orion_write(PCI_P2P_CONF, p2p);
-       }
-}
-
-static void __init orion_pci_master_slave_enable(void)
-{
-       int bus_nr, func, reg;
-       u32 val;
-
-       bus_nr = orion_pci_local_bus_nr();
-       func = PCI_CONF_FUNC_STAT_CMD;
-       reg = PCI_CONF_REG_STAT_CMD;
-       orion_pci_hw_rd_conf(bus_nr, 0, func, reg, 4, &val);
-       val |= (PCI_COMMAND_IO | PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER);
-       orion_pci_hw_wr_conf(bus_nr, 0, func, reg, 4, val | 0x7);
-}
-
-static void __init orion_setup_pci_wins(struct mbus_dram_target_info *dram)
-{
-       u32 win_enable;
-       int bus;
-       int i;
-
-       /*
-        * First, disable windows.
-        */
-       win_enable = 0xffffffff;
-       orion_write(PCI_BAR_ENABLE, win_enable);
-
-       /*
-        * Setup windows for DDR banks.
-        */
-       bus = orion_pci_local_bus_nr();
-
-       for (i = 0; i < dram->num_cs; i++) {
-               struct mbus_dram_window *cs = dram->cs + i;
-               u32 func = PCI_CONF_FUNC_BAR_CS(cs->cs_index);
-               u32 reg;
-               u32 val;
-
-               /*
-                * Write DRAM bank base address register.
-                */
-               reg = PCI_CONF_REG_BAR_LO_CS(cs->cs_index);
-               orion_pci_hw_rd_conf(bus, 0, func, reg, 4, &val);
-               val = (cs->base & 0xfffff000) | (val & 0xfff);
-               orion_pci_hw_wr_conf(bus, 0, func, reg, 4, val);
-
-               /*
-                * Write DRAM bank size register.
-                */
-               reg = PCI_CONF_REG_BAR_HI_CS(cs->cs_index);
-               orion_pci_hw_wr_conf(bus, 0, func, reg, 4, 0);
-               orion_write(PCI_BAR_SIZE_DDR_CS(cs->cs_index),
-                               (cs->size - 1) & 0xfffff000);
-               orion_write(PCI_BAR_REMAP_DDR_CS(cs->cs_index),
-                               cs->base & 0xfffff000);
-
-               /*
-                * Enable decode window for this chip select.
-                */
-               win_enable &= ~(1 << cs->cs_index);
-       }
-
-       /*
-        * Re-enable decode windows.
-        */
-       orion_write(PCI_BAR_ENABLE, win_enable);
-
-       /*
-        * Disable automatic update of address remaping when writing to BARs.
-        */
-       orion_setbits(PCI_ADDR_DECODE_CTRL, 1);
-}
-
-static int __init pci_setup(struct pci_sys_data *sys)
-{
-       struct resource *res;
-
-       /*
-        * Point PCI unit MBUS decode windows to DRAM space.
-        */
-       orion_setup_pci_wins(&orion_mbus_dram_info);
-
-       /*
-        * Master + Slave enable
-        */
-       orion_pci_master_slave_enable();
-
-       /*
-        * Force ordering
-        */
-       orion_setbits(PCI_CMD, PCI_CMD_HOST_REORDER);
-
-       /*
-        * Request resources
-        */
-       res = kzalloc(sizeof(struct resource) * 2, GFP_KERNEL);
-       if (!res)
-               panic("pci_setup unable to alloc resources");
-
-       /*
-        * IORESOURCE_IO
-        */
-       res[0].name = "PCI I/O Space";
-       res[0].flags = IORESOURCE_IO;
-       res[0].start = ORION_PCI_IO_BUS_BASE;
-       res[0].end = res[0].start + ORION_PCI_IO_SIZE - 1;
-       if (request_resource(&ioport_resource, &res[0]))
-               panic("Request PCI IO resource failed\n");
-       sys->resource[0] = &res[0];
-
-       /*
-        * IORESOURCE_MEM
-        */
-       res[1].name = "PCI Memory Space";
-       res[1].flags = IORESOURCE_MEM;
-       res[1].start = ORION_PCI_MEM_PHYS_BASE;
-       res[1].end = res[1].start + ORION_PCI_MEM_SIZE - 1;
-       if (request_resource(&iomem_resource, &res[1]))
-               panic("Request PCI Memory resource failed\n");
-       sys->resource[1] = &res[1];
-
-       sys->resource[2] = NULL;
-       sys->io_offset = 0;
-
-       return 1;
-}
-
-
-/*****************************************************************************
- * General PCIe + PCI
- ****************************************************************************/
-static void __devinit rc_pci_fixup(struct pci_dev *dev)
-{
-       /*
-        * Prevent enumeration of root complex.
-        */
-       if (dev->bus->parent == NULL && dev->devfn == 0) {
-               int i;
-
-               for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) {
-                       dev->resource[i].start = 0;
-                       dev->resource[i].end   = 0;
-                       dev->resource[i].flags = 0;
-               }
-       }
-}
-DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_MARVELL, PCI_ANY_ID, rc_pci_fixup);
-
-int __init orion_pci_sys_setup(int nr, struct pci_sys_data *sys)
-{
-       int ret = 0;
-
-       if (nr == 0) {
-               orion_pcie_set_local_bus_nr(PCIE_BASE, sys->busnr);
-               ret = pcie_setup(sys);
-       } else if (nr == 1) {
-               orion_pci_set_bus_nr(sys->busnr);
-               ret = pci_setup(sys);
-       }
-
-       return ret;
-}
-
-struct pci_bus __init *orion_pci_sys_scan_bus(int nr, struct pci_sys_data *sys)
-{
-       struct pci_bus *bus;
-
-       if (nr == 0) {
-               bus = pci_scan_bus(sys->busnr, &pcie_ops, sys);
-       } else if (nr == 1) {
-               bus = pci_scan_bus(sys->busnr, &pci_ops, sys);
-       } else {
-               bus = NULL;
-               BUG();
-       }
-
-       return bus;
-}
diff --git a/arch/arm/mach-orion/rd88f5182-setup.c b/arch/arm/mach-orion/rd88f5182-setup.c
deleted file mode 100644 (file)
index f3e38ec..0000000
+++ /dev/null
@@ -1,311 +0,0 @@
-/*
- * arch/arm/mach-orion/rd88f5182-setup.c
- *
- * Marvell Orion-NAS Reference Design Setup
- *
- * Maintainer: Ronen Shitrit <rshitrit@marvell.com>
- *
- * This file is licensed under the terms of the GNU General Public
- * License version 2.  This program is licensed "as is" without any
- * warranty of any kind, whether express or implied.
- */
-
-#include <linux/kernel.h>
-#include <linux/init.h>
-#include <linux/platform_device.h>
-#include <linux/pci.h>
-#include <linux/irq.h>
-#include <linux/mtd/physmap.h>
-#include <linux/mv643xx_eth.h>
-#include <linux/ata_platform.h>
-#include <linux/i2c.h>
-#include <asm/mach-types.h>
-#include <asm/gpio.h>
-#include <asm/leds.h>
-#include <asm/mach/arch.h>
-#include <asm/mach/pci.h>
-#include <asm/arch/orion.h>
-#include "common.h"
-
-/*****************************************************************************
- * RD-88F5182 Info
- ****************************************************************************/
-
-/*
- * 512K NOR flash Device bus boot chip select
- */
-
-#define RD88F5182_NOR_BOOT_BASE                0xf4000000
-#define RD88F5182_NOR_BOOT_SIZE                SZ_512K
-
-/*
- * 16M NOR flash on Device bus chip select 1
- */
-
-#define RD88F5182_NOR_BASE             0xfc000000
-#define RD88F5182_NOR_SIZE             SZ_16M
-
-/*
- * PCI
- */
-
-#define RD88F5182_PCI_SLOT0_OFFS       7
-#define RD88F5182_PCI_SLOT0_IRQ_A_PIN  7
-#define RD88F5182_PCI_SLOT0_IRQ_B_PIN  6
-
-/*
- * GPIO Debug LED
- */
-
-#define RD88F5182_GPIO_DBG_LED         0
-
-/*****************************************************************************
- * 16M NOR Flash on Device bus CS1
- ****************************************************************************/
-
-static struct physmap_flash_data rd88f5182_nor_flash_data = {
-       .width          = 1,
-};
-
-static struct resource rd88f5182_nor_flash_resource = {
-       .flags                  = IORESOURCE_MEM,
-       .start                  = RD88F5182_NOR_BASE,
-       .end                    = RD88F5182_NOR_BASE + RD88F5182_NOR_SIZE - 1,
-};
-
-static struct platform_device rd88f5182_nor_flash = {
-       .name                   = "physmap-flash",
-       .id                     = 0,
-       .dev            = {
-               .platform_data  = &rd88f5182_nor_flash_data,
-       },
-       .num_resources          = 1,
-       .resource               = &rd88f5182_nor_flash_resource,
-};
-
-#ifdef CONFIG_LEDS
-
-/*****************************************************************************
- * Use GPIO debug led as CPU active indication
- ****************************************************************************/
-
-static void rd88f5182_dbgled_event(led_event_t evt)
-{
-       int val;
-
-       if (evt == led_idle_end)
-               val = 1;
-       else if (evt == led_idle_start)
-               val = 0;
-       else
-               return;
-
-       gpio_set_value(RD88F5182_GPIO_DBG_LED, val);
-}
-
-static int __init rd88f5182_dbgled_init(void)
-{
-       int pin;
-
-       if (machine_is_rd88f5182()) {
-               pin = RD88F5182_GPIO_DBG_LED;
-
-               if (gpio_request(pin, "DBGLED") == 0) {
-                       if (gpio_direction_output(pin, 0) != 0) {
-                               printk(KERN_ERR "rd88f5182_dbgled_init failed "
-                                               "to set output pin %d\n", pin);
-                               gpio_free(pin);
-                               return 0;
-                       }
-               } else {
-                       printk(KERN_ERR "rd88f5182_dbgled_init failed "
-                                       "to request gpio %d\n", pin);
-                       return 0;
-               }
-
-               leds_event = rd88f5182_dbgled_event;
-       }
-       return 0;
-}
-
-__initcall(rd88f5182_dbgled_init);
-
-#endif
-
-/*****************************************************************************
- * PCI
- ****************************************************************************/
-
-void __init rd88f5182_pci_preinit(void)
-{
-       int pin;
-
-       /*
-        * Configure PCI GPIO IRQ pins
-        */
-       pin = RD88F5182_PCI_SLOT0_IRQ_A_PIN;
-       if (gpio_request(pin, "PCI IntA") == 0) {
-               if (gpio_direction_input(pin) == 0) {
-                       set_irq_type(gpio_to_irq(pin), IRQT_LOW);
-               } else {
-                       printk(KERN_ERR "rd88f5182_pci_preinit faield to "
-                                       "set_irq_type pin %d\n", pin);
-                       gpio_free(pin);
-               }
-       } else {
-               printk(KERN_ERR "rd88f5182_pci_preinit failed to request gpio %d\n", pin);
-       }
-
-       pin = RD88F5182_PCI_SLOT0_IRQ_B_PIN;
-       if (gpio_request(pin, "PCI IntB") == 0) {
-               if (gpio_direction_input(pin) == 0) {
-                       set_irq_type(gpio_to_irq(pin), IRQT_LOW);
-               } else {
-                       printk(KERN_ERR "rd88f5182_pci_preinit faield to "
-                                       "set_irq_type pin %d\n", pin);
-                       gpio_free(pin);
-               }
-       } else {
-               printk(KERN_ERR "rd88f5182_pci_preinit failed to gpio_request %d\n", pin);
-       }
-}
-
-static int __init rd88f5182_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
-{
-       /*
-        * PCI-E isn't used on the RD2
-        */
-       if (dev->bus->number == orion_pcie_local_bus_nr())
-               return IRQ_ORION_PCIE0_INT;
-
-       /*
-        * PCI IRQs are connected via GPIOs
-        */
-       switch (slot - RD88F5182_PCI_SLOT0_OFFS) {
-       case 0:
-               if (pin == 1)
-                       return gpio_to_irq(RD88F5182_PCI_SLOT0_IRQ_A_PIN);
-               else
-                       return gpio_to_irq(RD88F5182_PCI_SLOT0_IRQ_B_PIN);
-       default:
-               return -1;
-       }
-}
-
-static struct hw_pci rd88f5182_pci __initdata = {
-       .nr_controllers = 2,
-       .preinit        = rd88f5182_pci_preinit,
-       .swizzle        = pci_std_swizzle,
-       .setup          = orion_pci_sys_setup,
-       .scan           = orion_pci_sys_scan_bus,
-       .map_irq        = rd88f5182_pci_map_irq,
-};
-
-static int __init rd88f5182_pci_init(void)
-{
-       if (machine_is_rd88f5182())
-               pci_common_init(&rd88f5182_pci);
-
-       return 0;
-}
-
-subsys_initcall(rd88f5182_pci_init);
-
-/*****************************************************************************
- * Ethernet
- ****************************************************************************/
-
-static struct mv643xx_eth_platform_data rd88f5182_eth_data = {
-       .phy_addr       = 8,
-       .force_phy_addr = 1,
-};
-
-/*****************************************************************************
- * RTC DS1338 on I2C bus
- ****************************************************************************/
-static struct i2c_board_info __initdata rd88f5182_i2c_rtc = {
-       .driver_name    = "rtc-ds1307",
-       .type           = "ds1338",
-       .addr           = 0x68,
-};
-
-/*****************************************************************************
- * Sata
- ****************************************************************************/
-static struct mv_sata_platform_data rd88f5182_sata_data = {
-       .n_ports        = 2,
-};
-
-/*****************************************************************************
- * General Setup
- ****************************************************************************/
-
-static struct platform_device *rd88f5182_devices[] __initdata = {
-       &rd88f5182_nor_flash,
-};
-
-static void __init rd88f5182_init(void)
-{
-       /*
-        * Setup basic Orion functions. Need to be called early.
-        */
-       orion_init();
-
-       /*
-        * Setup the CPU address decode windows for our devices
-        */
-       orion_setup_dev_boot_win(RD88F5182_NOR_BOOT_BASE,
-                               RD88F5182_NOR_BOOT_SIZE);
-       orion_setup_dev1_win(RD88F5182_NOR_BASE, RD88F5182_NOR_SIZE);
-
-       /*
-        * Open a special address decode windows for the PCIE WA.
-        */
-       orion_setup_pcie_wa_win(ORION_PCIE_WA_PHYS_BASE, ORION_PCIE_WA_SIZE);
-
-       /*
-        * Setup Multiplexing Pins --
-        * MPP[0] Debug Led (GPIO - Out)
-        * MPP[1] Debug Led (GPIO - Out)
-        * MPP[2] N/A
-        * MPP[3] RTC_Int (GPIO - In)
-        * MPP[4] GPIO
-        * MPP[5] GPIO
-        * MPP[6] PCI_intA (GPIO - In)
-        * MPP[7] PCI_intB (GPIO - In)
-        * MPP[8-11] N/A
-        * MPP[12] SATA 0 presence Indication
-        * MPP[13] SATA 1 presence Indication
-        * MPP[14] SATA 0 active Indication
-        * MPP[15] SATA 1 active indication
-        * MPP[16-19] Not used
-        * MPP[20] PCI Clock to MV88F5182
-        * MPP[21] PCI Clock to mini PCI CON11
-        * MPP[22] USB 0 over current indication
-        * MPP[23] USB 1 over current indication
-        * MPP[24] USB 1 over current enable
-        * MPP[25] USB 0 over current enable
-        */
-
-       orion_write(MPP_0_7_CTRL, 0x00000003);
-       orion_write(MPP_8_15_CTRL, 0x55550000);
-       orion_write(MPP_16_19_CTRL, 0x5555);
-
-       orion_gpio_set_valid_pins(0x000000fb);
-
-       platform_add_devices(rd88f5182_devices, ARRAY_SIZE(rd88f5182_devices));
-       i2c_register_board_info(0, &rd88f5182_i2c_rtc, 1);
-       orion_eth_init(&rd88f5182_eth_data);
-       orion_sata_init(&rd88f5182_sata_data);
-}
-
-MACHINE_START(RD88F5182, "Marvell Orion-NAS Reference Design")
-       /* Maintainer: Ronen Shitrit <rshitrit@marvell.com> */
-       .phys_io        = ORION_REGS_PHYS_BASE,
-       .io_pg_offst    = ((ORION_REGS_VIRT_BASE) >> 18) & 0xFFFC,
-       .boot_params    = 0x00000100,
-       .init_machine   = rd88f5182_init,
-       .map_io         = orion_map_io,
-       .init_irq       = orion_init_irq,
-       .timer          = &orion_timer,
-MACHINE_END
diff --git a/arch/arm/mach-orion/ts209-setup.c b/arch/arm/mach-orion/ts209-setup.c
deleted file mode 100644 (file)
index 8eca070..0000000
+++ /dev/null
@@ -1,358 +0,0 @@
-/*
- * QNAP TS-109/TS-209 Board Setup
- *
- * Maintainer: Byron Bradley <byron.bbradley@gmail.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version
- * 2 of the License, or (at your option) any later version.
- */
-
-#include <linux/kernel.h>
-#include <linux/init.h>
-#include <linux/platform_device.h>
-#include <linux/pci.h>
-#include <linux/irq.h>
-#include <linux/mtd/physmap.h>
-#include <linux/mtd/nand.h>
-#include <linux/mv643xx_eth.h>
-#include <linux/gpio_keys.h>
-#include <linux/input.h>
-#include <linux/i2c.h>
-#include <linux/serial_reg.h>
-#include <linux/ata_platform.h>
-#include <asm/mach-types.h>
-#include <asm/gpio.h>
-#include <asm/mach/arch.h>
-#include <asm/mach/pci.h>
-#include <asm/arch/orion.h>
-#include "common.h"
-
-#define QNAP_TS209_NOR_BOOT_BASE 0xf4000000
-#define QNAP_TS209_NOR_BOOT_SIZE SZ_8M
-
-/****************************************************************************
- * 8MiB NOR flash. The struct mtd_partition is not in the same order as the
- *     partitions on the device because we want to keep compatability with
- *     existing QNAP firmware.
- *
- * Layout as used by QNAP:
- *  [2] 0x00000000-0x00200000 : "Kernel"
- *  [3] 0x00200000-0x00600000 : "RootFS1"
- *  [4] 0x00600000-0x00700000 : "RootFS2"
- *  [6] 0x00700000-0x00760000 : "NAS Config" (read-only)
- *  [5] 0x00760000-0x00780000 : "U-Boot Config"
- *  [1] 0x00780000-0x00800000 : "U-Boot" (read-only)
- ***************************************************************************/
-static struct mtd_partition qnap_ts209_partitions[] = {
-       {
-               .name       = "U-Boot",
-               .size       = 0x00080000,
-               .offset     = 0x00780000,
-               .mask_flags = MTD_WRITEABLE,
-       }, {
-               .name   = "Kernel",
-               .size   = 0x00200000,
-               .offset = 0,
-       }, {
-               .name   = "RootFS1",
-               .size   = 0x00400000,
-               .offset = 0x00200000,
-       }, {
-               .name   = "RootFS2",
-               .size   = 0x00100000,
-               .offset = 0x00600000,
-       }, {
-               .name   = "U-Boot Config",
-               .size   = 0x00020000,
-               .offset = 0x00760000,
-       }, {
-               .name       = "NAS Config",
-               .size       = 0x00060000,
-               .offset     = 0x00700000,
-               .mask_flags = MTD_WRITEABLE,
-       }
-};
-
-static struct physmap_flash_data qnap_ts209_nor_flash_data = {
-       .width    = 1,
-       .parts    = qnap_ts209_partitions,
-       .nr_parts = ARRAY_SIZE(qnap_ts209_partitions)
-};
-
-static struct resource qnap_ts209_nor_flash_resource = {
-       .flags = IORESOURCE_MEM,
-       .start = QNAP_TS209_NOR_BOOT_BASE,
-       .end   = QNAP_TS209_NOR_BOOT_BASE + QNAP_TS209_NOR_BOOT_SIZE - 1,
-};
-
-static struct platform_device qnap_ts209_nor_flash = {
-       .name          = "physmap-flash",
-       .id            = 0,
-       .dev           = { .platform_data = &qnap_ts209_nor_flash_data, },
-       .resource      = &qnap_ts209_nor_flash_resource,
-       .num_resources = 1,
-};
-
-/*****************************************************************************
- * PCI
- ****************************************************************************/
-
-#define QNAP_TS209_PCI_SLOT0_OFFS      7
-#define QNAP_TS209_PCI_SLOT0_IRQ_PIN   6
-#define QNAP_TS209_PCI_SLOT1_IRQ_PIN   7
-
-void __init qnap_ts209_pci_preinit(void)
-{
-       int pin;
-
-       /*
-        * Configure PCI GPIO IRQ pins
-        */
-       pin = QNAP_TS209_PCI_SLOT0_IRQ_PIN;
-       if (gpio_request(pin, "PCI Int1") == 0) {
-               if (gpio_direction_input(pin) == 0) {
-                       set_irq_type(gpio_to_irq(pin), IRQT_LOW);
-               } else {
-                       printk(KERN_ERR "qnap_ts209_pci_preinit failed to "
-                                       "set_irq_type pin %d\n", pin);
-                       gpio_free(pin);
-               }
-       } else {
-               printk(KERN_ERR "qnap_ts209_pci_preinit failed to gpio_request "
-                               "%d\n", pin);
-       }
-
-       pin = QNAP_TS209_PCI_SLOT1_IRQ_PIN;
-       if (gpio_request(pin, "PCI Int2") == 0) {
-               if (gpio_direction_input(pin) == 0) {
-                       set_irq_type(gpio_to_irq(pin), IRQT_LOW);
-               } else {
-                       printk(KERN_ERR "qnap_ts209_pci_preinit failed "
-                                       "to set_irq_type pin %d\n", pin);
-                       gpio_free(pin);
-               }
-       } else {
-               printk(KERN_ERR "qnap_ts209_pci_preinit failed to gpio_request "
-                               "%d\n", pin);
-       }
-}
-
-static int __init qnap_ts209_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
-{
-       /*
-        * PCIE IRQ is connected internally (not GPIO)
-        */
-       if (dev->bus->number == orion_pcie_local_bus_nr())
-               return IRQ_ORION_PCIE0_INT;
-
-       /*
-        * PCI IRQs are connected via GPIOs
-        */
-       switch (slot - QNAP_TS209_PCI_SLOT0_OFFS) {
-       case 0:
-               return gpio_to_irq(QNAP_TS209_PCI_SLOT0_IRQ_PIN);
-       case 1:
-               return gpio_to_irq(QNAP_TS209_PCI_SLOT1_IRQ_PIN);
-       default:
-               return -1;
-       }
-}
-
-static struct hw_pci qnap_ts209_pci __initdata = {
-       .nr_controllers = 2,
-       .preinit        = qnap_ts209_pci_preinit,
-       .swizzle        = pci_std_swizzle,
-       .setup          = orion_pci_sys_setup,
-       .scan           = orion_pci_sys_scan_bus,
-       .map_irq        = qnap_ts209_pci_map_irq,
-};
-
-static int __init qnap_ts209_pci_init(void)
-{
-       if (machine_is_ts_x09())
-               pci_common_init(&qnap_ts209_pci);
-
-       return 0;
-}
-
-subsys_initcall(qnap_ts209_pci_init);
-
-/*****************************************************************************
- * Ethernet
- ****************************************************************************/
-
-static struct mv643xx_eth_platform_data qnap_ts209_eth_data = {
-       .phy_addr       = 8,
-       .force_phy_addr = 1,
-};
-
-/*****************************************************************************
- * RTC S35390A on I2C bus
- ****************************************************************************/
-
-#define TS209_RTC_GPIO 3
-
-static struct i2c_board_info __initdata qnap_ts209_i2c_rtc = {
-       .driver_name = "rtc-s35390a",
-       .addr        = 0x30,
-       .irq         = 0,
-};
-
-/****************************************************************************
- * GPIO Attached Keys
- *     Power button is attached to the PIC microcontroller
- ****************************************************************************/
-
-#define QNAP_TS209_GPIO_KEY_MEDIA      1
-#define QNAP_TS209_GPIO_KEY_RESET      2
-
-static struct gpio_keys_button qnap_ts209_buttons[] = {
-       {
-               .code           = KEY_RESTART,
-               .gpio           = QNAP_TS209_GPIO_KEY_MEDIA,
-               .desc           = "USB Copy Button",
-               .active_low     = 1,
-       },
-       {
-               .code           = KEY_POWER,
-               .gpio           = QNAP_TS209_GPIO_KEY_RESET,
-               .desc           = "Reset Button",
-               .active_low     = 1,
-       }
-};
-
-static struct gpio_keys_platform_data qnap_ts209_button_data = {
-       .buttons        = qnap_ts209_buttons,
-       .nbuttons       = ARRAY_SIZE(qnap_ts209_buttons),
-};
-
-static struct platform_device qnap_ts209_button_device = {
-       .name           = "gpio-keys",
-       .id             = -1,
-       .num_resources  = 0,
-       .dev            = { .platform_data  = &qnap_ts209_button_data, },
-};
-
-/*****************************************************************************
- * SATA
- ****************************************************************************/
-static struct mv_sata_platform_data qnap_ts209_sata_data = {
-       .n_ports        = 2,
-};
-
-/*****************************************************************************
-
- * General Setup
- ****************************************************************************/
-
-static struct platform_device *qnap_ts209_devices[] __initdata = {
-       &qnap_ts209_nor_flash,
-       &qnap_ts209_button_device,
-};
-
-/*
- * QNAP TS-[12]09 specific power off method via UART1-attached PIC
- */
-
-#define UART1_REG(x)  (UART1_VIRT_BASE + ((UART_##x) << 2))
-
-static void qnap_ts209_power_off(void)
-{
-       /* 19200 baud divisor */
-       const unsigned divisor = ((ORION_TCLK + (8 * 19200)) / (16 * 19200));
-
-       pr_info("%s: triggering power-off...\n", __func__);
-
-       /* hijack uart1 and reset into sane state (19200,8n1) */
-       orion_write(UART1_REG(LCR), 0x83);
-       orion_write(UART1_REG(DLL), divisor & 0xff);
-       orion_write(UART1_REG(DLM), (divisor >> 8) & 0xff);
-       orion_write(UART1_REG(LCR), 0x03);
-       orion_write(UART1_REG(IER), 0x00);
-       orion_write(UART1_REG(FCR), 0x00);
-       orion_write(UART1_REG(MCR), 0x00);
-
-       /* send the power-off command 'A' to PIC */
-       orion_write(UART1_REG(TX), 'A');
-}
-
-static void __init qnap_ts209_init(void)
-{
-       /*
-        * Setup basic Orion functions. Need to be called early.
-        */
-       orion_init();
-
-       /*
-        * Setup flash mapping
-        */
-       orion_setup_dev_boot_win(QNAP_TS209_NOR_BOOT_BASE,
-                           QNAP_TS209_NOR_BOOT_SIZE);
-
-       /*
-        * Open a special address decode windows for the PCIE WA.
-        */
-       orion_setup_pcie_wa_win(ORION_PCIE_WA_PHYS_BASE, ORION_PCIE_WA_SIZE);
-
-       /*
-        * Setup Multiplexing Pins --
-        * MPP[0] Reserved
-        * MPP[1] USB copy button (0 active)
-        * MPP[2] Load defaults button (0 active)
-        * MPP[3] GPIO RTC
-        * MPP[4-5] Reserved
-        * MPP[6] PCI Int A
-        * MPP[7] PCI Int B
-        * MPP[8-11] Reserved
-        * MPP[12] SATA 0 presence
-        * MPP[13] SATA 1 presence
-        * MPP[14] SATA 0 active
-        * MPP[15] SATA 1 active
-        * MPP[16] UART1 RXD
-        * MPP[17] UART1 TXD
-        * MPP[18] SW_RST (0 active)
-        * MPP[19] Reserved
-        * MPP[20] PCI clock 0
-        * MPP[21] PCI clock 1
-        * MPP[22] USB 0 over current
-        * MPP[23-25] Reserved
-        */
-       orion_write(MPP_0_7_CTRL, 0x3);
-       orion_write(MPP_8_15_CTRL, 0x55550000);
-       orion_write(MPP_16_19_CTRL, 0x5500);
-       orion_gpio_set_valid_pins(0x3cc0fff);
-
-       /* register ts209 specific power-off method */
-       pm_power_off = qnap_ts209_power_off;
-
-       platform_add_devices(qnap_ts209_devices,
-                               ARRAY_SIZE(qnap_ts209_devices));
-
-       /* Get RTC IRQ and register the chip */
-       if (gpio_request(TS209_RTC_GPIO, "rtc") == 0) {
-               if (gpio_direction_input(TS209_RTC_GPIO) == 0)
-                       qnap_ts209_i2c_rtc.irq = gpio_to_irq(TS209_RTC_GPIO);
-               else
-                       gpio_free(TS209_RTC_GPIO);
-       }
-       if (qnap_ts209_i2c_rtc.irq == 0)
-               pr_warning("qnap_ts209_init: failed to get RTC IRQ\n");
-       i2c_register_board_info(0, &qnap_ts209_i2c_rtc, 1);
-
-       orion_eth_init(&qnap_ts209_eth_data);
-       orion_sata_init(&qnap_ts209_sata_data);
-}
-
-MACHINE_START(TS209, "QNAP TS-109/TS-209")
-       /* Maintainer:  Byron Bradley <byron.bbradley@gmail.com> */
-       .phys_io        = ORION_REGS_PHYS_BASE,
-       .io_pg_offst    = ((ORION_REGS_VIRT_BASE) >> 18) & 0xFFFC,
-       .boot_params    = 0x00000100,
-       .init_machine   = qnap_ts209_init,
-       .map_io         = orion_map_io,
-       .init_irq       = orion_init_irq,
-       .timer          = &orion_timer,
-       .fixup          = tag_fixup_mem32,
-MACHINE_END
diff --git a/arch/arm/mach-orion5x/Kconfig b/arch/arm/mach-orion5x/Kconfig
new file mode 100644 (file)
index 0000000..01c6695
--- /dev/null
@@ -0,0 +1,41 @@
+if ARCH_ORION5X
+
+menu "Orion Implementations"
+
+config MACH_DB88F5281
+       bool "Marvell Orion-2 Development Board"
+       select I2C_BOARDINFO
+       help
+         Say 'Y' here if you want your kernel to support the
+         Marvell Orion-2 (88F5281) Development Board
+
+config MACH_RD88F5182
+       bool "Marvell Orion-NAS Reference Design"
+       select I2C_BOARDINFO
+       help
+         Say 'Y' here if you want your kernel to support the
+         Marvell Orion-NAS (88F5182) RD2
+
+config MACH_KUROBOX_PRO
+       bool "KuroBox Pro"
+       select I2C_BOARDINFO
+       help
+         Say 'Y' here if you want your kernel to support the
+         KuroBox Pro platform.
+
+config MACH_DNS323
+       bool "D-Link DNS-323"
+       select I2C_BOARDINFO
+       help
+         Say 'Y' here if you want your kernel to support the
+         D-Link DNS-323 platform.
+
+config MACH_TS209
+       bool "QNAP TS-109/TS-209"
+       help
+         Say 'Y' here if you want your kernel to support the
+         QNAP TS-109/TS-209 platform.
+
+endmenu
+
+endif
diff --git a/arch/arm/mach-orion5x/Makefile b/arch/arm/mach-orion5x/Makefile
new file mode 100644 (file)
index 0000000..d894caa
--- /dev/null
@@ -0,0 +1,6 @@
+obj-y                          += common.o addr-map.o pci.o gpio.o irq.o
+obj-$(CONFIG_MACH_DB88F5281)   += db88f5281-setup.o
+obj-$(CONFIG_MACH_RD88F5182)   += rd88f5182-setup.o
+obj-$(CONFIG_MACH_KUROBOX_PRO) += kurobox_pro-setup.o
+obj-$(CONFIG_MACH_DNS323)      += dns323-setup.o
+obj-$(CONFIG_MACH_TS209)       += ts209-setup.o
diff --git a/arch/arm/mach-orion5x/Makefile.boot b/arch/arm/mach-orion5x/Makefile.boot
new file mode 100644 (file)
index 0000000..67039c3
--- /dev/null
@@ -0,0 +1,3 @@
+   zreladdr-y  := 0x00008000
+params_phys-y  := 0x00000100
+initrd_phys-y  := 0x00800000
diff --git a/arch/arm/mach-orion5x/addr-map.c b/arch/arm/mach-orion5x/addr-map.c
new file mode 100644 (file)
index 0000000..6b17937
--- /dev/null
@@ -0,0 +1,240 @@
+/*
+ * arch/arm/mach-orion5x/addr-map.c
+ *
+ * Address map functions for Marvell Orion 5x SoCs
+ *
+ * Maintainer: Tzachi Perelstein <tzachi@marvell.com>
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2.  This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/mbus.h>
+#include <asm/hardware.h>
+#include <asm/io.h>
+#include "common.h"
+
+/*
+ * The Orion has fully programable address map. There's a separate address
+ * map for each of the device _master_ interfaces, e.g. CPU, PCI, PCIE, USB,
+ * Gigabit Ethernet, DMA/XOR engines, etc. Each interface has its own
+ * address decode windows that allow it to access any of the Orion resources.
+ *
+ * CPU address decoding --
+ * Linux assumes that it is the boot loader that already setup the access to
+ * DDR and internal registers.
+ * Setup access to PCI and PCI-E IO/MEM space is issued by this file.
+ * Setup access to various devices located on the device bus interface (e.g.
+ * flashes, RTC, etc) should be issued by machine-setup.c according to
+ * specific board population (by using orion5x_setup_*_win()).
+ *
+ * Non-CPU Masters address decoding --
+ * Unlike the CPU, we setup the access from Orion's master interfaces to DDR
+ * banks only (the typical use case).
+ * Setup access for each master to DDR is issued by common.c.
+ *
+ * Note: although orion_setbits() and orion_clrbits() are not atomic
+ * no locking is necessary here since code in this file is only called
+ * at boot time when there is no concurrency issues.
+ */
+
+/*
+ * Generic Address Decode Windows bit settings
+ */
+#define TARGET_DDR             0
+#define TARGET_DEV_BUS         1
+#define TARGET_PCI             3
+#define TARGET_PCIE            4
+#define ATTR_DDR_CS(n)         (((n) ==0) ? 0xe :      \
+                               ((n) == 1) ? 0xd :      \
+                               ((n) == 2) ? 0xb :      \
+                               ((n) == 3) ? 0x7 : 0xf)
+#define ATTR_PCIE_MEM          0x59
+#define ATTR_PCIE_IO           0x51
+#define ATTR_PCIE_WA           0x79
+#define ATTR_PCI_MEM           0x59
+#define ATTR_PCI_IO            0x51
+#define ATTR_DEV_CS0           0x1e
+#define ATTR_DEV_CS1           0x1d
+#define ATTR_DEV_CS2           0x1b
+#define ATTR_DEV_BOOT          0xf
+#define WIN_EN                 1
+
+/*
+ * Helpers to get DDR bank info
+ */
+#define DDR_BASE_CS(n)         ORION5X_DDR_REG(0x1500 + ((n) * 8))
+#define DDR_SIZE_CS(n)         ORION5X_DDR_REG(0x1504 + ((n) * 8))
+#define DDR_MAX_CS             4
+#define DDR_REG_TO_SIZE(reg)   (((reg) | 0xffffff) + 1)
+#define DDR_REG_TO_BASE(reg)   ((reg) & 0xff000000)
+#define DDR_BANK_EN            1
+
+/*
+ * CPU Address Decode Windows registers
+ */
+#define CPU_WIN_CTRL(n)                ORION5X_BRIDGE_REG(0x000 | ((n) << 4))
+#define CPU_WIN_BASE(n)                ORION5X_BRIDGE_REG(0x004 | ((n) << 4))
+#define CPU_WIN_REMAP_LO(n)    ORION5X_BRIDGE_REG(0x008 | ((n) << 4))
+#define CPU_WIN_REMAP_HI(n)    ORION5X_BRIDGE_REG(0x00c | ((n) << 4))
+
+/*
+ * Gigabit Ethernet Address Decode Windows registers
+ */
+#define ETH_WIN_BASE(win)      ORION5X_ETH_REG(0x200 + ((win) * 8))
+#define ETH_WIN_SIZE(win)      ORION5X_ETH_REG(0x204 + ((win) * 8))
+#define ETH_WIN_REMAP(win)     ORION5X_ETH_REG(0x280 + ((win) * 4))
+#define ETH_WIN_EN             ORION5X_ETH_REG(0x290)
+#define ETH_WIN_PROT           ORION5X_ETH_REG(0x294)
+#define ETH_MAX_WIN            6
+#define ETH_MAX_REMAP_WIN      4
+
+
+struct mbus_dram_target_info orion5x_mbus_dram_info;
+
+static int __init orion5x_cpu_win_can_remap(int win)
+{
+       u32 dev, rev;
+
+       orion5x_pcie_id(&dev, &rev);
+       if ((dev == MV88F5281_DEV_ID && win < 4)
+           || (dev == MV88F5182_DEV_ID && win < 2)
+           || (dev == MV88F5181_DEV_ID && win < 2))
+               return 1;
+
+       return 0;
+}
+
+static void __init setup_cpu_win(int win, u32 base, u32 size,
+                                u8 target, u8 attr, int remap)
+{
+       orion5x_write(CPU_WIN_BASE(win), base & 0xffff0000);
+       orion5x_write(CPU_WIN_CTRL(win),
+               ((size - 1) & 0xffff0000) | (attr << 8) | (target << 4) | 1);
+
+       if (orion5x_cpu_win_can_remap(win)) {
+               if (remap < 0)
+                       remap = base;
+
+               orion5x_write(CPU_WIN_REMAP_LO(win), remap & 0xffff0000);
+               orion5x_write(CPU_WIN_REMAP_HI(win), 0);
+       }
+}
+
+void __init orion5x_setup_cpu_mbus_bridge(void)
+{
+       int i;
+       int cs;
+
+       /*
+        * First, disable and clear windows.
+        */
+       for (i = 0; i < 8; i++) {
+               orion5x_write(CPU_WIN_BASE(i), 0);
+               orion5x_write(CPU_WIN_CTRL(i), 0);
+               if (orion5x_cpu_win_can_remap(i)) {
+                       orion5x_write(CPU_WIN_REMAP_LO(i), 0);
+                       orion5x_write(CPU_WIN_REMAP_HI(i), 0);
+               }
+       }
+
+       /*
+        * Setup windows for PCI+PCIe IO+MEM space.
+        */
+       setup_cpu_win(0, ORION5X_PCIE_IO_PHYS_BASE, ORION5X_PCIE_IO_SIZE,
+               TARGET_PCIE, ATTR_PCIE_IO, ORION5X_PCIE_IO_BUS_BASE);
+       setup_cpu_win(1, ORION5X_PCI_IO_PHYS_BASE, ORION5X_PCI_IO_SIZE,
+               TARGET_PCI, ATTR_PCI_IO, ORION5X_PCI_IO_BUS_BASE);
+       setup_cpu_win(2, ORION5X_PCIE_MEM_PHYS_BASE, ORION5X_PCIE_MEM_SIZE,
+               TARGET_PCIE, ATTR_PCIE_MEM, -1);
+       setup_cpu_win(3, ORION5X_PCI_MEM_PHYS_BASE, ORION5X_PCI_MEM_SIZE,
+               TARGET_PCI, ATTR_PCI_MEM, -1);
+
+       /*
+        * Setup MBUS dram target info.
+        */
+       orion5x_mbus_dram_info.mbus_dram_target_id = TARGET_DDR;
+
+       for (i = 0, cs = 0; i < 4; i++) {
+               u32 base = readl(DDR_BASE_CS(i));
+               u32 size = readl(DDR_SIZE_CS(i));
+
+               /*
+                * Chip select enabled?
+                */
+               if (size & 1) {
+                       struct mbus_dram_window *w;
+
+                       w = &orion5x_mbus_dram_info.cs[cs++];
+                       w->cs_index = i;
+                       w->mbus_attr = 0xf & ~(1 << i);
+                       w->base = base & 0xff000000;
+                       w->size = (size | 0x00ffffff) + 1;
+               }
+       }
+       orion5x_mbus_dram_info.num_cs = cs;
+}
+
+void __init orion5x_setup_dev_boot_win(u32 base, u32 size)
+{
+       setup_cpu_win(4, base, size, TARGET_DEV_BUS, ATTR_DEV_BOOT, -1);
+}
+
+void __init orion5x_setup_dev0_win(u32 base, u32 size)
+{
+       setup_cpu_win(5, base, size, TARGET_DEV_BUS, ATTR_DEV_CS0, -1);
+}
+
+void __init orion5x_setup_dev1_win(u32 base, u32 size)
+{
+       setup_cpu_win(6, base, size, TARGET_DEV_BUS, ATTR_DEV_CS1, -1);
+}
+
+void __init orion5x_setup_dev2_win(u32 base, u32 size)
+{
+       setup_cpu_win(7, base, size, TARGET_DEV_BUS, ATTR_DEV_CS2, -1);
+}
+
+void __init orion5x_setup_pcie_wa_win(u32 base, u32 size)
+{
+       setup_cpu_win(7, base, size, TARGET_PCIE, ATTR_PCIE_WA, -1);
+}
+
+void __init orion5x_setup_eth_wins(void)
+{
+       int i;
+
+       /*
+        * First, disable and clear windows
+        */
+       for (i = 0; i < ETH_MAX_WIN; i++) {
+               orion5x_write(ETH_WIN_BASE(i), 0);
+               orion5x_write(ETH_WIN_SIZE(i), 0);
+               orion5x_setbits(ETH_WIN_EN, 1 << i);
+               orion5x_clrbits(ETH_WIN_PROT, 0x3 << (i * 2));
+               if (i < ETH_MAX_REMAP_WIN)
+                       orion5x_write(ETH_WIN_REMAP(i), 0);
+       }
+
+       /*
+        * Setup windows for DDR banks.
+        */
+       for (i = 0; i < DDR_MAX_CS; i++) {
+               u32 base, size;
+               size = orion5x_read(DDR_SIZE_CS(i));
+               base = orion5x_read(DDR_BASE_CS(i));
+               if (size & DDR_BANK_EN) {
+                       base = DDR_REG_TO_BASE(base);
+                       size = DDR_REG_TO_SIZE(size);
+                       orion5x_write(ETH_WIN_SIZE(i), (size-1) & 0xffff0000);
+                       orion5x_write(ETH_WIN_BASE(i), (base & 0xffff0000) |
+                                       (ATTR_DDR_CS(i) << 8) |
+                                       TARGET_DDR);
+                       orion5x_clrbits(ETH_WIN_EN, 1 << i);
+                       orion5x_setbits(ETH_WIN_PROT, 0x3 << (i * 2));
+               }
+       }
+}
diff --git a/arch/arm/mach-orion5x/common.c b/arch/arm/mach-orion5x/common.c
new file mode 100644 (file)
index 0000000..439c778
--- /dev/null
@@ -0,0 +1,391 @@
+/*
+ * arch/arm/mach-orion5x/common.c
+ *
+ * Core functions for Marvell Orion 5x SoCs
+ *
+ * Maintainer: Tzachi Perelstein <tzachi@marvell.com>
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2.  This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/platform_device.h>
+#include <linux/serial_8250.h>
+#include <linux/mbus.h>
+#include <linux/mv643xx_eth.h>
+#include <linux/mv643xx_i2c.h>
+#include <linux/ata_platform.h>
+#include <asm/page.h>
+#include <asm/setup.h>
+#include <asm/timex.h>
+#include <asm/mach/arch.h>
+#include <asm/mach/map.h>
+#include <asm/mach/time.h>
+#include <asm/arch/hardware.h>
+#include <asm/arch/orion5x.h>
+#include <asm/plat-orion/ehci-orion.h>
+#include <asm/plat-orion/orion_nand.h>
+#include <asm/plat-orion/time.h>
+#include "common.h"
+
+/*****************************************************************************
+ * I/O Address Mapping
+ ****************************************************************************/
+static struct map_desc orion5x_io_desc[] __initdata = {
+       {
+               .virtual        = ORION5X_REGS_VIRT_BASE,
+               .pfn            = __phys_to_pfn(ORION5X_REGS_PHYS_BASE),
+               .length         = ORION5X_REGS_SIZE,
+               .type           = MT_DEVICE
+       },
+       {
+               .virtual        = ORION5X_PCIE_IO_VIRT_BASE,
+               .pfn            = __phys_to_pfn(ORION5X_PCIE_IO_PHYS_BASE),
+               .length         = ORION5X_PCIE_IO_SIZE,
+               .type           = MT_DEVICE
+       },
+       {
+               .virtual        = ORION5X_PCI_IO_VIRT_BASE,
+               .pfn            = __phys_to_pfn(ORION5X_PCI_IO_PHYS_BASE),
+               .length         = ORION5X_PCI_IO_SIZE,
+               .type           = MT_DEVICE
+       },
+       {
+               .virtual        = ORION5X_PCIE_WA_VIRT_BASE,
+               .pfn            = __phys_to_pfn(ORION5X_PCIE_WA_PHYS_BASE),
+               .length         = ORION5X_PCIE_WA_SIZE,
+               .type           = MT_DEVICE
+       },
+};
+
+void __init orion5x_map_io(void)
+{
+       iotable_init(orion5x_io_desc, ARRAY_SIZE(orion5x_io_desc));
+}
+
+/*****************************************************************************
+ * UART
+ ****************************************************************************/
+
+static struct resource orion5x_uart_resources[] = {
+       {
+               .start          = UART0_PHYS_BASE,
+               .end            = UART0_PHYS_BASE + 0xff,
+               .flags          = IORESOURCE_MEM,
+       },
+       {
+               .start          = IRQ_ORION5X_UART0,
+               .end            = IRQ_ORION5X_UART0,
+               .flags          = IORESOURCE_IRQ,
+       },
+       {
+               .start          = UART1_PHYS_BASE,
+               .end            = UART1_PHYS_BASE + 0xff,
+               .flags          = IORESOURCE_MEM,
+       },
+       {
+               .start          = IRQ_ORION5X_UART1,
+               .end            = IRQ_ORION5X_UART1,
+               .flags          = IORESOURCE_IRQ,
+       },
+};
+
+static struct plat_serial8250_port orion5x_uart_data[] = {
+       {
+               .mapbase        = UART0_PHYS_BASE,
+               .membase        = (char *)UART0_VIRT_BASE,
+               .irq            = IRQ_ORION5X_UART0,
+               .flags          = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF,
+               .iotype         = UPIO_MEM,
+               .regshift       = 2,
+               .uartclk        = ORION5X_TCLK,
+       },
+       {
+               .mapbase        = UART1_PHYS_BASE,
+               .membase        = (char *)UART1_VIRT_BASE,
+               .irq            = IRQ_ORION5X_UART1,
+               .flags          = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF,
+               .iotype         = UPIO_MEM,
+               .regshift       = 2,
+               .uartclk        = ORION5X_TCLK,
+       },
+       { },
+};
+
+static struct platform_device orion5x_uart = {
+       .name                   = "serial8250",
+       .id                     = PLAT8250_DEV_PLATFORM,
+       .dev                    = {
+               .platform_data  = orion5x_uart_data,
+       },
+       .resource               = orion5x_uart_resources,
+       .num_resources          = ARRAY_SIZE(orion5x_uart_resources),
+};
+
+/*******************************************************************************
+ * USB Controller - 2 interfaces
+ ******************************************************************************/
+
+static struct resource orion5x_ehci0_resources[] = {
+       {
+               .start  = ORION5X_USB0_PHYS_BASE,
+               .end    = ORION5X_USB0_PHYS_BASE + SZ_4K,
+               .flags  = IORESOURCE_MEM,
+       },
+       {
+               .start  = IRQ_ORION5X_USB0_CTRL,
+               .end    = IRQ_ORION5X_USB0_CTRL,
+               .flags  = IORESOURCE_IRQ,
+       },
+};
+
+static struct resource orion5x_ehci1_resources[] = {
+       {
+               .start  = ORION5X_USB1_PHYS_BASE,
+               .end    = ORION5X_USB1_PHYS_BASE + SZ_4K,
+               .flags  = IORESOURCE_MEM,
+       },
+       {
+               .start  = IRQ_ORION5X_USB1_CTRL,
+               .end    = IRQ_ORION5X_USB1_CTRL,
+               .flags  = IORESOURCE_IRQ,
+       },
+};
+
+static struct orion_ehci_data orion5x_ehci_data = {
+       .dram           = &orion5x_mbus_dram_info,
+};
+
+static u64 ehci_dmamask = 0xffffffffUL;
+
+static struct platform_device orion5x_ehci0 = {
+       .name           = "orion-ehci",
+       .id             = 0,
+       .dev            = {
+               .dma_mask               = &ehci_dmamask,
+               .coherent_dma_mask      = 0xffffffff,
+               .platform_data          = &orion5x_ehci_data,
+       },
+       .resource       = orion5x_ehci0_resources,
+       .num_resources  = ARRAY_SIZE(orion5x_ehci0_resources),
+};
+
+static struct platform_device orion5x_ehci1 = {
+       .name           = "orion-ehci",
+       .id             = 1,
+       .dev            = {
+               .dma_mask               = &ehci_dmamask,
+               .coherent_dma_mask      = 0xffffffff,
+               .platform_data          = &orion5x_ehci_data,
+       },
+       .resource       = orion5x_ehci1_resources,
+       .num_resources  = ARRAY_SIZE(orion5x_ehci1_resources),
+};
+
+/*****************************************************************************
+ * Gigabit Ethernet port
+ * (The Orion and Discovery (MV643xx) families use the same Ethernet driver)
+ ****************************************************************************/
+
+static struct resource orion5x_eth_shared_resources[] = {
+       {
+               .start  = ORION5X_ETH_PHYS_BASE + 0x2000,
+               .end    = ORION5X_ETH_PHYS_BASE + 0x3fff,
+               .flags  = IORESOURCE_MEM,
+       },
+};
+
+static struct platform_device orion5x_eth_shared = {
+       .name           = MV643XX_ETH_SHARED_NAME,
+       .id             = 0,
+       .num_resources  = 1,
+       .resource       = orion5x_eth_shared_resources,
+};
+
+static struct resource orion5x_eth_resources[] = {
+       {
+               .name   = "eth irq",
+               .start  = IRQ_ORION5X_ETH_SUM,
+               .end    = IRQ_ORION5X_ETH_SUM,
+               .flags  = IORESOURCE_IRQ,
+       }
+};
+
+static struct platform_device orion5x_eth = {
+       .name           = MV643XX_ETH_NAME,
+       .id             = 0,
+       .num_resources  = 1,
+       .resource       = orion5x_eth_resources,
+};
+
+void __init orion5x_eth_init(struct mv643xx_eth_platform_data *eth_data)
+{
+       orion5x_eth.dev.platform_data = eth_data;
+       platform_device_register(&orion5x_eth_shared);
+       platform_device_register(&orion5x_eth);
+}
+
+/*****************************************************************************
+ * I2C controller
+ * (The Orion and Discovery (MV643xx) families share the same I2C controller)
+ ****************************************************************************/
+
+static struct mv64xxx_i2c_pdata orion5x_i2c_pdata = {
+       .freq_m         = 8, /* assumes 166 MHz TCLK */
+       .freq_n         = 3,
+       .timeout        = 1000, /* Default timeout of 1 second */
+};
+
+static struct resource orion5x_i2c_resources[] = {
+       {
+               .name   = "i2c base",
+               .start  = I2C_PHYS_BASE,
+               .end    = I2C_PHYS_BASE + 0x20 -1,
+               .flags  = IORESOURCE_MEM,
+       },
+       {
+               .name   = "i2c irq",
+               .start  = IRQ_ORION5X_I2C,
+               .end    = IRQ_ORION5X_I2C,
+               .flags  = IORESOURCE_IRQ,
+       },
+};
+
+static struct platform_device orion5x_i2c = {
+       .name           = MV64XXX_I2C_CTLR_NAME,
+       .id             = 0,
+       .num_resources  = ARRAY_SIZE(orion5x_i2c_resources),
+       .resource       = orion5x_i2c_resources,
+       .dev            = {
+               .platform_data = &orion5x_i2c_pdata,
+       },
+};
+
+/*****************************************************************************
+ * Sata port
+ ****************************************************************************/
+static struct resource orion5x_sata_resources[] = {
+        {
+                .name   = "sata base",
+                .start  = ORION5X_SATA_PHYS_BASE,
+                .end    = ORION5X_SATA_PHYS_BASE + 0x5000 - 1,
+                .flags  = IORESOURCE_MEM,
+        },
+       {
+                .name   = "sata irq",
+                .start  = IRQ_ORION5X_SATA,
+                .end    = IRQ_ORION5X_SATA,
+                .flags  = IORESOURCE_IRQ,
+        },
+};
+
+static struct platform_device orion5x_sata = {
+       .name           = "sata_mv",
+       .id             = 0,
+       .dev            = {
+               .coherent_dma_mask      = 0xffffffff,
+       },
+       .num_resources  = ARRAY_SIZE(orion5x_sata_resources),
+       .resource       = orion5x_sata_resources,
+};
+
+void __init orion5x_sata_init(struct mv_sata_platform_data *sata_data)
+{
+       sata_data->dram = &orion5x_mbus_dram_info;
+       orion5x_sata.dev.platform_data = sata_data;
+       platform_device_register(&orion5x_sata);
+}
+
+/*****************************************************************************
+ * Time handling
+ ****************************************************************************/
+
+static void orion5x_timer_init(void)
+{
+       orion_time_init(IRQ_ORION5X_BRIDGE, ORION5X_TCLK);
+}
+
+struct sys_timer orion5x_timer = {
+        .init = orion5x_timer_init,
+};
+
+/*****************************************************************************
+ * General
+ ****************************************************************************/
+
+/*
+ * Identify device ID and rev from PCIE configuration header space '0'.
+ */
+static void __init orion5x_id(u32 *dev, u32 *rev, char **dev_name)
+{
+       orion5x_pcie_id(dev, rev);
+
+       if (*dev == MV88F5281_DEV_ID) {
+               if (*rev == MV88F5281_REV_D2) {
+                       *dev_name = "MV88F5281-D2";
+               } else if (*rev == MV88F5281_REV_D1) {
+                       *dev_name = "MV88F5281-D1";
+               } else {
+                       *dev_name = "MV88F5281-Rev-Unsupported";
+               }
+       } else if (*dev == MV88F5182_DEV_ID) {
+               if (*rev == MV88F5182_REV_A2) {
+                       *dev_name = "MV88F5182-A2";
+               } else {
+                       *dev_name = "MV88F5182-Rev-Unsupported";
+               }
+       } else if (*dev == MV88F5181_DEV_ID) {
+               if (*rev == MV88F5181_REV_B1) {
+                       *dev_name = "MV88F5181-Rev-B1";
+               } else {
+                       *dev_name = "MV88F5181-Rev-Unsupported";
+               }
+       } else {
+               *dev_name = "Device-Unknown";
+       }
+}
+
+void __init orion5x_init(void)
+{
+       char *dev_name;
+       u32 dev, rev;
+
+       orion5x_id(&dev, &rev, &dev_name);
+       printk(KERN_INFO "Orion ID: %s. TCLK=%d.\n", dev_name, ORION5X_TCLK);
+
+       /*
+        * Setup Orion address map
+        */
+       orion5x_setup_cpu_mbus_bridge();
+       orion5x_setup_eth_wins();
+
+       /*
+        * Register devices.
+        */
+       platform_device_register(&orion5x_uart);
+       platform_device_register(&orion5x_ehci0);
+       if (dev == MV88F5182_DEV_ID)
+               platform_device_register(&orion5x_ehci1);
+       platform_device_register(&orion5x_i2c);
+}
+
+/*
+ * Many orion-based systems have buggy bootloader implementations.
+ * This is a common fixup for bogus memory tags.
+ */
+void __init tag_fixup_mem32(struct machine_desc *mdesc, struct tag *t,
+                           char **from, struct meminfo *meminfo)
+{
+       for (; t->hdr.size; t = tag_next(t))
+               if (t->hdr.tag == ATAG_MEM &&
+                   (!t->u.mem.size || t->u.mem.size & ~PAGE_MASK ||
+                    t->u.mem.start & ~PAGE_MASK)) {
+                       printk(KERN_WARNING
+                              "Clearing invalid memory bank %dKB@0x%08x\n",
+                              t->u.mem.size / 1024, t->u.mem.start);
+                       t->hdr.tag = 0;
+               }
+}
diff --git a/arch/arm/mach-orion5x/common.h b/arch/arm/mach-orion5x/common.h
new file mode 100644 (file)
index 0000000..f4c4c9a
--- /dev/null
@@ -0,0 +1,72 @@
+#ifndef __ARCH_ORION5X_COMMON_H
+#define __ARCH_ORION5X_COMMON_H
+
+/*
+ * Basic Orion init functions used early by machine-setup.
+ */
+
+void orion5x_map_io(void);
+void orion5x_init_irq(void);
+void orion5x_init(void);
+extern struct sys_timer orion5x_timer;
+
+/*
+ * Enumerations and functions for Orion windows mapping. Used by Orion core
+ * functions to map its interfaces and by the machine-setup to map its on-
+ * board devices. Details in /mach-orion/addr-map.c
+ */
+extern struct mbus_dram_target_info orion5x_mbus_dram_info;
+void orion5x_setup_cpu_mbus_bridge(void);
+void orion5x_setup_dev_boot_win(u32 base, u32 size);
+void orion5x_setup_dev0_win(u32 base, u32 size);
+void orion5x_setup_dev1_win(u32 base, u32 size);
+void orion5x_setup_dev2_win(u32 base, u32 size);
+void orion5x_setup_pcie_wa_win(u32 base, u32 size);
+void orion5x_setup_eth_wins(void);
+
+/*
+ * Shared code used internally by other Orion core functions.
+ * (/mach-orion/pci.c)
+ */
+
+struct pci_sys_data;
+struct pci_bus;
+
+void orion5x_pcie_id(u32 *dev, u32 *rev);
+int orion5x_pcie_local_bus_nr(void);
+int orion5x_pci_local_bus_nr(void);
+int orion5x_pci_sys_setup(int nr, struct pci_sys_data *sys);
+struct pci_bus *orion5x_pci_sys_scan_bus(int nr, struct pci_sys_data *sys);
+
+/*
+ * Valid GPIO pins according to MPP setup, used by machine-setup.
+ * (/mach-orion/gpio.c).
+ */
+
+void orion5x_gpio_set_valid_pins(u32 pins);
+void gpio_display(void);       /* debug */
+
+/*
+ * Pull in Orion Ethernet platform_data, used by machine-setup
+ */
+
+struct mv643xx_eth_platform_data;
+
+void orion5x_eth_init(struct mv643xx_eth_platform_data *eth_data);
+
+/*
+ * Orion Sata platform_data, used by machine-setup
+ */
+
+struct mv_sata_platform_data;
+
+void orion5x_sata_init(struct mv_sata_platform_data *sata_data);
+
+struct machine_desc;
+struct meminfo;
+struct tag;
+extern void __init tag_fixup_mem32(struct machine_desc *, struct tag *,
+                                  char **, struct meminfo *);
+
+
+#endif
diff --git a/arch/arm/mach-orion5x/db88f5281-setup.c b/arch/arm/mach-orion5x/db88f5281-setup.c
new file mode 100644 (file)
index 0000000..872aed3
--- /dev/null
@@ -0,0 +1,361 @@
+/*
+ * arch/arm/mach-orion5x/db88f5281-setup.c
+ *
+ * Marvell Orion-2 Development Board Setup
+ *
+ * Maintainer: Tzachi Perelstein <tzachi@marvell.com>
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2.  This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/platform_device.h>
+#include <linux/pci.h>
+#include <linux/irq.h>
+#include <linux/mtd/physmap.h>
+#include <linux/mtd/nand.h>
+#include <linux/timer.h>
+#include <linux/mv643xx_eth.h>
+#include <linux/i2c.h>
+#include <asm/mach-types.h>
+#include <asm/gpio.h>
+#include <asm/mach/arch.h>
+#include <asm/mach/pci.h>
+#include <asm/arch/orion5x.h>
+#include <asm/plat-orion/orion_nand.h>
+#include "common.h"
+
+/*****************************************************************************
+ * DB-88F5281 on board devices
+ ****************************************************************************/
+
+/*
+ * 512K NOR flash Device bus boot chip select
+ */
+
+#define DB88F5281_NOR_BOOT_BASE                0xf4000000
+#define DB88F5281_NOR_BOOT_SIZE                SZ_512K
+
+/*
+ * 7-Segment on Device bus chip select 0
+ */
+
+#define DB88F5281_7SEG_BASE            0xfa000000
+#define DB88F5281_7SEG_SIZE            SZ_1K
+
+/*
+ * 32M NOR flash on Device bus chip select 1
+ */
+
+#define DB88F5281_NOR_BASE             0xfc000000
+#define DB88F5281_NOR_SIZE             SZ_32M
+
+/*
+ * 32M NAND flash on Device bus chip select 2
+ */
+
+#define DB88F5281_NAND_BASE            0xfa800000
+#define DB88F5281_NAND_SIZE            SZ_1K
+
+/*
+ * PCI
+ */
+
+#define DB88F5281_PCI_SLOT0_OFFS               7
+#define DB88F5281_PCI_SLOT0_IRQ_PIN            12
+#define DB88F5281_PCI_SLOT1_SLOT2_IRQ_PIN      13
+
+/*****************************************************************************
+ * 512M NOR Flash on Device bus Boot CS
+ ****************************************************************************/
+
+static struct physmap_flash_data db88f5281_boot_flash_data = {
+       .width          = 1,    /* 8 bit bus width */
+};
+
+static struct resource db88f5281_boot_flash_resource = {
+       .flags          = IORESOURCE_MEM,
+       .start          = DB88F5281_NOR_BOOT_BASE,
+       .end            = DB88F5281_NOR_BOOT_BASE + DB88F5281_NOR_BOOT_SIZE - 1,
+};
+
+static struct platform_device db88f5281_boot_flash = {
+       .name           = "physmap-flash",
+       .id             = 0,
+       .dev            = {
+               .platform_data = &db88f5281_boot_flash_data,
+       },
+       .num_resources  = 1,
+       .resource       = &db88f5281_boot_flash_resource,
+};
+
+/*****************************************************************************
+ * 32M NOR Flash on Device bus CS1
+ ****************************************************************************/
+
+static struct physmap_flash_data db88f5281_nor_flash_data = {
+       .width          = 4,    /* 32 bit bus width */
+};
+
+static struct resource db88f5281_nor_flash_resource = {
+       .flags          = IORESOURCE_MEM,
+       .start          = DB88F5281_NOR_BASE,
+       .end            = DB88F5281_NOR_BASE + DB88F5281_NOR_SIZE - 1,
+};
+
+static struct platform_device db88f5281_nor_flash = {
+       .name           = "physmap-flash",
+       .id             = 1,
+       .dev            = {
+               .platform_data = &db88f5281_nor_flash_data,
+       },
+       .num_resources  = 1,
+       .resource       = &db88f5281_nor_flash_resource,
+};
+
+/*****************************************************************************
+ * 32M NAND Flash on Device bus CS2
+ ****************************************************************************/
+
+static struct mtd_partition db88f5281_nand_parts[] = {
+       {
+               .name = "kernel",
+               .offset = 0,
+               .size = SZ_2M,
+       },
+       {
+               .name = "root",
+               .offset = SZ_2M,
+               .size = (SZ_16M - SZ_2M),
+       },
+       {
+               .name = "user",
+               .offset = SZ_16M,
+               .size = SZ_8M,
+       },
+       {
+               .name = "recovery",
+               .offset = (SZ_16M + SZ_8M),
+               .size = SZ_8M,
+       },
+};
+
+static struct resource db88f5281_nand_resource = {
+       .flags          = IORESOURCE_MEM,
+       .start          = DB88F5281_NAND_BASE,
+       .end            = DB88F5281_NAND_BASE + DB88F5281_NAND_SIZE - 1,
+};
+
+static struct orion_nand_data db88f5281_nand_data = {
+       .parts          = db88f5281_nand_parts,
+       .nr_parts       = ARRAY_SIZE(db88f5281_nand_parts),
+       .cle            = 0,
+       .ale            = 1,
+       .width          = 8,
+};
+
+static struct platform_device db88f5281_nand_flash = {
+       .name           = "orion_nand",
+       .id             = -1,
+       .dev            = {
+               .platform_data  = &db88f5281_nand_data,
+       },
+       .resource       = &db88f5281_nand_resource,
+       .num_resources  = 1,
+};
+
+/*****************************************************************************
+ * 7-Segment on Device bus CS0
+ * Dummy counter every 2 sec
+ ****************************************************************************/
+
+static void __iomem *db88f5281_7seg;
+static struct timer_list db88f5281_timer;
+
+static void db88f5281_7seg_event(unsigned long data)
+{
+       static int count = 0;
+       writel(0, db88f5281_7seg + (count << 4));
+       count = (count + 1) & 7;
+       mod_timer(&db88f5281_timer, jiffies + 2 * HZ);
+}
+
+static int __init db88f5281_7seg_init(void)
+{
+       if (machine_is_db88f5281()) {
+               db88f5281_7seg = ioremap(DB88F5281_7SEG_BASE,
+                                       DB88F5281_7SEG_SIZE);
+               if (!db88f5281_7seg) {
+                       printk(KERN_ERR "Failed to ioremap db88f5281_7seg\n");
+                       return -EIO;
+               }
+               setup_timer(&db88f5281_timer, db88f5281_7seg_event, 0);
+               mod_timer(&db88f5281_timer, jiffies + 2 * HZ);
+       }
+
+       return 0;
+}
+
+__initcall(db88f5281_7seg_init);
+
+/*****************************************************************************
+ * PCI
+ ****************************************************************************/
+
+void __init db88f5281_pci_preinit(void)
+{
+       int pin;
+
+       /*
+        * Configure PCI GPIO IRQ pins
+        */
+       pin = DB88F5281_PCI_SLOT0_IRQ_PIN;
+       if (gpio_request(pin, "PCI Int1") == 0) {
+               if (gpio_direction_input(pin) == 0) {
+                       set_irq_type(gpio_to_irq(pin), IRQT_LOW);
+               } else {
+                       printk(KERN_ERR "db88f5281_pci_preinit faield to "
+                                       "set_irq_type pin %d\n", pin);
+                       gpio_free(pin);
+               }
+       } else {
+               printk(KERN_ERR "db88f5281_pci_preinit failed to gpio_request %d\n", pin);
+       }
+
+       pin = DB88F5281_PCI_SLOT1_SLOT2_IRQ_PIN;
+       if (gpio_request(pin, "PCI Int2") == 0) {
+               if (gpio_direction_input(pin) == 0) {
+                       set_irq_type(gpio_to_irq(pin), IRQT_LOW);
+               } else {
+                       printk(KERN_ERR "db88f5281_pci_preinit faield "
+                                       "to set_irq_type pin %d\n", pin);
+                       gpio_free(pin);
+               }
+       } else {
+               printk(KERN_ERR "db88f5281_pci_preinit failed to gpio_request %d\n", pin);
+       }
+}
+
+static int __init db88f5281_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
+{
+       /*
+        * PCIE IRQ is connected internally (not GPIO)
+        */
+       if (dev->bus->number == orion5x_pcie_local_bus_nr())
+               return IRQ_ORION5X_PCIE0_INT;
+
+       /*
+        * PCI IRQs are connected via GPIOs
+        */
+       switch (slot - DB88F5281_PCI_SLOT0_OFFS) {
+       case 0:
+               return gpio_to_irq(DB88F5281_PCI_SLOT0_IRQ_PIN);
+       case 1:
+       case 2:
+               return gpio_to_irq(DB88F5281_PCI_SLOT1_SLOT2_IRQ_PIN);
+       default:
+               return -1;
+       }
+}
+
+static struct hw_pci db88f5281_pci __initdata = {
+       .nr_controllers = 2,
+       .preinit        = db88f5281_pci_preinit,
+       .swizzle        = pci_std_swizzle,
+       .setup          = orion5x_pci_sys_setup,
+       .scan           = orion5x_pci_sys_scan_bus,
+       .map_irq        = db88f5281_pci_map_irq,
+};
+
+static int __init db88f5281_pci_init(void)
+{
+       if (machine_is_db88f5281())
+               pci_common_init(&db88f5281_pci);
+
+       return 0;
+}
+
+subsys_initcall(db88f5281_pci_init);
+
+/*****************************************************************************
+ * Ethernet
+ ****************************************************************************/
+static struct mv643xx_eth_platform_data db88f5281_eth_data = {
+       .phy_addr       = 8,
+       .force_phy_addr = 1,
+};
+
+/*****************************************************************************
+ * RTC DS1339 on I2C bus
+ ****************************************************************************/
+static struct i2c_board_info __initdata db88f5281_i2c_rtc = {
+       .driver_name    = "rtc-ds1307",
+       .type           = "ds1339",
+       .addr           = 0x68,
+};
+
+/*****************************************************************************
+ * General Setup
+ ****************************************************************************/
+
+static struct platform_device *db88f5281_devs[] __initdata = {
+       &db88f5281_boot_flash,
+       &db88f5281_nor_flash,
+       &db88f5281_nand_flash,
+};
+
+static void __init db88f5281_init(void)
+{
+       /*
+        * Basic Orion setup. Need to be called early.
+        */
+       orion5x_init();
+
+       /*
+        * Setup the CPU address decode windows for our on-board devices
+        */
+       orion5x_setup_dev_boot_win(DB88F5281_NOR_BOOT_BASE,
+                               DB88F5281_NOR_BOOT_SIZE);
+       orion5x_setup_dev0_win(DB88F5281_7SEG_BASE, DB88F5281_7SEG_SIZE);
+       orion5x_setup_dev1_win(DB88F5281_NOR_BASE, DB88F5281_NOR_SIZE);
+       orion5x_setup_dev2_win(DB88F5281_NAND_BASE, DB88F5281_NAND_SIZE);
+
+       /*
+        * Setup Multiplexing Pins:
+        * MPP0: GPIO (USB Over Current)        MPP1: GPIO (USB Vbat input)
+        * MPP2: PCI_REQn[2]                    MPP3: PCI_GNTn[2]
+        * MPP4: PCI_REQn[3]                    MPP5: PCI_GNTn[3]
+        * MPP6: GPIO (JP0, CON17.2)            MPP7: GPIO (JP1, CON17.1)
+        * MPP8: GPIO (JP2, CON11.2)            MPP9: GPIO (JP3, CON11.3)
+        * MPP10: GPIO (RTC int)                MPP11: GPIO (Baud Rate Generator)
+        * MPP12: GPIO (PCI int 1)              MPP13: GPIO (PCI int 2)
+        * MPP14: NAND_REn[2]                   MPP15: NAND_WEn[2]
+        * MPP16: UART1_RX                      MPP17: UART1_TX
+        * MPP18: UART1_CTS                     MPP19: UART1_RTS
+        * MPP-DEV: DEV_D[16:31]
+        */
+       orion5x_write(MPP_0_7_CTRL, 0x00222203);
+       orion5x_write(MPP_8_15_CTRL, 0x44000000);
+       orion5x_write(MPP_16_19_CTRL, 0);
+       orion5x_write(MPP_DEV_CTRL, 0);
+
+       orion5x_gpio_set_valid_pins(0x00003fc3);
+
+       platform_add_devices(db88f5281_devs, ARRAY_SIZE(db88f5281_devs));
+       i2c_register_board_info(0, &db88f5281_i2c_rtc, 1);
+       orion5x_eth_init(&db88f5281_eth_data);
+}
+
+MACHINE_START(DB88F5281, "Marvell Orion-2 Development Board")
+       /* Maintainer: Tzachi Perelstein <tzachi@marvell.com> */
+       .phys_io        = ORION5X_REGS_PHYS_BASE,
+       .io_pg_offst    = ((ORION5X_REGS_VIRT_BASE) >> 18) & 0xfffc,
+       .boot_params    = 0x00000100,
+       .init_machine   = db88f5281_init,
+       .map_io         = orion5x_map_io,
+       .init_irq       = orion5x_init_irq,
+       .timer          = &orion5x_timer,
+MACHINE_END
diff --git a/arch/arm/mach-orion5x/dns323-setup.c b/arch/arm/mach-orion5x/dns323-setup.c
new file mode 100644 (file)
index 0000000..d67790e
--- /dev/null
@@ -0,0 +1,320 @@
+/*
+ * arch/arm/mach-orion5x/dns323-setup.c
+ *
+ * Copyright (C) 2007 Herbert Valerio Riedel <hvr@gnu.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ */
+
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/platform_device.h>
+#include <linux/pci.h>
+#include <linux/irq.h>
+#include <linux/mtd/physmap.h>
+#include <linux/mv643xx_eth.h>
+#include <linux/leds.h>
+#include <linux/gpio_keys.h>
+#include <linux/input.h>
+#include <linux/i2c.h>
+#include <asm/mach-types.h>
+#include <asm/gpio.h>
+#include <asm/mach/arch.h>
+#include <asm/mach/pci.h>
+#include <asm/arch/orion5x.h>
+#include "common.h"
+
+#define DNS323_GPIO_LED_RIGHT_AMBER    1
+#define DNS323_GPIO_LED_LEFT_AMBER     2
+#define DNS323_GPIO_LED_POWER          5
+#define DNS323_GPIO_OVERTEMP           6
+#define DNS323_GPIO_RTC                        7
+#define DNS323_GPIO_POWER_OFF          8
+#define DNS323_GPIO_KEY_POWER          9
+#define DNS323_GPIO_KEY_RESET          10
+
+/****************************************************************************
+ * PCI setup
+ */
+
+static int __init dns323_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
+{
+       /* PCI-E */
+       if (dev->bus->number == orion5x_pcie_local_bus_nr())
+               return IRQ_ORION5X_PCIE0_INT;
+
+       pr_err("%s: requested mapping for unknown bus\n", __func__);
+
+       return -1;
+}
+
+static struct hw_pci dns323_pci __initdata = {
+       .nr_controllers = 1,
+       .swizzle        = pci_std_swizzle,
+       .setup          = orion5x_pci_sys_setup,
+       .scan           = orion5x_pci_sys_scan_bus,
+       .map_irq        = dns323_pci_map_irq,
+};
+
+static int __init dns323_pci_init(void)
+{
+       if (machine_is_dns323())
+               pci_common_init(&dns323_pci);
+
+       return 0;
+}
+
+subsys_initcall(dns323_pci_init);
+
+/****************************************************************************
+ * Ethernet
+ */
+
+static struct mv643xx_eth_platform_data dns323_eth_data = {
+       .phy_addr = 8,
+       .force_phy_addr = 1,
+};
+
+/****************************************************************************
+ * 8MiB NOR flash (Spansion S29GL064M90TFIR4)
+ *
+ * Layout as used by D-Link:
+ *  0x00000000-0x00010000 : "MTD1"
+ *  0x00010000-0x00020000 : "MTD2"
+ *  0x00020000-0x001a0000 : "Linux Kernel"
+ *  0x001a0000-0x007d0000 : "File System"
+ *  0x007d0000-0x00800000 : "u-boot"
+ */
+
+#define DNS323_NOR_BOOT_BASE 0xf4000000
+#define DNS323_NOR_BOOT_SIZE SZ_8M
+
+static struct mtd_partition dns323_partitions[] = {
+       {
+               .name   = "MTD1",
+               .size   = 0x00010000,
+               .offset = 0,
+       }, {
+               .name   = "MTD2",
+               .size   = 0x00010000,
+               .offset = 0x00010000,
+       }, {
+               .name   = "Linux Kernel",
+               .size   = 0x00180000,
+               .offset = 0x00020000,
+       }, {
+               .name   = "File System",
+               .size   = 0x00630000,
+               .offset = 0x001A0000,
+       }, {
+               .name   = "u-boot",
+               .size   = 0x00030000,
+               .offset = 0x007d0000,
+       }
+};
+
+static struct physmap_flash_data dns323_nor_flash_data = {
+       .width          = 1,
+       .parts          = dns323_partitions,
+       .nr_parts       = ARRAY_SIZE(dns323_partitions)
+};
+
+static struct resource dns323_nor_flash_resource = {
+       .flags          = IORESOURCE_MEM,
+       .start          = DNS323_NOR_BOOT_BASE,
+       .end            = DNS323_NOR_BOOT_BASE + DNS323_NOR_BOOT_SIZE - 1,
+};
+
+static struct platform_device dns323_nor_flash = {
+       .name           = "physmap-flash",
+       .id             = 0,
+       .dev            = { .platform_data = &dns323_nor_flash_data, },
+       .resource       = &dns323_nor_flash_resource,
+       .num_resources  = 1,
+};
+
+/****************************************************************************
+ * GPIO LEDs (simple - doesn't use hardware blinking support)
+ */
+
+static struct gpio_led dns323_leds[] = {
+       {
+               .name = "power:blue",
+               .gpio = DNS323_GPIO_LED_POWER,
+               .active_low = 1,
+       }, {
+               .name = "right:amber",
+               .gpio = DNS323_GPIO_LED_RIGHT_AMBER,
+               .active_low = 1,
+       }, {
+               .name = "left:amber",
+               .gpio = DNS323_GPIO_LED_LEFT_AMBER,
+               .active_low = 1,
+       },
+};
+
+static struct gpio_led_platform_data dns323_led_data = {
+       .num_leds       = ARRAY_SIZE(dns323_leds),
+       .leds           = dns323_leds,
+};
+
+static struct platform_device dns323_gpio_leds = {
+       .name           = "leds-gpio",
+       .id             = -1,
+       .dev            = { .platform_data = &dns323_led_data, },
+};
+
+/****************************************************************************
+ * GPIO Attached Keys
+ */
+
+static struct gpio_keys_button dns323_buttons[] = {
+       {
+               .code           = KEY_RESTART,
+               .gpio           = DNS323_GPIO_KEY_RESET,
+               .desc           = "Reset Button",
+               .active_low     = 1,
+       },
+       {
+               .code           = KEY_POWER,
+               .gpio           = DNS323_GPIO_KEY_POWER,
+               .desc           = "Power Button",
+               .active_low     = 1,
+       }
+};
+
+static struct gpio_keys_platform_data dns323_button_data = {
+       .buttons        = dns323_buttons,
+       .nbuttons       = ARRAY_SIZE(dns323_buttons),
+};
+
+static struct platform_device dns323_button_device = {
+       .name           = "gpio-keys",
+       .id             = -1,
+       .num_resources  = 0,
+       .dev            = { .platform_data  = &dns323_button_data, },
+};
+
+/****************************************************************************
+ * General Setup
+ */
+
+static struct platform_device *dns323_plat_devices[] __initdata = {
+       &dns323_nor_flash,
+       &dns323_gpio_leds,
+       &dns323_button_device,
+};
+
+/*
+ * On the DNS-323 the following devices are attached via I2C:
+ *
+ *  i2c addr | chip        | description
+ *  0x3e     | GMT G760Af  | fan speed PWM controller
+ *  0x48     | GMT G751-2f | temp. sensor and therm. watchdog (LM75 compatible)
+ *  0x68     | ST M41T80   | RTC w/ alarm
+ */
+static struct i2c_board_info __initdata dns323_i2c_devices[] = {
+       {
+               I2C_BOARD_INFO("g760a", 0x3e),
+               .type = "g760a",
+       },
+#if 0
+       /* this entry requires the new-style driver model lm75 driver,
+        * for the meantime "insmod lm75.ko force_lm75=0,0x48" is needed */
+       {
+               I2C_BOARD_INFO("lm75", 0x48),
+               .type = "g751",
+       },
+#endif
+       {
+               I2C_BOARD_INFO("rtc-m41t80", 0x68),
+               .type = "m41t80",
+       }
+};
+
+/* DNS-323 specific power off method */
+static void dns323_power_off(void)
+{
+       pr_info("%s: triggering power-off...\n", __func__);
+       gpio_set_value(DNS323_GPIO_POWER_OFF, 1);
+}
+
+static void __init dns323_init(void)
+{
+       /* Setup basic Orion functions. Need to be called early. */
+       orion5x_init();
+
+       /* setup flash mapping
+        * CS3 holds a 8 MB Spansion S29GL064M90TFIR4
+        */
+       orion5x_setup_dev_boot_win(DNS323_NOR_BOOT_BASE, DNS323_NOR_BOOT_SIZE);
+
+       /* DNS-323 has a Marvell 88X7042 SATA controller attached via PCIE
+        *
+        * Open a special address decode windows for the PCIE WA.
+        */
+       orion5x_setup_pcie_wa_win(ORION5X_PCIE_WA_PHYS_BASE,
+                               ORION5X_PCIE_WA_SIZE);
+
+       /* set MPP to 0 as D-Link's 2.6.12.6 kernel did */
+       orion5x_write(MPP_0_7_CTRL, 0);
+       orion5x_write(MPP_8_15_CTRL, 0);
+       orion5x_write(MPP_16_19_CTRL, 0);
+       orion5x_write(MPP_DEV_CTRL, 0);
+
+       /* Define used GPIO pins
+
+         GPIO Map:
+
+         |  0 |     | PEX_RST_OUT (not controlled by GPIO)
+         |  1 | Out | right amber LED (= sata ch0 LED)  (low-active)
+         |  2 | Out | left  amber LED (= sata ch1 LED)  (low-active)
+         |  3 | Out | //unknown//
+         |  4 | Out | power button LED (low-active, together with pin #5)
+         |  5 | Out | power button LED (low-active, together with pin #4)
+         |  6 | In  | GMT G751-2f overtemp. shutdown signal (low-active)
+         |  7 | In  | M41T80 nIRQ/OUT/SQW signal
+         |  8 | Out | triggers power off (high-active)
+         |  9 | In  | power button switch (low-active)
+         | 10 | In  | reset button switch (low-active)
+         | 11 | Out | //unknown//
+         | 12 | Out | //unknown//
+         | 13 | Out | //unknown//
+         | 14 | Out | //unknown//
+         | 15 | Out | //unknown//
+       */
+       orion5x_gpio_set_valid_pins(0x07f6);
+
+       /* register dns323 specific power-off method */
+       if ((gpio_request(DNS323_GPIO_POWER_OFF, "POWEROFF") != 0)
+           || (gpio_direction_output(DNS323_GPIO_POWER_OFF, 0) != 0))
+               pr_err("DNS323: failed to setup power-off GPIO\n");
+
+       pm_power_off = dns323_power_off;
+
+       /* register flash and other platform devices */
+       platform_add_devices(dns323_plat_devices,
+                            ARRAY_SIZE(dns323_plat_devices));
+
+       i2c_register_board_info(0, dns323_i2c_devices,
+                               ARRAY_SIZE(dns323_i2c_devices));
+
+       orion5x_eth_init(&dns323_eth_data);
+}
+
+/* Warning: D-Link uses a wrong mach-type (=526) in their bootloader */
+MACHINE_START(DNS323, "D-Link DNS-323")
+       /* Maintainer: Herbert Valerio Riedel <hvr@gnu.org> */
+       .phys_io        = ORION5X_REGS_PHYS_BASE,
+       .io_pg_offst    = ((ORION5X_REGS_VIRT_BASE) >> 18) & 0xFFFC,
+       .boot_params    = 0x00000100,
+       .init_machine   = dns323_init,
+       .map_io         = orion5x_map_io,
+       .init_irq       = orion5x_init_irq,
+       .timer          = &orion5x_timer,
+       .fixup          = tag_fixup_mem32,
+MACHINE_END
diff --git a/arch/arm/mach-orion5x/gpio.c b/arch/arm/mach-orion5x/gpio.c
new file mode 100644 (file)
index 0000000..8108c31
--- /dev/null
@@ -0,0 +1,226 @@
+/*
+ * arch/arm/mach-orion5x/gpio.c
+ *
+ * GPIO functions for Marvell Orion System On Chip
+ *
+ * Maintainer: Tzachi Perelstein <tzachi@marvell.com>
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2.  This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/module.h>
+#include <linux/spinlock.h>
+#include <linux/bitops.h>
+#include <asm/gpio.h>
+#include <asm/io.h>
+#include <asm/arch/orion5x.h>
+#include "common.h"
+
+static DEFINE_SPINLOCK(gpio_lock);
+static unsigned long gpio_valid[BITS_TO_LONGS(GPIO_MAX)];
+static const char *gpio_label[GPIO_MAX];  /* non null for allocated GPIOs */
+
+void __init orion5x_gpio_set_valid_pins(u32 pins)
+{
+       gpio_valid[0] = pins;
+}
+
+/*
+ * GENERIC_GPIO primitives
+ */
+int gpio_direction_input(unsigned pin)
+{
+       unsigned long flags;
+
+       if (pin >= GPIO_MAX || !test_bit(pin, gpio_valid)) {
+               pr_debug("%s: invalid GPIO %d\n", __func__, pin);
+               return -EINVAL;
+       }
+
+       spin_lock_irqsave(&gpio_lock, flags);
+
+       /*
+        * Some callers might have not used the gpio_request(),
+        * so flag this pin as requested now.
+        */
+       if (!gpio_label[pin])
+               gpio_label[pin] = "?";
+
+       orion5x_setbits(GPIO_IO_CONF, 1 << pin);
+
+       spin_unlock_irqrestore(&gpio_lock, flags);
+       return 0;
+}
+EXPORT_SYMBOL(gpio_direction_input);
+
+int gpio_direction_output(unsigned pin, int value)
+{
+       unsigned long flags;
+       int mask;
+
+       if (pin >= GPIO_MAX || !test_bit(pin, gpio_valid)) {
+               pr_debug("%s: invalid GPIO %d\n", __func__, pin);
+               return -EINVAL;
+       }
+
+       spin_lock_irqsave(&gpio_lock, flags);
+
+       /*
+        * Some callers might have not used the gpio_request(),
+        * so flag this pin as requested now.
+        */
+       if (!gpio_label[pin])
+               gpio_label[pin] = "?";
+
+       mask = 1 << pin;
+       orion5x_clrbits(GPIO_BLINK_EN, mask);
+       if (value)
+               orion5x_setbits(GPIO_OUT, mask);
+       else
+               orion5x_clrbits(GPIO_OUT, mask);
+       orion5x_clrbits(GPIO_IO_CONF, mask);
+
+       spin_unlock_irqrestore(&gpio_lock, flags);
+       return 0;
+}
+EXPORT_SYMBOL(gpio_direction_output);
+
+int gpio_get_value(unsigned pin)
+{
+       int val, mask = 1 << pin;
+
+       if (orion5x_read(GPIO_IO_CONF) & mask)
+               val = orion5x_read(GPIO_DATA_IN) ^ orion5x_read(GPIO_IN_POL);
+       else
+               val = orion5x_read(GPIO_OUT);
+
+       return val & mask;
+}
+EXPORT_SYMBOL(gpio_get_value);
+
+void gpio_set_value(unsigned pin, int value)
+{
+       unsigned long flags;
+       int mask = 1 << pin;
+
+       spin_lock_irqsave(&gpio_lock, flags);
+
+       orion5x_clrbits(GPIO_BLINK_EN, mask);
+       if (value)
+               orion5x_setbits(GPIO_OUT, mask);
+       else
+               orion5x_clrbits(GPIO_OUT, mask);
+
+       spin_unlock_irqrestore(&gpio_lock, flags);
+}
+EXPORT_SYMBOL(gpio_set_value);
+
+void orion5x_gpio_set_blink(unsigned pin, int blink)
+{
+       unsigned long flags;
+       int mask = 1 << pin;
+
+       spin_lock_irqsave(&gpio_lock, flags);
+
+       orion5x_clrbits(GPIO_OUT, mask);
+       if (blink)
+               orion5x_setbits(GPIO_BLINK_EN, mask);
+       else
+               orion5x_clrbits(GPIO_BLINK_EN, mask);
+
+       spin_unlock_irqrestore(&gpio_lock, flags);
+}
+EXPORT_SYMBOL(orion5x_gpio_set_blink);
+
+int gpio_request(unsigned pin, const char *label)
+{
+       int ret = 0;
+       unsigned long flags;
+
+       if (pin >= GPIO_MAX || !test_bit(pin, gpio_valid)) {
+               pr_debug("%s: invalid GPIO %d\n", __func__, pin);
+               return -EINVAL;
+       }
+
+       spin_lock_irqsave(&gpio_lock, flags);
+
+       if (gpio_label[pin]) {
+               pr_debug("%s: GPIO %d already used as %s\n",
+                        __func__, pin, gpio_label[pin]);
+               ret = -EBUSY;
+       } else
+               gpio_label[pin] = label ? label : "?";
+
+       spin_unlock_irqrestore(&gpio_lock, flags);
+       return ret;
+}
+EXPORT_SYMBOL(gpio_request);
+
+void gpio_free(unsigned pin)
+{
+       if (pin >= GPIO_MAX || !test_bit(pin, gpio_valid)) {
+               pr_debug("%s: invalid GPIO %d\n", __func__, pin);
+               return;
+       }
+
+       if (!gpio_label[pin])
+               pr_warning("%s: GPIO %d already freed\n", __func__, pin);
+       else
+               gpio_label[pin] = NULL;
+}
+EXPORT_SYMBOL(gpio_free);
+
+/* Debug helper */
+void gpio_display(void)
+{
+       int i;
+
+       for (i = 0; i < GPIO_MAX; i++) {
+               printk(KERN_DEBUG "Pin-%d: ", i);
+
+               if (!test_bit(i, gpio_valid)) {
+                       printk("non-GPIO\n");
+               } else if (!gpio_label[i]) {
+                       printk("GPIO, free\n");
+               } else {
+                       printk("GPIO, used by %s, ", gpio_label[i]);
+                       if (orion5x_read(GPIO_IO_CONF) & (1 << i)) {
+                               printk("input, active %s, level %s, edge %s\n",
+                               ((orion5x_read(GPIO_IN_POL) >> i) & 1) ? "low" : "high",
+                               ((orion5x_read(GPIO_LEVEL_MASK) >> i) & 1) ? "enabled" : "masked",
+                               ((orion5x_read(GPIO_EDGE_MASK) >> i) & 1) ? "enabled" : "masked");
+                       } else {
+                               printk("output, val=%d\n", (orion5x_read(GPIO_OUT) >> i) & 1);
+                       }
+               }
+       }
+
+       printk(KERN_DEBUG "MPP_0_7_CTRL (0x%08x) = 0x%08x\n",
+                               MPP_0_7_CTRL, orion5x_read(MPP_0_7_CTRL));
+       printk(KERN_DEBUG "MPP_8_15_CTRL (0x%08x) = 0x%08x\n",
+                               MPP_8_15_CTRL, orion5x_read(MPP_8_15_CTRL));
+       printk(KERN_DEBUG "MPP_16_19_CTRL (0x%08x) = 0x%08x\n",
+                               MPP_16_19_CTRL, orion5x_read(MPP_16_19_CTRL));
+       printk(KERN_DEBUG "MPP_DEV_CTRL (0x%08x) = 0x%08x\n",
+                               MPP_DEV_CTRL, orion5x_read(MPP_DEV_CTRL));
+       printk(KERN_DEBUG "GPIO_OUT (0x%08x) = 0x%08x\n",
+                               GPIO_OUT, orion5x_read(GPIO_OUT));
+       printk(KERN_DEBUG "GPIO_IO_CONF (0x%08x) = 0x%08x\n",
+                               GPIO_IO_CONF, orion5x_read(GPIO_IO_CONF));
+       printk(KERN_DEBUG "GPIO_BLINK_EN (0x%08x) = 0x%08x\n",
+                               GPIO_BLINK_EN, orion5x_read(GPIO_BLINK_EN));
+       printk(KERN_DEBUG "GPIO_IN_POL (0x%08x) = 0x%08x\n",
+                               GPIO_IN_POL, orion5x_read(GPIO_IN_POL));
+       printk(KERN_DEBUG "GPIO_DATA_IN (0x%08x) = 0x%08x\n",
+                               GPIO_DATA_IN, orion5x_read(GPIO_DATA_IN));
+       printk(KERN_DEBUG "GPIO_LEVEL_MASK (0x%08x) = 0x%08x\n",
+                               GPIO_LEVEL_MASK, orion5x_read(GPIO_LEVEL_MASK));
+       printk(KERN_DEBUG "GPIO_EDGE_CAUSE (0x%08x) = 0x%08x\n",
+                               GPIO_EDGE_CAUSE, orion5x_read(GPIO_EDGE_CAUSE));
+       printk(KERN_DEBUG "GPIO_EDGE_MASK (0x%08x) = 0x%08x\n",
+                               GPIO_EDGE_MASK, orion5x_read(GPIO_EDGE_MASK));
+}
diff --git a/arch/arm/mach-orion5x/irq.c b/arch/arm/mach-orion5x/irq.c
new file mode 100644 (file)
index 0000000..dd21f38
--- /dev/null
@@ -0,0 +1,211 @@
+/*
+ * arch/arm/mach-orion5x/irq.c
+ *
+ * Core IRQ functions for Marvell Orion System On Chip
+ *
+ * Maintainer: Tzachi Perelstein <tzachi@marvell.com>
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2.  This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/irq.h>
+#include <asm/gpio.h>
+#include <asm/io.h>
+#include <asm/arch/orion5x.h>
+#include <asm/plat-orion/irq.h>
+#include "common.h"
+
+/*****************************************************************************
+ * Orion GPIO IRQ
+ *
+ * GPIO_IN_POL register controlls whether GPIO_DATA_IN will hold the same
+ * value of the line or the opposite value.
+ *
+ * Level IRQ handlers: DATA_IN is used directly as cause register.
+ *                     Interrupt are masked by LEVEL_MASK registers.
+ * Edge IRQ handlers:  Change in DATA_IN are latched in EDGE_CAUSE.
+ *                     Interrupt are masked by EDGE_MASK registers.
+ * Both-edge handlers: Similar to regular Edge handlers, but also swaps
+ *                     the polarity to catch the next line transaction.
+ *                     This is a race condition that might not perfectly
+ *                     work on some use cases.
+ *
+ * Every eight GPIO lines are grouped (OR'ed) before going up to main
+ * cause register.
+ *
+ *                    EDGE  cause    mask
+ *        data-in   /--------| |-----| |----\
+ *     -----| |-----                         ---- to main cause reg
+ *           X      \----------------| |----/
+ *        polarity    LEVEL          mask
+ *
+ ****************************************************************************/
+static void orion5x_gpio_irq_ack(u32 irq)
+{
+       int pin = irq_to_gpio(irq);
+       if (irq_desc[irq].status & IRQ_LEVEL)
+               /*
+                * Mask bit for level interrupt
+                */
+               orion5x_clrbits(GPIO_LEVEL_MASK, 1 << pin);
+       else
+               /*
+                * Clear casue bit for egde interrupt
+                */
+               orion5x_clrbits(GPIO_EDGE_CAUSE, 1 << pin);
+}
+
+static void orion5x_gpio_irq_mask(u32 irq)
+{
+       int pin = irq_to_gpio(irq);
+       if (irq_desc[irq].status & IRQ_LEVEL)
+               orion5x_clrbits(GPIO_LEVEL_MASK, 1 << pin);
+       else
+               orion5x_clrbits(GPIO_EDGE_MASK, 1 << pin);
+}
+
+static void orion5x_gpio_irq_unmask(u32 irq)
+{
+       int pin = irq_to_gpio(irq);
+       if (irq_desc[irq].status & IRQ_LEVEL)
+               orion5x_setbits(GPIO_LEVEL_MASK, 1 << pin);
+       else
+               orion5x_setbits(GPIO_EDGE_MASK, 1 << pin);
+}
+
+static int orion5x_gpio_set_irq_type(u32 irq, u32 type)
+{
+       int pin = irq_to_gpio(irq);
+       struct irq_desc *desc;
+
+       if ((orion5x_read(GPIO_IO_CONF) & (1 << pin)) == 0) {
+               printk(KERN_ERR "orion5x_gpio_set_irq_type failed "
+                               "(irq %d, pin %d).\n", irq, pin);
+               return -EINVAL;
+       }
+
+       desc = irq_desc + irq;
+
+       switch (type) {
+       case IRQT_HIGH:
+               desc->handle_irq = handle_level_irq;
+               desc->status |= IRQ_LEVEL;
+               orion5x_clrbits(GPIO_IN_POL, (1 << pin));
+               break;
+       case IRQT_LOW:
+               desc->handle_irq = handle_level_irq;
+               desc->status |= IRQ_LEVEL;
+               orion5x_setbits(GPIO_IN_POL, (1 << pin));
+               break;
+       case IRQT_RISING:
+               desc->handle_irq = handle_edge_irq;
+               desc->status &= ~IRQ_LEVEL;
+               orion5x_clrbits(GPIO_IN_POL, (1 << pin));
+               break;
+       case IRQT_FALLING:
+               desc->handle_irq = handle_edge_irq;
+               desc->status &= ~IRQ_LEVEL;
+               orion5x_setbits(GPIO_IN_POL, (1 << pin));
+               break;
+       case IRQT_BOTHEDGE:
+               desc->handle_irq = handle_edge_irq;
+               desc->status &= ~IRQ_LEVEL;
+               /*
+                * set initial polarity based on current input level
+                */
+               if ((orion5x_read(GPIO_IN_POL) ^ orion5x_read(GPIO_DATA_IN))
+                   & (1 << pin))
+                       orion5x_setbits(GPIO_IN_POL, (1 << pin)); /* falling */
+               else
+                       orion5x_clrbits(GPIO_IN_POL, (1 << pin)); /* rising */
+
+               break;
+       default:
+               printk(KERN_ERR "failed to set irq=%d (type=%d)\n", irq, type);
+               return -EINVAL;
+       }
+
+       desc->status &= ~IRQ_TYPE_SENSE_MASK;
+       desc->status |= type & IRQ_TYPE_SENSE_MASK;
+
+       return 0;
+}
+
+static struct irq_chip orion5x_gpio_irq_chip = {
+       .name           = "Orion-IRQ-GPIO",
+       .ack            = orion5x_gpio_irq_ack,
+       .mask           = orion5x_gpio_irq_mask,
+       .unmask         = orion5x_gpio_irq_unmask,
+       .set_type       = orion5x_gpio_set_irq_type,
+};
+
+static void orion5x_gpio_irq_handler(unsigned int irq, struct irq_desc *desc)
+{
+       u32 cause, offs, pin;
+
+       BUG_ON(irq < IRQ_ORION5X_GPIO_0_7 || irq > IRQ_ORION5X_GPIO_24_31);
+       offs = (irq - IRQ_ORION5X_GPIO_0_7) * 8;
+       cause = (orion5x_read(GPIO_DATA_IN) & orion5x_read(GPIO_LEVEL_MASK)) |
+               (orion5x_read(GPIO_EDGE_CAUSE) & orion5x_read(GPIO_EDGE_MASK));
+
+       for (pin = offs; pin < offs + 8; pin++) {
+               if (cause & (1 << pin)) {
+                       irq = gpio_to_irq(pin);
+                       desc = irq_desc + irq;
+                       if ((desc->status & IRQ_TYPE_SENSE_MASK) == IRQT_BOTHEDGE) {
+                               /* Swap polarity (race with GPIO line) */
+                               u32 polarity = orion5x_read(GPIO_IN_POL);
+                               polarity ^= 1 << pin;
+                               orion5x_write(GPIO_IN_POL, polarity);
+                       }
+                       desc_handle_irq(irq, desc);
+               }
+       }
+}
+
+static void __init orion5x_init_gpio_irq(void)
+{
+       int i;
+       struct irq_desc *desc;
+
+       /*
+        * Mask and clear GPIO IRQ interrupts
+        */
+       orion5x_write(GPIO_LEVEL_MASK, 0x0);
+       orion5x_write(GPIO_EDGE_MASK, 0x0);
+       orion5x_write(GPIO_EDGE_CAUSE, 0x0);
+
+       /*
+        * Register chained level handlers for GPIO IRQs by default.
+        * User can use set_type() if he wants to use edge types handlers.
+        */
+       for (i = IRQ_ORION5X_GPIO_START; i < NR_IRQS; i++) {
+               set_irq_chip(i, &orion5x_gpio_irq_chip);
+               set_irq_handler(i, handle_level_irq);
+               desc = irq_desc + i;
+               desc->status |= IRQ_LEVEL;
+               set_irq_flags(i, IRQF_VALID);
+       }
+       set_irq_chained_handler(IRQ_ORION5X_GPIO_0_7, orion5x_gpio_irq_handler);
+       set_irq_chained_handler(IRQ_ORION5X_GPIO_8_15, orion5x_gpio_irq_handler);
+       set_irq_chained_handler(IRQ_ORION5X_GPIO_16_23, orion5x_gpio_irq_handler);
+       set_irq_chained_handler(IRQ_ORION5X_GPIO_24_31, orion5x_gpio_irq_handler);
+}
+
+/*****************************************************************************
+ * Orion Main IRQ
+ ****************************************************************************/
+static void __init orion5x_init_main_irq(void)
+{
+       orion_irq_init(0, (void __iomem *)MAIN_IRQ_MASK);
+}
+
+void __init orion5x_init_irq(void)
+{
+       orion5x_init_main_irq();
+       orion5x_init_gpio_irq();
+}
diff --git a/arch/arm/mach-orion5x/kurobox_pro-setup.c b/arch/arm/mach-orion5x/kurobox_pro-setup.c
new file mode 100644 (file)
index 0000000..8ad4390
--- /dev/null
@@ -0,0 +1,243 @@
+/*
+ * arch/arm/mach-orion5x/kurobox_pro-setup.c
+ *
+ * Maintainer: Ronen Shitrit <rshitrit@marvell.com>
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2.  This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/platform_device.h>
+#include <linux/pci.h>
+#include <linux/irq.h>
+#include <linux/mtd/physmap.h>
+#include <linux/mtd/nand.h>
+#include <linux/mv643xx_eth.h>
+#include <linux/i2c.h>
+#include <linux/ata_platform.h>
+#include <asm/mach-types.h>
+#include <asm/gpio.h>
+#include <asm/mach/arch.h>
+#include <asm/mach/pci.h>
+#include <asm/arch/orion5x.h>
+#include <asm/plat-orion/orion_nand.h>
+#include "common.h"
+
+/*****************************************************************************
+ * KUROBOX-PRO Info
+ ****************************************************************************/
+
+/*
+ * 256K NOR flash Device bus boot chip select
+ */
+
+#define KUROBOX_PRO_NOR_BOOT_BASE      0xf4000000
+#define KUROBOX_PRO_NOR_BOOT_SIZE      SZ_256K
+
+/*
+ * 256M NAND flash on Device bus chip select 1
+ */
+
+#define KUROBOX_PRO_NAND_BASE          0xfc000000
+#define KUROBOX_PRO_NAND_SIZE          SZ_2M
+
+/*****************************************************************************
+ * 256MB NAND Flash on Device bus CS0
+ ****************************************************************************/
+
+static struct mtd_partition kurobox_pro_nand_parts[] = {
+       {
+               .name   = "uImage",
+               .offset = 0,
+               .size   = SZ_4M,
+       },
+       {
+               .name   = "rootfs",
+               .offset = SZ_4M,
+               .size   = SZ_64M,
+       },
+       {
+               .name   = "extra",
+               .offset = SZ_4M + SZ_64M,
+               .size   = SZ_256M - (SZ_4M + SZ_64M),
+       },
+};
+
+static struct resource kurobox_pro_nand_resource = {
+       .flags          = IORESOURCE_MEM,
+       .start          = KUROBOX_PRO_NAND_BASE,
+       .end            = KUROBOX_PRO_NAND_BASE + KUROBOX_PRO_NAND_SIZE - 1,
+};
+
+static struct orion_nand_data kurobox_pro_nand_data = {
+       .parts          = kurobox_pro_nand_parts,
+       .nr_parts       = ARRAY_SIZE(kurobox_pro_nand_parts),
+       .cle            = 0,
+       .ale            = 1,
+       .width          = 8,
+};
+
+static struct platform_device kurobox_pro_nand_flash = {
+       .name           = "orion_nand",
+       .id             = -1,
+       .dev            = {
+               .platform_data  = &kurobox_pro_nand_data,
+       },
+       .resource       = &kurobox_pro_nand_resource,
+       .num_resources  = 1,
+};
+
+/*****************************************************************************
+ * 256KB NOR Flash on BOOT Device
+ ****************************************************************************/
+
+static struct physmap_flash_data kurobox_pro_nor_flash_data = {
+       .width          = 1,
+};
+
+static struct resource kurobox_pro_nor_flash_resource = {
+       .flags                  = IORESOURCE_MEM,
+       .start                  = KUROBOX_PRO_NOR_BOOT_BASE,
+       .end                    = KUROBOX_PRO_NOR_BOOT_BASE + KUROBOX_PRO_NOR_BOOT_SIZE - 1,
+};
+
+static struct platform_device kurobox_pro_nor_flash = {
+       .name                   = "physmap-flash",
+       .id                     = 0,
+       .dev            = {
+               .platform_data  = &kurobox_pro_nor_flash_data,
+       },
+       .num_resources          = 1,
+       .resource               = &kurobox_pro_nor_flash_resource,
+};
+
+/*****************************************************************************
+ * PCI
+ ****************************************************************************/
+
+static int __init kurobox_pro_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
+{
+       /*
+        * PCI isn't used on the Kuro
+        */
+       if (dev->bus->number == orion5x_pcie_local_bus_nr())
+               return IRQ_ORION5X_PCIE0_INT;
+       else
+               printk(KERN_ERR "kurobox_pro_pci_map_irq failed, unknown bus\n");
+
+       return -1;
+}
+
+static struct hw_pci kurobox_pro_pci __initdata = {
+       .nr_controllers = 1,
+       .swizzle        = pci_std_swizzle,
+       .setup          = orion5x_pci_sys_setup,
+       .scan           = orion5x_pci_sys_scan_bus,
+       .map_irq        = kurobox_pro_pci_map_irq,
+};
+
+static int __init kurobox_pro_pci_init(void)
+{
+       if (machine_is_kurobox_pro())
+               pci_common_init(&kurobox_pro_pci);
+
+       return 0;
+}
+
+subsys_initcall(kurobox_pro_pci_init);
+
+/*****************************************************************************
+ * Ethernet
+ ****************************************************************************/
+
+static struct mv643xx_eth_platform_data kurobox_pro_eth_data = {
+       .phy_addr       = 8,
+       .force_phy_addr = 1,
+};
+
+/*****************************************************************************
+ * RTC 5C372a on I2C bus
+ ****************************************************************************/
+static struct i2c_board_info __initdata kurobox_pro_i2c_rtc = {
+       .driver_name    = "rtc-rs5c372",
+       .type           = "rs5c372a",
+       .addr           = 0x32,
+};
+
+/*****************************************************************************
+ * SATA
+ ****************************************************************************/
+static struct mv_sata_platform_data kurobox_pro_sata_data = {
+       .n_ports        = 2,
+};
+
+/*****************************************************************************
+ * General Setup
+ ****************************************************************************/
+
+static struct platform_device *kurobox_pro_devices[] __initdata = {
+       &kurobox_pro_nor_flash,
+       &kurobox_pro_nand_flash,
+};
+
+static void __init kurobox_pro_init(void)
+{
+       /*
+        * Setup basic Orion functions. Need to be called early.
+        */
+       orion5x_init();
+
+       /*
+        * Setup the CPU address decode windows for our devices
+        */
+       orion5x_setup_dev_boot_win(KUROBOX_PRO_NOR_BOOT_BASE,
+                               KUROBOX_PRO_NOR_BOOT_SIZE);
+       orion5x_setup_dev0_win(KUROBOX_PRO_NAND_BASE, KUROBOX_PRO_NAND_SIZE);
+
+       /*
+        * Open a special address decode windows for the PCIE WA.
+        */
+       orion5x_setup_pcie_wa_win(ORION5X_PCIE_WA_PHYS_BASE,
+                               ORION5X_PCIE_WA_SIZE);
+
+       /*
+        * Setup Multiplexing Pins --
+        * MPP[0-1] Not used
+        * MPP[2] GPIO Micon
+        * MPP[3] GPIO RTC
+        * MPP[4-5] Not used
+        * MPP[6] Nand Flash REn
+        * MPP[7] Nand Flash WEn
+        * MPP[8-11] Not used
+        * MPP[12] SATA 0 presence Indication
+        * MPP[13] SATA 1 presence Indication
+        * MPP[14] SATA 0 active Indication
+        * MPP[15] SATA 1 active indication
+        * MPP[16-19] Not used
+        */
+       orion5x_write(MPP_0_7_CTRL, 0x44220003);
+       orion5x_write(MPP_8_15_CTRL, 0x55550000);
+       orion5x_write(MPP_16_19_CTRL, 0x0);
+
+       orion5x_gpio_set_valid_pins(0x0000000c);
+
+       platform_add_devices(kurobox_pro_devices, ARRAY_SIZE(kurobox_pro_devices));
+       i2c_register_board_info(0, &kurobox_pro_i2c_rtc, 1);
+       orion5x_eth_init(&kurobox_pro_eth_data);
+       orion5x_sata_init(&kurobox_pro_sata_data);
+}
+
+MACHINE_START(KUROBOX_PRO, "Buffalo/Revogear Kurobox Pro")
+       /* Maintainer: Ronen Shitrit <rshitrit@marvell.com> */
+       .phys_io        = ORION5X_REGS_PHYS_BASE,
+       .io_pg_offst    = ((ORION5X_REGS_VIRT_BASE) >> 18) & 0xFFFC,
+       .boot_params    = 0x00000100,
+       .init_machine   = kurobox_pro_init,
+       .map_io         = orion5x_map_io,
+       .init_irq       = orion5x_init_irq,
+       .timer          = &orion5x_timer,
+       .fixup          = tag_fixup_mem32,
+MACHINE_END
diff --git a/arch/arm/mach-orion5x/pci.c b/arch/arm/mach-orion5x/pci.c
new file mode 100644 (file)
index 0000000..27b4afc
--- /dev/null
@@ -0,0 +1,559 @@
+/*
+ * arch/arm/mach-orion5x/pci.c
+ *
+ * PCI and PCIe functions for Marvell Orion System On Chip
+ *
+ * Maintainer: Tzachi Perelstein <tzachi@marvell.com>
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2.  This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+
+#include <linux/kernel.h>
+#include <linux/pci.h>
+#include <linux/mbus.h>
+#include <asm/mach/pci.h>
+#include <asm/plat-orion/pcie.h>
+#include "common.h"
+
+/*****************************************************************************
+ * Orion has one PCIe controller and one PCI controller.
+ *
+ * Note1: The local PCIe bus number is '0'. The local PCI bus number
+ * follows the scanned PCIe bridged busses, if any.
+ *
+ * Note2: It is possible for PCI/PCIe agents to access many subsystem's
+ * space, by configuring BARs and Address Decode Windows, e.g. flashes on
+ * device bus, Orion registers, etc. However this code only enable the
+ * access to DDR banks.
+ ****************************************************************************/
+
+
+/*****************************************************************************
+ * PCIe controller
+ ****************************************************************************/
+#define PCIE_BASE      ((void __iomem *)ORION5X_PCIE_VIRT_BASE)
+
+void __init orion5x_pcie_id(u32 *dev, u32 *rev)
+{
+       *dev = orion_pcie_dev_id(PCIE_BASE);
+       *rev = orion_pcie_rev(PCIE_BASE);
+}
+
+int orion5x_pcie_local_bus_nr(void)
+{
+       return orion_pcie_get_local_bus_nr(PCIE_BASE);
+}
+
+static int pcie_valid_config(int bus, int dev)
+{
+       /*
+        * Don't go out when trying to access --
+        * 1. nonexisting device on local bus
+        * 2. where there's no device connected (no link)
+        */
+       if (bus == 0 && dev == 0)
+               return 1;
+
+       if (!orion_pcie_link_up(PCIE_BASE))
+               return 0;
+
+       if (bus == 0 && dev != 1)
+               return 0;
+
+       return 1;
+}
+
+
+/*
+ * PCIe config cycles are done by programming the PCIE_CONF_ADDR register
+ * and then reading the PCIE_CONF_DATA register. Need to make sure these
+ * transactions are atomic.
+ */
+static DEFINE_SPINLOCK(orion5x_pcie_lock);
+
+static int pcie_rd_conf(struct pci_bus *bus, u32 devfn, int where,
+                       int size, u32 *val)
+{
+       unsigned long flags;
+       int ret;
+
+       if (pcie_valid_config(bus->number, PCI_SLOT(devfn)) == 0) {
+               *val = 0xffffffff;
+               return PCIBIOS_DEVICE_NOT_FOUND;
+       }
+
+       spin_lock_irqsave(&orion5x_pcie_lock, flags);
+       ret = orion_pcie_rd_conf(PCIE_BASE, bus, devfn, where, size, val);
+       spin_unlock_irqrestore(&orion5x_pcie_lock, flags);
+
+       return ret;
+}
+
+static int pcie_rd_conf_wa(struct pci_bus *bus, u32 devfn,
+                          int where, int size, u32 *val)
+{
+       int ret;
+
+       if (pcie_valid_config(bus->number, PCI_SLOT(devfn)) == 0) {
+               *val = 0xffffffff;
+               return PCIBIOS_DEVICE_NOT_FOUND;
+       }
+
+       /*
+        * We only support access to the non-extended configuration
+        * space when using the WA access method (or we would have to
+        * sacrifice 256M of CPU virtual address space.)
+        */
+       if (where >= 0x100) {
+               *val = 0xffffffff;
+               return PCIBIOS_DEVICE_NOT_FOUND;
+       }
+
+       ret = orion_pcie_rd_conf_wa((void __iomem *)ORION5X_PCIE_WA_VIRT_BASE,
+                                   bus, devfn, where, size, val);
+
+       return ret;
+}
+
+static int pcie_wr_conf(struct pci_bus *bus, u32 devfn,
+                       int where, int size, u32 val)
+{
+       unsigned long flags;
+       int ret;
+
+       if (pcie_valid_config(bus->number, PCI_SLOT(devfn)) == 0)
+               return PCIBIOS_DEVICE_NOT_FOUND;
+
+       spin_lock_irqsave(&orion5x_pcie_lock, flags);
+       ret = orion_pcie_wr_conf(PCIE_BASE, bus, devfn, where, size, val);
+       spin_unlock_irqrestore(&orion5x_pcie_lock, flags);
+
+       return ret;
+}
+
+static struct pci_ops pcie_ops = {
+       .read = pcie_rd_conf,
+       .write = pcie_wr_conf,
+};
+
+
+static int __init pcie_setup(struct pci_sys_data *sys)
+{
+       struct resource *res;
+       int dev;
+
+       /*
+        * Generic PCIe unit setup.
+        */
+       orion_pcie_setup(PCIE_BASE, &orion5x_mbus_dram_info);
+
+       /*
+        * Check whether to apply Orion-1/Orion-NAS PCIe config
+        * read transaction workaround.
+        */
+       dev = orion_pcie_dev_id(PCIE_BASE);
+       if (dev == MV88F5181_DEV_ID || dev == MV88F5182_DEV_ID) {
+               printk(KERN_NOTICE "Applying Orion-1/Orion-NAS PCIe config "
+                                  "read transaction workaround\n");
+               pcie_ops.read = pcie_rd_conf_wa;
+       }
+
+       /*
+        * Request resources.
+        */
+       res = kzalloc(sizeof(struct resource) * 2, GFP_KERNEL);
+       if (!res)
+               panic("pcie_setup unable to alloc resources");
+
+       /*
+        * IORESOURCE_IO
+        */
+       res[0].name = "PCIe I/O Space";
+       res[0].flags = IORESOURCE_IO;
+       res[0].start = ORION5X_PCIE_IO_BUS_BASE;
+       res[0].end = res[0].start + ORION5X_PCIE_IO_SIZE - 1;
+       if (request_resource(&ioport_resource, &res[0]))
+               panic("Request PCIe IO resource failed\n");
+       sys->resource[0] = &res[0];
+
+       /*
+        * IORESOURCE_MEM
+        */
+       res[1].name = "PCIe Memory Space";
+       res[1].flags = IORESOURCE_MEM;
+       res[1].start = ORION5X_PCIE_MEM_PHYS_BASE;
+       res[1].end = res[1].start + ORION5X_PCIE_MEM_SIZE - 1;
+       if (request_resource(&iomem_resource, &res[1]))
+               panic("Request PCIe Memory resource failed\n");
+       sys->resource[1] = &res[1];
+
+       sys->resource[2] = NULL;
+       sys->io_offset = 0;
+
+       return 1;
+}
+
+/*****************************************************************************
+ * PCI controller
+ ****************************************************************************/
+#define PCI_MODE               ORION5X_PCI_REG(0xd00)
+#define PCI_CMD                        ORION5X_PCI_REG(0xc00)
+#define PCI_P2P_CONF           ORION5X_PCI_REG(0x1d14)
+#define PCI_CONF_ADDR          ORION5X_PCI_REG(0xc78)
+#define PCI_CONF_DATA          ORION5X_PCI_REG(0xc7c)
+
+/*
+ * PCI_MODE bits
+ */
+#define PCI_MODE_64BIT                 (1 << 2)
+#define PCI_MODE_PCIX                  ((1 << 4) | (1 << 5))
+
+/*
+ * PCI_CMD bits
+ */
+#define PCI_CMD_HOST_REORDER           (1 << 29)
+
+/*
+ * PCI_P2P_CONF bits
+ */
+#define PCI_P2P_BUS_OFFS               16
+#define PCI_P2P_BUS_MASK               (0xff << PCI_P2P_BUS_OFFS)
+#define PCI_P2P_DEV_OFFS               24
+#define PCI_P2P_DEV_MASK               (0x1f << PCI_P2P_DEV_OFFS)
+
+/*
+ * PCI_CONF_ADDR bits
+ */
+#define PCI_CONF_REG(reg)              ((reg) & 0xfc)
+#define PCI_CONF_FUNC(func)            (((func) & 0x3) << 8)
+#define PCI_CONF_DEV(dev)              (((dev) & 0x1f) << 11)
+#define PCI_CONF_BUS(bus)              (((bus) & 0xff) << 16)
+#define PCI_CONF_ADDR_EN               (1 << 31)
+
+/*
+ * Internal configuration space
+ */
+#define PCI_CONF_FUNC_STAT_CMD         0
+#define PCI_CONF_REG_STAT_CMD          4
+#define PCIX_STAT                      0x64
+#define PCIX_STAT_BUS_OFFS             8
+#define PCIX_STAT_BUS_MASK             (0xff << PCIX_STAT_BUS_OFFS)
+
+/*
+ * PCI Address Decode Windows registers
+ */
+#define PCI_BAR_SIZE_DDR_CS(n) (((n) == 0) ? ORION5X_PCI_REG(0xc08) : \
+                               ((n) == 1) ? ORION5X_PCI_REG(0xd08) :  \
+                               ((n) == 2) ? ORION5X_PCI_REG(0xc0c) :  \
+                               ((n) == 3) ? ORION5X_PCI_REG(0xd0c) : 0)
+#define PCI_BAR_REMAP_DDR_CS(n)        (((n) ==0) ? ORION5X_PCI_REG(0xc48) :  \
+                               ((n) == 1) ? ORION5X_PCI_REG(0xd48) :  \
+                               ((n) == 2) ? ORION5X_PCI_REG(0xc4c) :  \
+                               ((n) == 3) ? ORION5X_PCI_REG(0xd4c) : 0)
+#define PCI_BAR_ENABLE         ORION5X_PCI_REG(0xc3c)
+#define PCI_ADDR_DECODE_CTRL   ORION5X_PCI_REG(0xd3c)
+
+/*
+ * PCI configuration helpers for BAR settings
+ */
+#define PCI_CONF_FUNC_BAR_CS(n)                ((n) >> 1)
+#define PCI_CONF_REG_BAR_LO_CS(n)      (((n) & 1) ? 0x18 : 0x10)
+#define PCI_CONF_REG_BAR_HI_CS(n)      (((n) & 1) ? 0x1c : 0x14)
+
+/*
+ * PCI config cycles are done by programming the PCI_CONF_ADDR register
+ * and then reading the PCI_CONF_DATA register. Need to make sure these
+ * transactions are atomic.
+ */
+static DEFINE_SPINLOCK(orion5x_pci_lock);
+
+int orion5x_pci_local_bus_nr(void)
+{
+       u32 conf = orion5x_read(PCI_P2P_CONF);
+       return((conf & PCI_P2P_BUS_MASK) >> PCI_P2P_BUS_OFFS);
+}
+
+static int orion5x_pci_hw_rd_conf(int bus, int dev, u32 func,
+                                       u32 where, u32 size, u32 *val)
+{
+       unsigned long flags;
+       spin_lock_irqsave(&orion5x_pci_lock, flags);
+
+       orion5x_write(PCI_CONF_ADDR, PCI_CONF_BUS(bus) |
+                       PCI_CONF_DEV(dev) | PCI_CONF_REG(where) |
+                       PCI_CONF_FUNC(func) | PCI_CONF_ADDR_EN);
+
+       *val = orion5x_read(PCI_CONF_DATA);
+
+       if (size == 1)
+               *val = (*val >> (8*(where & 0x3))) & 0xff;
+       else if (size == 2)
+               *val = (*val >> (8*(where & 0x3))) & 0xffff;
+
+       spin_unlock_irqrestore(&orion5x_pci_lock, flags);
+
+       return PCIBIOS_SUCCESSFUL;
+}
+
+static int orion5x_pci_hw_wr_conf(int bus, int dev, u32 func,
+                                       u32 where, u32 size, u32 val)
+{
+       unsigned long flags;
+       int ret = PCIBIOS_SUCCESSFUL;
+
+       spin_lock_irqsave(&orion5x_pci_lock, flags);
+
+       orion5x_write(PCI_CONF_ADDR, PCI_CONF_BUS(bus) |
+                       PCI_CONF_DEV(dev) | PCI_CONF_REG(where) |
+                       PCI_CONF_FUNC(func) | PCI_CONF_ADDR_EN);
+
+       if (size == 4) {
+               __raw_writel(val, PCI_CONF_DATA);
+       } else if (size == 2) {
+               __raw_writew(val, PCI_CONF_DATA + (where & 0x3));
+       } else if (size == 1) {
+               __raw_writeb(val, PCI_CONF_DATA + (where & 0x3));
+       } else {
+               ret = PCIBIOS_BAD_REGISTER_NUMBER;
+       }
+
+       spin_unlock_irqrestore(&orion5x_pci_lock, flags);
+
+       return ret;
+}
+
+static int orion5x_pci_rd_conf(struct pci_bus *bus, u32 devfn,
+                               int where, int size, u32 *val)
+{
+       /*
+        * Don't go out for local device
+        */
+       if (bus->number == orion5x_pci_local_bus_nr() &&
+           PCI_SLOT(devfn) == 0 && PCI_FUNC(devfn) != 0) {
+               *val = 0xffffffff;
+               return PCIBIOS_DEVICE_NOT_FOUND;
+       }
+
+       return orion5x_pci_hw_rd_conf(bus->number, PCI_SLOT(devfn),
+                                       PCI_FUNC(devfn), where, size, val);
+}
+
+static int orion5x_pci_wr_conf(struct pci_bus *bus, u32 devfn,
+                               int where, int size, u32 val)
+{
+       if (bus->number == orion5x_pci_local_bus_nr() &&
+           PCI_SLOT(devfn) == 0 && PCI_FUNC(devfn) != 0)
+               return PCIBIOS_DEVICE_NOT_FOUND;
+
+       return orion5x_pci_hw_wr_conf(bus->number, PCI_SLOT(devfn),
+                                       PCI_FUNC(devfn), where, size, val);
+}
+
+static struct pci_ops pci_ops = {
+       .read = orion5x_pci_rd_conf,
+       .write = orion5x_pci_wr_conf,
+};
+
+static void __init orion5x_pci_set_bus_nr(int nr)
+{
+       u32 p2p = orion5x_read(PCI_P2P_CONF);
+
+       if (orion5x_read(PCI_MODE) & PCI_MODE_PCIX) {
+               /*
+                * PCI-X mode
+                */
+               u32 pcix_status, bus, dev;
+               bus = (p2p & PCI_P2P_BUS_MASK) >> PCI_P2P_BUS_OFFS;
+               dev = (p2p & PCI_P2P_DEV_MASK) >> PCI_P2P_DEV_OFFS;
+               orion5x_pci_hw_rd_conf(bus, dev, 0, PCIX_STAT, 4, &pcix_status);
+               pcix_status &= ~PCIX_STAT_BUS_MASK;
+               pcix_status |= (nr << PCIX_STAT_BUS_OFFS);
+               orion5x_pci_hw_wr_conf(bus, dev, 0, PCIX_STAT, 4, pcix_status);
+       } else {
+               /*
+                * PCI Conventional mode
+                */
+               p2p &= ~PCI_P2P_BUS_MASK;
+               p2p |= (nr << PCI_P2P_BUS_OFFS);
+               orion5x_write(PCI_P2P_CONF, p2p);
+       }
+}
+
+static void __init orion5x_pci_master_slave_enable(void)
+{
+       int bus_nr, func, reg;
+       u32 val;
+
+       bus_nr = orion5x_pci_local_bus_nr();
+       func = PCI_CONF_FUNC_STAT_CMD;
+       reg = PCI_CONF_REG_STAT_CMD;
+       orion5x_pci_hw_rd_conf(bus_nr, 0, func, reg, 4, &val);
+       val |= (PCI_COMMAND_IO | PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER);
+       orion5x_pci_hw_wr_conf(bus_nr, 0, func, reg, 4, val | 0x7);
+}
+
+static void __init orion5x_setup_pci_wins(struct mbus_dram_target_info *dram)
+{
+       u32 win_enable;
+       int bus;
+       int i;
+
+       /*
+        * First, disable windows.
+        */
+       win_enable = 0xffffffff;
+       orion5x_write(PCI_BAR_ENABLE, win_enable);
+
+       /*
+        * Setup windows for DDR banks.
+        */
+       bus = orion5x_pci_local_bus_nr();
+
+       for (i = 0; i < dram->num_cs; i++) {
+               struct mbus_dram_window *cs = dram->cs + i;
+               u32 func = PCI_CONF_FUNC_BAR_CS(cs->cs_index);
+               u32 reg;
+               u32 val;
+
+               /*
+                * Write DRAM bank base address register.
+                */
+               reg = PCI_CONF_REG_BAR_LO_CS(cs->cs_index);
+               orion5x_pci_hw_rd_conf(bus, 0, func, reg, 4, &val);
+               val = (cs->base & 0xfffff000) | (val & 0xfff);
+               orion5x_pci_hw_wr_conf(bus, 0, func, reg, 4, val);
+
+               /*
+                * Write DRAM bank size register.
+                */
+               reg = PCI_CONF_REG_BAR_HI_CS(cs->cs_index);
+               orion5x_pci_hw_wr_conf(bus, 0, func, reg, 4, 0);
+               orion5x_write(PCI_BAR_SIZE_DDR_CS(cs->cs_index),
+                               (cs->size - 1) & 0xfffff000);
+               orion5x_write(PCI_BAR_REMAP_DDR_CS(cs->cs_index),
+                               cs->base & 0xfffff000);
+
+               /*
+                * Enable decode window for this chip select.
+                */
+               win_enable &= ~(1 << cs->cs_index);
+       }
+
+       /*
+        * Re-enable decode windows.
+        */
+       orion5x_write(PCI_BAR_ENABLE, win_enable);
+
+       /*
+        * Disable automatic update of address remaping when writing to BARs.
+        */
+       orion5x_setbits(PCI_ADDR_DECODE_CTRL, 1);
+}
+
+static int __init pci_setup(struct pci_sys_data *sys)
+{
+       struct resource *res;
+
+       /*
+        * Point PCI unit MBUS decode windows to DRAM space.
+        */
+       orion5x_setup_pci_wins(&orion5x_mbus_dram_info);
+
+       /*
+        * Master + Slave enable
+        */
+       orion5x_pci_master_slave_enable();
+
+       /*
+        * Force ordering
+        */
+       orion5x_setbits(PCI_CMD, PCI_CMD_HOST_REORDER);
+
+       /*
+        * Request resources
+        */
+       res = kzalloc(sizeof(struct resource) * 2, GFP_KERNEL);
+       if (!res)
+               panic("pci_setup unable to alloc resources");
+
+       /*
+        * IORESOURCE_IO
+        */
+       res[0].name = "PCI I/O Space";
+       res[0].flags = IORESOURCE_IO;
+       res[0].start = ORION5X_PCI_IO_BUS_BASE;
+       res[0].end = res[0].start + ORION5X_PCI_IO_SIZE - 1;
+       if (request_resource(&ioport_resource, &res[0]))
+               panic("Request PCI IO resource failed\n");
+       sys->resource[0] = &res[0];
+
+       /*
+        * IORESOURCE_MEM
+        */
+       res[1].name = "PCI Memory Space";
+       res[1].flags = IORESOURCE_MEM;
+       res[1].start = ORION5X_PCI_MEM_PHYS_BASE;
+       res[1].end = res[1].start + ORION5X_PCI_MEM_SIZE - 1;
+       if (request_resource(&iomem_resource, &res[1]))
+               panic("Request PCI Memory resource failed\n");
+       sys->resource[1] = &res[1];
+
+       sys->resource[2] = NULL;
+       sys->io_offset = 0;
+
+       return 1;
+}
+
+
+/*****************************************************************************
+ * General PCIe + PCI
+ ****************************************************************************/
+static void __devinit rc_pci_fixup(struct pci_dev *dev)
+{
+       /*
+        * Prevent enumeration of root complex.
+        */
+       if (dev->bus->parent == NULL && dev->devfn == 0) {
+               int i;
+
+               for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) {
+                       dev->resource[i].start = 0;
+                       dev->resource[i].end   = 0;
+                       dev->resource[i].flags = 0;
+               }
+       }
+}
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_MARVELL, PCI_ANY_ID, rc_pci_fixup);
+
+int __init orion5x_pci_sys_setup(int nr, struct pci_sys_data *sys)
+{
+       int ret = 0;
+
+       if (nr == 0) {
+               orion_pcie_set_local_bus_nr(PCIE_BASE, sys->busnr);
+               ret = pcie_setup(sys);
+       } else if (nr == 1) {
+               orion5x_pci_set_bus_nr(sys->busnr);
+               ret = pci_setup(sys);
+       }
+
+       return ret;
+}
+
+struct pci_bus __init *orion5x_pci_sys_scan_bus(int nr, struct pci_sys_data *sys)
+{
+       struct pci_bus *bus;
+
+       if (nr == 0) {
+               bus = pci_scan_bus(sys->busnr, &pcie_ops, sys);
+       } else if (nr == 1) {
+               bus = pci_scan_bus(sys->busnr, &pci_ops, sys);
+       } else {
+               bus = NULL;
+               BUG();
+       }
+
+       return bus;
+}
diff --git a/arch/arm/mach-orion5x/rd88f5182-setup.c b/arch/arm/mach-orion5x/rd88f5182-setup.c
new file mode 100644 (file)
index 0000000..37e8b2d
--- /dev/null
@@ -0,0 +1,312 @@
+/*
+ * arch/arm/mach-orion5x/rd88f5182-setup.c
+ *
+ * Marvell Orion-NAS Reference Design Setup
+ *
+ * Maintainer: Ronen Shitrit <rshitrit@marvell.com>
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2.  This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/platform_device.h>
+#include <linux/pci.h>
+#include <linux/irq.h>
+#include <linux/mtd/physmap.h>
+#include <linux/mv643xx_eth.h>
+#include <linux/ata_platform.h>
+#include <linux/i2c.h>
+#include <asm/mach-types.h>
+#include <asm/gpio.h>
+#include <asm/leds.h>
+#include <asm/mach/arch.h>
+#include <asm/mach/pci.h>
+#include <asm/arch/orion5x.h>
+#include "common.h"
+
+/*****************************************************************************
+ * RD-88F5182 Info
+ ****************************************************************************/
+
+/*
+ * 512K NOR flash Device bus boot chip select
+ */
+
+#define RD88F5182_NOR_BOOT_BASE                0xf4000000
+#define RD88F5182_NOR_BOOT_SIZE                SZ_512K
+
+/*
+ * 16M NOR flash on Device bus chip select 1
+ */
+
+#define RD88F5182_NOR_BASE             0xfc000000
+#define RD88F5182_NOR_SIZE             SZ_16M
+
+/*
+ * PCI
+ */
+
+#define RD88F5182_PCI_SLOT0_OFFS       7
+#define RD88F5182_PCI_SLOT0_IRQ_A_PIN  7
+#define RD88F5182_PCI_SLOT0_IRQ_B_PIN  6
+
+/*
+ * GPIO Debug LED
+ */
+
+#define RD88F5182_GPIO_DBG_LED         0
+
+/*****************************************************************************
+ * 16M NOR Flash on Device bus CS1
+ ****************************************************************************/
+
+static struct physmap_flash_data rd88f5182_nor_flash_data = {
+       .width          = 1,
+};
+
+static struct resource rd88f5182_nor_flash_resource = {
+       .flags                  = IORESOURCE_MEM,
+       .start                  = RD88F5182_NOR_BASE,
+       .end                    = RD88F5182_NOR_BASE + RD88F5182_NOR_SIZE - 1,
+};
+
+static struct platform_device rd88f5182_nor_flash = {
+       .name                   = "physmap-flash",
+       .id                     = 0,
+       .dev            = {
+               .platform_data  = &rd88f5182_nor_flash_data,
+       },
+       .num_resources          = 1,
+       .resource               = &rd88f5182_nor_flash_resource,
+};
+
+#ifdef CONFIG_LEDS
+
+/*****************************************************************************
+ * Use GPIO debug led as CPU active indication
+ ****************************************************************************/
+
+static void rd88f5182_dbgled_event(led_event_t evt)
+{
+       int val;
+
+       if (evt == led_idle_end)
+               val = 1;
+       else if (evt == led_idle_start)
+               val = 0;
+       else
+               return;
+
+       gpio_set_value(RD88F5182_GPIO_DBG_LED, val);
+}
+
+static int __init rd88f5182_dbgled_init(void)
+{
+       int pin;
+
+       if (machine_is_rd88f5182()) {
+               pin = RD88F5182_GPIO_DBG_LED;
+
+               if (gpio_request(pin, "DBGLED") == 0) {
+                       if (gpio_direction_output(pin, 0) != 0) {
+                               printk(KERN_ERR "rd88f5182_dbgled_init failed "
+                                               "to set output pin %d\n", pin);
+                               gpio_free(pin);
+                               return 0;
+                       }
+               } else {
+                       printk(KERN_ERR "rd88f5182_dbgled_init failed "
+                                       "to request gpio %d\n", pin);
+                       return 0;
+               }
+
+               leds_event = rd88f5182_dbgled_event;
+       }
+       return 0;
+}
+
+__initcall(rd88f5182_dbgled_init);
+
+#endif
+
+/*****************************************************************************
+ * PCI
+ ****************************************************************************/
+
+void __init rd88f5182_pci_preinit(void)
+{
+       int pin;
+
+       /*
+        * Configure PCI GPIO IRQ pins
+        */
+       pin = RD88F5182_PCI_SLOT0_IRQ_A_PIN;
+       if (gpio_request(pin, "PCI IntA") == 0) {
+               if (gpio_direction_input(pin) == 0) {
+                       set_irq_type(gpio_to_irq(pin), IRQT_LOW);
+               } else {
+                       printk(KERN_ERR "rd88f5182_pci_preinit faield to "
+                                       "set_irq_type pin %d\n", pin);
+                       gpio_free(pin);
+               }
+       } else {
+               printk(KERN_ERR "rd88f5182_pci_preinit failed to request gpio %d\n", pin);
+       }
+
+       pin = RD88F5182_PCI_SLOT0_IRQ_B_PIN;
+       if (gpio_request(pin, "PCI IntB") == 0) {
+               if (gpio_direction_input(pin) == 0) {
+                       set_irq_type(gpio_to_irq(pin), IRQT_LOW);
+               } else {
+                       printk(KERN_ERR "rd88f5182_pci_preinit faield to "
+                                       "set_irq_type pin %d\n", pin);
+                       gpio_free(pin);
+               }
+       } else {
+               printk(KERN_ERR "rd88f5182_pci_preinit failed to gpio_request %d\n", pin);
+       }
+}
+
+static int __init rd88f5182_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
+{
+       /*
+        * PCI-E isn't used on the RD2
+        */
+       if (dev->bus->number == orion5x_pcie_local_bus_nr())
+               return IRQ_ORION5X_PCIE0_INT;
+
+       /*
+        * PCI IRQs are connected via GPIOs
+        */
+       switch (slot - RD88F5182_PCI_SLOT0_OFFS) {
+       case 0:
+               if (pin == 1)
+                       return gpio_to_irq(RD88F5182_PCI_SLOT0_IRQ_A_PIN);
+               else
+                       return gpio_to_irq(RD88F5182_PCI_SLOT0_IRQ_B_PIN);
+       default:
+               return -1;
+       }
+}
+
+static struct hw_pci rd88f5182_pci __initdata = {
+       .nr_controllers = 2,
+       .preinit        = rd88f5182_pci_preinit,
+       .swizzle        = pci_std_swizzle,
+       .setup          = orion5x_pci_sys_setup,
+       .scan           = orion5x_pci_sys_scan_bus,
+       .map_irq        = rd88f5182_pci_map_irq,
+};
+
+static int __init rd88f5182_pci_init(void)
+{
+       if (machine_is_rd88f5182())
+               pci_common_init(&rd88f5182_pci);
+
+       return 0;
+}
+
+subsys_initcall(rd88f5182_pci_init);
+
+/*****************************************************************************
+ * Ethernet
+ ****************************************************************************/
+
+static struct mv643xx_eth_platform_data rd88f5182_eth_data = {
+       .phy_addr       = 8,
+       .force_phy_addr = 1,
+};
+
+/*****************************************************************************
+ * RTC DS1338 on I2C bus
+ ****************************************************************************/
+static struct i2c_board_info __initdata rd88f5182_i2c_rtc = {
+       .driver_name    = "rtc-ds1307",
+       .type           = "ds1338",
+       .addr           = 0x68,
+};
+
+/*****************************************************************************
+ * Sata
+ ****************************************************************************/
+static struct mv_sata_platform_data rd88f5182_sata_data = {
+       .n_ports        = 2,
+};
+
+/*****************************************************************************
+ * General Setup
+ ****************************************************************************/
+
+static struct platform_device *rd88f5182_devices[] __initdata = {
+       &rd88f5182_nor_flash,
+};
+
+static void __init rd88f5182_init(void)
+{
+       /*
+        * Setup basic Orion functions. Need to be called early.
+        */
+       orion5x_init();
+
+       /*
+        * Setup the CPU address decode windows for our devices
+        */
+       orion5x_setup_dev_boot_win(RD88F5182_NOR_BOOT_BASE,
+                               RD88F5182_NOR_BOOT_SIZE);
+       orion5x_setup_dev1_win(RD88F5182_NOR_BASE, RD88F5182_NOR_SIZE);
+
+       /*
+        * Open a special address decode windows for the PCIE WA.
+        */
+       orion5x_setup_pcie_wa_win(ORION5X_PCIE_WA_PHYS_BASE,
+                               ORION5X_PCIE_WA_SIZE);
+
+       /*
+        * Setup Multiplexing Pins --
+        * MPP[0] Debug Led (GPIO - Out)
+        * MPP[1] Debug Led (GPIO - Out)
+        * MPP[2] N/A
+        * MPP[3] RTC_Int (GPIO - In)
+        * MPP[4] GPIO
+        * MPP[5] GPIO
+        * MPP[6] PCI_intA (GPIO - In)
+        * MPP[7] PCI_intB (GPIO - In)
+        * MPP[8-11] N/A
+        * MPP[12] SATA 0 presence Indication
+        * MPP[13] SATA 1 presence Indication
+        * MPP[14] SATA 0 active Indication
+        * MPP[15] SATA 1 active indication
+        * MPP[16-19] Not used
+        * MPP[20] PCI Clock to MV88F5182
+        * MPP[21] PCI Clock to mini PCI CON11
+        * MPP[22] USB 0 over current indication
+        * MPP[23] USB 1 over current indication
+        * MPP[24] USB 1 over current enable
+        * MPP[25] USB 0 over current enable
+        */
+
+       orion5x_write(MPP_0_7_CTRL, 0x00000003);
+       orion5x_write(MPP_8_15_CTRL, 0x55550000);
+       orion5x_write(MPP_16_19_CTRL, 0x5555);
+
+       orion5x_gpio_set_valid_pins(0x000000fb);
+
+       platform_add_devices(rd88f5182_devices, ARRAY_SIZE(rd88f5182_devices));
+       i2c_register_board_info(0, &rd88f5182_i2c_rtc, 1);
+       orion5x_eth_init(&rd88f5182_eth_data);
+       orion5x_sata_init(&rd88f5182_sata_data);
+}
+
+MACHINE_START(RD88F5182, "Marvell Orion-NAS Reference Design")
+       /* Maintainer: Ronen Shitrit <rshitrit@marvell.com> */
+       .phys_io        = ORION5X_REGS_PHYS_BASE,
+       .io_pg_offst    = ((ORION5X_REGS_VIRT_BASE) >> 18) & 0xFFFC,
+       .boot_params    = 0x00000100,
+       .init_machine   = rd88f5182_init,
+       .map_io         = orion5x_map_io,
+       .init_irq       = orion5x_init_irq,
+       .timer          = &orion5x_timer,
+MACHINE_END
diff --git a/arch/arm/mach-orion5x/ts209-setup.c b/arch/arm/mach-orion5x/ts209-setup.c
new file mode 100644 (file)
index 0000000..71b0cff
--- /dev/null
@@ -0,0 +1,359 @@
+/*
+ * QNAP TS-109/TS-209 Board Setup
+ *
+ * Maintainer: Byron Bradley <byron.bbradley@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ */
+
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/platform_device.h>
+#include <linux/pci.h>
+#include <linux/irq.h>
+#include <linux/mtd/physmap.h>
+#include <linux/mtd/nand.h>
+#include <linux/mv643xx_eth.h>
+#include <linux/gpio_keys.h>
+#include <linux/input.h>
+#include <linux/i2c.h>
+#include <linux/serial_reg.h>
+#include <linux/ata_platform.h>
+#include <asm/mach-types.h>
+#include <asm/gpio.h>
+#include <asm/mach/arch.h>
+#include <asm/mach/pci.h>
+#include <asm/arch/orion5x.h>
+#include "common.h"
+
+#define QNAP_TS209_NOR_BOOT_BASE 0xf4000000
+#define QNAP_TS209_NOR_BOOT_SIZE SZ_8M
+
+/****************************************************************************
+ * 8MiB NOR flash. The struct mtd_partition is not in the same order as the
+ *     partitions on the device because we want to keep compatability with
+ *     existing QNAP firmware.
+ *
+ * Layout as used by QNAP:
+ *  [2] 0x00000000-0x00200000 : "Kernel"
+ *  [3] 0x00200000-0x00600000 : "RootFS1"
+ *  [4] 0x00600000-0x00700000 : "RootFS2"
+ *  [6] 0x00700000-0x00760000 : "NAS Config" (read-only)
+ *  [5] 0x00760000-0x00780000 : "U-Boot Config"
+ *  [1] 0x00780000-0x00800000 : "U-Boot" (read-only)
+ ***************************************************************************/
+static struct mtd_partition qnap_ts209_partitions[] = {
+       {
+               .name       = "U-Boot",
+               .size       = 0x00080000,
+               .offset     = 0x00780000,
+               .mask_flags = MTD_WRITEABLE,
+       }, {
+               .name   = "Kernel",
+               .size   = 0x00200000,
+               .offset = 0,
+       }, {
+               .name   = "RootFS1",
+               .size   = 0x00400000,
+               .offset = 0x00200000,
+       }, {
+               .name   = "RootFS2",
+               .size   = 0x00100000,
+               .offset = 0x00600000,
+       }, {
+               .name   = "U-Boot Config",
+               .size   = 0x00020000,
+               .offset = 0x00760000,
+       }, {
+               .name       = "NAS Config",
+               .size       = 0x00060000,
+               .offset     = 0x00700000,
+               .mask_flags = MTD_WRITEABLE,
+       }
+};
+
+static struct physmap_flash_data qnap_ts209_nor_flash_data = {
+       .width    = 1,
+       .parts    = qnap_ts209_partitions,
+       .nr_parts = ARRAY_SIZE(qnap_ts209_partitions)
+};
+
+static struct resource qnap_ts209_nor_flash_resource = {
+       .flags = IORESOURCE_MEM,
+       .start = QNAP_TS209_NOR_BOOT_BASE,
+       .end   = QNAP_TS209_NOR_BOOT_BASE + QNAP_TS209_NOR_BOOT_SIZE - 1,
+};
+
+static struct platform_device qnap_ts209_nor_flash = {
+       .name          = "physmap-flash",
+       .id            = 0,
+       .dev           = { .platform_data = &qnap_ts209_nor_flash_data, },
+       .resource      = &qnap_ts209_nor_flash_resource,
+       .num_resources = 1,
+};
+
+/*****************************************************************************
+ * PCI
+ ****************************************************************************/
+
+#define QNAP_TS209_PCI_SLOT0_OFFS      7
+#define QNAP_TS209_PCI_SLOT0_IRQ_PIN   6
+#define QNAP_TS209_PCI_SLOT1_IRQ_PIN   7
+
+void __init qnap_ts209_pci_preinit(void)
+{
+       int pin;
+
+       /*
+        * Configure PCI GPIO IRQ pins
+        */
+       pin = QNAP_TS209_PCI_SLOT0_IRQ_PIN;
+       if (gpio_request(pin, "PCI Int1") == 0) {
+               if (gpio_direction_input(pin) == 0) {
+                       set_irq_type(gpio_to_irq(pin), IRQT_LOW);
+               } else {
+                       printk(KERN_ERR "qnap_ts209_pci_preinit failed to "
+                                       "set_irq_type pin %d\n", pin);
+                       gpio_free(pin);
+               }
+       } else {
+               printk(KERN_ERR "qnap_ts209_pci_preinit failed to gpio_request "
+                               "%d\n", pin);
+       }
+
+       pin = QNAP_TS209_PCI_SLOT1_IRQ_PIN;
+       if (gpio_request(pin, "PCI Int2") == 0) {
+               if (gpio_direction_input(pin) == 0) {
+                       set_irq_type(gpio_to_irq(pin), IRQT_LOW);
+               } else {
+                       printk(KERN_ERR "qnap_ts209_pci_preinit failed "
+                                       "to set_irq_type pin %d\n", pin);
+                       gpio_free(pin);
+               }
+       } else {
+               printk(KERN_ERR "qnap_ts209_pci_preinit failed to gpio_request "
+                               "%d\n", pin);
+       }
+}
+
+static int __init qnap_ts209_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
+{
+       /*
+        * PCIE IRQ is connected internally (not GPIO)
+        */
+       if (dev->bus->number == orion5x_pcie_local_bus_nr())
+               return IRQ_ORION5X_PCIE0_INT;
+
+       /*
+        * PCI IRQs are connected via GPIOs
+        */
+       switch (slot - QNAP_TS209_PCI_SLOT0_OFFS) {
+       case 0:
+               return gpio_to_irq(QNAP_TS209_PCI_SLOT0_IRQ_PIN);
+       case 1:
+               return gpio_to_irq(QNAP_TS209_PCI_SLOT1_IRQ_PIN);
+       default:
+               return -1;
+       }
+}
+
+static struct hw_pci qnap_ts209_pci __initdata = {
+       .nr_controllers = 2,
+       .preinit        = qnap_ts209_pci_preinit,
+       .swizzle        = pci_std_swizzle,
+       .setup          = orion5x_pci_sys_setup,
+       .scan           = orion5x_pci_sys_scan_bus,
+       .map_irq        = qnap_ts209_pci_map_irq,
+};
+
+static int __init qnap_ts209_pci_init(void)
+{
+       if (machine_is_ts_x09())
+               pci_common_init(&qnap_ts209_pci);
+
+       return 0;
+}
+
+subsys_initcall(qnap_ts209_pci_init);
+
+/*****************************************************************************
+ * Ethernet
+ ****************************************************************************/
+
+static struct mv643xx_eth_platform_data qnap_ts209_eth_data = {
+       .phy_addr       = 8,
+       .force_phy_addr = 1,
+};
+
+/*****************************************************************************
+ * RTC S35390A on I2C bus
+ ****************************************************************************/
+
+#define TS209_RTC_GPIO 3
+
+static struct i2c_board_info __initdata qnap_ts209_i2c_rtc = {
+       .driver_name = "rtc-s35390a",
+       .addr        = 0x30,
+       .irq         = 0,
+};
+
+/****************************************************************************
+ * GPIO Attached Keys
+ *     Power button is attached to the PIC microcontroller
+ ****************************************************************************/
+
+#define QNAP_TS209_GPIO_KEY_MEDIA      1
+#define QNAP_TS209_GPIO_KEY_RESET      2
+
+static struct gpio_keys_button qnap_ts209_buttons[] = {
+       {
+               .code           = KEY_RESTART,
+               .gpio           = QNAP_TS209_GPIO_KEY_MEDIA,
+               .desc           = "USB Copy Button",
+               .active_low     = 1,
+       },
+       {
+               .code           = KEY_POWER,
+               .gpio           = QNAP_TS209_GPIO_KEY_RESET,
+               .desc           = "Reset Button",
+               .active_low     = 1,
+       }
+};
+
+static struct gpio_keys_platform_data qnap_ts209_button_data = {
+       .buttons        = qnap_ts209_buttons,
+       .nbuttons       = ARRAY_SIZE(qnap_ts209_buttons),
+};
+
+static struct platform_device qnap_ts209_button_device = {
+       .name           = "gpio-keys",
+       .id             = -1,
+       .num_resources  = 0,
+       .dev            = { .platform_data  = &qnap_ts209_button_data, },
+};
+
+/*****************************************************************************
+ * SATA
+ ****************************************************************************/
+static struct mv_sata_platform_data qnap_ts209_sata_data = {
+       .n_ports        = 2,
+};
+
+/*****************************************************************************
+
+ * General Setup
+ ****************************************************************************/
+
+static struct platform_device *qnap_ts209_devices[] __initdata = {
+       &qnap_ts209_nor_flash,
+       &qnap_ts209_button_device,
+};
+
+/*
+ * QNAP TS-[12]09 specific power off method via UART1-attached PIC
+ */
+
+#define UART1_REG(x)  (UART1_VIRT_BASE + ((UART_##x) << 2))
+
+static void qnap_ts209_power_off(void)
+{
+       /* 19200 baud divisor */
+       const unsigned divisor = ((ORION5X_TCLK + (8 * 19200)) / (16 * 19200));
+
+       pr_info("%s: triggering power-off...\n", __func__);
+
+       /* hijack uart1 and reset into sane state (19200,8n1) */
+       orion5x_write(UART1_REG(LCR), 0x83);
+       orion5x_write(UART1_REG(DLL), divisor & 0xff);
+       orion5x_write(UART1_REG(DLM), (divisor >> 8) & 0xff);
+       orion5x_write(UART1_REG(LCR), 0x03);
+       orion5x_write(UART1_REG(IER), 0x00);
+       orion5x_write(UART1_REG(FCR), 0x00);
+       orion5x_write(UART1_REG(MCR), 0x00);
+
+       /* send the power-off command 'A' to PIC */
+       orion5x_write(UART1_REG(TX), 'A');
+}
+
+static void __init qnap_ts209_init(void)
+{
+       /*
+        * Setup basic Orion functions. Need to be called early.
+        */
+       orion5x_init();
+
+       /*
+        * Setup flash mapping
+        */
+       orion5x_setup_dev_boot_win(QNAP_TS209_NOR_BOOT_BASE,
+                           QNAP_TS209_NOR_BOOT_SIZE);
+
+       /*
+        * Open a special address decode windows for the PCIE WA.
+        */
+       orion5x_setup_pcie_wa_win(ORION5X_PCIE_WA_PHYS_BASE,
+                               ORION5X_PCIE_WA_SIZE);
+
+       /*
+        * Setup Multiplexing Pins --
+        * MPP[0] Reserved
+        * MPP[1] USB copy button (0 active)
+        * MPP[2] Load defaults button (0 active)
+        * MPP[3] GPIO RTC
+        * MPP[4-5] Reserved
+        * MPP[6] PCI Int A
+        * MPP[7] PCI Int B
+        * MPP[8-11] Reserved
+        * MPP[12] SATA 0 presence
+        * MPP[13] SATA 1 presence
+        * MPP[14] SATA 0 active
+        * MPP[15] SATA 1 active
+        * MPP[16] UART1 RXD
+        * MPP[17] UART1 TXD
+        * MPP[18] SW_RST (0 active)
+        * MPP[19] Reserved
+        * MPP[20] PCI clock 0
+        * MPP[21] PCI clock 1
+        * MPP[22] USB 0 over current
+        * MPP[23-25] Reserved
+        */
+       orion5x_write(MPP_0_7_CTRL, 0x3);
+       orion5x_write(MPP_8_15_CTRL, 0x55550000);
+       orion5x_write(MPP_16_19_CTRL, 0x5500);
+       orion5x_gpio_set_valid_pins(0x3cc0fff);
+
+       /* register ts209 specific power-off method */
+       pm_power_off = qnap_ts209_power_off;
+
+       platform_add_devices(qnap_ts209_devices,
+                               ARRAY_SIZE(qnap_ts209_devices));
+
+       /* Get RTC IRQ and register the chip */
+       if (gpio_request(TS209_RTC_GPIO, "rtc") == 0) {
+               if (gpio_direction_input(TS209_RTC_GPIO) == 0)
+                       qnap_ts209_i2c_rtc.irq = gpio_to_irq(TS209_RTC_GPIO);
+               else
+                       gpio_free(TS209_RTC_GPIO);
+       }
+       if (qnap_ts209_i2c_rtc.irq == 0)
+               pr_warning("qnap_ts209_init: failed to get RTC IRQ\n");
+       i2c_register_board_info(0, &qnap_ts209_i2c_rtc, 1);
+
+       orion5x_eth_init(&qnap_ts209_eth_data);
+       orion5x_sata_init(&qnap_ts209_sata_data);
+}
+
+MACHINE_START(TS209, "QNAP TS-109/TS-209")
+       /* Maintainer:  Byron Bradley <byron.bbradley@gmail.com> */
+       .phys_io        = ORION5X_REGS_PHYS_BASE,
+       .io_pg_offst    = ((ORION5X_REGS_VIRT_BASE) >> 18) & 0xFFFC,
+       .boot_params    = 0x00000100,
+       .init_machine   = qnap_ts209_init,
+       .map_io         = orion5x_map_io,
+       .init_irq       = orion5x_init_irq,
+       .timer          = &orion5x_timer,
+       .fixup          = tag_fixup_mem32,
+MACHINE_END
index 76348f060f27473b71c71de0086ff70cf6ad26d7..64d09244df46bfb42df0db0c89d60356dab20427 100644 (file)
@@ -345,7 +345,7 @@ config CPU_XSC3
 # Feroceon
 config CPU_FEROCEON
        bool
-       depends on ARCH_ORION
+       depends on ARCH_ORION5X
        default y
        select CPU_32v5
        select CPU_ABRT_EV5T
diff --git a/include/asm-arm/arch-orion/debug-macro.S b/include/asm-arm/arch-orion/debug-macro.S
deleted file mode 100644 (file)
index c847f8c..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * include/asm-arm/arch-orion/debug-macro.S
- *
- * Debugging macro include header
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
-*/
-
-#include <asm/arch/orion.h>
-
-       .macro  addruart,rx
-       mrc     p15, 0, \rx, c1, c0
-       tst     \rx, #1                                 @ MMU enabled?
-       ldreq   \rx, =ORION_REGS_PHYS_BASE
-       ldrne   \rx, =ORION_REGS_VIRT_BASE
-       orr     \rx, \rx, #0x00012000
-       .endm
-
-#define UART_SHIFT     2
-#include <asm/hardware/debug-8250.S>
diff --git a/include/asm-arm/arch-orion/dma.h b/include/asm-arm/arch-orion/dma.h
deleted file mode 100644 (file)
index 40a8c17..0000000
+++ /dev/null
@@ -1 +0,0 @@
-/* empty */
diff --git a/include/asm-arm/arch-orion/entry-macro.S b/include/asm-arm/arch-orion/entry-macro.S
deleted file mode 100644 (file)
index cda096b..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * include/asm-arm/arch-orion/entry-macro.S
- *
- * Low-level IRQ helper macros for Orion platforms
- *
- * This file is licensed under the terms of the GNU General Public
- * License version 2.  This program is licensed "as is" without any
- * warranty of any kind, whether express or implied.
- */
-
-#include <asm/arch/orion.h>
-
-       .macro  disable_fiq
-       .endm
-
-       .macro  arch_ret_to_user, tmp1, tmp2
-       .endm
-
-       .macro  get_irqnr_preamble, base, tmp
-       ldr     \base, =MAIN_IRQ_CAUSE
-       .endm
-
-       .macro  get_irqnr_and_base, irqnr, irqstat, base, tmp
-       ldr     \irqstat, [\base, #0]           @ main cause
-       ldr     \tmp, [\base, #(MAIN_IRQ_MASK - MAIN_IRQ_CAUSE)] @ main mask
-       mov     \irqnr, #0                      @ default irqnr
-       @ find cause bits that are unmasked
-       ands    \irqstat, \irqstat, \tmp        @ clear Z flag if any
-       clzne   \irqnr, \irqstat                @ calc irqnr
-       rsbne   \irqnr, \irqnr, #31
-       .endm
diff --git a/include/asm-arm/arch-orion/gpio.h b/include/asm-arm/arch-orion/gpio.h
deleted file mode 100644 (file)
index d66284f..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * include/asm-arm/arch-orion/gpio.h
- *
- * This file is licensed under the terms of the GNU General Public
- * License version 2. This program is licensed "as is" without any
- * warranty of any kind, whether express or implied.
- */
-
-extern int gpio_request(unsigned pin, const char *label);
-extern void gpio_free(unsigned pin);
-extern int gpio_direction_input(unsigned pin);
-extern int gpio_direction_output(unsigned pin, int value);
-extern int gpio_get_value(unsigned pin);
-extern void gpio_set_value(unsigned pin, int value);
-extern void orion_gpio_set_blink(unsigned pin, int blink);
-extern void gpio_display(void);                /* debug */
-
-static inline int gpio_to_irq(int pin)
-{
-       return pin + IRQ_ORION_GPIO_START;
-}
-
-static inline int irq_to_gpio(int irq)
-{
-       return irq - IRQ_ORION_GPIO_START;
-}
-
-#include <asm-generic/gpio.h>          /* cansleep wrappers */
diff --git a/include/asm-arm/arch-orion/hardware.h b/include/asm-arm/arch-orion/hardware.h
deleted file mode 100644 (file)
index 998af60..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * include/asm-arm/arch-orion/hardware.h
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-#ifndef __ASM_ARCH_HARDWARE_H
-#define __ASM_ARCH_HARDWARE_H
-
-#include "orion.h"
-
-#define pcibios_assign_all_busses()    1
-
-#define PCIBIOS_MIN_IO         0x00001000
-#define PCIBIOS_MIN_MEM                0x01000000
-#define PCIMEM_BASE            ORION_PCIE_MEM_PHYS_BASE
-
-
-#endif
diff --git a/include/asm-arm/arch-orion/io.h b/include/asm-arm/arch-orion/io.h
deleted file mode 100644 (file)
index 2382015..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * include/asm-arm/arch-orion/io.h
- *
- * Tzachi Perelstein <tzachi@marvell.com>
- *
- * This file is licensed under the terms of the GNU General Public
- * License version 2.  This program is licensed "as is" without any
- * warranty of any kind, whether express or implied.
- */
-
-#ifndef __ASM_ARCH_IO_H
-#define __ASM_ARCH_IO_H
-
-#include "orion.h"
-
-#define IO_SPACE_LIMIT         0xffffffff
-#define IO_SPACE_REMAP         ORION_PCI_SYS_IO_BASE
-
-static inline void __iomem *
-__arch_ioremap(unsigned long paddr, size_t size, unsigned int mtype)
-{
-       void __iomem *retval;
-
-       if (mtype == MT_DEVICE && size && paddr >= ORION_REGS_PHYS_BASE &&
-           paddr + size <= ORION_REGS_PHYS_BASE + ORION_REGS_SIZE) {
-               retval = (void __iomem *)ORION_REGS_VIRT_BASE +
-                               (paddr - ORION_REGS_PHYS_BASE);
-       } else {
-               retval = __arm_ioremap(paddr, size, mtype);
-       }
-
-       return retval;
-}
-
-static inline void
-__arch_iounmap(void __iomem *addr)
-{
-       if (addr < (void __iomem *)ORION_REGS_VIRT_BASE ||
-           addr >= (void __iomem *)(ORION_REGS_VIRT_BASE + ORION_REGS_SIZE))
-               __iounmap(addr);
-}
-
-static inline void __iomem *__io(unsigned long addr)
-{
-       return (void __iomem *)addr;
-}
-
-#define __arch_ioremap(p, s, m)        __arch_ioremap(p, s, m)
-#define __arch_iounmap(a)      __arch_iounmap(a)
-#define __io(a)                        __io(a)
-#define __mem_pci(a)           (a)
-
-
-/*****************************************************************************
- * Helpers to access Orion registers
- ****************************************************************************/
-#define orion_read(r)          __raw_readl(r)
-#define orion_write(r, val)    __raw_writel(val, r)
-
-/*
- * These are not preempt-safe.  Locks, if needed, must be taken
- * care of by the caller.
- */
-#define orion_setbits(r, mask) orion_write((r), orion_read(r) | (mask))
-#define orion_clrbits(r, mask) orion_write((r), orion_read(r) & ~(mask))
-
-
-#endif
diff --git a/include/asm-arm/arch-orion/irqs.h b/include/asm-arm/arch-orion/irqs.h
deleted file mode 100644 (file)
index 70a2420..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * include/asm-arm/arch-orion/irqs.h
- *
- * IRQ definitions for Orion SoC
- *
- *  Maintainer: Tzachi Perelstein <tzachi@marvell.com>
- *
- *  This file is licensed under the terms of the GNU General Public
- *  License version 2. This program is licensed "as is" without any
- *  warranty of any kind, whether express or implied.
- */
-
-#ifndef __ASM_ARCH_IRQS_H
-#define __ASM_ARCH_IRQS_H
-
-#include "orion.h"     /* need GPIO_MAX */
-
-/*
- * Orion Main Interrupt Controller
- */
-#define IRQ_ORION_BRIDGE       0
-#define IRQ_ORION_DOORBELL_H2C 1
-#define IRQ_ORION_DOORBELL_C2H 2
-#define IRQ_ORION_UART0                3
-#define IRQ_ORION_UART1                4
-#define IRQ_ORION_I2C          5
-#define IRQ_ORION_GPIO_0_7     6
-#define IRQ_ORION_GPIO_8_15    7
-#define IRQ_ORION_GPIO_16_23   8
-#define IRQ_ORION_GPIO_24_31   9
-#define IRQ_ORION_PCIE0_ERR    10
-#define IRQ_ORION_PCIE0_INT    11
-#define IRQ_ORION_USB1_CTRL    12
-#define IRQ_ORION_DEV_BUS_ERR  14
-#define IRQ_ORION_PCI_ERR      15
-#define IRQ_ORION_USB_BR_ERR   16
-#define IRQ_ORION_USB0_CTRL    17
-#define IRQ_ORION_ETH_RX       18
-#define IRQ_ORION_ETH_TX       19
-#define IRQ_ORION_ETH_MISC     20
-#define IRQ_ORION_ETH_SUM      21
-#define IRQ_ORION_ETH_ERR      22
-#define IRQ_ORION_IDMA_ERR     23
-#define IRQ_ORION_IDMA_0       24
-#define IRQ_ORION_IDMA_1       25
-#define IRQ_ORION_IDMA_2       26
-#define IRQ_ORION_IDMA_3       27
-#define IRQ_ORION_CESA         28
-#define IRQ_ORION_SATA         29
-#define IRQ_ORION_XOR0         30
-#define IRQ_ORION_XOR1         31
-
-/*
- * Orion General Purpose Pins
- */
-#define IRQ_ORION_GPIO_START   32
-#define NR_GPIO_IRQS           GPIO_MAX
-
-#define NR_IRQS                        (IRQ_ORION_GPIO_START + NR_GPIO_IRQS)
-
-
-#endif
diff --git a/include/asm-arm/arch-orion/memory.h b/include/asm-arm/arch-orion/memory.h
deleted file mode 100644 (file)
index d9300d6..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- * include/asm-arm/arch-orion/memory.h
- *
- * Marvell Orion memory definitions
- */
-
-#ifndef __ASM_ARCH_MEMORY_H
-#define __ASM_ARCH_MEMORY_H
-
-#define PHYS_OFFSET    UL(0x00000000)
-
-#define __virt_to_bus(x)       __virt_to_phys(x)
-#define __bus_to_virt(x)       __phys_to_virt(x)
-
-
-#endif
diff --git a/include/asm-arm/arch-orion/orion.h b/include/asm-arm/arch-orion/orion.h
deleted file mode 100644 (file)
index 01f1299..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * include/asm-arm/arch-orion/orion.h
- *
- * Generic definitions of Orion SoC flavors:
- *  Orion-1, Orion-NAS, Orion-VoIP, and Orion-2.
- *
- * Maintainer: Tzachi Perelstein <tzachi@marvell.com>
- *
- * This file is licensed under the terms of the GNU General Public
- * License version 2. This program is licensed "as is" without any
- * warranty of any kind, whether express or implied.
- */
-
-#ifndef __ASM_ARCH_ORION_H
-#define __ASM_ARCH_ORION_H
-
-/*****************************************************************************
- * Orion Address Maps
- *
- * phys
- * e0000000    PCIe MEM space
- * e8000000    PCI MEM space
- * f0000000    PCIe WA space (Orion-1/Orion-NAS only)
- * f1000000    on-chip peripheral registers
- * f2000000    PCIe I/O space
- * f2100000    PCI I/O space
- * f4000000    device bus mappings (boot)
- * fa000000    device bus mappings (cs0)
- * fa800000    device bus mappings (cs2)
- * fc000000    device bus mappings (cs0/cs1)
- *
- * virt                phys            size
- * fdd00000    f1000000        1M      on-chip peripheral registers
- * fde00000    f2000000        1M      PCIe I/O space
- * fdf00000    f2100000        1M      PCI I/O space
- * fe000000    f0000000        16M     PCIe WA space (Orion-1/Orion-NAS only)
- ****************************************************************************/
-#define ORION_REGS_PHYS_BASE   0xf1000000
-#define ORION_REGS_VIRT_BASE   0xfdd00000
-#define ORION_REGS_SIZE                SZ_1M
-
-#define ORION_PCIE_IO_PHYS_BASE        0xf2000000
-#define ORION_PCIE_IO_VIRT_BASE        0xfde00000
-#define ORION_PCIE_IO_BUS_BASE 0x00000000
-#define ORION_PCIE_IO_SIZE     SZ_1M
-
-#define ORION_PCI_IO_PHYS_BASE 0xf2100000
-#define ORION_PCI_IO_VIRT_BASE 0xfdf00000
-#define ORION_PCI_IO_BUS_BASE  0x00100000
-#define ORION_PCI_IO_SIZE      SZ_1M
-
-/* Relevant only for Orion-1/Orion-NAS */
-#define ORION_PCIE_WA_PHYS_BASE        0xf0000000
-#define ORION_PCIE_WA_VIRT_BASE        0xfe000000
-#define ORION_PCIE_WA_SIZE     SZ_16M
-
-#define ORION_PCIE_MEM_PHYS_BASE       0xe0000000
-#define ORION_PCIE_MEM_SIZE            SZ_128M
-
-#define ORION_PCI_MEM_PHYS_BASE                0xe8000000
-#define ORION_PCI_MEM_SIZE             SZ_128M
-
-/*******************************************************************************
- * Supported Devices & Revisions
- ******************************************************************************/
-/* Orion-1 (88F5181) */
-#define MV88F5181_DEV_ID       0x5181
-#define MV88F5181_REV_B1       3
-/* Orion-NAS (88F5182) */
-#define MV88F5182_DEV_ID       0x5182
-#define MV88F5182_REV_A2       2
-/* Orion-2 (88F5281) */
-#define MV88F5281_DEV_ID       0x5281
-#define MV88F5281_REV_D1       5
-#define MV88F5281_REV_D2       6
-
-/*******************************************************************************
- * Orion Registers Map
- ******************************************************************************/
-#define ORION_DDR_VIRT_BASE            (ORION_REGS_VIRT_BASE | 0x00000)
-#define ORION_DDR_REG(x)               (ORION_DDR_VIRT_BASE | (x))
-
-#define ORION_DEV_BUS_PHYS_BASE                (ORION_REGS_PHYS_BASE | 0x10000)
-#define ORION_DEV_BUS_VIRT_BASE                (ORION_REGS_VIRT_BASE | 0x10000)
-#define ORION_DEV_BUS_REG(x)           (ORION_DEV_BUS_VIRT_BASE | (x))
-#define  I2C_PHYS_BASE                 (ORION_DEV_BUS_PHYS_BASE | 0x1000)
-#define  UART0_PHYS_BASE               (ORION_DEV_BUS_PHYS_BASE | 0x2000)
-#define  UART0_VIRT_BASE               (ORION_DEV_BUS_VIRT_BASE | 0x2000)
-#define  UART1_PHYS_BASE               (ORION_DEV_BUS_PHYS_BASE | 0x2100)
-#define  UART1_VIRT_BASE               (ORION_DEV_BUS_VIRT_BASE | 0x2100)
-
-#define ORION_BRIDGE_VIRT_BASE         (ORION_REGS_VIRT_BASE | 0x20000)
-#define ORION_BRIDGE_REG(x)            (ORION_BRIDGE_VIRT_BASE | (x))
-#define  TIMER_VIRT_BASE               (ORION_BRIDGE_VIRT_BASE | 0x300)
-
-#define ORION_PCI_VIRT_BASE            (ORION_REGS_VIRT_BASE | 0x30000)
-#define ORION_PCI_REG(x)               (ORION_PCI_VIRT_BASE | (x))
-
-#define ORION_PCIE_VIRT_BASE           (ORION_REGS_VIRT_BASE | 0x40000)
-#define ORION_PCIE_REG(x)              (ORION_PCIE_VIRT_BASE | (x))
-
-#define ORION_USB0_PHYS_BASE           (ORION_REGS_PHYS_BASE | 0x50000)
-#define ORION_USB0_VIRT_BASE           (ORION_REGS_VIRT_BASE | 0x50000)
-#define ORION_USB0_REG(x)              (ORION_USB0_VIRT_BASE | (x))
-
-#define ORION_ETH_PHYS_BASE            (ORION_REGS_PHYS_BASE | 0x70000)
-#define ORION_ETH_VIRT_BASE            (ORION_REGS_VIRT_BASE | 0x70000)
-#define ORION_ETH_REG(x)               (ORION_ETH_VIRT_BASE | (x))
-
-#define ORION_SATA_PHYS_BASE           (ORION_REGS_PHYS_BASE | 0x80000)
-#define ORION_SATA_VIRT_BASE           (ORION_REGS_VIRT_BASE | 0x80000)
-#define ORION_SATA_REG(x)              (ORION_SATA_VIRT_BASE | (x))
-
-#define ORION_USB1_PHYS_BASE           (ORION_REGS_PHYS_BASE | 0xa0000)
-#define ORION_USB1_VIRT_BASE           (ORION_REGS_VIRT_BASE | 0xa0000)
-#define ORION_USB1_REG(x)              (ORION_USB1_VIRT_BASE | (x))
-
-/*******************************************************************************
- * Device Bus Registers
- ******************************************************************************/
-#define MPP_0_7_CTRL           ORION_DEV_BUS_REG(0x000)
-#define MPP_8_15_CTRL          ORION_DEV_BUS_REG(0x004)
-#define MPP_16_19_CTRL         ORION_DEV_BUS_REG(0x050)
-#define MPP_DEV_CTRL           ORION_DEV_BUS_REG(0x008)
-#define MPP_RESET_SAMPLE       ORION_DEV_BUS_REG(0x010)
-#define GPIO_OUT               ORION_DEV_BUS_REG(0x100)
-#define GPIO_IO_CONF           ORION_DEV_BUS_REG(0x104)
-#define GPIO_BLINK_EN          ORION_DEV_BUS_REG(0x108)
-#define GPIO_IN_POL            ORION_DEV_BUS_REG(0x10c)
-#define GPIO_DATA_IN           ORION_DEV_BUS_REG(0x110)
-#define GPIO_EDGE_CAUSE                ORION_DEV_BUS_REG(0x114)
-#define GPIO_EDGE_MASK         ORION_DEV_BUS_REG(0x118)
-#define GPIO_LEVEL_MASK                ORION_DEV_BUS_REG(0x11c)
-#define DEV_BANK_0_PARAM       ORION_DEV_BUS_REG(0x45c)
-#define DEV_BANK_1_PARAM       ORION_DEV_BUS_REG(0x460)
-#define DEV_BANK_2_PARAM       ORION_DEV_BUS_REG(0x464)
-#define DEV_BANK_BOOT_PARAM    ORION_DEV_BUS_REG(0x46c)
-#define DEV_BUS_CTRL           ORION_DEV_BUS_REG(0x4c0)
-#define DEV_BUS_INT_CAUSE      ORION_DEV_BUS_REG(0x4d0)
-#define DEV_BUS_INT_MASK       ORION_DEV_BUS_REG(0x4d4)
-#define GPIO_MAX               32
-
-/***************************************************************************
- * Orion CPU Bridge Registers
- **************************************************************************/
-#define CPU_CONF               ORION_BRIDGE_REG(0x100)
-#define CPU_CTRL               ORION_BRIDGE_REG(0x104)
-#define CPU_RESET_MASK         ORION_BRIDGE_REG(0x108)
-#define CPU_SOFT_RESET         ORION_BRIDGE_REG(0x10c)
-#define POWER_MNG_CTRL_REG     ORION_BRIDGE_REG(0x11C)
-#define BRIDGE_CAUSE           ORION_BRIDGE_REG(0x110)
-#define BRIDGE_MASK            ORION_BRIDGE_REG(0x114)
-#define  BRIDGE_INT_TIMER0     0x0002
-#define  BRIDGE_INT_TIMER1     0x0004
-#define MAIN_IRQ_CAUSE         ORION_BRIDGE_REG(0x200)
-#define MAIN_IRQ_MASK          ORION_BRIDGE_REG(0x204)
-
-
-#endif
diff --git a/include/asm-arm/arch-orion/system.h b/include/asm-arm/arch-orion/system.h
deleted file mode 100644 (file)
index 653f992..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * include/asm-arm/arch-orion/system.h
- *
- * Tzachi Perelstein <tzachi@marvell.com>
- *
- * This file is licensed under the terms of the GNU General Public
- * License version 2.  This program is licensed "as is" without any
- * warranty of any kind, whether express or implied.
- */
-
-#ifndef __ASM_ARCH_SYSTEM_H
-#define __ASM_ARCH_SYSTEM_H
-
-#include <asm/arch/hardware.h>
-#include <asm/arch/orion.h>
-
-static inline void arch_idle(void)
-{
-       cpu_do_idle();
-}
-
-static inline void arch_reset(char mode)
-{
-       /*
-        * Enable and issue soft reset
-        */
-       orion_setbits(CPU_RESET_MASK, (1 << 2));
-       orion_setbits(CPU_SOFT_RESET, 1);
-}
-
-
-#endif
diff --git a/include/asm-arm/arch-orion/timex.h b/include/asm-arm/arch-orion/timex.h
deleted file mode 100644 (file)
index 85588d9..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- * include/asm-arm/arch-orion/timex.h
- *
- * Tzachi Perelstein <tzachi@marvell.com>
- *
- * This file is licensed under the terms of the GNU General Public
- * License version 2.  This program is licensed "as is" without any
- * warranty of any kind, whether express or implied.
- */
-
-#define CLOCK_TICK_RATE                (100 * HZ)
-
-#define ORION_TCLK             166666667
diff --git a/include/asm-arm/arch-orion/uncompress.h b/include/asm-arm/arch-orion/uncompress.h
deleted file mode 100644 (file)
index 03306cd..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * include/asm-arm/arch-orion/uncompress.h
- *
- * Tzachi Perelstein <tzachi@marvell.com>
- *
- * This file is licensed under the terms of the GNU General Public
- * License version 2.  This program is licensed "as is" without any
- * warranty of any kind, whether express or implied.
- */
-
-#include <asm/arch/orion.h>
-
-#define MV_UART_THR    ((volatile unsigned char *)(UART0_PHYS_BASE + 0x0))
-#define MV_UART_LSR    ((volatile unsigned char *)(UART0_PHYS_BASE + 0x14))
-
-#define LSR_THRE       0x20
-
-static void putc(const char c)
-{
-       int j = 0x1000;
-       while (--j && !(*MV_UART_LSR & LSR_THRE))
-               barrier();
-       *MV_UART_THR = c;
-}
-
-static void flush(void)
-{
-}
-
-/*
- * nothing to do
- */
-#define arch_decomp_setup()
-#define arch_decomp_wdog()
diff --git a/include/asm-arm/arch-orion/vmalloc.h b/include/asm-arm/arch-orion/vmalloc.h
deleted file mode 100644 (file)
index 9d58027..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
- * include/asm-arm/arch-orion/vmalloc.h
- */
-
-#define VMALLOC_END       0xfd800000
diff --git a/include/asm-arm/arch-orion5x/debug-macro.S b/include/asm-arm/arch-orion5x/debug-macro.S
new file mode 100644 (file)
index 0000000..4f98f3b
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ * include/asm-arm/arch-orion5x/debug-macro.S
+ *
+ * Debugging macro include header
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+*/
+
+#include <asm/arch/orion5x.h>
+
+       .macro  addruart,rx
+       mrc     p15, 0, \rx, c1, c0
+       tst     \rx, #1                                 @ MMU enabled?
+       ldreq   \rx, =ORION5X_REGS_PHYS_BASE
+       ldrne   \rx, =ORION5X_REGS_VIRT_BASE
+       orr     \rx, \rx, #0x00012000
+       .endm
+
+#define UART_SHIFT     2
+#include <asm/hardware/debug-8250.S>
diff --git a/include/asm-arm/arch-orion5x/dma.h b/include/asm-arm/arch-orion5x/dma.h
new file mode 100644 (file)
index 0000000..40a8c17
--- /dev/null
@@ -0,0 +1 @@
+/* empty */
diff --git a/include/asm-arm/arch-orion5x/entry-macro.S b/include/asm-arm/arch-orion5x/entry-macro.S
new file mode 100644 (file)
index 0000000..d8ef54c
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+ * include/asm-arm/arch-orion5x/entry-macro.S
+ *
+ * Low-level IRQ helper macros for Orion platforms
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2.  This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+
+#include <asm/arch/orion5x.h>
+
+       .macro  disable_fiq
+       .endm
+
+       .macro  arch_ret_to_user, tmp1, tmp2
+       .endm
+
+       .macro  get_irqnr_preamble, base, tmp
+       ldr     \base, =MAIN_IRQ_CAUSE
+       .endm
+
+       .macro  get_irqnr_and_base, irqnr, irqstat, base, tmp
+       ldr     \irqstat, [\base, #0]           @ main cause
+       ldr     \tmp, [\base, #(MAIN_IRQ_MASK - MAIN_IRQ_CAUSE)] @ main mask
+       mov     \irqnr, #0                      @ default irqnr
+       @ find cause bits that are unmasked
+       ands    \irqstat, \irqstat, \tmp        @ clear Z flag if any
+       clzne   \irqnr, \irqstat                @ calc irqnr
+       rsbne   \irqnr, \irqnr, #31
+       .endm
diff --git a/include/asm-arm/arch-orion5x/gpio.h b/include/asm-arm/arch-orion5x/gpio.h
new file mode 100644 (file)
index 0000000..c85e498
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ * include/asm-arm/arch-orion5x/gpio.h
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2. This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+
+extern int gpio_request(unsigned pin, const char *label);
+extern void gpio_free(unsigned pin);
+extern int gpio_direction_input(unsigned pin);
+extern int gpio_direction_output(unsigned pin, int value);
+extern int gpio_get_value(unsigned pin);
+extern void gpio_set_value(unsigned pin, int value);
+extern void orion5x_gpio_set_blink(unsigned pin, int blink);
+extern void gpio_display(void);                /* debug */
+
+static inline int gpio_to_irq(int pin)
+{
+       return pin + IRQ_ORION5X_GPIO_START;
+}
+
+static inline int irq_to_gpio(int irq)
+{
+       return irq - IRQ_ORION5X_GPIO_START;
+}
+
+#include <asm-generic/gpio.h>          /* cansleep wrappers */
diff --git a/include/asm-arm/arch-orion5x/hardware.h b/include/asm-arm/arch-orion5x/hardware.h
new file mode 100644 (file)
index 0000000..5d2d8e0
--- /dev/null
@@ -0,0 +1,21 @@
+/*
+ * include/asm-arm/arch-orion5x/hardware.h
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#ifndef __ASM_ARCH_HARDWARE_H
+#define __ASM_ARCH_HARDWARE_H
+
+#include "orion5x.h"
+
+#define pcibios_assign_all_busses()    1
+
+#define PCIBIOS_MIN_IO         0x00001000
+#define PCIBIOS_MIN_MEM                0x01000000
+#define PCIMEM_BASE            ORION5X_PCIE_MEM_PHYS_BASE
+
+
+#endif
diff --git a/include/asm-arm/arch-orion5x/io.h b/include/asm-arm/arch-orion5x/io.h
new file mode 100644 (file)
index 0000000..5148ab7
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+ * include/asm-arm/arch-orion5x/io.h
+ *
+ * Tzachi Perelstein <tzachi@marvell.com>
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2.  This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+
+#ifndef __ASM_ARCH_IO_H
+#define __ASM_ARCH_IO_H
+
+#include "orion5x.h"
+
+#define IO_SPACE_LIMIT         0xffffffff
+#define IO_SPACE_REMAP         ORION5X_PCI_SYS_IO_BASE
+
+static inline void __iomem *
+__arch_ioremap(unsigned long paddr, size_t size, unsigned int mtype)
+{
+       void __iomem *retval;
+
+       if (mtype == MT_DEVICE && size && paddr >= ORION5X_REGS_PHYS_BASE &&
+           paddr + size <= ORION5X_REGS_PHYS_BASE + ORION5X_REGS_SIZE) {
+               retval = (void __iomem *)ORION5X_REGS_VIRT_BASE +
+                               (paddr - ORION5X_REGS_PHYS_BASE);
+       } else {
+               retval = __arm_ioremap(paddr, size, mtype);
+       }
+
+       return retval;
+}
+
+static inline void
+__arch_iounmap(void __iomem *addr)
+{
+       if (addr < (void __iomem *)ORION5X_REGS_VIRT_BASE ||
+           addr >= (void __iomem *)(ORION5X_REGS_VIRT_BASE + ORION5X_REGS_SIZE))
+               __iounmap(addr);
+}
+
+static inline void __iomem *__io(unsigned long addr)
+{
+       return (void __iomem *)addr;
+}
+
+#define __arch_ioremap(p, s, m)        __arch_ioremap(p, s, m)
+#define __arch_iounmap(a)      __arch_iounmap(a)
+#define __io(a)                        __io(a)
+#define __mem_pci(a)           (a)
+
+
+/*****************************************************************************
+ * Helpers to access Orion registers
+ ****************************************************************************/
+#define orion5x_read(r)                __raw_readl(r)
+#define orion5x_write(r, val)  __raw_writel(val, r)
+
+/*
+ * These are not preempt-safe.  Locks, if needed, must be taken
+ * care of by the caller.
+ */
+#define orion5x_setbits(r, mask)       orion5x_write((r), orion5x_read(r) | (mask))
+#define orion5x_clrbits(r, mask)       orion5x_write((r), orion5x_read(r) & ~(mask))
+
+
+#endif
diff --git a/include/asm-arm/arch-orion5x/irqs.h b/include/asm-arm/arch-orion5x/irqs.h
new file mode 100644 (file)
index 0000000..abdd61a
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+ * include/asm-arm/arch-orion5x/irqs.h
+ *
+ * IRQ definitions for Orion SoC
+ *
+ *  Maintainer: Tzachi Perelstein <tzachi@marvell.com>
+ *
+ *  This file is licensed under the terms of the GNU General Public
+ *  License version 2. This program is licensed "as is" without any
+ *  warranty of any kind, whether express or implied.
+ */
+
+#ifndef __ASM_ARCH_IRQS_H
+#define __ASM_ARCH_IRQS_H
+
+#include "orion5x.h"   /* need GPIO_MAX */
+
+/*
+ * Orion Main Interrupt Controller
+ */
+#define IRQ_ORION5X_BRIDGE             0
+#define IRQ_ORION5X_DOORBELL_H2C       1
+#define IRQ_ORION5X_DOORBELL_C2H       2
+#define IRQ_ORION5X_UART0              3
+#define IRQ_ORION5X_UART1              4
+#define IRQ_ORION5X_I2C                        5
+#define IRQ_ORION5X_GPIO_0_7           6
+#define IRQ_ORION5X_GPIO_8_15          7
+#define IRQ_ORION5X_GPIO_16_23         8
+#define IRQ_ORION5X_GPIO_24_31         9
+#define IRQ_ORION5X_PCIE0_ERR          10
+#define IRQ_ORION5X_PCIE0_INT          11
+#define IRQ_ORION5X_USB1_CTRL          12
+#define IRQ_ORION5X_DEV_BUS_ERR                14
+#define IRQ_ORION5X_PCI_ERR            15
+#define IRQ_ORION5X_USB_BR_ERR         16
+#define IRQ_ORION5X_USB0_CTRL          17
+#define IRQ_ORION5X_ETH_RX             18
+#define IRQ_ORION5X_ETH_TX             19
+#define IRQ_ORION5X_ETH_MISC           20
+#define IRQ_ORION5X_ETH_SUM            21
+#define IRQ_ORION5X_ETH_ERR            22
+#define IRQ_ORION5X_IDMA_ERR           23
+#define IRQ_ORION5X_IDMA_0             24
+#define IRQ_ORION5X_IDMA_1             25
+#define IRQ_ORION5X_IDMA_2             26
+#define IRQ_ORION5X_IDMA_3             27
+#define IRQ_ORION5X_CESA               28
+#define IRQ_ORION5X_SATA               29
+#define IRQ_ORION5X_XOR0               30
+#define IRQ_ORION5X_XOR1               31
+
+/*
+ * Orion General Purpose Pins
+ */
+#define IRQ_ORION5X_GPIO_START 32
+#define NR_GPIO_IRQS           GPIO_MAX
+
+#define NR_IRQS                        (IRQ_ORION5X_GPIO_START + NR_GPIO_IRQS)
+
+
+#endif
diff --git a/include/asm-arm/arch-orion5x/memory.h b/include/asm-arm/arch-orion5x/memory.h
new file mode 100644 (file)
index 0000000..80053a7
--- /dev/null
@@ -0,0 +1,16 @@
+/*
+ * include/asm-arm/arch-orion5x/memory.h
+ *
+ * Marvell Orion memory definitions
+ */
+
+#ifndef __ASM_ARCH_MEMORY_H
+#define __ASM_ARCH_MEMORY_H
+
+#define PHYS_OFFSET    UL(0x00000000)
+
+#define __virt_to_bus(x)       __virt_to_phys(x)
+#define __bus_to_virt(x)       __phys_to_virt(x)
+
+
+#endif
diff --git a/include/asm-arm/arch-orion5x/orion5x.h b/include/asm-arm/arch-orion5x/orion5x.h
new file mode 100644 (file)
index 0000000..206ddd7
--- /dev/null
@@ -0,0 +1,159 @@
+/*
+ * include/asm-arm/arch-orion5x/orion5x.h
+ *
+ * Generic definitions of Orion SoC flavors:
+ *  Orion-1, Orion-NAS, Orion-VoIP, and Orion-2.
+ *
+ * Maintainer: Tzachi Perelstein <tzachi@marvell.com>
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2. This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+
+#ifndef __ASM_ARCH_ORION5X_H
+#define __ASM_ARCH_ORION5X_H
+
+/*****************************************************************************
+ * Orion Address Maps
+ *
+ * phys
+ * e0000000    PCIe MEM space
+ * e8000000    PCI MEM space
+ * f0000000    PCIe WA space (Orion-1/Orion-NAS only)
+ * f1000000    on-chip peripheral registers
+ * f2000000    PCIe I/O space
+ * f2100000    PCI I/O space
+ * f4000000    device bus mappings (boot)
+ * fa000000    device bus mappings (cs0)
+ * fa800000    device bus mappings (cs2)
+ * fc000000    device bus mappings (cs0/cs1)
+ *
+ * virt                phys            size
+ * fdd00000    f1000000        1M      on-chip peripheral registers
+ * fde00000    f2000000        1M      PCIe I/O space
+ * fdf00000    f2100000        1M      PCI I/O space
+ * fe000000    f0000000        16M     PCIe WA space (Orion-1/Orion-NAS only)
+ ****************************************************************************/
+#define ORION5X_REGS_PHYS_BASE         0xf1000000
+#define ORION5X_REGS_VIRT_BASE         0xfdd00000
+#define ORION5X_REGS_SIZE              SZ_1M
+
+#define ORION5X_PCIE_IO_PHYS_BASE      0xf2000000
+#define ORION5X_PCIE_IO_VIRT_BASE      0xfde00000
+#define ORION5X_PCIE_IO_BUS_BASE       0x00000000
+#define ORION5X_PCIE_IO_SIZE           SZ_1M
+
+#define ORION5X_PCI_IO_PHYS_BASE       0xf2100000
+#define ORION5X_PCI_IO_VIRT_BASE       0xfdf00000
+#define ORION5X_PCI_IO_BUS_BASE                0x00100000
+#define ORION5X_PCI_IO_SIZE            SZ_1M
+
+/* Relevant only for Orion-1/Orion-NAS */
+#define ORION5X_PCIE_WA_PHYS_BASE      0xf0000000
+#define ORION5X_PCIE_WA_VIRT_BASE      0xfe000000
+#define ORION5X_PCIE_WA_SIZE           SZ_16M
+
+#define ORION5X_PCIE_MEM_PHYS_BASE     0xe0000000
+#define ORION5X_PCIE_MEM_SIZE          SZ_128M
+
+#define ORION5X_PCI_MEM_PHYS_BASE      0xe8000000
+#define ORION5X_PCI_MEM_SIZE           SZ_128M
+
+/*******************************************************************************
+ * Supported Devices & Revisions
+ ******************************************************************************/
+/* Orion-1 (88F5181) */
+#define MV88F5181_DEV_ID       0x5181
+#define MV88F5181_REV_B1       3
+/* Orion-NAS (88F5182) */
+#define MV88F5182_DEV_ID       0x5182
+#define MV88F5182_REV_A2       2
+/* Orion-2 (88F5281) */
+#define MV88F5281_DEV_ID       0x5281
+#define MV88F5281_REV_D1       5
+#define MV88F5281_REV_D2       6
+
+/*******************************************************************************
+ * Orion Registers Map
+ ******************************************************************************/
+#define ORION5X_DDR_VIRT_BASE          (ORION5X_REGS_VIRT_BASE | 0x00000)
+#define ORION5X_DDR_REG(x)             (ORION5X_DDR_VIRT_BASE | (x))
+
+#define ORION5X_DEV_BUS_PHYS_BASE      (ORION5X_REGS_PHYS_BASE | 0x10000)
+#define ORION5X_DEV_BUS_VIRT_BASE      (ORION5X_REGS_VIRT_BASE | 0x10000)
+#define ORION5X_DEV_BUS_REG(x)         (ORION5X_DEV_BUS_VIRT_BASE | (x))
+#define  I2C_PHYS_BASE                 (ORION5X_DEV_BUS_PHYS_BASE | 0x1000)
+#define  UART0_PHYS_BASE               (ORION5X_DEV_BUS_PHYS_BASE | 0x2000)
+#define  UART0_VIRT_BASE               (ORION5X_DEV_BUS_VIRT_BASE | 0x2000)
+#define  UART1_PHYS_BASE               (ORION5X_DEV_BUS_PHYS_BASE | 0x2100)
+#define  UART1_VIRT_BASE               (ORION5X_DEV_BUS_VIRT_BASE | 0x2100)
+
+#define ORION5X_BRIDGE_VIRT_BASE       (ORION5X_REGS_VIRT_BASE | 0x20000)
+#define ORION5X_BRIDGE_REG(x)          (ORION5X_BRIDGE_VIRT_BASE | (x))
+#define  TIMER_VIRT_BASE               (ORION5X_BRIDGE_VIRT_BASE | 0x300)
+
+#define ORION5X_PCI_VIRT_BASE          (ORION5X_REGS_VIRT_BASE | 0x30000)
+#define ORION5X_PCI_REG(x)             (ORION5X_PCI_VIRT_BASE | (x))
+
+#define ORION5X_PCIE_VIRT_BASE         (ORION5X_REGS_VIRT_BASE | 0x40000)
+#define ORION5X_PCIE_REG(x)            (ORION5X_PCIE_VIRT_BASE | (x))
+
+#define ORION5X_USB0_PHYS_BASE         (ORION5X_REGS_PHYS_BASE | 0x50000)
+#define ORION5X_USB0_VIRT_BASE         (ORION5X_REGS_VIRT_BASE | 0x50000)
+#define ORION5X_USB0_REG(x)            (ORION5X_USB0_VIRT_BASE | (x))
+
+#define ORION5X_ETH_PHYS_BASE          (ORION5X_REGS_PHYS_BASE | 0x70000)
+#define ORION5X_ETH_VIRT_BASE          (ORION5X_REGS_VIRT_BASE | 0x70000)
+#define ORION5X_ETH_REG(x)             (ORION5X_ETH_VIRT_BASE | (x))
+
+#define ORION5X_SATA_PHYS_BASE         (ORION5X_REGS_PHYS_BASE | 0x80000)
+#define ORION5X_SATA_VIRT_BASE         (ORION5X_REGS_VIRT_BASE | 0x80000)
+#define ORION5X_SATA_REG(x)            (ORION5X_SATA_VIRT_BASE | (x))
+
+#define ORION5X_USB1_PHYS_BASE         (ORION5X_REGS_PHYS_BASE | 0xa0000)
+#define ORION5X_USB1_VIRT_BASE         (ORION5X_REGS_VIRT_BASE | 0xa0000)
+#define ORION5X_USB1_REG(x)            (ORION5X_USB1_VIRT_BASE | (x))
+
+/*******************************************************************************
+ * Device Bus Registers
+ ******************************************************************************/
+#define MPP_0_7_CTRL           ORION5X_DEV_BUS_REG(0x000)
+#define MPP_8_15_CTRL          ORION5X_DEV_BUS_REG(0x004)
+#define MPP_16_19_CTRL         ORION5X_DEV_BUS_REG(0x050)
+#define MPP_DEV_CTRL           ORION5X_DEV_BUS_REG(0x008)
+#define MPP_RESET_SAMPLE       ORION5X_DEV_BUS_REG(0x010)
+#define GPIO_OUT               ORION5X_DEV_BUS_REG(0x100)
+#define GPIO_IO_CONF           ORION5X_DEV_BUS_REG(0x104)
+#define GPIO_BLINK_EN          ORION5X_DEV_BUS_REG(0x108)
+#define GPIO_IN_POL            ORION5X_DEV_BUS_REG(0x10c)
+#define GPIO_DATA_IN           ORION5X_DEV_BUS_REG(0x110)
+#define GPIO_EDGE_CAUSE                ORION5X_DEV_BUS_REG(0x114)
+#define GPIO_EDGE_MASK         ORION5X_DEV_BUS_REG(0x118)
+#define GPIO_LEVEL_MASK                ORION5X_DEV_BUS_REG(0x11c)
+#define DEV_BANK_0_PARAM       ORION5X_DEV_BUS_REG(0x45c)
+#define DEV_BANK_1_PARAM       ORION5X_DEV_BUS_REG(0x460)
+#define DEV_BANK_2_PARAM       ORION5X_DEV_BUS_REG(0x464)
+#define DEV_BANK_BOOT_PARAM    ORION5X_DEV_BUS_REG(0x46c)
+#define DEV_BUS_CTRL           ORION5X_DEV_BUS_REG(0x4c0)
+#define DEV_BUS_INT_CAUSE      ORION5X_DEV_BUS_REG(0x4d0)
+#define DEV_BUS_INT_MASK       ORION5X_DEV_BUS_REG(0x4d4)
+#define GPIO_MAX               32
+
+/***************************************************************************
+ * Orion CPU Bridge Registers
+ **************************************************************************/
+#define CPU_CONF               ORION5X_BRIDGE_REG(0x100)
+#define CPU_CTRL               ORION5X_BRIDGE_REG(0x104)
+#define CPU_RESET_MASK         ORION5X_BRIDGE_REG(0x108)
+#define CPU_SOFT_RESET         ORION5X_BRIDGE_REG(0x10c)
+#define POWER_MNG_CTRL_REG     ORION5X_BRIDGE_REG(0x11C)
+#define BRIDGE_CAUSE           ORION5X_BRIDGE_REG(0x110)
+#define BRIDGE_MASK            ORION5X_BRIDGE_REG(0x114)
+#define  BRIDGE_INT_TIMER0     0x0002
+#define  BRIDGE_INT_TIMER1     0x0004
+#define MAIN_IRQ_CAUSE         ORION5X_BRIDGE_REG(0x200)
+#define MAIN_IRQ_MASK          ORION5X_BRIDGE_REG(0x204)
+
+
+#endif
diff --git a/include/asm-arm/arch-orion5x/system.h b/include/asm-arm/arch-orion5x/system.h
new file mode 100644 (file)
index 0000000..3f1d1e2
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * include/asm-arm/arch-orion5x/system.h
+ *
+ * Tzachi Perelstein <tzachi@marvell.com>
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2.  This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+
+#ifndef __ASM_ARCH_SYSTEM_H
+#define __ASM_ARCH_SYSTEM_H
+
+#include <asm/arch/hardware.h>
+#include <asm/arch/orion5x.h>
+
+static inline void arch_idle(void)
+{
+       cpu_do_idle();
+}
+
+static inline void arch_reset(char mode)
+{
+       /*
+        * Enable and issue soft reset
+        */
+       orion5x_setbits(CPU_RESET_MASK, (1 << 2));
+       orion5x_setbits(CPU_SOFT_RESET, 1);
+}
+
+
+#endif
diff --git a/include/asm-arm/arch-orion5x/timex.h b/include/asm-arm/arch-orion5x/timex.h
new file mode 100644 (file)
index 0000000..31c568e
--- /dev/null
@@ -0,0 +1,13 @@
+/*
+ * include/asm-arm/arch-orion5x/timex.h
+ *
+ * Tzachi Perelstein <tzachi@marvell.com>
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2.  This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+
+#define CLOCK_TICK_RATE                (100 * HZ)
+
+#define ORION5X_TCLK           166666667
diff --git a/include/asm-arm/arch-orion5x/uncompress.h b/include/asm-arm/arch-orion5x/uncompress.h
new file mode 100644 (file)
index 0000000..5c13d4f
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * include/asm-arm/arch-orion5x/uncompress.h
+ *
+ * Tzachi Perelstein <tzachi@marvell.com>
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2.  This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+
+#include <asm/arch/orion5x.h>
+
+#define MV_UART_THR    ((volatile unsigned char *)(UART0_PHYS_BASE + 0x0))
+#define MV_UART_LSR    ((volatile unsigned char *)(UART0_PHYS_BASE + 0x14))
+
+#define LSR_THRE       0x20
+
+static void putc(const char c)
+{
+       int j = 0x1000;
+       while (--j && !(*MV_UART_LSR & LSR_THRE))
+               barrier();
+       *MV_UART_THR = c;
+}
+
+static void flush(void)
+{
+}
+
+/*
+ * nothing to do
+ */
+#define arch_decomp_setup()
+#define arch_decomp_wdog()
diff --git a/include/asm-arm/arch-orion5x/vmalloc.h b/include/asm-arm/arch-orion5x/vmalloc.h
new file mode 100644 (file)
index 0000000..2b3061e
--- /dev/null
@@ -0,0 +1,5 @@
+/*
+ * include/asm-arm/arch-orion5x/vmalloc.h
+ */
+
+#define VMALLOC_END       0xfd800000