Merge branch 'devel' of git://git.kernel.org/pub/scm/linux/kernel/git/ycmiao/pxa-linux-2.6 into devel
This commit is contained in:
commit
9a38e989b8
16
MAINTAINERS
16
MAINTAINERS
|
@ -3543,6 +3543,22 @@ M: linux@arm.linux.org.uk
|
|||
L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
|
||||
S: Maintained
|
||||
|
||||
PXA168 SUPPORT
|
||||
P: Eric Miao
|
||||
M: eric.miao@marvell.com
|
||||
P: Jason Chagas
|
||||
M: jason.chagas@marvell.com
|
||||
L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
|
||||
T: git kernel.org:/pub/scm/linux/kernel/git/ycmiao/pxa-linux-2.6.git
|
||||
S: Supported
|
||||
|
||||
PXA910 SUPPORT
|
||||
P: Eric Miao
|
||||
M: eric.miao@marvell.com
|
||||
L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
|
||||
T: git kernel.org:/pub/scm/linux/kernel/git/ycmiao/pxa-linux-2.6.git
|
||||
S: Supported
|
||||
|
||||
PXA MMCI DRIVER
|
||||
S: Orphan
|
||||
|
||||
|
|
|
@ -478,12 +478,29 @@ config ARCH_PXA
|
|||
select HAVE_CLK
|
||||
select COMMON_CLKDEV
|
||||
select ARCH_REQUIRE_GPIOLIB
|
||||
select HAVE_CLK
|
||||
select COMMON_CLKDEV
|
||||
select GENERIC_TIME
|
||||
select GENERIC_CLOCKEVENTS
|
||||
select TICK_ONESHOT
|
||||
select PLAT_PXA
|
||||
help
|
||||
Support for Intel/Marvell's PXA2xx/PXA3xx processor line.
|
||||
|
||||
config ARCH_MMP
|
||||
bool "Marvell PXA168/910"
|
||||
depends on MMU
|
||||
select GENERIC_GPIO
|
||||
select ARCH_REQUIRE_GPIOLIB
|
||||
select HAVE_CLK
|
||||
select COMMON_CLKDEV
|
||||
select GENERIC_TIME
|
||||
select GENERIC_CLOCKEVENTS
|
||||
select TICK_ONESHOT
|
||||
select PLAT_PXA
|
||||
help
|
||||
Support for Marvell's PXA168/910 processor line.
|
||||
|
||||
config ARCH_RPC
|
||||
bool "RiscPC"
|
||||
select ARCH_ACORN
|
||||
|
@ -618,6 +635,9 @@ source "arch/arm/mach-loki/Kconfig"
|
|||
source "arch/arm/mach-mv78xx0/Kconfig"
|
||||
|
||||
source "arch/arm/mach-pxa/Kconfig"
|
||||
source "arch/arm/plat-pxa/Kconfig"
|
||||
|
||||
source "arch/arm/mach-mmp/Kconfig"
|
||||
|
||||
source "arch/arm/mach-sa1100/Kconfig"
|
||||
|
||||
|
@ -687,12 +707,15 @@ config PLAT_IOP
|
|||
config PLAT_ORION
|
||||
bool
|
||||
|
||||
config PLAT_PXA
|
||||
bool
|
||||
|
||||
source arch/arm/mm/Kconfig
|
||||
|
||||
config IWMMXT
|
||||
bool "Enable iWMMXt support"
|
||||
depends on CPU_XSCALE || CPU_XSC3
|
||||
default y if PXA27x || PXA3xx
|
||||
depends on CPU_XSCALE || CPU_XSC3 || CPU_MOHAWK
|
||||
default y if PXA27x || PXA3xx || ARCH_MMP
|
||||
help
|
||||
Enable support for iWMMXt context switching at run time if
|
||||
running on a CPU that supports it.
|
||||
|
|
|
@ -109,6 +109,8 @@ ifeq ($(CONFIG_ARCH_SA1100),y)
|
|||
textofs-$(CONFIG_SA1111) := 0x00208000
|
||||
endif
|
||||
machine-$(CONFIG_ARCH_PXA) := pxa
|
||||
machine-$(CONFIG_ARCH_MMP) := mmp
|
||||
plat-$(CONFIG_PLAT_PXA) := pxa
|
||||
machine-$(CONFIG_ARCH_L7200) := l7200
|
||||
machine-$(CONFIG_ARCH_INTEGRATOR) := integrator
|
||||
textofs-$(CONFIG_ARCH_CLPS711X) := 0x00028000
|
||||
|
|
|
@ -636,6 +636,18 @@ proc_types:
|
|||
b __armv4_mmu_cache_off
|
||||
b __armv4_mmu_cache_flush
|
||||
|
||||
.word 0x56158000 @ PXA168
|
||||
.word 0xfffff000
|
||||
b __armv4_mmu_cache_on
|
||||
b __armv4_mmu_cache_off
|
||||
b __armv5tej_mmu_cache_flush
|
||||
|
||||
.word 0x56056930
|
||||
.word 0xff0ffff0 @ PXA935
|
||||
b __armv4_mmu_cache_on
|
||||
b __armv4_mmu_cache_off
|
||||
b __armv4_mmu_cache_flush
|
||||
|
||||
.word 0x56050000 @ Feroceon
|
||||
.word 0xff0f0000
|
||||
b __armv4_mmu_cache_on
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,891 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.29-rc3
|
||||
# Fri Mar 20 13:43:13 2009
|
||||
#
|
||||
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_HAVE_LATENCYTOP_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_GENERIC_HARDIRQS_NO__DO_IRQ=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_AUDIT is not set
|
||||
|
||||
#
|
||||
# RCU Subsystem
|
||||
#
|
||||
CONFIG_CLASSIC_RCU=y
|
||||
# CONFIG_TREE_RCU is not set
|
||||
# CONFIG_PREEMPT_RCU is not set
|
||||
# CONFIG_TREE_RCU_TRACE is not set
|
||||
# CONFIG_PREEMPT_RCU_TRACE is not set
|
||||
# CONFIG_IKCONFIG is not set
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
# CONFIG_GROUP_SCHED is not set
|
||||
# CONFIG_CGROUPS is not set
|
||||
CONFIG_SYSFS_DEPRECATED=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
# CONFIG_RELAY is not set
|
||||
CONFIG_NAMESPACES=y
|
||||
# CONFIG_UTS_NS is not set
|
||||
# CONFIG_IPC_NS is not set
|
||||
# CONFIG_USER_NS is not set
|
||||
# CONFIG_PID_NS is not set
|
||||
# CONFIG_NET_NS is not set
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||
CONFIG_SYSCTL=y
|
||||
# CONFIG_EMBEDDED is not set
|
||||
CONFIG_UID16=y
|
||||
CONFIG_SYSCTL_SYSCALL=y
|
||||
CONFIG_KALLSYMS=y
|
||||
# CONFIG_KALLSYMS_ALL is not set
|
||||
# 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_AIO=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_HAVE_OPROFILE=y
|
||||
# CONFIG_KPROBES is not set
|
||||
CONFIG_HAVE_KPROBES=y
|
||||
CONFIG_HAVE_KRETPROBES=y
|
||||
CONFIG_HAVE_CLK=y
|
||||
CONFIG_HAVE_GENERIC_DMA_COHERENT=y
|
||||
CONFIG_SLABINFO=y
|
||||
CONFIG_RT_MUTEXES=y
|
||||
CONFIG_BASE_SMALL=0
|
||||
CONFIG_MODULES=y
|
||||
# CONFIG_MODULE_FORCE_LOAD is not set
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_MODULE_FORCE_UNLOAD=y
|
||||
# CONFIG_MODVERSIONS is not set
|
||||
# CONFIG_MODULE_SRCVERSION_ALL is not set
|
||||
CONFIG_BLOCK=y
|
||||
# CONFIG_LBD is not set
|
||||
# CONFIG_BLK_DEV_IO_TRACE is not set
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
# CONFIG_BLK_DEV_INTEGRITY 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_FREEZER 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_CLPS711X 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_KIRKWOOD is not set
|
||||
# CONFIG_ARCH_KS8695 is not set
|
||||
# CONFIG_ARCH_NS9XXX is not set
|
||||
# CONFIG_ARCH_LOKI is not set
|
||||
# CONFIG_ARCH_MV78XX0 is not set
|
||||
# CONFIG_ARCH_MXC is not set
|
||||
# CONFIG_ARCH_ORION5X is not set
|
||||
# CONFIG_ARCH_PNX4008 is not set
|
||||
# CONFIG_ARCH_PXA is not set
|
||||
CONFIG_ARCH_MMP=y
|
||||
# CONFIG_ARCH_RPC is not set
|
||||
# CONFIG_ARCH_SA1100 is not set
|
||||
# CONFIG_ARCH_S3C2410 is not set
|
||||
# CONFIG_ARCH_S3C64XX 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_MSM is not set
|
||||
# CONFIG_ARCH_W90X900 is not set
|
||||
# CONFIG_MACH_TAVOREVB is not set
|
||||
|
||||
#
|
||||
# Marvell PXA168/910 Implmentations
|
||||
#
|
||||
CONFIG_MACH_ASPENITE=y
|
||||
CONFIG_MACH_ZYLONITE2=y
|
||||
# CONFIG_MACH_TTC_DKB is not set
|
||||
CONFIG_CPU_PXA168=y
|
||||
CONFIG_PLAT_PXA=y
|
||||
|
||||
#
|
||||
# Processor Type
|
||||
#
|
||||
CONFIG_CPU_32=y
|
||||
CONFIG_CPU_MOHAWK=y
|
||||
CONFIG_CPU_32v5=y
|
||||
CONFIG_CPU_ABRT_EV5T=y
|
||||
CONFIG_CPU_PABRT_NOIFAR=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_BPREDICT_DISABLE is not set
|
||||
# CONFIG_OUTER_CACHE is not set
|
||||
CONFIG_IWMMXT=y
|
||||
CONFIG_COMMON_CLKDEV=y
|
||||
|
||||
#
|
||||
# Bus support
|
||||
#
|
||||
# CONFIG_PCI_SYSCALL is not set
|
||||
# CONFIG_ARCH_SUPPORTS_MSI is not set
|
||||
# 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_VMSPLIT_3G=y
|
||||
# CONFIG_VMSPLIT_2G is not set
|
||||
# CONFIG_VMSPLIT_1G is not set
|
||||
CONFIG_PAGE_OFFSET=0xC0000000
|
||||
CONFIG_PREEMPT=y
|
||||
CONFIG_HZ=100
|
||||
CONFIG_AEABI=y
|
||||
CONFIG_OABI_COMPAT=y
|
||||
CONFIG_ARCH_FLATMEM_HAS_HOLES=y
|
||||
# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
|
||||
# CONFIG_ARCH_SELECT_MEMORY_MODEL 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_PAGEFLAGS_EXTENDED=y
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4096
|
||||
# CONFIG_PHYS_ADDR_T_64BIT is not set
|
||||
CONFIG_ZONE_DMA_FLAG=0
|
||||
CONFIG_VIRT_TO_BUS=y
|
||||
CONFIG_UNEVICTABLE_LRU=y
|
||||
CONFIG_ALIGNMENT_TRAP=y
|
||||
|
||||
#
|
||||
# Boot options
|
||||
#
|
||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||
CONFIG_CMDLINE="root=/dev/nfs rootfstype=nfs nfsroot=192.168.2.100:/nfsroot/ ip=192.168.2.101:192.168.2.100::255.255.255.0::eth0:on console=ttyS0,115200 mem=128M"
|
||||
# CONFIG_XIP_KERNEL is not set
|
||||
# CONFIG_KEXEC is not set
|
||||
|
||||
#
|
||||
# CPU Power Management
|
||||
#
|
||||
# CONFIG_CPU_IDLE 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
|
||||
|
||||
#
|
||||
# Userspace binary formats
|
||||
#
|
||||
CONFIG_BINFMT_ELF=y
|
||||
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
|
||||
CONFIG_HAVE_AOUT=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
|
||||
CONFIG_NET=y
|
||||
|
||||
#
|
||||
# Networking options
|
||||
#
|
||||
CONFIG_COMPAT_NET_DEV_OPS=y
|
||||
CONFIG_PACKET=y
|
||||
# CONFIG_PACKET_MMAP is not set
|
||||
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 is not set
|
||||
# CONFIG_IP_ADVANCED_ROUTER is not set
|
||||
CONFIG_IP_FIB_HASH=y
|
||||
CONFIG_IP_PNP=y
|
||||
# CONFIG_IP_PNP_DHCP is not set
|
||||
# CONFIG_IP_PNP_BOOTP is not set
|
||||
# CONFIG_IP_PNP_RARP is not set
|
||||
# CONFIG_NET_IPIP is not set
|
||||
# CONFIG_NET_IPGRE 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_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_NET_DSA 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
|
||||
# CONFIG_DCB is not set
|
||||
|
||||
#
|
||||
# Network testing
|
||||
#
|
||||
# CONFIG_NET_PKTGEN is not set
|
||||
# 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
|
||||
# CONFIG_PHONET is not set
|
||||
CONFIG_WIRELESS=y
|
||||
# CONFIG_CFG80211 is not set
|
||||
CONFIG_WIRELESS_OLD_REGULATORY=y
|
||||
# CONFIG_WIRELESS_EXT is not set
|
||||
# CONFIG_LIB80211 is not set
|
||||
# CONFIG_MAC80211 is not set
|
||||
# CONFIG_WIMAX 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 is not set
|
||||
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
||||
CONFIG_FW_LOADER=y
|
||||
CONFIG_FIRMWARE_IN_KERNEL=y
|
||||
CONFIG_EXTRA_FIRMWARE=""
|
||||
# CONFIG_DEBUG_DRIVER is not set
|
||||
# CONFIG_DEBUG_DEVRES is not set
|
||||
# CONFIG_SYS_HYPERVISOR is not set
|
||||
# CONFIG_CONNECTOR is not set
|
||||
# CONFIG_MTD is not set
|
||||
# CONFIG_PARPORT is not set
|
||||
# CONFIG_BLK_DEV is not set
|
||||
# CONFIG_MISC_DEVICES is not set
|
||||
CONFIG_HAVE_IDE=y
|
||||
# CONFIG_IDE is not set
|
||||
|
||||
#
|
||||
# SCSI device support
|
||||
#
|
||||
# CONFIG_RAID_ATTRS is not set
|
||||
# CONFIG_SCSI is not set
|
||||
# CONFIG_SCSI_DMA is not set
|
||||
# CONFIG_SCSI_NETLINK is not set
|
||||
# CONFIG_ATA is not set
|
||||
# CONFIG_MD is not set
|
||||
CONFIG_NETDEVICES=y
|
||||
# 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_PHYLIB is not set
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_MII=y
|
||||
# CONFIG_AX88796 is not set
|
||||
CONFIG_SMC91X=y
|
||||
# CONFIG_DM9000 is not set
|
||||
# CONFIG_SMC911X is not set
|
||||
# CONFIG_SMSC911X 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_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
|
||||
# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
|
||||
# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
|
||||
# CONFIG_B44 is not set
|
||||
# CONFIG_NETDEV_1000 is not set
|
||||
# CONFIG_NETDEV_10000 is not set
|
||||
|
||||
#
|
||||
# Wireless LAN
|
||||
#
|
||||
# CONFIG_WLAN_PRE80211 is not set
|
||||
# CONFIG_WLAN_80211 is not set
|
||||
# CONFIG_IWLWIFI_LEDS is not set
|
||||
|
||||
#
|
||||
# Enable WiMAX (Networking options) to see the WiMAX drivers
|
||||
#
|
||||
# CONFIG_WAN is not set
|
||||
# CONFIG_PPP is not set
|
||||
# CONFIG_SLIP 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 is not set
|
||||
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_CONSOLE_TRANSLATIONS=y
|
||||
CONFIG_VT_CONSOLE=y
|
||||
CONFIG_HW_CONSOLE=y
|
||||
# CONFIG_VT_HW_CONSOLE_BINDING is not set
|
||||
CONFIG_DEVKMEM=y
|
||||
# CONFIG_SERIAL_NONSTANDARD is not set
|
||||
|
||||
#
|
||||
# Serial drivers
|
||||
#
|
||||
# CONFIG_SERIAL_8250 is not set
|
||||
|
||||
#
|
||||
# Non-8250 serial port support
|
||||
#
|
||||
CONFIG_SERIAL_PXA=y
|
||||
CONFIG_SERIAL_PXA_CONSOLE=y
|
||||
CONFIG_SERIAL_CORE=y
|
||||
CONFIG_SERIAL_CORE_CONSOLE=y
|
||||
CONFIG_UNIX98_PTYS=y
|
||||
# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
# CONFIG_IPMI_HANDLER is not set
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
# CONFIG_R3964 is not set
|
||||
# CONFIG_RAW_DRIVER is not set
|
||||
# CONFIG_TCG_TPM is not set
|
||||
# CONFIG_I2C is not set
|
||||
# CONFIG_SPI is not set
|
||||
CONFIG_ARCH_REQUIRE_GPIOLIB=y
|
||||
CONFIG_GPIOLIB=y
|
||||
# CONFIG_DEBUG_GPIO is not set
|
||||
# CONFIG_GPIO_SYSFS is not set
|
||||
|
||||
#
|
||||
# Memory mapped GPIO expanders:
|
||||
#
|
||||
|
||||
#
|
||||
# I2C GPIO expanders:
|
||||
#
|
||||
|
||||
#
|
||||
# PCI GPIO expanders:
|
||||
#
|
||||
|
||||
#
|
||||
# SPI GPIO expanders:
|
||||
#
|
||||
# CONFIG_W1 is not set
|
||||
# CONFIG_POWER_SUPPLY is not set
|
||||
# CONFIG_HWMON is not set
|
||||
# CONFIG_THERMAL is not set
|
||||
# CONFIG_THERMAL_HWMON is not set
|
||||
# CONFIG_WATCHDOG is not set
|
||||
CONFIG_SSB_POSSIBLE=y
|
||||
|
||||
#
|
||||
# Sonics Silicon Backplane
|
||||
#
|
||||
# CONFIG_SSB is not set
|
||||
|
||||
#
|
||||
# Multifunction device drivers
|
||||
#
|
||||
# CONFIG_MFD_CORE is not set
|
||||
# CONFIG_MFD_SM501 is not set
|
||||
# CONFIG_MFD_ASIC3 is not set
|
||||
# CONFIG_HTC_EGPIO is not set
|
||||
# CONFIG_HTC_PASIC3 is not set
|
||||
# CONFIG_MFD_TMIO is not set
|
||||
# CONFIG_MFD_T7L66XB is not set
|
||||
# CONFIG_MFD_TC6387XB is not set
|
||||
# CONFIG_MFD_TC6393XB is not set
|
||||
|
||||
#
|
||||
# Multimedia devices
|
||||
#
|
||||
|
||||
#
|
||||
# Multimedia core support
|
||||
#
|
||||
# CONFIG_VIDEO_DEV is not set
|
||||
# CONFIG_DVB_CORE is not set
|
||||
# CONFIG_VIDEO_MEDIA is not set
|
||||
|
||||
#
|
||||
# Multimedia drivers
|
||||
#
|
||||
# CONFIG_DAB is not set
|
||||
|
||||
#
|
||||
# Graphics support
|
||||
#
|
||||
# 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
|
||||
# CONFIG_SOUND is not set
|
||||
# CONFIG_HID_SUPPORT is not set
|
||||
# CONFIG_USB_SUPPORT is not set
|
||||
# CONFIG_MMC is not set
|
||||
# CONFIG_MEMSTICK is not set
|
||||
# CONFIG_ACCESSIBILITY is not set
|
||||
# CONFIG_NEW_LEDS is not set
|
||||
CONFIG_RTC_LIB=y
|
||||
# CONFIG_RTC_CLASS is not set
|
||||
# CONFIG_DMADEVICES is not set
|
||||
# CONFIG_REGULATOR is not set
|
||||
# CONFIG_UIO is not set
|
||||
# CONFIG_STAGING is not set
|
||||
|
||||
#
|
||||
# File systems
|
||||
#
|
||||
# CONFIG_EXT2_FS is not set
|
||||
# CONFIG_EXT3_FS is not set
|
||||
# CONFIG_EXT4_FS is not set
|
||||
# CONFIG_REISERFS_FS is not set
|
||||
# CONFIG_JFS_FS is not set
|
||||
CONFIG_FS_POSIX_ACL=y
|
||||
CONFIG_FILE_LOCKING=y
|
||||
# CONFIG_XFS_FS is not set
|
||||
# CONFIG_OCFS2_FS is not set
|
||||
# CONFIG_BTRFS_FS is not set
|
||||
CONFIG_DNOTIFY=y
|
||||
CONFIG_INOTIFY=y
|
||||
CONFIG_INOTIFY_USER=y
|
||||
# CONFIG_QUOTA is not set
|
||||
# CONFIG_AUTOFS_FS is not set
|
||||
# CONFIG_AUTOFS4_FS is not set
|
||||
# CONFIG_FUSE_FS is not set
|
||||
CONFIG_GENERIC_ACL=y
|
||||
|
||||
#
|
||||
# CD-ROM/DVD Filesystems
|
||||
#
|
||||
# CONFIG_ISO9660_FS is not set
|
||||
# CONFIG_UDF_FS is not set
|
||||
|
||||
#
|
||||
# DOS/FAT/NT Filesystems
|
||||
#
|
||||
# CONFIG_MSDOS_FS is not set
|
||||
# CONFIG_VFAT_FS is not set
|
||||
# CONFIG_NTFS_FS is not set
|
||||
|
||||
#
|
||||
# Pseudo filesystems
|
||||
#
|
||||
CONFIG_PROC_FS=y
|
||||
CONFIG_PROC_SYSCTL=y
|
||||
CONFIG_PROC_PAGE_MONITOR=y
|
||||
CONFIG_SYSFS=y
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_TMPFS_POSIX_ACL=y
|
||||
# CONFIG_HUGETLB_PAGE is not set
|
||||
# CONFIG_CONFIGFS_FS is not set
|
||||
CONFIG_MISC_FILESYSTEMS=y
|
||||
# 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_CRAMFS=y
|
||||
# CONFIG_SQUASHFS is not set
|
||||
# CONFIG_VXFS_FS is not set
|
||||
# CONFIG_MINIX_FS is not set
|
||||
# CONFIG_OMFS_FS is not set
|
||||
# CONFIG_HPFS_FS is not set
|
||||
# CONFIG_QNX4FS_FS is not set
|
||||
# CONFIG_ROMFS_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=y
|
||||
CONFIG_NFS_V4=y
|
||||
CONFIG_ROOT_NFS=y
|
||||
# CONFIG_NFSD is not set
|
||||
CONFIG_LOCKD=y
|
||||
CONFIG_LOCKD_V4=y
|
||||
CONFIG_NFS_ACL_SUPPORT=y
|
||||
CONFIG_NFS_COMMON=y
|
||||
CONFIG_SUNRPC=y
|
||||
CONFIG_SUNRPC_GSS=y
|
||||
# CONFIG_SUNRPC_REGISTER_V4 is not set
|
||||
CONFIG_RPCSEC_GSS_KRB5=y
|
||||
# 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 is not set
|
||||
CONFIG_MSDOS_PARTITION=y
|
||||
# CONFIG_NLS is not set
|
||||
# CONFIG_DLM is not set
|
||||
|
||||
#
|
||||
# Kernel hacking
|
||||
#
|
||||
CONFIG_PRINTK_TIME=y
|
||||
CONFIG_ENABLE_WARN_DEPRECATED=y
|
||||
CONFIG_ENABLE_MUST_CHECK=y
|
||||
CONFIG_FRAME_WARN=1024
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
# CONFIG_UNUSED_SYMBOLS is not set
|
||||
# CONFIG_DEBUG_FS is not set
|
||||
# CONFIG_HEADERS_CHECK is not set
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
# CONFIG_DEBUG_SHIRQ is not set
|
||||
CONFIG_DETECT_SOFTLOCKUP=y
|
||||
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
|
||||
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
|
||||
CONFIG_SCHED_DEBUG=y
|
||||
# CONFIG_SCHEDSTATS is not set
|
||||
# CONFIG_TIMER_STATS is not set
|
||||
# CONFIG_DEBUG_OBJECTS is not set
|
||||
# CONFIG_DEBUG_SLAB is not set
|
||||
# CONFIG_DEBUG_PREEMPT is not set
|
||||
# CONFIG_DEBUG_RT_MUTEXES is not set
|
||||
# CONFIG_RT_MUTEX_TESTER is not set
|
||||
# CONFIG_DEBUG_SPINLOCK is not set
|
||||
# CONFIG_DEBUG_MUTEXES is not set
|
||||
# CONFIG_DEBUG_LOCK_ALLOC is not set
|
||||
# CONFIG_PROVE_LOCKING is not set
|
||||
# CONFIG_LOCK_STAT is not set
|
||||
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
||||
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
|
||||
# CONFIG_DEBUG_KOBJECT is not set
|
||||
CONFIG_DEBUG_BUGVERBOSE=y
|
||||
CONFIG_DEBUG_INFO=y
|
||||
# CONFIG_DEBUG_VM is not set
|
||||
# CONFIG_DEBUG_WRITECOUNT is not set
|
||||
CONFIG_DEBUG_MEMORY_INIT=y
|
||||
# CONFIG_DEBUG_LIST is not set
|
||||
# CONFIG_DEBUG_SG is not set
|
||||
# CONFIG_DEBUG_NOTIFIERS is not set
|
||||
# CONFIG_BOOT_PRINTK_DELAY is not set
|
||||
# CONFIG_RCU_TORTURE_TEST is not set
|
||||
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
|
||||
# CONFIG_BACKTRACE_SELF_TEST is not set
|
||||
# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
|
||||
# CONFIG_FAULT_INJECTION is not set
|
||||
# CONFIG_LATENCYTOP is not set
|
||||
# CONFIG_SYSCTL_SYSCALL_CHECK is not set
|
||||
CONFIG_HAVE_FUNCTION_TRACER=y
|
||||
|
||||
#
|
||||
# Tracers
|
||||
#
|
||||
# CONFIG_FUNCTION_TRACER is not set
|
||||
# CONFIG_IRQSOFF_TRACER is not set
|
||||
# CONFIG_PREEMPT_TRACER is not set
|
||||
# CONFIG_SCHED_TRACER is not set
|
||||
# CONFIG_CONTEXT_SWITCH_TRACER is not set
|
||||
# CONFIG_BOOT_TRACER is not set
|
||||
# CONFIG_TRACE_BRANCH_PROFILING is not set
|
||||
# CONFIG_STACK_TRACER is not set
|
||||
# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
|
||||
# CONFIG_SAMPLES is not set
|
||||
CONFIG_HAVE_ARCH_KGDB=y
|
||||
# CONFIG_KGDB is not set
|
||||
CONFIG_ARM_UNWIND=y
|
||||
CONFIG_DEBUG_USER=y
|
||||
CONFIG_DEBUG_ERRORS=y
|
||||
# CONFIG_DEBUG_STACK_USAGE is not set
|
||||
CONFIG_DEBUG_LL=y
|
||||
# CONFIG_DEBUG_ICEDCC is not set
|
||||
|
||||
#
|
||||
# Security options
|
||||
#
|
||||
# CONFIG_KEYS is not set
|
||||
# CONFIG_SECURITY is not set
|
||||
# CONFIG_SECURITYFS is not set
|
||||
# CONFIG_SECURITY_FILE_CAPABILITIES is not set
|
||||
CONFIG_CRYPTO=y
|
||||
|
||||
#
|
||||
# Crypto core or helper
|
||||
#
|
||||
# CONFIG_CRYPTO_FIPS is not set
|
||||
CONFIG_CRYPTO_ALGAPI=y
|
||||
CONFIG_CRYPTO_ALGAPI2=y
|
||||
CONFIG_CRYPTO_AEAD2=y
|
||||
CONFIG_CRYPTO_BLKCIPHER=y
|
||||
CONFIG_CRYPTO_BLKCIPHER2=y
|
||||
CONFIG_CRYPTO_HASH=y
|
||||
CONFIG_CRYPTO_HASH2=y
|
||||
CONFIG_CRYPTO_RNG2=y
|
||||
CONFIG_CRYPTO_MANAGER=y
|
||||
CONFIG_CRYPTO_MANAGER2=y
|
||||
# CONFIG_CRYPTO_GF128MUL is not set
|
||||
# CONFIG_CRYPTO_NULL is not set
|
||||
# CONFIG_CRYPTO_CRYPTD is not set
|
||||
# CONFIG_CRYPTO_AUTHENC is not set
|
||||
# CONFIG_CRYPTO_TEST is not set
|
||||
|
||||
#
|
||||
# Authenticated Encryption with Associated Data
|
||||
#
|
||||
# CONFIG_CRYPTO_CCM is not set
|
||||
# CONFIG_CRYPTO_GCM is not set
|
||||
# CONFIG_CRYPTO_SEQIV is not set
|
||||
|
||||
#
|
||||
# Block modes
|
||||
#
|
||||
CONFIG_CRYPTO_CBC=y
|
||||
# CONFIG_CRYPTO_CTR is not set
|
||||
# CONFIG_CRYPTO_CTS is not set
|
||||
# CONFIG_CRYPTO_ECB is not set
|
||||
# CONFIG_CRYPTO_LRW is not set
|
||||
# CONFIG_CRYPTO_PCBC is not set
|
||||
# CONFIG_CRYPTO_XTS is not set
|
||||
|
||||
#
|
||||
# Hash modes
|
||||
#
|
||||
# CONFIG_CRYPTO_HMAC is not set
|
||||
# CONFIG_CRYPTO_XCBC is not set
|
||||
|
||||
#
|
||||
# Digest
|
||||
#
|
||||
# CONFIG_CRYPTO_CRC32C is not set
|
||||
# CONFIG_CRYPTO_MD4 is not set
|
||||
CONFIG_CRYPTO_MD5=y
|
||||
# CONFIG_CRYPTO_MICHAEL_MIC is not set
|
||||
# CONFIG_CRYPTO_RMD128 is not set
|
||||
# CONFIG_CRYPTO_RMD160 is not set
|
||||
# CONFIG_CRYPTO_RMD256 is not set
|
||||
# CONFIG_CRYPTO_RMD320 is not set
|
||||
# CONFIG_CRYPTO_SHA1 is not set
|
||||
# CONFIG_CRYPTO_SHA256 is not set
|
||||
# CONFIG_CRYPTO_SHA512 is not set
|
||||
# CONFIG_CRYPTO_TGR192 is not set
|
||||
# CONFIG_CRYPTO_WP512 is not set
|
||||
|
||||
#
|
||||
# Ciphers
|
||||
#
|
||||
# CONFIG_CRYPTO_AES is not set
|
||||
# CONFIG_CRYPTO_ANUBIS is not set
|
||||
# CONFIG_CRYPTO_ARC4 is not set
|
||||
# CONFIG_CRYPTO_BLOWFISH is not set
|
||||
# CONFIG_CRYPTO_CAMELLIA is not set
|
||||
# CONFIG_CRYPTO_CAST5 is not set
|
||||
# CONFIG_CRYPTO_CAST6 is not set
|
||||
CONFIG_CRYPTO_DES=y
|
||||
# CONFIG_CRYPTO_FCRYPT is not set
|
||||
# CONFIG_CRYPTO_KHAZAD is not set
|
||||
# CONFIG_CRYPTO_SALSA20 is not set
|
||||
# CONFIG_CRYPTO_SEED is not set
|
||||
# CONFIG_CRYPTO_SERPENT is not set
|
||||
# CONFIG_CRYPTO_TEA is not set
|
||||
# CONFIG_CRYPTO_TWOFISH is not set
|
||||
|
||||
#
|
||||
# Compression
|
||||
#
|
||||
# CONFIG_CRYPTO_DEFLATE is not set
|
||||
# CONFIG_CRYPTO_LZO is not set
|
||||
|
||||
#
|
||||
# Random Number Generation
|
||||
#
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
CONFIG_CRYPTO_HW=y
|
||||
|
||||
#
|
||||
# Library routines
|
||||
#
|
||||
CONFIG_BITREVERSE=y
|
||||
CONFIG_GENERIC_FIND_LAST_BIT=y
|
||||
CONFIG_CRC_CCITT=y
|
||||
# CONFIG_CRC16 is not set
|
||||
# CONFIG_CRC_T10DIF is not set
|
||||
# CONFIG_CRC_ITU_T is not set
|
||||
CONFIG_CRC32=y
|
||||
# CONFIG_CRC7 is not set
|
||||
# CONFIG_LIBCRC32C is not set
|
||||
CONFIG_ZLIB_INFLATE=y
|
||||
CONFIG_PLIST=y
|
||||
CONFIG_HAS_IOMEM=y
|
||||
CONFIG_HAS_IOPORT=y
|
||||
CONFIG_HAS_DMA=y
|
|
@ -0,0 +1,891 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.29-rc3
|
||||
# Fri Mar 20 13:45:12 2009
|
||||
#
|
||||
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_HAVE_LATENCYTOP_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_GENERIC_HARDIRQS_NO__DO_IRQ=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_AUDIT is not set
|
||||
|
||||
#
|
||||
# RCU Subsystem
|
||||
#
|
||||
CONFIG_CLASSIC_RCU=y
|
||||
# CONFIG_TREE_RCU is not set
|
||||
# CONFIG_PREEMPT_RCU is not set
|
||||
# CONFIG_TREE_RCU_TRACE is not set
|
||||
# CONFIG_PREEMPT_RCU_TRACE is not set
|
||||
# CONFIG_IKCONFIG is not set
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
# CONFIG_GROUP_SCHED is not set
|
||||
# CONFIG_CGROUPS is not set
|
||||
CONFIG_SYSFS_DEPRECATED=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
# CONFIG_RELAY is not set
|
||||
CONFIG_NAMESPACES=y
|
||||
# CONFIG_UTS_NS is not set
|
||||
# CONFIG_IPC_NS is not set
|
||||
# CONFIG_USER_NS is not set
|
||||
# CONFIG_PID_NS is not set
|
||||
# CONFIG_NET_NS is not set
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||
CONFIG_SYSCTL=y
|
||||
# CONFIG_EMBEDDED is not set
|
||||
CONFIG_UID16=y
|
||||
CONFIG_SYSCTL_SYSCALL=y
|
||||
CONFIG_KALLSYMS=y
|
||||
# CONFIG_KALLSYMS_ALL is not set
|
||||
# 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_AIO=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_HAVE_OPROFILE=y
|
||||
# CONFIG_KPROBES is not set
|
||||
CONFIG_HAVE_KPROBES=y
|
||||
CONFIG_HAVE_KRETPROBES=y
|
||||
CONFIG_HAVE_CLK=y
|
||||
CONFIG_HAVE_GENERIC_DMA_COHERENT=y
|
||||
CONFIG_SLABINFO=y
|
||||
CONFIG_RT_MUTEXES=y
|
||||
CONFIG_BASE_SMALL=0
|
||||
CONFIG_MODULES=y
|
||||
# CONFIG_MODULE_FORCE_LOAD is not set
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_MODULE_FORCE_UNLOAD=y
|
||||
# CONFIG_MODVERSIONS is not set
|
||||
# CONFIG_MODULE_SRCVERSION_ALL is not set
|
||||
CONFIG_BLOCK=y
|
||||
# CONFIG_LBD is not set
|
||||
# CONFIG_BLK_DEV_IO_TRACE is not set
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
# CONFIG_BLK_DEV_INTEGRITY 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_FREEZER 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_CLPS711X 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_KIRKWOOD is not set
|
||||
# CONFIG_ARCH_KS8695 is not set
|
||||
# CONFIG_ARCH_NS9XXX is not set
|
||||
# CONFIG_ARCH_LOKI is not set
|
||||
# CONFIG_ARCH_MV78XX0 is not set
|
||||
# CONFIG_ARCH_MXC is not set
|
||||
# CONFIG_ARCH_ORION5X is not set
|
||||
# CONFIG_ARCH_PNX4008 is not set
|
||||
# CONFIG_ARCH_PXA is not set
|
||||
CONFIG_ARCH_MMP=y
|
||||
# CONFIG_ARCH_RPC is not set
|
||||
# CONFIG_ARCH_SA1100 is not set
|
||||
# CONFIG_ARCH_S3C2410 is not set
|
||||
# CONFIG_ARCH_S3C64XX 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_MSM is not set
|
||||
# CONFIG_ARCH_W90X900 is not set
|
||||
CONFIG_MACH_TAVOREVB=y
|
||||
|
||||
#
|
||||
# Marvell PXA168/910 Implmentations
|
||||
#
|
||||
# CONFIG_MACH_ASPENITE is not set
|
||||
# CONFIG_MACH_ZYLONITE2 is not set
|
||||
CONFIG_MACH_TTC_DKB=y
|
||||
CONFIG_CPU_PXA910=y
|
||||
CONFIG_PLAT_PXA=y
|
||||
|
||||
#
|
||||
# Processor Type
|
||||
#
|
||||
CONFIG_CPU_32=y
|
||||
CONFIG_CPU_MOHAWK=y
|
||||
CONFIG_CPU_32v5=y
|
||||
CONFIG_CPU_ABRT_EV5T=y
|
||||
CONFIG_CPU_PABRT_NOIFAR=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_BPREDICT_DISABLE is not set
|
||||
# CONFIG_OUTER_CACHE is not set
|
||||
CONFIG_IWMMXT=y
|
||||
CONFIG_COMMON_CLKDEV=y
|
||||
|
||||
#
|
||||
# Bus support
|
||||
#
|
||||
# CONFIG_PCI_SYSCALL is not set
|
||||
# CONFIG_ARCH_SUPPORTS_MSI is not set
|
||||
# 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_VMSPLIT_3G=y
|
||||
# CONFIG_VMSPLIT_2G is not set
|
||||
# CONFIG_VMSPLIT_1G is not set
|
||||
CONFIG_PAGE_OFFSET=0xC0000000
|
||||
CONFIG_PREEMPT=y
|
||||
CONFIG_HZ=100
|
||||
CONFIG_AEABI=y
|
||||
CONFIG_OABI_COMPAT=y
|
||||
CONFIG_ARCH_FLATMEM_HAS_HOLES=y
|
||||
# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
|
||||
# CONFIG_ARCH_SELECT_MEMORY_MODEL 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_PAGEFLAGS_EXTENDED=y
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4096
|
||||
# CONFIG_PHYS_ADDR_T_64BIT is not set
|
||||
CONFIG_ZONE_DMA_FLAG=0
|
||||
CONFIG_VIRT_TO_BUS=y
|
||||
CONFIG_UNEVICTABLE_LRU=y
|
||||
CONFIG_ALIGNMENT_TRAP=y
|
||||
|
||||
#
|
||||
# Boot options
|
||||
#
|
||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||
CONFIG_CMDLINE="root=/dev/nfs rootfstype=nfs nfsroot=192.168.2.100:/nfsroot/ ip=192.168.2.101:192.168.2.100::255.255.255.0::eth0:on console=ttyS0,115200 mem=128M"
|
||||
# CONFIG_XIP_KERNEL is not set
|
||||
# CONFIG_KEXEC is not set
|
||||
|
||||
#
|
||||
# CPU Power Management
|
||||
#
|
||||
# CONFIG_CPU_IDLE 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
|
||||
|
||||
#
|
||||
# Userspace binary formats
|
||||
#
|
||||
CONFIG_BINFMT_ELF=y
|
||||
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
|
||||
CONFIG_HAVE_AOUT=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
|
||||
CONFIG_NET=y
|
||||
|
||||
#
|
||||
# Networking options
|
||||
#
|
||||
CONFIG_COMPAT_NET_DEV_OPS=y
|
||||
CONFIG_PACKET=y
|
||||
# CONFIG_PACKET_MMAP is not set
|
||||
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 is not set
|
||||
# CONFIG_IP_ADVANCED_ROUTER is not set
|
||||
CONFIG_IP_FIB_HASH=y
|
||||
CONFIG_IP_PNP=y
|
||||
# CONFIG_IP_PNP_DHCP is not set
|
||||
# CONFIG_IP_PNP_BOOTP is not set
|
||||
# CONFIG_IP_PNP_RARP is not set
|
||||
# CONFIG_NET_IPIP is not set
|
||||
# CONFIG_NET_IPGRE 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_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_NET_DSA 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
|
||||
# CONFIG_DCB is not set
|
||||
|
||||
#
|
||||
# Network testing
|
||||
#
|
||||
# CONFIG_NET_PKTGEN is not set
|
||||
# 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
|
||||
# CONFIG_PHONET is not set
|
||||
CONFIG_WIRELESS=y
|
||||
# CONFIG_CFG80211 is not set
|
||||
CONFIG_WIRELESS_OLD_REGULATORY=y
|
||||
# CONFIG_WIRELESS_EXT is not set
|
||||
# CONFIG_LIB80211 is not set
|
||||
# CONFIG_MAC80211 is not set
|
||||
# CONFIG_WIMAX 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 is not set
|
||||
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
||||
CONFIG_FW_LOADER=y
|
||||
CONFIG_FIRMWARE_IN_KERNEL=y
|
||||
CONFIG_EXTRA_FIRMWARE=""
|
||||
# CONFIG_DEBUG_DRIVER is not set
|
||||
# CONFIG_DEBUG_DEVRES is not set
|
||||
# CONFIG_SYS_HYPERVISOR is not set
|
||||
# CONFIG_CONNECTOR is not set
|
||||
# CONFIG_MTD is not set
|
||||
# CONFIG_PARPORT is not set
|
||||
# CONFIG_BLK_DEV is not set
|
||||
# CONFIG_MISC_DEVICES is not set
|
||||
CONFIG_HAVE_IDE=y
|
||||
# CONFIG_IDE is not set
|
||||
|
||||
#
|
||||
# SCSI device support
|
||||
#
|
||||
# CONFIG_RAID_ATTRS is not set
|
||||
# CONFIG_SCSI is not set
|
||||
# CONFIG_SCSI_DMA is not set
|
||||
# CONFIG_SCSI_NETLINK is not set
|
||||
# CONFIG_ATA is not set
|
||||
# CONFIG_MD is not set
|
||||
CONFIG_NETDEVICES=y
|
||||
# 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_PHYLIB is not set
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_MII=y
|
||||
# CONFIG_AX88796 is not set
|
||||
CONFIG_SMC91X=y
|
||||
# CONFIG_DM9000 is not set
|
||||
# CONFIG_SMC911X is not set
|
||||
# CONFIG_SMSC911X 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_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
|
||||
# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
|
||||
# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
|
||||
# CONFIG_B44 is not set
|
||||
# CONFIG_NETDEV_1000 is not set
|
||||
# CONFIG_NETDEV_10000 is not set
|
||||
|
||||
#
|
||||
# Wireless LAN
|
||||
#
|
||||
# CONFIG_WLAN_PRE80211 is not set
|
||||
# CONFIG_WLAN_80211 is not set
|
||||
# CONFIG_IWLWIFI_LEDS is not set
|
||||
|
||||
#
|
||||
# Enable WiMAX (Networking options) to see the WiMAX drivers
|
||||
#
|
||||
# CONFIG_WAN is not set
|
||||
# CONFIG_PPP is not set
|
||||
# CONFIG_SLIP 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 is not set
|
||||
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_CONSOLE_TRANSLATIONS=y
|
||||
CONFIG_VT_CONSOLE=y
|
||||
CONFIG_HW_CONSOLE=y
|
||||
# CONFIG_VT_HW_CONSOLE_BINDING is not set
|
||||
CONFIG_DEVKMEM=y
|
||||
# CONFIG_SERIAL_NONSTANDARD is not set
|
||||
|
||||
#
|
||||
# Serial drivers
|
||||
#
|
||||
# CONFIG_SERIAL_8250 is not set
|
||||
|
||||
#
|
||||
# Non-8250 serial port support
|
||||
#
|
||||
CONFIG_SERIAL_PXA=y
|
||||
CONFIG_SERIAL_PXA_CONSOLE=y
|
||||
CONFIG_SERIAL_CORE=y
|
||||
CONFIG_SERIAL_CORE_CONSOLE=y
|
||||
CONFIG_UNIX98_PTYS=y
|
||||
# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
# CONFIG_IPMI_HANDLER is not set
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
# CONFIG_R3964 is not set
|
||||
# CONFIG_RAW_DRIVER is not set
|
||||
# CONFIG_TCG_TPM is not set
|
||||
# CONFIG_I2C is not set
|
||||
# CONFIG_SPI is not set
|
||||
CONFIG_ARCH_REQUIRE_GPIOLIB=y
|
||||
CONFIG_GPIOLIB=y
|
||||
# CONFIG_DEBUG_GPIO is not set
|
||||
# CONFIG_GPIO_SYSFS is not set
|
||||
|
||||
#
|
||||
# Memory mapped GPIO expanders:
|
||||
#
|
||||
|
||||
#
|
||||
# I2C GPIO expanders:
|
||||
#
|
||||
|
||||
#
|
||||
# PCI GPIO expanders:
|
||||
#
|
||||
|
||||
#
|
||||
# SPI GPIO expanders:
|
||||
#
|
||||
# CONFIG_W1 is not set
|
||||
# CONFIG_POWER_SUPPLY is not set
|
||||
# CONFIG_HWMON is not set
|
||||
# CONFIG_THERMAL is not set
|
||||
# CONFIG_THERMAL_HWMON is not set
|
||||
# CONFIG_WATCHDOG is not set
|
||||
CONFIG_SSB_POSSIBLE=y
|
||||
|
||||
#
|
||||
# Sonics Silicon Backplane
|
||||
#
|
||||
# CONFIG_SSB is not set
|
||||
|
||||
#
|
||||
# Multifunction device drivers
|
||||
#
|
||||
# CONFIG_MFD_CORE is not set
|
||||
# CONFIG_MFD_SM501 is not set
|
||||
# CONFIG_MFD_ASIC3 is not set
|
||||
# CONFIG_HTC_EGPIO is not set
|
||||
# CONFIG_HTC_PASIC3 is not set
|
||||
# CONFIG_MFD_TMIO is not set
|
||||
# CONFIG_MFD_T7L66XB is not set
|
||||
# CONFIG_MFD_TC6387XB is not set
|
||||
# CONFIG_MFD_TC6393XB is not set
|
||||
|
||||
#
|
||||
# Multimedia devices
|
||||
#
|
||||
|
||||
#
|
||||
# Multimedia core support
|
||||
#
|
||||
# CONFIG_VIDEO_DEV is not set
|
||||
# CONFIG_DVB_CORE is not set
|
||||
# CONFIG_VIDEO_MEDIA is not set
|
||||
|
||||
#
|
||||
# Multimedia drivers
|
||||
#
|
||||
# CONFIG_DAB is not set
|
||||
|
||||
#
|
||||
# Graphics support
|
||||
#
|
||||
# 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
|
||||
# CONFIG_SOUND is not set
|
||||
# CONFIG_HID_SUPPORT is not set
|
||||
# CONFIG_USB_SUPPORT is not set
|
||||
# CONFIG_MMC is not set
|
||||
# CONFIG_MEMSTICK is not set
|
||||
# CONFIG_ACCESSIBILITY is not set
|
||||
# CONFIG_NEW_LEDS is not set
|
||||
CONFIG_RTC_LIB=y
|
||||
# CONFIG_RTC_CLASS is not set
|
||||
# CONFIG_DMADEVICES is not set
|
||||
# CONFIG_REGULATOR is not set
|
||||
# CONFIG_UIO is not set
|
||||
# CONFIG_STAGING is not set
|
||||
|
||||
#
|
||||
# File systems
|
||||
#
|
||||
# CONFIG_EXT2_FS is not set
|
||||
# CONFIG_EXT3_FS is not set
|
||||
# CONFIG_EXT4_FS is not set
|
||||
# CONFIG_REISERFS_FS is not set
|
||||
# CONFIG_JFS_FS is not set
|
||||
CONFIG_FS_POSIX_ACL=y
|
||||
CONFIG_FILE_LOCKING=y
|
||||
# CONFIG_XFS_FS is not set
|
||||
# CONFIG_OCFS2_FS is not set
|
||||
# CONFIG_BTRFS_FS is not set
|
||||
CONFIG_DNOTIFY=y
|
||||
CONFIG_INOTIFY=y
|
||||
CONFIG_INOTIFY_USER=y
|
||||
# CONFIG_QUOTA is not set
|
||||
# CONFIG_AUTOFS_FS is not set
|
||||
# CONFIG_AUTOFS4_FS is not set
|
||||
# CONFIG_FUSE_FS is not set
|
||||
CONFIG_GENERIC_ACL=y
|
||||
|
||||
#
|
||||
# CD-ROM/DVD Filesystems
|
||||
#
|
||||
# CONFIG_ISO9660_FS is not set
|
||||
# CONFIG_UDF_FS is not set
|
||||
|
||||
#
|
||||
# DOS/FAT/NT Filesystems
|
||||
#
|
||||
# CONFIG_MSDOS_FS is not set
|
||||
# CONFIG_VFAT_FS is not set
|
||||
# CONFIG_NTFS_FS is not set
|
||||
|
||||
#
|
||||
# Pseudo filesystems
|
||||
#
|
||||
CONFIG_PROC_FS=y
|
||||
CONFIG_PROC_SYSCTL=y
|
||||
CONFIG_PROC_PAGE_MONITOR=y
|
||||
CONFIG_SYSFS=y
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_TMPFS_POSIX_ACL=y
|
||||
# CONFIG_HUGETLB_PAGE is not set
|
||||
# CONFIG_CONFIGFS_FS is not set
|
||||
CONFIG_MISC_FILESYSTEMS=y
|
||||
# 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_CRAMFS=y
|
||||
# CONFIG_SQUASHFS is not set
|
||||
# CONFIG_VXFS_FS is not set
|
||||
# CONFIG_MINIX_FS is not set
|
||||
# CONFIG_OMFS_FS is not set
|
||||
# CONFIG_HPFS_FS is not set
|
||||
# CONFIG_QNX4FS_FS is not set
|
||||
# CONFIG_ROMFS_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=y
|
||||
CONFIG_NFS_V4=y
|
||||
CONFIG_ROOT_NFS=y
|
||||
# CONFIG_NFSD is not set
|
||||
CONFIG_LOCKD=y
|
||||
CONFIG_LOCKD_V4=y
|
||||
CONFIG_NFS_ACL_SUPPORT=y
|
||||
CONFIG_NFS_COMMON=y
|
||||
CONFIG_SUNRPC=y
|
||||
CONFIG_SUNRPC_GSS=y
|
||||
# CONFIG_SUNRPC_REGISTER_V4 is not set
|
||||
CONFIG_RPCSEC_GSS_KRB5=y
|
||||
# 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 is not set
|
||||
CONFIG_MSDOS_PARTITION=y
|
||||
# CONFIG_NLS is not set
|
||||
# CONFIG_DLM is not set
|
||||
|
||||
#
|
||||
# Kernel hacking
|
||||
#
|
||||
CONFIG_PRINTK_TIME=y
|
||||
CONFIG_ENABLE_WARN_DEPRECATED=y
|
||||
CONFIG_ENABLE_MUST_CHECK=y
|
||||
CONFIG_FRAME_WARN=1024
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
# CONFIG_UNUSED_SYMBOLS is not set
|
||||
# CONFIG_DEBUG_FS is not set
|
||||
# CONFIG_HEADERS_CHECK is not set
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
# CONFIG_DEBUG_SHIRQ is not set
|
||||
CONFIG_DETECT_SOFTLOCKUP=y
|
||||
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
|
||||
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
|
||||
CONFIG_SCHED_DEBUG=y
|
||||
# CONFIG_SCHEDSTATS is not set
|
||||
# CONFIG_TIMER_STATS is not set
|
||||
# CONFIG_DEBUG_OBJECTS is not set
|
||||
# CONFIG_DEBUG_SLAB is not set
|
||||
# CONFIG_DEBUG_PREEMPT is not set
|
||||
# CONFIG_DEBUG_RT_MUTEXES is not set
|
||||
# CONFIG_RT_MUTEX_TESTER is not set
|
||||
# CONFIG_DEBUG_SPINLOCK is not set
|
||||
# CONFIG_DEBUG_MUTEXES is not set
|
||||
# CONFIG_DEBUG_LOCK_ALLOC is not set
|
||||
# CONFIG_PROVE_LOCKING is not set
|
||||
# CONFIG_LOCK_STAT is not set
|
||||
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
||||
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
|
||||
# CONFIG_DEBUG_KOBJECT is not set
|
||||
CONFIG_DEBUG_BUGVERBOSE=y
|
||||
CONFIG_DEBUG_INFO=y
|
||||
# CONFIG_DEBUG_VM is not set
|
||||
# CONFIG_DEBUG_WRITECOUNT is not set
|
||||
CONFIG_DEBUG_MEMORY_INIT=y
|
||||
# CONFIG_DEBUG_LIST is not set
|
||||
# CONFIG_DEBUG_SG is not set
|
||||
# CONFIG_DEBUG_NOTIFIERS is not set
|
||||
# CONFIG_BOOT_PRINTK_DELAY is not set
|
||||
# CONFIG_RCU_TORTURE_TEST is not set
|
||||
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
|
||||
# CONFIG_BACKTRACE_SELF_TEST is not set
|
||||
# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
|
||||
# CONFIG_FAULT_INJECTION is not set
|
||||
# CONFIG_LATENCYTOP is not set
|
||||
# CONFIG_SYSCTL_SYSCALL_CHECK is not set
|
||||
CONFIG_HAVE_FUNCTION_TRACER=y
|
||||
|
||||
#
|
||||
# Tracers
|
||||
#
|
||||
# CONFIG_FUNCTION_TRACER is not set
|
||||
# CONFIG_IRQSOFF_TRACER is not set
|
||||
# CONFIG_PREEMPT_TRACER is not set
|
||||
# CONFIG_SCHED_TRACER is not set
|
||||
# CONFIG_CONTEXT_SWITCH_TRACER is not set
|
||||
# CONFIG_BOOT_TRACER is not set
|
||||
# CONFIG_TRACE_BRANCH_PROFILING is not set
|
||||
# CONFIG_STACK_TRACER is not set
|
||||
# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
|
||||
# CONFIG_SAMPLES is not set
|
||||
CONFIG_HAVE_ARCH_KGDB=y
|
||||
# CONFIG_KGDB is not set
|
||||
CONFIG_ARM_UNWIND=y
|
||||
CONFIG_DEBUG_USER=y
|
||||
CONFIG_DEBUG_ERRORS=y
|
||||
# CONFIG_DEBUG_STACK_USAGE is not set
|
||||
CONFIG_DEBUG_LL=y
|
||||
# CONFIG_DEBUG_ICEDCC is not set
|
||||
|
||||
#
|
||||
# Security options
|
||||
#
|
||||
# CONFIG_KEYS is not set
|
||||
# CONFIG_SECURITY is not set
|
||||
# CONFIG_SECURITYFS is not set
|
||||
# CONFIG_SECURITY_FILE_CAPABILITIES is not set
|
||||
CONFIG_CRYPTO=y
|
||||
|
||||
#
|
||||
# Crypto core or helper
|
||||
#
|
||||
# CONFIG_CRYPTO_FIPS is not set
|
||||
CONFIG_CRYPTO_ALGAPI=y
|
||||
CONFIG_CRYPTO_ALGAPI2=y
|
||||
CONFIG_CRYPTO_AEAD2=y
|
||||
CONFIG_CRYPTO_BLKCIPHER=y
|
||||
CONFIG_CRYPTO_BLKCIPHER2=y
|
||||
CONFIG_CRYPTO_HASH=y
|
||||
CONFIG_CRYPTO_HASH2=y
|
||||
CONFIG_CRYPTO_RNG2=y
|
||||
CONFIG_CRYPTO_MANAGER=y
|
||||
CONFIG_CRYPTO_MANAGER2=y
|
||||
# CONFIG_CRYPTO_GF128MUL is not set
|
||||
# CONFIG_CRYPTO_NULL is not set
|
||||
# CONFIG_CRYPTO_CRYPTD is not set
|
||||
# CONFIG_CRYPTO_AUTHENC is not set
|
||||
# CONFIG_CRYPTO_TEST is not set
|
||||
|
||||
#
|
||||
# Authenticated Encryption with Associated Data
|
||||
#
|
||||
# CONFIG_CRYPTO_CCM is not set
|
||||
# CONFIG_CRYPTO_GCM is not set
|
||||
# CONFIG_CRYPTO_SEQIV is not set
|
||||
|
||||
#
|
||||
# Block modes
|
||||
#
|
||||
CONFIG_CRYPTO_CBC=y
|
||||
# CONFIG_CRYPTO_CTR is not set
|
||||
# CONFIG_CRYPTO_CTS is not set
|
||||
# CONFIG_CRYPTO_ECB is not set
|
||||
# CONFIG_CRYPTO_LRW is not set
|
||||
# CONFIG_CRYPTO_PCBC is not set
|
||||
# CONFIG_CRYPTO_XTS is not set
|
||||
|
||||
#
|
||||
# Hash modes
|
||||
#
|
||||
# CONFIG_CRYPTO_HMAC is not set
|
||||
# CONFIG_CRYPTO_XCBC is not set
|
||||
|
||||
#
|
||||
# Digest
|
||||
#
|
||||
# CONFIG_CRYPTO_CRC32C is not set
|
||||
# CONFIG_CRYPTO_MD4 is not set
|
||||
CONFIG_CRYPTO_MD5=y
|
||||
# CONFIG_CRYPTO_MICHAEL_MIC is not set
|
||||
# CONFIG_CRYPTO_RMD128 is not set
|
||||
# CONFIG_CRYPTO_RMD160 is not set
|
||||
# CONFIG_CRYPTO_RMD256 is not set
|
||||
# CONFIG_CRYPTO_RMD320 is not set
|
||||
# CONFIG_CRYPTO_SHA1 is not set
|
||||
# CONFIG_CRYPTO_SHA256 is not set
|
||||
# CONFIG_CRYPTO_SHA512 is not set
|
||||
# CONFIG_CRYPTO_TGR192 is not set
|
||||
# CONFIG_CRYPTO_WP512 is not set
|
||||
|
||||
#
|
||||
# Ciphers
|
||||
#
|
||||
# CONFIG_CRYPTO_AES is not set
|
||||
# CONFIG_CRYPTO_ANUBIS is not set
|
||||
# CONFIG_CRYPTO_ARC4 is not set
|
||||
# CONFIG_CRYPTO_BLOWFISH is not set
|
||||
# CONFIG_CRYPTO_CAMELLIA is not set
|
||||
# CONFIG_CRYPTO_CAST5 is not set
|
||||
# CONFIG_CRYPTO_CAST6 is not set
|
||||
CONFIG_CRYPTO_DES=y
|
||||
# CONFIG_CRYPTO_FCRYPT is not set
|
||||
# CONFIG_CRYPTO_KHAZAD is not set
|
||||
# CONFIG_CRYPTO_SALSA20 is not set
|
||||
# CONFIG_CRYPTO_SEED is not set
|
||||
# CONFIG_CRYPTO_SERPENT is not set
|
||||
# CONFIG_CRYPTO_TEA is not set
|
||||
# CONFIG_CRYPTO_TWOFISH is not set
|
||||
|
||||
#
|
||||
# Compression
|
||||
#
|
||||
# CONFIG_CRYPTO_DEFLATE is not set
|
||||
# CONFIG_CRYPTO_LZO is not set
|
||||
|
||||
#
|
||||
# Random Number Generation
|
||||
#
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
CONFIG_CRYPTO_HW=y
|
||||
|
||||
#
|
||||
# Library routines
|
||||
#
|
||||
CONFIG_BITREVERSE=y
|
||||
CONFIG_GENERIC_FIND_LAST_BIT=y
|
||||
CONFIG_CRC_CCITT=y
|
||||
# CONFIG_CRC16 is not set
|
||||
# CONFIG_CRC_T10DIF is not set
|
||||
# CONFIG_CRC_ITU_T is not set
|
||||
CONFIG_CRC32=y
|
||||
# CONFIG_CRC7 is not set
|
||||
# CONFIG_LIBCRC32C is not set
|
||||
CONFIG_ZLIB_INFLATE=y
|
||||
CONFIG_PLIST=y
|
||||
CONFIG_HAS_IOMEM=y
|
||||
CONFIG_HAS_IOPORT=y
|
||||
CONFIG_HAS_DMA=y
|
|
@ -94,6 +94,14 @@
|
|||
# endif
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_CPU_MOHAWK)
|
||||
# ifdef _CACHE
|
||||
# define MULTI_CACHE 1
|
||||
# else
|
||||
# define _CACHE mohawk
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_CPU_FEROCEON)
|
||||
# define MULTI_CACHE 1
|
||||
#endif
|
||||
|
|
|
@ -185,6 +185,14 @@
|
|||
# define CPU_NAME cpu_xsc3
|
||||
# endif
|
||||
# endif
|
||||
# ifdef CONFIG_CPU_MOHAWK
|
||||
# ifdef CPU_NAME
|
||||
# undef MULTI_CPU
|
||||
# define MULTI_CPU
|
||||
# else
|
||||
# define CPU_NAME cpu_mohawk
|
||||
# endif
|
||||
# endif
|
||||
# ifdef CONFIG_CPU_FEROCEON
|
||||
# ifdef CPU_NAME
|
||||
# undef MULTI_CPU
|
||||
|
|
|
@ -36,6 +36,7 @@ AFLAGS_crunch-bits.o := -Wa,-mcpu=ep9312
|
|||
|
||||
obj-$(CONFIG_CPU_XSCALE) += xscale-cp0.o
|
||||
obj-$(CONFIG_CPU_XSC3) += xscale-cp0.o
|
||||
obj-$(CONFIG_CPU_MOHAWK) += xscale-cp0.o
|
||||
obj-$(CONFIG_IWMMXT) += iwmmxt.o
|
||||
AFLAGS_iwmmxt.o := -Wa,-mcpu=iwmmxt
|
||||
|
||||
|
|
|
@ -0,0 +1,47 @@
|
|||
if ARCH_MMP
|
||||
|
||||
menu "Marvell PXA168/910 Implmentations"
|
||||
|
||||
config MACH_ASPENITE
|
||||
bool "Marvell's PXA168 Aspenite Development Board"
|
||||
select CPU_PXA168
|
||||
help
|
||||
Say 'Y' here if you want to support the Marvell PXA168-based
|
||||
Aspenite Development Board.
|
||||
|
||||
config MACH_ZYLONITE2
|
||||
bool "Marvell's PXA168 Zylonite2 Development Board"
|
||||
select CPU_PXA168
|
||||
help
|
||||
Say 'Y' here if you want to support the Marvell PXA168-based
|
||||
Zylonite2 Development Board.
|
||||
|
||||
config MACH_TAVOREVB
|
||||
bool "Marvell's PXA910 TavorEVB Development Board"
|
||||
select CPU_PXA910
|
||||
help
|
||||
Say 'Y' here if you want to support the Marvell PXA910-based
|
||||
TavorEVB Development Board.
|
||||
|
||||
config MACH_TTC_DKB
|
||||
bool "Marvell's PXA910 TavorEVB Development Board"
|
||||
select CPU_PXA910
|
||||
help
|
||||
Say 'Y' here if you want to support the Marvell PXA910-based
|
||||
TTC_DKB Development Board.
|
||||
|
||||
endmenu
|
||||
|
||||
config CPU_PXA168
|
||||
bool
|
||||
select CPU_MOHAWK
|
||||
help
|
||||
Select code specific to PXA168
|
||||
|
||||
config CPU_PXA910
|
||||
bool
|
||||
select CPU_MOHAWK
|
||||
help
|
||||
Select code specific to PXA910
|
||||
|
||||
endif
|
|
@ -0,0 +1,15 @@
|
|||
#
|
||||
# Makefile for Marvell's PXA168 processors line
|
||||
#
|
||||
|
||||
obj-y += common.o clock.o devices.o irq.o time.o
|
||||
|
||||
# SoC support
|
||||
obj-$(CONFIG_CPU_PXA168) += pxa168.o
|
||||
obj-$(CONFIG_CPU_PXA910) += pxa910.o
|
||||
|
||||
# board support
|
||||
obj-$(CONFIG_MACH_ASPENITE) += aspenite.o
|
||||
obj-$(CONFIG_MACH_ZYLONITE2) += aspenite.o
|
||||
obj-$(CONFIG_MACH_TAVOREVB) += tavorevb.o
|
||||
obj-$(CONFIG_MACH_TTC_DKB) += ttc_dkb.o
|
|
@ -0,0 +1 @@
|
|||
zreladdr-y := 0x00008000
|
|
@ -0,0 +1,117 @@
|
|||
/*
|
||||
* linux/arch/arm/mach-mmp/aspenite.c
|
||||
*
|
||||
* Support for the Marvell PXA168-based Aspenite and Zylonite2
|
||||
* Development Platform.
|
||||
*
|
||||
* 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
|
||||
* publishhed by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/smc91x.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <mach/addr-map.h>
|
||||
#include <mach/mfp-pxa168.h>
|
||||
#include <mach/pxa168.h>
|
||||
#include <mach/gpio.h>
|
||||
|
||||
#include "common.h"
|
||||
|
||||
static unsigned long common_pin_config[] __initdata = {
|
||||
/* Data Flash Interface */
|
||||
GPIO0_DFI_D15,
|
||||
GPIO1_DFI_D14,
|
||||
GPIO2_DFI_D13,
|
||||
GPIO3_DFI_D12,
|
||||
GPIO4_DFI_D11,
|
||||
GPIO5_DFI_D10,
|
||||
GPIO6_DFI_D9,
|
||||
GPIO7_DFI_D8,
|
||||
GPIO8_DFI_D7,
|
||||
GPIO9_DFI_D6,
|
||||
GPIO10_DFI_D5,
|
||||
GPIO11_DFI_D4,
|
||||
GPIO12_DFI_D3,
|
||||
GPIO13_DFI_D2,
|
||||
GPIO14_DFI_D1,
|
||||
GPIO15_DFI_D0,
|
||||
|
||||
/* Static Memory Controller */
|
||||
GPIO18_SMC_nCS0,
|
||||
GPIO34_SMC_nCS1,
|
||||
GPIO23_SMC_nLUA,
|
||||
GPIO25_SMC_nLLA,
|
||||
GPIO28_SMC_RDY,
|
||||
GPIO29_SMC_SCLK,
|
||||
GPIO35_SMC_BE1,
|
||||
GPIO36_SMC_BE2,
|
||||
GPIO27_GPIO, /* Ethernet IRQ */
|
||||
|
||||
/* UART1 */
|
||||
GPIO107_UART1_RXD,
|
||||
GPIO108_UART1_TXD,
|
||||
};
|
||||
|
||||
static struct smc91x_platdata smc91x_info = {
|
||||
.flags = SMC91X_USE_16BIT | SMC91X_NOWAIT,
|
||||
};
|
||||
|
||||
static struct resource smc91x_resources[] = {
|
||||
[0] = {
|
||||
.start = SMC_CS1_PHYS_BASE + 0x300,
|
||||
.end = SMC_CS1_PHYS_BASE + 0xfffff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = {
|
||||
.start = gpio_to_irq(27),
|
||||
.end = gpio_to_irq(27),
|
||||
.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE,
|
||||
}
|
||||
};
|
||||
|
||||
static struct platform_device smc91x_device = {
|
||||
.name = "smc91x",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.platform_data = &smc91x_info,
|
||||
},
|
||||
.num_resources = ARRAY_SIZE(smc91x_resources),
|
||||
.resource = smc91x_resources,
|
||||
};
|
||||
|
||||
static void __init common_init(void)
|
||||
{
|
||||
mfp_config(ARRAY_AND_SIZE(common_pin_config));
|
||||
|
||||
/* on-chip devices */
|
||||
pxa168_add_uart(1);
|
||||
|
||||
/* off-chip devices */
|
||||
platform_device_register(&smc91x_device);
|
||||
}
|
||||
|
||||
MACHINE_START(ASPENITE, "PXA168-based Aspenite Development Platform")
|
||||
.phys_io = APB_PHYS_BASE,
|
||||
.boot_params = 0x00000100,
|
||||
.io_pg_offst = (APB_VIRT_BASE >> 18) & 0xfffc,
|
||||
.map_io = pxa_map_io,
|
||||
.init_irq = pxa168_init_irq,
|
||||
.timer = &pxa168_timer,
|
||||
.init_machine = common_init,
|
||||
MACHINE_END
|
||||
|
||||
MACHINE_START(ZYLONITE2, "PXA168-based Zylonite2 Development Platform")
|
||||
.phys_io = APB_PHYS_BASE,
|
||||
.boot_params = 0x00000100,
|
||||
.io_pg_offst = (APB_VIRT_BASE >> 18) & 0xfffc,
|
||||
.map_io = pxa_map_io,
|
||||
.init_irq = pxa168_init_irq,
|
||||
.timer = &pxa168_timer,
|
||||
.init_machine = common_init,
|
||||
MACHINE_END
|
|
@ -0,0 +1,83 @@
|
|||
/*
|
||||
* linux/arch/arm/mach-mmp/clock.c
|
||||
*
|
||||
* 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 <linux/module.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
#include <mach/regs-apbc.h>
|
||||
#include "clock.h"
|
||||
|
||||
static void apbc_clk_enable(struct clk *clk)
|
||||
{
|
||||
uint32_t clk_rst;
|
||||
|
||||
clk_rst = APBC_APBCLK | APBC_FNCLK | APBC_FNCLKSEL(clk->fnclksel);
|
||||
__raw_writel(clk_rst, clk->clk_rst);
|
||||
}
|
||||
|
||||
static void apbc_clk_disable(struct clk *clk)
|
||||
{
|
||||
__raw_writel(0, clk->clk_rst);
|
||||
}
|
||||
|
||||
struct clkops apbc_clk_ops = {
|
||||
.enable = apbc_clk_enable,
|
||||
.disable = apbc_clk_disable,
|
||||
};
|
||||
|
||||
static DEFINE_SPINLOCK(clocks_lock);
|
||||
|
||||
int clk_enable(struct clk *clk)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&clocks_lock, flags);
|
||||
if (clk->enabled++ == 0)
|
||||
clk->ops->enable(clk);
|
||||
spin_unlock_irqrestore(&clocks_lock, flags);
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(clk_enable);
|
||||
|
||||
void clk_disable(struct clk *clk)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
WARN_ON(clk->enabled == 0);
|
||||
|
||||
spin_lock_irqsave(&clocks_lock, flags);
|
||||
if (--clk->enabled == 0)
|
||||
clk->ops->disable(clk);
|
||||
spin_unlock_irqrestore(&clocks_lock, flags);
|
||||
}
|
||||
EXPORT_SYMBOL(clk_disable);
|
||||
|
||||
unsigned long clk_get_rate(struct clk *clk)
|
||||
{
|
||||
unsigned long rate;
|
||||
|
||||
if (clk->ops->getrate)
|
||||
rate = clk->ops->getrate(clk);
|
||||
else
|
||||
rate = clk->rate;
|
||||
|
||||
return rate;
|
||||
}
|
||||
EXPORT_SYMBOL(clk_get_rate);
|
||||
|
||||
void clks_register(struct clk_lookup *clks, size_t num)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < num; i++)
|
||||
clkdev_add(&clks[i]);
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
/*
|
||||
* linux/arch/arm/mach-mmp/clock.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.
|
||||
*/
|
||||
|
||||
#include <asm/clkdev.h>
|
||||
|
||||
struct clkops {
|
||||
void (*enable)(struct clk *);
|
||||
void (*disable)(struct clk *);
|
||||
unsigned long (*getrate)(struct clk *);
|
||||
};
|
||||
|
||||
struct clk {
|
||||
const struct clkops *ops;
|
||||
|
||||
void __iomem *clk_rst; /* clock reset control register */
|
||||
int fnclksel; /* functional clock select (APBC) */
|
||||
uint32_t enable_val; /* value for clock enable (APMU) */
|
||||
unsigned long rate;
|
||||
int enabled;
|
||||
};
|
||||
|
||||
extern struct clkops apbc_clk_ops;
|
||||
|
||||
#define APBC_CLK(_name, _reg, _fnclksel, _rate) \
|
||||
struct clk clk_##_name = { \
|
||||
.clk_rst = (void __iomem *)APBC_##_reg, \
|
||||
.fnclksel = _fnclksel, \
|
||||
.rate = _rate, \
|
||||
.ops = &apbc_clk_ops, \
|
||||
}
|
||||
|
||||
#define APBC_CLK_OPS(_name, _reg, _fnclksel, _rate, _ops) \
|
||||
struct clk clk_##_name = { \
|
||||
.clk_rst = (void __iomem *)APBC_##_reg, \
|
||||
.fnclksel = _fnclksel, \
|
||||
.rate = _rate, \
|
||||
.ops = _ops, \
|
||||
}
|
||||
|
||||
#define APMU_CLK(_name, _reg, _eval, _rate) \
|
||||
struct clk clk_##_name = { \
|
||||
.clk_rst = (void __iomem *)APMU_##_reg, \
|
||||
.enable_val = _eval, \
|
||||
.rate = _rate, \
|
||||
.ops = &apmu_clk_ops, \
|
||||
}
|
||||
|
||||
#define APMU_CLK_OPS(_name, _reg, _eval, _rate, _ops) \
|
||||
struct clk clk_##_name = { \
|
||||
.clk_rst = (void __iomem *)APMU_##_reg, \
|
||||
.enable_val = _eval, \
|
||||
.rate = _rate, \
|
||||
.ops = _ops, \
|
||||
}
|
||||
|
||||
#define INIT_CLKREG(_clk, _devname, _conname) \
|
||||
{ \
|
||||
.clk = _clk, \
|
||||
.dev_id = _devname, \
|
||||
.con_id = _conname, \
|
||||
}
|
||||
|
||||
extern struct clk clk_pxa168_gpio;
|
||||
extern struct clk clk_pxa168_timers;
|
||||
|
||||
extern void clks_register(struct clk_lookup *, size_t);
|
|
@ -0,0 +1,37 @@
|
|||
/*
|
||||
* linux/arch/arm/mach-mmp/common.c
|
||||
*
|
||||
* Code common to PXA168 processor lines
|
||||
*
|
||||
* 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 <linux/init.h>
|
||||
#include <linux/kernel.h>
|
||||
|
||||
#include <asm/page.h>
|
||||
#include <asm/mach/map.h>
|
||||
#include <mach/addr-map.h>
|
||||
|
||||
#include "common.h"
|
||||
|
||||
static struct map_desc standard_io_desc[] __initdata = {
|
||||
{
|
||||
.pfn = __phys_to_pfn(APB_PHYS_BASE),
|
||||
.virtual = APB_VIRT_BASE,
|
||||
.length = APB_PHYS_SIZE,
|
||||
.type = MT_DEVICE,
|
||||
}, {
|
||||
.pfn = __phys_to_pfn(AXI_PHYS_BASE),
|
||||
.virtual = AXI_VIRT_BASE,
|
||||
.length = AXI_PHYS_SIZE,
|
||||
.type = MT_DEVICE,
|
||||
},
|
||||
};
|
||||
|
||||
void __init pxa_map_io(void)
|
||||
{
|
||||
iotable_init(standard_io_desc, ARRAY_SIZE(standard_io_desc));
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
#define ARRAY_AND_SIZE(x) (x), ARRAY_SIZE(x)
|
||||
|
||||
struct sys_timer;
|
||||
|
||||
extern void timer_init(int irq);
|
||||
|
||||
extern struct sys_timer pxa168_timer;
|
||||
extern struct sys_timer pxa910_timer;
|
||||
extern void __init pxa168_init_irq(void);
|
||||
extern void __init pxa910_init_irq(void);
|
||||
|
||||
extern void __init icu_init_irq(void);
|
||||
extern void __init pxa_map_io(void);
|
|
@ -0,0 +1,69 @@
|
|||
/*
|
||||
* linux/arch/arm/mach-mmp/devices.c
|
||||
*
|
||||
* 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 <linux/init.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
|
||||
#include <asm/irq.h>
|
||||
#include <mach/devices.h>
|
||||
|
||||
int __init pxa_register_device(struct pxa_device_desc *desc,
|
||||
void *data, size_t size)
|
||||
{
|
||||
struct platform_device *pdev;
|
||||
struct resource res[2 + MAX_RESOURCE_DMA];
|
||||
int i, ret = 0, nres = 0;
|
||||
|
||||
pdev = platform_device_alloc(desc->drv_name, desc->id);
|
||||
if (pdev == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
pdev->dev.coherent_dma_mask = DMA_BIT_MASK(32);
|
||||
|
||||
memset(res, 0, sizeof(res));
|
||||
|
||||
if (desc->start != -1ul && desc->size > 0) {
|
||||
res[nres].start = desc->start;
|
||||
res[nres].end = desc->start + desc->size - 1;
|
||||
res[nres].flags = IORESOURCE_MEM;
|
||||
nres++;
|
||||
}
|
||||
|
||||
if (desc->irq != NO_IRQ) {
|
||||
res[nres].start = desc->irq;
|
||||
res[nres].end = desc->irq;
|
||||
res[nres].flags = IORESOURCE_IRQ;
|
||||
nres++;
|
||||
}
|
||||
|
||||
for (i = 0; i < MAX_RESOURCE_DMA; i++, nres++) {
|
||||
if (desc->dma[i] == 0)
|
||||
break;
|
||||
|
||||
res[nres].start = desc->dma[i];
|
||||
res[nres].end = desc->dma[i];
|
||||
res[nres].flags = IORESOURCE_DMA;
|
||||
}
|
||||
|
||||
ret = platform_device_add_resources(pdev, res, nres);
|
||||
if (ret) {
|
||||
platform_device_put(pdev);
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (data && size) {
|
||||
ret = platform_device_add_data(pdev, data, size);
|
||||
if (ret) {
|
||||
platform_device_put(pdev);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
return platform_device_add(pdev);
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
/*
|
||||
* linux/arch/arm/mach-mmp/include/mach/addr-map.h
|
||||
*
|
||||
* Common address map definitions
|
||||
*
|
||||
* 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_MACH_ADDR_MAP_H
|
||||
#define __ASM_MACH_ADDR_MAP_H
|
||||
|
||||
/* APB - Application Subsystem Peripheral Bus
|
||||
*
|
||||
* NOTE: the DMA controller registers are actually on the AXI fabric #1
|
||||
* slave port to AHB/APB bridge, due to its close relationship to those
|
||||
* peripherals on APB, let's count it into the ABP mapping area.
|
||||
*/
|
||||
#define APB_PHYS_BASE 0xd4000000
|
||||
#define APB_VIRT_BASE 0xfe000000
|
||||
#define APB_PHYS_SIZE 0x00200000
|
||||
|
||||
#define AXI_PHYS_BASE 0xd4200000
|
||||
#define AXI_VIRT_BASE 0xfe200000
|
||||
#define AXI_PHYS_SIZE 0x00200000
|
||||
|
||||
/* Static Memory Controller - Chip Select 0 and 1 */
|
||||
#define SMC_CS0_PHYS_BASE 0x80000000
|
||||
#define SMC_CS0_PHYS_SIZE 0x10000000
|
||||
#define SMC_CS1_PHYS_BASE 0x90000000
|
||||
#define SMC_CS1_PHYS_SIZE 0x10000000
|
||||
|
||||
#endif /* __ASM_MACH_ADDR_MAP_H */
|
|
@ -0,0 +1,7 @@
|
|||
#ifndef __ASM_MACH_CLKDEV_H
|
||||
#define __ASM_MACH_CLKDEV_H
|
||||
|
||||
#define __clk_get(clk) ({ 1; })
|
||||
#define __clk_put(clk) do { } while (0)
|
||||
|
||||
#endif /* __ASM_MACH_CLKDEV_H */
|
|
@ -0,0 +1,30 @@
|
|||
#ifndef __ASM_MACH_CPUTYPE_H
|
||||
#define __ASM_MACH_CPUTYPE_H
|
||||
|
||||
#include <asm/cputype.h>
|
||||
|
||||
/*
|
||||
* CPU Stepping OLD_ID CPU_ID CHIP_ID
|
||||
*
|
||||
* PXA168 A0 0x41159263 0x56158400 0x00A0A333
|
||||
* PXA910 Y0 0x41159262 0x56158000 0x00F0C910
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_CPU_PXA168
|
||||
# define __cpu_is_pxa168(id) \
|
||||
({ unsigned int _id = ((id) >> 8) & 0xff; _id == 0x84; })
|
||||
#else
|
||||
# define __cpu_is_pxa168(id) (0)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_CPU_PXA910
|
||||
# define __cpu_is_pxa910(id) \
|
||||
({ unsigned int _id = ((id) >> 8) & 0xff; _id == 0x80; })
|
||||
#else
|
||||
# define __cpu_is_pxa910(id) (0)
|
||||
#endif
|
||||
|
||||
#define cpu_is_pxa168() ({ __cpu_is_pxa168(read_cpuid_id()); })
|
||||
#define cpu_is_pxa910() ({ __cpu_is_pxa910(read_cpuid_id()); })
|
||||
|
||||
#endif /* __ASM_MACH_CPUTYPE_H */
|
|
@ -0,0 +1,23 @@
|
|||
/* arch/arm/mach-mmp/include/mach/debug-macro.S
|
||||
*
|
||||
* Debugging macro include header
|
||||
*
|
||||
* Copied from arch/arm/mach-pxa/include/mach/debug.S
|
||||
*
|
||||
* 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 <mach/addr-map.h>
|
||||
|
||||
.macro addruart,rx
|
||||
mrc p15, 0, \rx, c1, c0
|
||||
tst \rx, #1 @ MMU enabled?
|
||||
ldreq \rx, =APB_PHYS_BASE @ physical
|
||||
ldrne \rx, =APB_VIRT_BASE @ virtual
|
||||
orr \rx, \rx, #0x00017000
|
||||
.endm
|
||||
|
||||
#define UART_SHIFT 2
|
||||
#include <asm/hardware/debug-8250.S>
|
|
@ -0,0 +1,37 @@
|
|||
#include <linux/types.h>
|
||||
|
||||
#define MAX_RESOURCE_DMA 2
|
||||
|
||||
/* structure for describing the on-chip devices */
|
||||
struct pxa_device_desc {
|
||||
const char *dev_name;
|
||||
const char *drv_name;
|
||||
int id;
|
||||
int irq;
|
||||
unsigned long start;
|
||||
unsigned long size;
|
||||
int dma[MAX_RESOURCE_DMA];
|
||||
};
|
||||
|
||||
#define PXA168_DEVICE(_name, _drv, _id, _irq, _start, _size, _dma...) \
|
||||
struct pxa_device_desc pxa168_device_##_name __initdata = { \
|
||||
.dev_name = "pxa168-" #_name, \
|
||||
.drv_name = _drv, \
|
||||
.id = _id, \
|
||||
.irq = IRQ_PXA168_##_irq, \
|
||||
.start = _start, \
|
||||
.size = _size, \
|
||||
.dma = { _dma }, \
|
||||
};
|
||||
|
||||
#define PXA910_DEVICE(_name, _drv, _id, _irq, _start, _size, _dma...) \
|
||||
struct pxa_device_desc pxa910_device_##_name __initdata = { \
|
||||
.dev_name = "pxa910-" #_name, \
|
||||
.drv_name = _drv, \
|
||||
.id = _id, \
|
||||
.irq = IRQ_PXA910_##_irq, \
|
||||
.start = _start, \
|
||||
.size = _size, \
|
||||
.dma = { _dma }, \
|
||||
};
|
||||
extern int pxa_register_device(struct pxa_device_desc *, void *, size_t);
|
|
@ -0,0 +1,13 @@
|
|||
/*
|
||||
* linux/arch/arm/mach-mmp/include/mach/dma.h
|
||||
*/
|
||||
|
||||
#ifndef __ASM_MACH_DMA_H
|
||||
#define __ASM_MACH_DMA_H
|
||||
|
||||
#include <mach/addr-map.h>
|
||||
|
||||
#define DMAC_REGS_VIRT (APB_VIRT_BASE + 0x00000)
|
||||
|
||||
#include <plat/dma.h>
|
||||
#endif /* __ASM_MACH_DMA_H */
|
|
@ -0,0 +1,25 @@
|
|||
/*
|
||||
* linux/arch/arm/mach-mmp/include/mach/entry-macro.S
|
||||
*
|
||||
* 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 <mach/regs-icu.h>
|
||||
|
||||
.macro disable_fiq
|
||||
.endm
|
||||
|
||||
.macro arch_ret_to_user, tmp1, tmp2
|
||||
.endm
|
||||
|
||||
.macro get_irqnr_preamble, base, tmp
|
||||
ldr \base, =ICU_AP_IRQ_SEL_INT_NUM
|
||||
.endm
|
||||
|
||||
.macro get_irqnr_and_base, irqnr, irqstat, base, tmp
|
||||
ldr \tmp, [\base, #0]
|
||||
and \irqnr, \tmp, #0x3f
|
||||
tst \tmp, #(1 << 6)
|
||||
.endm
|
|
@ -0,0 +1,36 @@
|
|||
#ifndef __ASM_MACH_GPIO_H
|
||||
#define __ASM_MACH_GPIO_H
|
||||
|
||||
#include <mach/addr-map.h>
|
||||
#include <mach/irqs.h>
|
||||
#include <asm-generic/gpio.h>
|
||||
|
||||
#define GPIO_REGS_VIRT (APB_VIRT_BASE + 0x19000)
|
||||
|
||||
#define BANK_OFF(n) (((n) < 3) ? (n) << 2 : 0x100 + (((n) - 3) << 2))
|
||||
#define GPIO_REG(x) (*((volatile u32 *)(GPIO_REGS_VIRT + (x))))
|
||||
|
||||
#define NR_BUILTIN_GPIO (128)
|
||||
|
||||
#define gpio_to_bank(gpio) ((gpio) >> 5)
|
||||
#define gpio_to_irq(gpio) (IRQ_GPIO_START + (gpio))
|
||||
#define irq_to_gpio(irq) ((irq) - IRQ_GPIO_START)
|
||||
|
||||
|
||||
#define __gpio_is_inverted(gpio) (0)
|
||||
#define __gpio_is_occupied(gpio) (0)
|
||||
|
||||
/* NOTE: these macros are defined here to make optimization of
|
||||
* gpio_{get,set}_value() to work when 'gpio' is a constant.
|
||||
* Usage of these macros otherwise is no longer recommended,
|
||||
* use generic GPIO API whenever possible.
|
||||
*/
|
||||
#define GPIO_bit(gpio) (1 << ((gpio) & 0x1f))
|
||||
|
||||
#define GPLR(x) GPIO_REG(BANK_OFF(gpio_to_bank(x)) + 0x00)
|
||||
#define GPDR(x) GPIO_REG(BANK_OFF(gpio_to_bank(x)) + 0x0c)
|
||||
#define GPSR(x) GPIO_REG(BANK_OFF(gpio_to_bank(x)) + 0x18)
|
||||
#define GPCR(x) GPIO_REG(BANK_OFF(gpio_to_bank(x)) + 0x24)
|
||||
|
||||
#include <plat/gpio.h>
|
||||
#endif /* __ASM_MACH_GPIO_H */
|
|
@ -0,0 +1,4 @@
|
|||
#ifndef __ASM_MACH_HARDWARE_H
|
||||
#define __ASM_MACH_HARDWARE_H
|
||||
|
||||
#endif /* __ASM_MACH_HARDWARE_H */
|
|
@ -0,0 +1,21 @@
|
|||
/*
|
||||
* linux/arch/arm/mach-mmp/include/mach/io.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_MACH_IO_H
|
||||
#define __ASM_MACH_IO_H
|
||||
|
||||
#define IO_SPACE_LIMIT 0xffffffff
|
||||
|
||||
/*
|
||||
* We don't actually have real ISA nor PCI buses, but there is so many
|
||||
* drivers out there that might just work if we fake them...
|
||||
*/
|
||||
#define __io(a) __typesafe_io(a)
|
||||
#define __mem_pci(a) (a)
|
||||
|
||||
#endif /* __ASM_MACH_IO_H */
|
|
@ -0,0 +1,119 @@
|
|||
#ifndef __ASM_MACH_IRQS_H
|
||||
#define __ASM_MACH_IRQS_H
|
||||
|
||||
/*
|
||||
* Interrupt numbers for PXA168
|
||||
*/
|
||||
#define IRQ_PXA168_NONE (-1)
|
||||
#define IRQ_PXA168_SSP3 0
|
||||
#define IRQ_PXA168_SSP2 1
|
||||
#define IRQ_PXA168_SSP1 2
|
||||
#define IRQ_PXA168_SSP0 3
|
||||
#define IRQ_PXA168_PMIC_INT 4
|
||||
#define IRQ_PXA168_RTC_INT 5
|
||||
#define IRQ_PXA168_RTC_ALARM 6
|
||||
#define IRQ_PXA168_TWSI0 7
|
||||
#define IRQ_PXA168_GPU 8
|
||||
#define IRQ_PXA168_KEYPAD 9
|
||||
#define IRQ_PXA168_ONEWIRE 12
|
||||
#define IRQ_PXA168_TIMER1 13
|
||||
#define IRQ_PXA168_TIMER2 14
|
||||
#define IRQ_PXA168_TIMER3 15
|
||||
#define IRQ_PXA168_CMU 16
|
||||
#define IRQ_PXA168_SSP4 17
|
||||
#define IRQ_PXA168_MSP_WAKEUP 19
|
||||
#define IRQ_PXA168_CF_WAKEUP 20
|
||||
#define IRQ_PXA168_XD_WAKEUP 21
|
||||
#define IRQ_PXA168_MFU 22
|
||||
#define IRQ_PXA168_MSP 23
|
||||
#define IRQ_PXA168_CF 24
|
||||
#define IRQ_PXA168_XD 25
|
||||
#define IRQ_PXA168_DDR_INT 26
|
||||
#define IRQ_PXA168_UART1 27
|
||||
#define IRQ_PXA168_UART2 28
|
||||
#define IRQ_PXA168_WDT 35
|
||||
#define IRQ_PXA168_FRQ_CHANGE 38
|
||||
#define IRQ_PXA168_SDH1 39
|
||||
#define IRQ_PXA168_SDH2 40
|
||||
#define IRQ_PXA168_LCD 41
|
||||
#define IRQ_PXA168_CI 42
|
||||
#define IRQ_PXA168_USB1 44
|
||||
#define IRQ_PXA168_NAND 45
|
||||
#define IRQ_PXA168_HIFI_DMA 46
|
||||
#define IRQ_PXA168_DMA_INT0 47
|
||||
#define IRQ_PXA168_DMA_INT1 48
|
||||
#define IRQ_PXA168_GPIOX 49
|
||||
#define IRQ_PXA168_USB2 51
|
||||
#define IRQ_PXA168_AC97 57
|
||||
#define IRQ_PXA168_TWSI1 58
|
||||
#define IRQ_PXA168_PMU 60
|
||||
#define IRQ_PXA168_SM_INT 63
|
||||
|
||||
/*
|
||||
* Interrupt numbers for PXA910
|
||||
*/
|
||||
#define IRQ_PXA910_AIRQ 0
|
||||
#define IRQ_PXA910_SSP3 1
|
||||
#define IRQ_PXA910_SSP2 2
|
||||
#define IRQ_PXA910_SSP1 3
|
||||
#define IRQ_PXA910_PMIC_INT 4
|
||||
#define IRQ_PXA910_RTC_INT 5
|
||||
#define IRQ_PXA910_RTC_ALARM 6
|
||||
#define IRQ_PXA910_TWSI0 7
|
||||
#define IRQ_PXA910_GPU 8
|
||||
#define IRQ_PXA910_KEYPAD 9
|
||||
#define IRQ_PXA910_ROTARY 10
|
||||
#define IRQ_PXA910_TRACKBALL 11
|
||||
#define IRQ_PXA910_ONEWIRE 12
|
||||
#define IRQ_PXA910_AP1_TIMER1 13
|
||||
#define IRQ_PXA910_AP1_TIMER2 14
|
||||
#define IRQ_PXA910_AP1_TIMER3 15
|
||||
#define IRQ_PXA910_IPC_AP0 16
|
||||
#define IRQ_PXA910_IPC_AP1 17
|
||||
#define IRQ_PXA910_IPC_AP2 18
|
||||
#define IRQ_PXA910_IPC_AP3 19
|
||||
#define IRQ_PXA910_IPC_AP4 20
|
||||
#define IRQ_PXA910_IPC_CP0 21
|
||||
#define IRQ_PXA910_IPC_CP1 22
|
||||
#define IRQ_PXA910_IPC_CP2 23
|
||||
#define IRQ_PXA910_IPC_CP3 24
|
||||
#define IRQ_PXA910_IPC_CP4 25
|
||||
#define IRQ_PXA910_L2_DDR 26
|
||||
#define IRQ_PXA910_UART2 27
|
||||
#define IRQ_PXA910_UART3 28
|
||||
#define IRQ_PXA910_AP2_TIMER1 29
|
||||
#define IRQ_PXA910_AP2_TIMER2 30
|
||||
#define IRQ_PXA910_CP2_TIMER1 31
|
||||
#define IRQ_PXA910_CP2_TIMER2 32
|
||||
#define IRQ_PXA910_CP2_TIMER3 33
|
||||
#define IRQ_PXA910_GSSP 34
|
||||
#define IRQ_PXA910_CP2_WDT 35
|
||||
#define IRQ_PXA910_MAIN_PMU 36
|
||||
#define IRQ_PXA910_CP_FREQ_CHG 37
|
||||
#define IRQ_PXA910_AP_FREQ_CHG 38
|
||||
#define IRQ_PXA910_MMC 39
|
||||
#define IRQ_PXA910_AEU 40
|
||||
#define IRQ_PXA910_LCD 41
|
||||
#define IRQ_PXA910_CCIC 42
|
||||
#define IRQ_PXA910_IRE 43
|
||||
#define IRQ_PXA910_USB1 44
|
||||
#define IRQ_PXA910_NAND 45
|
||||
#define IRQ_PXA910_HIFI_DMA 46
|
||||
#define IRQ_PXA910_DMA_INT0 47
|
||||
#define IRQ_PXA910_DMA_INT1 48
|
||||
#define IRQ_PXA910_AP_GPIO 49
|
||||
#define IRQ_PXA910_AP2_TIMER3 50
|
||||
#define IRQ_PXA910_USB2 51
|
||||
#define IRQ_PXA910_TWSI1 54
|
||||
#define IRQ_PXA910_CP_GPIO 55
|
||||
#define IRQ_PXA910_UART1 59 /* Slow UART */
|
||||
#define IRQ_PXA910_AP_PMU 60
|
||||
#define IRQ_PXA910_SM_INT 63 /* from PinMux */
|
||||
|
||||
#define IRQ_GPIO_START 64
|
||||
#define IRQ_GPIO_NUM 128
|
||||
#define IRQ_GPIO(x) (IRQ_GPIO_START + (x))
|
||||
|
||||
#define NR_IRQS (IRQ_GPIO_START + IRQ_GPIO_NUM)
|
||||
|
||||
#endif /* __ASM_MACH_IRQS_H */
|
|
@ -0,0 +1,14 @@
|
|||
/*
|
||||
* linux/arch/arm/mach-mmp/include/mach/memory.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_MACH_MEMORY_H
|
||||
#define __ASM_MACH_MEMORY_H
|
||||
|
||||
#define PHYS_OFFSET UL(0x00000000)
|
||||
|
||||
#endif /* __ASM_MACH_MEMORY_H */
|
|
@ -0,0 +1,258 @@
|
|||
#ifndef __ASM_MACH_MFP_PXA168_H
|
||||
#define __ASM_MACH_MFP_PXA168_H
|
||||
|
||||
#include <mach/mfp.h>
|
||||
|
||||
/* GPIO */
|
||||
#define GPIO0_GPIO MFP_CFG(GPIO0, AF5)
|
||||
#define GPIO1_GPIO MFP_CFG(GPIO1, AF5)
|
||||
#define GPIO2_GPIO MFP_CFG(GPIO2, AF5)
|
||||
#define GPIO3_GPIO MFP_CFG(GPIO3, AF5)
|
||||
#define GPIO4_GPIO MFP_CFG(GPIO4, AF5)
|
||||
#define GPIO5_GPIO MFP_CFG(GPIO5, AF5)
|
||||
#define GPIO6_GPIO MFP_CFG(GPIO6, AF5)
|
||||
#define GPIO7_GPIO MFP_CFG(GPIO7, AF5)
|
||||
#define GPIO8_GPIO MFP_CFG(GPIO8, AF5)
|
||||
#define GPIO9_GPIO MFP_CFG(GPIO9, AF5)
|
||||
#define GPIO10_GPIO MFP_CFG(GPIO10, AF5)
|
||||
#define GPIO11_GPIO MFP_CFG(GPIO11, AF5)
|
||||
#define GPIO12_GPIO MFP_CFG(GPIO12, AF5)
|
||||
#define GPIO13_GPIO MFP_CFG(GPIO13, AF5)
|
||||
#define GPIO14_GPIO MFP_CFG(GPIO14, AF5)
|
||||
#define GPIO15_GPIO MFP_CFG(GPIO15, AF5)
|
||||
#define GPIO16_GPIO MFP_CFG(GPIO16, AF0)
|
||||
#define GPIO17_GPIO MFP_CFG(GPIO17, AF5)
|
||||
#define GPIO18_GPIO MFP_CFG(GPIO18, AF0)
|
||||
#define GPIO19_GPIO MFP_CFG(GPIO19, AF5)
|
||||
#define GPIO20_GPIO MFP_CFG(GPIO20, AF0)
|
||||
#define GPIO21_GPIO MFP_CFG(GPIO21, AF5)
|
||||
#define GPIO22_GPIO MFP_CFG(GPIO22, AF5)
|
||||
#define GPIO23_GPIO MFP_CFG(GPIO23, AF5)
|
||||
#define GPIO24_GPIO MFP_CFG(GPIO24, AF5)
|
||||
#define GPIO25_GPIO MFP_CFG(GPIO25, AF5)
|
||||
#define GPIO26_GPIO MFP_CFG(GPIO26, AF0)
|
||||
#define GPIO27_GPIO MFP_CFG(GPIO27, AF5)
|
||||
#define GPIO28_GPIO MFP_CFG(GPIO28, AF5)
|
||||
#define GPIO29_GPIO MFP_CFG(GPIO29, AF5)
|
||||
#define GPIO30_GPIO MFP_CFG(GPIO30, AF5)
|
||||
#define GPIO31_GPIO MFP_CFG(GPIO31, AF5)
|
||||
#define GPIO32_GPIO MFP_CFG(GPIO32, AF5)
|
||||
#define GPIO33_GPIO MFP_CFG(GPIO33, AF5)
|
||||
#define GPIO34_GPIO MFP_CFG(GPIO34, AF0)
|
||||
#define GPIO35_GPIO MFP_CFG(GPIO35, AF0)
|
||||
#define GPIO36_GPIO MFP_CFG(GPIO36, AF0)
|
||||
#define GPIO37_GPIO MFP_CFG(GPIO37, AF0)
|
||||
#define GPIO38_GPIO MFP_CFG(GPIO38, AF0)
|
||||
#define GPIO39_GPIO MFP_CFG(GPIO39, AF0)
|
||||
#define GPIO40_GPIO MFP_CFG(GPIO40, AF0)
|
||||
#define GPIO41_GPIO MFP_CFG(GPIO41, AF0)
|
||||
#define GPIO42_GPIO MFP_CFG(GPIO42, AF0)
|
||||
#define GPIO43_GPIO MFP_CFG(GPIO43, AF0)
|
||||
#define GPIO44_GPIO MFP_CFG(GPIO44, AF0)
|
||||
#define GPIO45_GPIO MFP_CFG(GPIO45, AF0)
|
||||
#define GPIO46_GPIO MFP_CFG(GPIO46, AF0)
|
||||
#define GPIO47_GPIO MFP_CFG(GPIO47, AF0)
|
||||
#define GPIO48_GPIO MFP_CFG(GPIO48, AF0)
|
||||
#define GPIO49_GPIO MFP_CFG(GPIO49, AF0)
|
||||
#define GPIO50_GPIO MFP_CFG(GPIO50, AF0)
|
||||
#define GPIO51_GPIO MFP_CFG(GPIO51, AF0)
|
||||
#define GPIO52_GPIO MFP_CFG(GPIO52, AF0)
|
||||
#define GPIO53_GPIO MFP_CFG(GPIO53, AF0)
|
||||
#define GPIO54_GPIO MFP_CFG(GPIO54, AF0)
|
||||
#define GPIO55_GPIO MFP_CFG(GPIO55, AF0)
|
||||
#define GPIO56_GPIO MFP_CFG(GPIO56, AF0)
|
||||
#define GPIO57_GPIO MFP_CFG(GPIO57, AF0)
|
||||
#define GPIO58_GPIO MFP_CFG(GPIO58, AF0)
|
||||
#define GPIO59_GPIO MFP_CFG(GPIO59, AF0)
|
||||
#define GPIO60_GPIO MFP_CFG(GPIO60, AF0)
|
||||
#define GPIO61_GPIO MFP_CFG(GPIO61, AF0)
|
||||
#define GPIO62_GPIO MFP_CFG(GPIO62, AF0)
|
||||
#define GPIO63_GPIO MFP_CFG(GPIO63, AF0)
|
||||
#define GPIO64_GPIO MFP_CFG(GPIO64, AF0)
|
||||
#define GPIO65_GPIO MFP_CFG(GPIO65, AF0)
|
||||
#define GPIO66_GPIO MFP_CFG(GPIO66, AF0)
|
||||
#define GPIO67_GPIO MFP_CFG(GPIO67, AF0)
|
||||
#define GPIO68_GPIO MFP_CFG(GPIO68, AF0)
|
||||
#define GPIO69_GPIO MFP_CFG(GPIO69, AF0)
|
||||
#define GPIO70_GPIO MFP_CFG(GPIO70, AF0)
|
||||
#define GPIO71_GPIO MFP_CFG(GPIO71, AF0)
|
||||
#define GPIO72_GPIO MFP_CFG(GPIO72, AF0)
|
||||
#define GPIO73_GPIO MFP_CFG(GPIO73, AF0)
|
||||
#define GPIO74_GPIO MFP_CFG(GPIO74, AF0)
|
||||
#define GPIO75_GPIO MFP_CFG(GPIO75, AF0)
|
||||
#define GPIO76_GPIO MFP_CFG(GPIO76, AF0)
|
||||
#define GPIO77_GPIO MFP_CFG(GPIO77, AF0)
|
||||
#define GPIO78_GPIO MFP_CFG(GPIO78, AF0)
|
||||
#define GPIO79_GPIO MFP_CFG(GPIO79, AF0)
|
||||
#define GPIO80_GPIO MFP_CFG(GPIO80, AF0)
|
||||
#define GPIO81_GPIO MFP_CFG(GPIO81, AF0)
|
||||
#define GPIO82_GPIO MFP_CFG(GPIO82, AF0)
|
||||
#define GPIO83_GPIO MFP_CFG(GPIO83, AF0)
|
||||
#define GPIO84_GPIO MFP_CFG(GPIO84, AF0)
|
||||
#define GPIO85_GPIO MFP_CFG(GPIO85, AF0)
|
||||
#define GPIO86_GPIO MFP_CFG(GPIO86, AF0)
|
||||
#define GPIO87_GPIO MFP_CFG(GPIO87, AF0)
|
||||
#define GPIO88_GPIO MFP_CFG(GPIO88, AF0)
|
||||
#define GPIO89_GPIO MFP_CFG(GPIO89, AF0)
|
||||
#define GPIO90_GPIO MFP_CFG(GPIO90, AF0)
|
||||
#define GPIO91_GPIO MFP_CFG(GPIO91, AF0)
|
||||
#define GPIO92_GPIO MFP_CFG(GPIO92, AF0)
|
||||
#define GPIO93_GPIO MFP_CFG(GPIO93, AF0)
|
||||
#define GPIO94_GPIO MFP_CFG(GPIO94, AF0)
|
||||
#define GPIO95_GPIO MFP_CFG(GPIO95, AF0)
|
||||
#define GPIO96_GPIO MFP_CFG(GPIO96, AF0)
|
||||
#define GPIO97_GPIO MFP_CFG(GPIO97, AF0)
|
||||
#define GPIO98_GPIO MFP_CFG(GPIO98, AF0)
|
||||
#define GPIO99_GPIO MFP_CFG(GPIO99, AF0)
|
||||
#define GPIO100_GPIO MFP_CFG(GPIO100, AF0)
|
||||
#define GPIO101_GPIO MFP_CFG(GPIO101, AF0)
|
||||
#define GPIO102_GPIO MFP_CFG(GPIO102, AF0)
|
||||
#define GPIO103_GPIO MFP_CFG(GPIO103, AF0)
|
||||
#define GPIO104_GPIO MFP_CFG(GPIO104, AF0)
|
||||
#define GPIO105_GPIO MFP_CFG(GPIO105, AF0)
|
||||
#define GPIO106_GPIO MFP_CFG(GPIO106, AF0)
|
||||
#define GPIO107_GPIO MFP_CFG(GPIO107, AF0)
|
||||
#define GPIO108_GPIO MFP_CFG(GPIO108, AF0)
|
||||
#define GPIO109_GPIO MFP_CFG(GPIO109, AF0)
|
||||
#define GPIO110_GPIO MFP_CFG(GPIO110, AF0)
|
||||
#define GPIO111_GPIO MFP_CFG(GPIO111, AF0)
|
||||
#define GPIO112_GPIO MFP_CFG(GPIO112, AF0)
|
||||
#define GPIO113_GPIO MFP_CFG(GPIO113, AF0)
|
||||
#define GPIO114_GPIO MFP_CFG(GPIO114, AF0)
|
||||
#define GPIO115_GPIO MFP_CFG(GPIO115, AF0)
|
||||
#define GPIO116_GPIO MFP_CFG(GPIO116, AF0)
|
||||
#define GPIO117_GPIO MFP_CFG(GPIO117, AF0)
|
||||
#define GPIO118_GPIO MFP_CFG(GPIO118, AF0)
|
||||
#define GPIO119_GPIO MFP_CFG(GPIO119, AF0)
|
||||
#define GPIO120_GPIO MFP_CFG(GPIO120, AF0)
|
||||
#define GPIO121_GPIO MFP_CFG(GPIO121, AF0)
|
||||
#define GPIO122_GPIO MFP_CFG(GPIO122, AF0)
|
||||
|
||||
/* DFI */
|
||||
#define GPIO0_DFI_D15 MFP_CFG(GPIO0, AF0)
|
||||
#define GPIO1_DFI_D14 MFP_CFG(GPIO1, AF0)
|
||||
#define GPIO2_DFI_D13 MFP_CFG(GPIO2, AF0)
|
||||
#define GPIO3_DFI_D12 MFP_CFG(GPIO3, AF0)
|
||||
#define GPIO4_DFI_D11 MFP_CFG(GPIO4, AF0)
|
||||
#define GPIO5_DFI_D10 MFP_CFG(GPIO5, AF0)
|
||||
#define GPIO6_DFI_D9 MFP_CFG(GPIO6, AF0)
|
||||
#define GPIO7_DFI_D8 MFP_CFG(GPIO7, AF0)
|
||||
#define GPIO8_DFI_D7 MFP_CFG(GPIO8, AF0)
|
||||
#define GPIO9_DFI_D6 MFP_CFG(GPIO9, AF0)
|
||||
#define GPIO10_DFI_D5 MFP_CFG(GPIO10, AF0)
|
||||
#define GPIO11_DFI_D4 MFP_CFG(GPIO11, AF0)
|
||||
#define GPIO12_DFI_D3 MFP_CFG(GPIO12, AF0)
|
||||
#define GPIO13_DFI_D2 MFP_CFG(GPIO13, AF0)
|
||||
#define GPIO14_DFI_D1 MFP_CFG(GPIO14, AF0)
|
||||
#define GPIO15_DFI_D0 MFP_CFG(GPIO15, AF0)
|
||||
|
||||
#define GPIO30_DFI_ADDR0 MFP_CFG(GPIO30, AF0)
|
||||
#define GPIO31_DFI_ADDR1 MFP_CFG(GPIO31, AF0)
|
||||
#define GPIO32_DFI_ADDR2 MFP_CFG(GPIO32, AF0)
|
||||
#define GPIO33_DFI_ADDR3 MFP_CFG(GPIO33, AF0)
|
||||
|
||||
/* NAND */
|
||||
#define GPIO16_ND_nCS0 MFP_CFG(GPIO16, AF1)
|
||||
#define GPIO17_ND_nWE MFP_CFG(GPIO17, AF0)
|
||||
#define GPIO21_ND_ALE MFP_CFG(GPIO21, AF0)
|
||||
#define GPIO22_ND_CLE MFP_CFG(GPIO22, AF0)
|
||||
#define GPIO24_ND_nRE MFP_CFG(GPIO24, AF0)
|
||||
#define GPIO26_ND_RnB1 MFP_CFG(GPIO26, AF1)
|
||||
#define GPIO27_ND_RnB2 MFP_CFG(GPIO27, AF1)
|
||||
|
||||
/* Static Memory Controller */
|
||||
#define GPIO18_SMC_nCS0 MFP_CFG(GPIO18, AF3)
|
||||
#define GPIO18_SMC_nCS1 MFP_CFG(GPIO18, AF2)
|
||||
#define GPIO16_SMC_nCS0 MFP_CFG(GPIO16, AF2)
|
||||
#define GPIO16_SMC_nCS1 MFP_CFG(GPIO16, AF3)
|
||||
#define GPIO19_SMC_nCS0 MFP_CFG(GPIO19, AF0)
|
||||
#define GPIO20_SMC_nCS1 MFP_CFG(GPIO20, AF2)
|
||||
#define GPIO23_SMC_nLUA MFP_CFG(GPIO23, AF0)
|
||||
#define GPIO25_SMC_nLLA MFP_CFG(GPIO25, AF0)
|
||||
#define GPIO27_SMC_IRQ MFP_CFG(GPIO27, AF0)
|
||||
#define GPIO28_SMC_RDY MFP_CFG(GPIO28, AF0)
|
||||
#define GPIO29_SMC_SCLK MFP_CFG(GPIO29, AF0)
|
||||
#define GPIO34_SMC_nCS1 MFP_CFG(GPIO34, AF2)
|
||||
#define GPIO35_SMC_BE1 MFP_CFG(GPIO35, AF2)
|
||||
#define GPIO36_SMC_BE2 MFP_CFG(GPIO36, AF2)
|
||||
|
||||
/* Compact Flash */
|
||||
#define GPIO19_CF_nCE1 MFP_CFG(GPIO19, AF3)
|
||||
#define GPIO20_CF_nCE2 MFP_CFG(GPIO20, AF3)
|
||||
#define GPIO23_CF_nALE MFP_CFG(GPIO23, AF3)
|
||||
#define GPIO25_CF_nRESET MFP_CFG(GPIO25, AF3)
|
||||
#define GPIO28_CF_RDY MFP_CFG(GPIO28, AF3)
|
||||
#define GPIO29_CF_STSCH MFP_CFG(GPIO29, AF3)
|
||||
#define GPIO30_CF_nREG MFP_CFG(GPIO30, AF3)
|
||||
#define GPIO31_CF_nIOIS16 MFP_CFG(GPIO31, AF3)
|
||||
#define GPIO32_CF_nCD1 MFP_CFG(GPIO32, AF3)
|
||||
#define GPIO33_CF_nCD2 MFP_CFG(GPIO33, AF3)
|
||||
|
||||
/* UART1 */
|
||||
#define GPIO107_UART1_TXD MFP_CFG_DRV(GPIO107, AF1, FAST)
|
||||
#define GPIO107_UART1_RXD MFP_CFG_DRV(GPIO107, AF2, FAST)
|
||||
#define GPIO108_UART1_RXD MFP_CFG_DRV(GPIO108, AF1, FAST)
|
||||
#define GPIO108_UART1_TXD MFP_CFG_DRV(GPIO108, AF2, FAST)
|
||||
#define GPIO109_UART1_CTS MFP_CFG(GPIO109, AF1)
|
||||
#define GPIO109_UART1_RTS MFP_CFG(GPIO109, AF2)
|
||||
#define GPIO110_UART1_RTS MFP_CFG(GPIO110, AF1)
|
||||
#define GPIO110_UART1_CTS MFP_CFG(GPIO110, AF2)
|
||||
#define GPIO111_UART1_RI MFP_CFG(GPIO111, AF1)
|
||||
#define GPIO111_UART1_DSR MFP_CFG(GPIO111, AF2)
|
||||
#define GPIO112_UART1_DTR MFP_CFG(GPIO111, AF1)
|
||||
#define GPIO112_UART1_DCD MFP_CFG(GPIO112, AF2)
|
||||
|
||||
/* MMC1 */
|
||||
#define GPIO37_MMC1_DAT7 MFP_CFG(GPIO37, AF1)
|
||||
#define GPIO38_MMC1_DAT6 MFP_CFG(GPIO38, AF1)
|
||||
#define GPIO54_MMC1_DAT5 MFP_CFG(GPIO54, AF1)
|
||||
#define GPIO48_MMC1_DAT4 MFP_CFG(GPIO48, AF1)
|
||||
#define GPIO51_MMC1_DAT3 MFP_CFG(GPIO51, AF1)
|
||||
#define GPIO52_MMC1_DAT2 MFP_CFG(GPIO52, AF1)
|
||||
#define GPIO40_MMC1_DAT1 MFP_CFG(GPIO40, AF1)
|
||||
#define GPIO41_MMC1_DAT0 MFP_CFG(GPIO41, AF1)
|
||||
#define GPIO49_MMC1_CMD MFP_CFG(GPIO49, AF1)
|
||||
#define GPIO43_MMC1_CLK MFP_CFG(GPIO43, AF1)
|
||||
#define GPIO53_MMC1_CD MFP_CFG(GPIO53, AF1)
|
||||
#define GPIO46_MMC1_WP MFP_CFG(GPIO46, AF1)
|
||||
|
||||
/* LCD */
|
||||
#define GPIO84_LCD_CS MFP_CFG(GPIO84, AF1)
|
||||
#define GPIO60_LCD_DD0 MFP_CFG(GPIO60, AF1)
|
||||
#define GPIO61_LCD_DD1 MFP_CFG(GPIO61, AF1)
|
||||
#define GPIO70_LCD_DD10 MFP_CFG(GPIO70, AF1)
|
||||
#define GPIO71_LCD_DD11 MFP_CFG(GPIO71, AF1)
|
||||
#define GPIO72_LCD_DD12 MFP_CFG(GPIO72, AF1)
|
||||
#define GPIO73_LCD_DD13 MFP_CFG(GPIO73, AF1)
|
||||
#define GPIO74_LCD_DD14 MFP_CFG(GPIO74, AF1)
|
||||
#define GPIO75_LCD_DD15 MFP_CFG(GPIO75, AF1)
|
||||
#define GPIO76_LCD_DD16 MFP_CFG(GPIO76, AF1)
|
||||
#define GPIO77_LCD_DD17 MFP_CFG(GPIO77, AF1)
|
||||
#define GPIO78_LCD_DD18 MFP_CFG(GPIO78, AF1)
|
||||
#define GPIO79_LCD_DD19 MFP_CFG(GPIO79, AF1)
|
||||
#define GPIO62_LCD_DD2 MFP_CFG(GPIO62, AF1)
|
||||
#define GPIO80_LCD_DD20 MFP_CFG(GPIO80, AF1)
|
||||
#define GPIO81_LCD_DD21 MFP_CFG(GPIO81, AF1)
|
||||
#define GPIO82_LCD_DD22 MFP_CFG(GPIO82, AF1)
|
||||
#define GPIO83_LCD_DD23 MFP_CFG(GPIO83, AF1)
|
||||
#define GPIO63_LCD_DD3 MFP_CFG(GPIO63, AF1)
|
||||
#define GPIO64_LCD_DD4 MFP_CFG(GPIO64, AF1)
|
||||
#define GPIO65_LCD_DD5 MFP_CFG(GPIO65, AF1)
|
||||
#define GPIO66_LCD_DD6 MFP_CFG(GPIO66, AF1)
|
||||
#define GPIO67_LCD_DD7 MFP_CFG(GPIO67, AF1)
|
||||
#define GPIO68_LCD_DD8 MFP_CFG(GPIO68, AF1)
|
||||
#define GPIO69_LCD_DD9 MFP_CFG(GPIO69, AF1)
|
||||
#define GPIO59_LCD_DENA_BIAS MFP_CFG(GPIO59, AF1)
|
||||
#define GPIO56_LCD_FCLK_RD MFP_CFG(GPIO56, AF1)
|
||||
#define GPIO57_LCD_LCLK_A0 MFP_CFG(GPIO57, AF1)
|
||||
#define GPIO58_LCD_PCLK_WR MFP_CFG(GPIO58, AF1)
|
||||
#define GPIO85_LCD_VSYNC MFP_CFG(GPIO85, AF1)
|
||||
|
||||
/* I2S */
|
||||
#define GPIO113_I2S_MCLK MFP_CFG(GPIO113,AF6)
|
||||
#define GPIO114_I2S_FRM MFP_CFG(GPIO114,AF1)
|
||||
#define GPIO115_I2S_BCLK MFP_CFG(GPIO115,AF1)
|
||||
#define GPIO116_I2S_RXD MFP_CFG(GPIO116,AF2)
|
||||
#define GPIO117_I2S_TXD MFP_CFG(GPIO117,AF2)
|
||||
|
||||
#endif /* __ASM_MACH_MFP_PXA168_H */
|
|
@ -0,0 +1,157 @@
|
|||
#ifndef __ASM_MACH_MFP_PXA910_H
|
||||
#define __ASM_MACH_MFP_PXA910_H
|
||||
|
||||
#include <mach/mfp.h>
|
||||
|
||||
/* UART2 */
|
||||
#define GPIO47_UART2_RXD MFP_CFG(GPIO47, AF6)
|
||||
#define GPIO48_UART2_TXD MFP_CFG(GPIO48, AF6)
|
||||
|
||||
/* UART3 */
|
||||
#define GPIO31_UART3_RXD MFP_CFG(GPIO31, AF4)
|
||||
#define GPIO32_UART3_TXD MFP_CFG(GPIO32, AF4)
|
||||
|
||||
/*IRDA*/
|
||||
#define GPIO51_IRDA_SHDN MFP_CFG(GPIO51, AF0)
|
||||
|
||||
/* SMC */
|
||||
#define SM_nCS0_nCS0 MFP_CFG(SM_nCS0, AF0)
|
||||
#define SM_ADV_SM_ADV MFP_CFG(SM_ADV, AF0)
|
||||
#define SM_SCLK_SM_SCLK MFP_CFG(SM_SCLK, AF0)
|
||||
#define SM_SCLK_SM_SCLK MFP_CFG(SM_SCLK, AF0)
|
||||
#define SM_BE0_SM_BE0 MFP_CFG(SM_BE0, AF1)
|
||||
#define SM_BE1_SM_BE1 MFP_CFG(SM_BE1, AF1)
|
||||
|
||||
/* I2C */
|
||||
#define GPIO53_CI2C_SCL MFP_CFG(GPIO53, AF2)
|
||||
#define GPIO54_CI2C_SDA MFP_CFG(GPIO54, AF2)
|
||||
|
||||
/* SSP1 (I2S) */
|
||||
#define GPIO24_SSP1_SDATA_IN MFP_CFG_DRV(GPIO24, AF1, MEDIUM)
|
||||
#define GPIO21_SSP1_BITCLK MFP_CFG_DRV(GPIO21, AF1, MEDIUM)
|
||||
#define GPIO20_SSP1_SYSCLK MFP_CFG_DRV(GPIO20, AF1, MEDIUM)
|
||||
#define GPIO22_SSP1_SYNC MFP_CFG_DRV(GPIO22, AF1, MEDIUM)
|
||||
#define GPIO23_SSP1_DATA_OUT MFP_CFG_DRV(GPIO23, AF1, MEDIUM)
|
||||
#define GPIO124_MN_CLK_OUT MFP_CFG_DRV(GPIO124, AF1, MEDIUM)
|
||||
#define GPIO123_CLK_REQ MFP_CFG_DRV(GPIO123, AF0, MEDIUM)
|
||||
|
||||
/* DFI */
|
||||
#define DF_IO0_ND_IO0 MFP_CFG(DF_IO0, AF0)
|
||||
#define DF_IO1_ND_IO1 MFP_CFG(DF_IO1, AF0)
|
||||
#define DF_IO2_ND_IO2 MFP_CFG(DF_IO2, AF0)
|
||||
#define DF_IO3_ND_IO3 MFP_CFG(DF_IO3, AF0)
|
||||
#define DF_IO4_ND_IO4 MFP_CFG(DF_IO4, AF0)
|
||||
#define DF_IO5_ND_IO5 MFP_CFG(DF_IO5, AF0)
|
||||
#define DF_IO6_ND_IO6 MFP_CFG(DF_IO6, AF0)
|
||||
#define DF_IO7_ND_IO7 MFP_CFG(DF_IO7, AF0)
|
||||
#define DF_IO8_ND_IO8 MFP_CFG(DF_IO8, AF0)
|
||||
#define DF_IO9_ND_IO9 MFP_CFG(DF_IO9, AF0)
|
||||
#define DF_IO10_ND_IO10 MFP_CFG(DF_IO10, AF0)
|
||||
#define DF_IO11_ND_IO11 MFP_CFG(DF_IO11, AF0)
|
||||
#define DF_IO12_ND_IO12 MFP_CFG(DF_IO12, AF0)
|
||||
#define DF_IO13_ND_IO13 MFP_CFG(DF_IO13, AF0)
|
||||
#define DF_IO14_ND_IO14 MFP_CFG(DF_IO14, AF0)
|
||||
#define DF_IO15_ND_IO15 MFP_CFG(DF_IO15, AF0)
|
||||
#define DF_nCS0_SM_nCS2_nCS0 MFP_CFG(DF_nCS0_SM_nCS2, AF0)
|
||||
#define DF_ALE_SM_WEn_ND_ALE MFP_CFG(DF_ALE_SM_WEn, AF1)
|
||||
#define DF_CLE_SM_OEn_ND_CLE MFP_CFG(DF_CLE_SM_OEn, AF0)
|
||||
#define DF_WEn_DF_WEn MFP_CFG(DF_WEn, AF1)
|
||||
#define DF_REn_DF_REn MFP_CFG(DF_REn, AF1)
|
||||
#define DF_RDY0_DF_RDY0 MFP_CFG(DF_RDY0, AF0)
|
||||
|
||||
/*keypad*/
|
||||
#define GPIO00_KP_MKIN0 MFP_CFG(GPIO0, AF1)
|
||||
#define GPIO01_KP_MKOUT0 MFP_CFG(GPIO1, AF1)
|
||||
#define GPIO02_KP_MKIN1 MFP_CFG(GPIO2, AF1)
|
||||
#define GPIO03_KP_MKOUT1 MFP_CFG(GPIO3, AF1)
|
||||
#define GPIO04_KP_MKIN2 MFP_CFG(GPIO4, AF1)
|
||||
#define GPIO05_KP_MKOUT2 MFP_CFG(GPIO5, AF1)
|
||||
#define GPIO06_KP_MKIN3 MFP_CFG(GPIO6, AF1)
|
||||
#define GPIO07_KP_MKOUT3 MFP_CFG(GPIO7, AF1)
|
||||
#define GPIO08_KP_MKIN4 MFP_CFG(GPIO8, AF1)
|
||||
#define GPIO09_KP_MKOUT4 MFP_CFG(GPIO9, AF1)
|
||||
#define GPIO10_KP_MKIN5 MFP_CFG(GPIO10, AF1)
|
||||
#define GPIO11_KP_MKOUT5 MFP_CFG(GPIO11, AF1)
|
||||
#define GPIO12_KP_MKIN6 MFP_CFG(GPIO12, AF1)
|
||||
#define GPIO13_KP_MKOUT6 MFP_CFG(GPIO13, AF1)
|
||||
#define GPIO14_KP_MKIN7 MFP_CFG(GPIO14, AF1)
|
||||
#define GPIO15_KP_MKOUT7 MFP_CFG(GPIO15, AF1)
|
||||
#define GPIO16_KP_DKIN0 MFP_CFG(GPIO16, AF1)
|
||||
#define GPIO17_KP_DKIN1 MFP_CFG(GPIO17, AF1)
|
||||
#define GPIO18_KP_DKIN2 MFP_CFG(GPIO18, AF1)
|
||||
#define GPIO19_KP_DKIN3 MFP_CFG(GPIO19, AF1)
|
||||
|
||||
/* LCD */
|
||||
#define GPIO81_LCD_FCLK MFP_CFG(GPIO81, AF1)
|
||||
#define GPIO82_LCD_LCLK MFP_CFG(GPIO82, AF1)
|
||||
#define GPIO83_LCD_PCLK MFP_CFG(GPIO83, AF1)
|
||||
#define GPIO84_LCD_DENA MFP_CFG(GPIO84, AF1)
|
||||
#define GPIO85_LCD_DD0 MFP_CFG(GPIO85, AF1)
|
||||
#define GPIO86_LCD_DD1 MFP_CFG(GPIO86, AF1)
|
||||
#define GPIO87_LCD_DD2 MFP_CFG(GPIO87, AF1)
|
||||
#define GPIO88_LCD_DD3 MFP_CFG(GPIO88, AF1)
|
||||
#define GPIO89_LCD_DD4 MFP_CFG(GPIO89, AF1)
|
||||
#define GPIO90_LCD_DD5 MFP_CFG(GPIO90, AF1)
|
||||
#define GPIO91_LCD_DD6 MFP_CFG(GPIO91, AF1)
|
||||
#define GPIO92_LCD_DD7 MFP_CFG(GPIO92, AF1)
|
||||
#define GPIO93_LCD_DD8 MFP_CFG(GPIO93, AF1)
|
||||
#define GPIO94_LCD_DD9 MFP_CFG(GPIO94, AF1)
|
||||
#define GPIO95_LCD_DD10 MFP_CFG(GPIO95, AF1)
|
||||
#define GPIO96_LCD_DD11 MFP_CFG(GPIO96, AF1)
|
||||
#define GPIO97_LCD_DD12 MFP_CFG(GPIO97, AF1)
|
||||
#define GPIO98_LCD_DD13 MFP_CFG(GPIO98, AF1)
|
||||
#define GPIO100_LCD_DD14 MFP_CFG(GPIO100, AF1)
|
||||
#define GPIO101_LCD_DD15 MFP_CFG(GPIO101, AF1)
|
||||
#define GPIO102_LCD_DD16 MFP_CFG(GPIO102, AF1)
|
||||
#define GPIO103_LCD_DD17 MFP_CFG(GPIO103, AF1)
|
||||
#define GPIO104_LCD_DD18 MFP_CFG(GPIO104, AF1)
|
||||
#define GPIO105_LCD_DD19 MFP_CFG(GPIO105, AF1)
|
||||
#define GPIO106_LCD_DD20 MFP_CFG(GPIO106, AF1)
|
||||
#define GPIO107_LCD_DD21 MFP_CFG(GPIO107, AF1)
|
||||
#define GPIO108_LCD_DD22 MFP_CFG(GPIO108, AF1)
|
||||
#define GPIO109_LCD_DD23 MFP_CFG(GPIO109, AF1)
|
||||
|
||||
#define GPIO104_LCD_SPIDOUT MFP_CFG(GPIO104, AF3)
|
||||
#define GPIO105_LCD_SPIDIN MFP_CFG(GPIO105, AF3)
|
||||
#define GPIO107_LCD_CS1 MFP_CFG(GPIO107, AF3)
|
||||
#define GPIO108_LCD_DCLK MFP_CFG(GPIO108, AF3)
|
||||
|
||||
#define GPIO106_LCD_RESET MFP_CFG(GPIO106, AF0)
|
||||
|
||||
/*smart panel*/
|
||||
#define GPIO82_LCD_A0 MFP_CFG(GPIO82, AF0)
|
||||
#define GPIO83_LCD_WR MFP_CFG(GPIO83, AF0)
|
||||
#define GPIO103_LCD_CS MFP_CFG(GPIO103, AF0)
|
||||
|
||||
/*1wire*/
|
||||
#define GPIO106_1WIRE MFP_CFG(GPIO106, AF3)
|
||||
|
||||
/*CCIC*/
|
||||
#define GPIO67_CCIC_IN7 MFP_CFG_DRV(GPIO67, AF1, MEDIUM)
|
||||
#define GPIO68_CCIC_IN6 MFP_CFG_DRV(GPIO68, AF1, MEDIUM)
|
||||
#define GPIO69_CCIC_IN5 MFP_CFG_DRV(GPIO69, AF1, MEDIUM)
|
||||
#define GPIO70_CCIC_IN4 MFP_CFG_DRV(GPIO70, AF1, MEDIUM)
|
||||
#define GPIO71_CCIC_IN3 MFP_CFG_DRV(GPIO71, AF1, MEDIUM)
|
||||
#define GPIO72_CCIC_IN2 MFP_CFG_DRV(GPIO72, AF1, MEDIUM)
|
||||
#define GPIO73_CCIC_IN1 MFP_CFG_DRV(GPIO73, AF1, MEDIUM)
|
||||
#define GPIO74_CCIC_IN0 MFP_CFG_DRV(GPIO74, AF1, MEDIUM)
|
||||
#define GPIO75_CAM_HSYNC MFP_CFG_DRV(GPIO75, AF1, MEDIUM)
|
||||
#define GPIO76_CAM_VSYNC MFP_CFG_DRV(GPIO76, AF1, MEDIUM)
|
||||
#define GPIO77_CAM_MCLK MFP_CFG_DRV(GPIO77, AF1, MEDIUM)
|
||||
#define GPIO78_CAM_PCLK MFP_CFG_DRV(GPIO78, AF1, MEDIUM)
|
||||
|
||||
/* MMC1 */
|
||||
#define MMC1_DAT7_MMC1_DAT7 MFP_CFG_DRV(MMC1_DAT7, AF0, MEDIUM)
|
||||
#define MMC1_DAT6_MMC1_DAT6 MFP_CFG_DRV(MMC1_DAT6, AF0, MEDIUM)
|
||||
#define MMC1_DAT5_MMC1_DAT5 MFP_CFG_DRV(MMC1_DAT5, AF0, MEDIUM)
|
||||
#define MMC1_DAT4_MMC1_DAT4 MFP_CFG_DRV(MMC1_DAT4, AF0, MEDIUM)
|
||||
#define MMC1_DAT3_MMC1_DAT3 MFP_CFG_DRV(MMC1_DAT3, AF0, MEDIUM)
|
||||
#define MMC1_DAT2_MMC1_DAT2 MFP_CFG_DRV(MMC1_DAT2, AF0, MEDIUM)
|
||||
#define MMC1_DAT1_MMC1_DAT1 MFP_CFG_DRV(MMC1_DAT1, AF0, MEDIUM)
|
||||
#define MMC1_DAT0_MMC1_DAT0 MFP_CFG_DRV(MMC1_DAT0, AF0, MEDIUM)
|
||||
#define MMC1_CMD_MMC1_CMD MFP_CFG_DRV(MMC1_CMD, AF0, MEDIUM)
|
||||
#define MMC1_CLK_MMC1_CLK MFP_CFG_DRV(MMC1_CLK, AF0, MEDIUM)
|
||||
#define MMC1_CD_MMC1_CD MFP_CFG_DRV(MMC1_CD, AF0, MEDIUM)
|
||||
#define MMC1_WP_MMC1_WP MFP_CFG_DRV(MMC1_WP, AF0, MEDIUM)
|
||||
|
||||
#endif /* __ASM_MACH MFP_PXA910_H */
|
|
@ -0,0 +1,37 @@
|
|||
#ifndef __ASM_MACH_MFP_H
|
||||
#define __ASM_MACH_MFP_H
|
||||
|
||||
#include <plat/mfp.h>
|
||||
|
||||
/*
|
||||
* NOTE: the MFPR register bit definitions on PXA168 processor lines are a
|
||||
* bit different from those on PXA3xx. Bit [7:10] are now reserved, which
|
||||
* were SLEEP_OE_N, SLEEP_DATA, SLEEP_SEL and the LSB of DRIVE bits.
|
||||
*
|
||||
* To cope with this difference and re-use the pxa3xx mfp code as much as
|
||||
* possible, we make the following compromise:
|
||||
*
|
||||
* 1. SLEEP_OE_N will always be programmed to '1' (by MFP_LPM_FLOAT)
|
||||
* 2. DRIVE strength definitions redefined to include the reserved bit10
|
||||
* 3. Override MFP_CFG() and MFP_CFG_DRV()
|
||||
* 4. Drop the use of MFP_CFG_LPM() and MFP_CFG_X()
|
||||
*/
|
||||
|
||||
#define MFP_DRIVE_VERY_SLOW (0x0 << 13)
|
||||
#define MFP_DRIVE_SLOW (0x2 << 13)
|
||||
#define MFP_DRIVE_MEDIUM (0x4 << 13)
|
||||
#define MFP_DRIVE_FAST (0x8 << 13)
|
||||
|
||||
#undef MFP_CFG
|
||||
#undef MFP_CFG_DRV
|
||||
#undef MFP_CFG_LPM
|
||||
#undef MFP_CFG_X
|
||||
#undef MFP_CFG_DEFAULT
|
||||
|
||||
#define MFP_CFG(pin, af) \
|
||||
(MFP_LPM_FLOAT | MFP_PIN(MFP_PIN_##pin) | MFP_##af | MFP_DRIVE_MEDIUM)
|
||||
|
||||
#define MFP_CFG_DRV(pin, af, drv) \
|
||||
(MFP_LPM_FLOAT | MFP_PIN(MFP_PIN_##pin) | MFP_##af | MFP_DRIVE_##drv)
|
||||
|
||||
#endif /* __ASM_MACH_MFP_H */
|
|
@ -0,0 +1,23 @@
|
|||
#ifndef __ASM_MACH_PXA168_H
|
||||
#define __ASM_MACH_PXA168_H
|
||||
|
||||
#include <mach/devices.h>
|
||||
|
||||
extern struct pxa_device_desc pxa168_device_uart1;
|
||||
extern struct pxa_device_desc pxa168_device_uart2;
|
||||
|
||||
static inline int pxa168_add_uart(int id)
|
||||
{
|
||||
struct pxa_device_desc *d = NULL;
|
||||
|
||||
switch (id) {
|
||||
case 1: d = &pxa168_device_uart1; break;
|
||||
case 2: d = &pxa168_device_uart2; break;
|
||||
}
|
||||
|
||||
if (d == NULL)
|
||||
return -EINVAL;
|
||||
|
||||
return pxa_register_device(d, NULL, 0);
|
||||
}
|
||||
#endif /* __ASM_MACH_PXA168_H */
|
|
@ -0,0 +1,23 @@
|
|||
#ifndef __ASM_MACH_PXA910_H
|
||||
#define __ASM_MACH_PXA910_H
|
||||
|
||||
#include <mach/devices.h>
|
||||
|
||||
extern struct pxa_device_desc pxa910_device_uart1;
|
||||
extern struct pxa_device_desc pxa910_device_uart2;
|
||||
|
||||
static inline int pxa910_add_uart(int id)
|
||||
{
|
||||
struct pxa_device_desc *d = NULL;
|
||||
|
||||
switch (id) {
|
||||
case 1: d = &pxa910_device_uart1; break;
|
||||
case 2: d = &pxa910_device_uart2; break;
|
||||
}
|
||||
|
||||
if (d == NULL)
|
||||
return -EINVAL;
|
||||
|
||||
return pxa_register_device(d, NULL, 0);
|
||||
}
|
||||
#endif /* __ASM_MACH_PXA910_H */
|
|
@ -0,0 +1,78 @@
|
|||
/*
|
||||
* linux/arch/arm/mach-mmp/include/mach/regs-apbc.h
|
||||
*
|
||||
* Application Peripheral Bus Clock Unit
|
||||
*
|
||||
* 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_MACH_REGS_APBC_H
|
||||
#define __ASM_MACH_REGS_APBC_H
|
||||
|
||||
#include <mach/addr-map.h>
|
||||
|
||||
#define APBC_VIRT_BASE (APB_VIRT_BASE + 0x015000)
|
||||
#define APBC_REG(x) (APBC_VIRT_BASE + (x))
|
||||
|
||||
/*
|
||||
* APB clock register offsets for PXA168
|
||||
*/
|
||||
#define APBC_PXA168_UART1 APBC_REG(0x000)
|
||||
#define APBC_PXA168_UART2 APBC_REG(0x004)
|
||||
#define APBC_PXA168_GPIO APBC_REG(0x008)
|
||||
#define APBC_PXA168_PWM0 APBC_REG(0x00c)
|
||||
#define APBC_PXA168_PWM1 APBC_REG(0x010)
|
||||
#define APBC_PXA168_SSP1 APBC_REG(0x01c)
|
||||
#define APBC_PXA168_SSP2 APBC_REG(0x020)
|
||||
#define APBC_PXA168_RTC APBC_REG(0x028)
|
||||
#define APBC_PXA168_TWSI0 APBC_REG(0x02c)
|
||||
#define APBC_PXA168_KPC APBC_REG(0x030)
|
||||
#define APBC_PXA168_TIMERS APBC_REG(0x034)
|
||||
#define APBC_PXA168_AIB APBC_REG(0x03c)
|
||||
#define APBC_PXA168_SW_JTAG APBC_REG(0x040)
|
||||
#define APBC_PXA168_ONEWIRE APBC_REG(0x048)
|
||||
#define APBC_PXA168_SSP3 APBC_REG(0x04c)
|
||||
#define APBC_PXA168_ASFAR APBC_REG(0x050)
|
||||
#define APBC_PXA168_ASSAR APBC_REG(0x054)
|
||||
#define APBC_PXA168_SSP4 APBC_REG(0x058)
|
||||
#define APBC_PXA168_SSP5 APBC_REG(0x05c)
|
||||
#define APBC_PXA168_TWSI1 APBC_REG(0x06c)
|
||||
#define APBC_PXA168_UART3 APBC_REG(0x070)
|
||||
#define APBC_PXA168_AC97 APBC_REG(0x084)
|
||||
|
||||
/*
|
||||
* APB Clock register offsets for PXA910
|
||||
*/
|
||||
#define APBC_PXA910_UART0 APBC_REG(0x000)
|
||||
#define APBC_PXA910_UART1 APBC_REG(0x004)
|
||||
#define APBC_PXA910_GPIO APBC_REG(0x008)
|
||||
#define APBC_PXA910_PWM0 APBC_REG(0x00c)
|
||||
#define APBC_PXA910_PWM1 APBC_REG(0x010)
|
||||
#define APBC_PXA910_PWM2 APBC_REG(0x014)
|
||||
#define APBC_PXA910_PWM3 APBC_REG(0x018)
|
||||
#define APBC_PXA910_SSP1 APBC_REG(0x01c)
|
||||
#define APBC_PXA910_SSP2 APBC_REG(0x020)
|
||||
#define APBC_PXA910_IPC APBC_REG(0x024)
|
||||
#define APBC_PXA910_TWSI0 APBC_REG(0x02c)
|
||||
#define APBC_PXA910_KPC APBC_REG(0x030)
|
||||
#define APBC_PXA910_TIMERS APBC_REG(0x034)
|
||||
#define APBC_PXA910_TBROT APBC_REG(0x038)
|
||||
#define APBC_PXA910_AIB APBC_REG(0x03c)
|
||||
#define APBC_PXA910_SW_JTAG APBC_REG(0x040)
|
||||
#define APBC_PXA910_TIMERS1 APBC_REG(0x044)
|
||||
#define APBC_PXA910_ONEWIRE APBC_REG(0x048)
|
||||
#define APBC_PXA910_SSP3 APBC_REG(0x04c)
|
||||
#define APBC_PXA910_ASFAR APBC_REG(0x050)
|
||||
#define APBC_PXA910_ASSAR APBC_REG(0x054)
|
||||
|
||||
/* Common APB clock register bit definitions */
|
||||
#define APBC_APBCLK (1 << 0) /* APB Bus Clock Enable */
|
||||
#define APBC_FNCLK (1 << 1) /* Functional Clock Enable */
|
||||
#define APBC_RST (1 << 2) /* Reset Generation */
|
||||
|
||||
/* Functional Clock Selection Mask */
|
||||
#define APBC_FNCLKSEL(x) (((x) & 0xf) << 4)
|
||||
|
||||
#endif /* __ASM_MACH_REGS_APBC_H */
|
|
@ -0,0 +1,36 @@
|
|||
/*
|
||||
* linux/arch/arm/mach-mmp/include/mach/regs-apmu.h
|
||||
*
|
||||
* Application Subsystem Power Management Unit
|
||||
*
|
||||
* 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_MACH_REGS_APMU_H
|
||||
#define __ASM_MACH_REGS_APMU_H
|
||||
|
||||
#include <mach/addr-map.h>
|
||||
|
||||
#define APMU_VIRT_BASE (AXI_VIRT_BASE + 0x82800)
|
||||
#define APMU_REG(x) (APMU_VIRT_BASE + (x))
|
||||
|
||||
/* Clock Reset Control */
|
||||
#define APMU_IRE APMU_REG(0x048)
|
||||
#define APMU_LCD APMU_REG(0x04c)
|
||||
#define APMU_CCIC APMU_REG(0x050)
|
||||
#define APMU_SDH0 APMU_REG(0x054)
|
||||
#define APMU_SDH1 APMU_REG(0x058)
|
||||
#define APMU_USB APMU_REG(0x05c)
|
||||
#define APMU_NAND APMU_REG(0x060)
|
||||
#define APMU_DMA APMU_REG(0x064)
|
||||
#define APMU_GEU APMU_REG(0x068)
|
||||
#define APMU_BUS APMU_REG(0x06c)
|
||||
|
||||
#define APMU_FNCLK_EN (1 << 4)
|
||||
#define APMU_AXICLK_EN (1 << 3)
|
||||
#define APMU_FNRST_DIS (1 << 1)
|
||||
#define APMU_AXIRST_DIS (1 << 0)
|
||||
|
||||
#endif /* __ASM_MACH_REGS_APMU_H */
|
|
@ -0,0 +1,31 @@
|
|||
/*
|
||||
* linux/arch/arm/mach-mmp/include/mach/regs-icu.h
|
||||
*
|
||||
* Interrupt Control Unit
|
||||
*
|
||||
* 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_MACH_ICU_H
|
||||
#define __ASM_MACH_ICU_H
|
||||
|
||||
#include <mach/addr-map.h>
|
||||
|
||||
#define ICU_VIRT_BASE (AXI_VIRT_BASE + 0x82000)
|
||||
#define ICU_REG(x) (ICU_VIRT_BASE + (x))
|
||||
|
||||
#define ICU_INT_CONF(n) ICU_REG((n) << 2)
|
||||
#define ICU_INT_CONF_AP_INT (1 << 6)
|
||||
#define ICU_INT_CONF_CP_INT (1 << 5)
|
||||
#define ICU_INT_CONF_IRQ (1 << 4)
|
||||
#define ICU_INT_CONF_MASK (0xf)
|
||||
|
||||
#define ICU_AP_FIQ_SEL_INT_NUM ICU_REG(0x108) /* AP FIQ Selected Interrupt */
|
||||
#define ICU_AP_IRQ_SEL_INT_NUM ICU_REG(0x10C) /* AP IRQ Selected Interrupt */
|
||||
#define ICU_AP_GBL_IRQ_MSK ICU_REG(0x114) /* AP Global Interrupt Mask */
|
||||
#define ICU_INT_STATUS_0 ICU_REG(0x128) /* Interrupt Stuats 0 */
|
||||
#define ICU_INT_STATUS_1 ICU_REG(0x12C) /* Interrupt Status 1 */
|
||||
|
||||
#endif /* __ASM_MACH_ICU_H */
|
|
@ -0,0 +1,44 @@
|
|||
/*
|
||||
* linux/arch/arm/mach-mmp/include/mach/regs-timers.h
|
||||
*
|
||||
* Timers Module
|
||||
*
|
||||
* 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_MACH_REGS_TIMERS_H
|
||||
#define __ASM_MACH_REGS_TIMERS_H
|
||||
|
||||
#include <mach/addr-map.h>
|
||||
|
||||
#define TIMERS1_VIRT_BASE (APB_VIRT_BASE + 0x14000)
|
||||
#define TIMERS2_VIRT_BASE (APB_VIRT_BASE + 0x16000)
|
||||
|
||||
#define TMR_CCR (0x0000)
|
||||
#define TMR_TN_MM(n, m) (0x0004 + ((n) << 3) + (((n) + (m)) << 2))
|
||||
#define TMR_CR(n) (0x0028 + ((n) << 2))
|
||||
#define TMR_SR(n) (0x0034 + ((n) << 2))
|
||||
#define TMR_IER(n) (0x0040 + ((n) << 2))
|
||||
#define TMR_PLVR(n) (0x004c + ((n) << 2))
|
||||
#define TMR_PLCR(n) (0x0058 + ((n) << 2))
|
||||
#define TMR_WMER (0x0064)
|
||||
#define TMR_WMR (0x0068)
|
||||
#define TMR_WVR (0x006c)
|
||||
#define TMR_WSR (0x0070)
|
||||
#define TMR_ICR(n) (0x0074 + ((n) << 2))
|
||||
#define TMR_WICR (0x0080)
|
||||
#define TMR_CER (0x0084)
|
||||
#define TMR_CMR (0x0088)
|
||||
#define TMR_ILR(n) (0x008c + ((n) << 2))
|
||||
#define TMR_WCR (0x0098)
|
||||
#define TMR_WFAR (0x009c)
|
||||
#define TMR_WSAR (0x00A0)
|
||||
#define TMR_CVWR(n) (0x00A4 + ((n) << 2))
|
||||
|
||||
#define TMR_CCR_CS_0(x) (((x) & 0x3) << 0)
|
||||
#define TMR_CCR_CS_1(x) (((x) & 0x7) << 2)
|
||||
#define TMR_CCR_CS_2(x) (((x) & 0x3) << 5)
|
||||
|
||||
#endif /* __ASM_MACH_REGS_TIMERS_H */
|
|
@ -0,0 +1,21 @@
|
|||
/*
|
||||
* linux/arch/arm/mach-mmp/include/mach/system.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_MACH_SYSTEM_H
|
||||
#define __ASM_MACH_SYSTEM_H
|
||||
|
||||
static inline void arch_idle(void)
|
||||
{
|
||||
cpu_do_idle();
|
||||
}
|
||||
|
||||
static inline void arch_reset(char mode)
|
||||
{
|
||||
cpu_reset(0);
|
||||
}
|
||||
#endif /* __ASM_MACH_SYSTEM_H */
|
|
@ -0,0 +1,9 @@
|
|||
/*
|
||||
* linux/arch/arm/mach-mmp/include/mach/timex.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.
|
||||
*/
|
||||
|
||||
#define CLOCK_TICK_RATE 3250000
|
|
@ -0,0 +1,41 @@
|
|||
/*
|
||||
* arch/arm/mach-mmp/include/mach/uncompress.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.
|
||||
*/
|
||||
|
||||
#include <linux/serial_reg.h>
|
||||
#include <mach/addr-map.h>
|
||||
|
||||
#define UART1_BASE (APB_PHYS_BASE + 0x36000)
|
||||
#define UART2_BASE (APB_PHYS_BASE + 0x17000)
|
||||
#define UART3_BASE (APB_PHYS_BASE + 0x18000)
|
||||
|
||||
static inline void putc(char c)
|
||||
{
|
||||
volatile unsigned long *UART = (unsigned long *)UART2_BASE;
|
||||
|
||||
/* UART enabled? */
|
||||
if (!(UART[UART_IER] & UART_IER_UUE))
|
||||
return;
|
||||
|
||||
while (!(UART[UART_LSR] & UART_LSR_THRE))
|
||||
barrier();
|
||||
|
||||
UART[UART_TX] = c;
|
||||
}
|
||||
|
||||
/*
|
||||
* This does not append a newline
|
||||
*/
|
||||
static inline void flush(void)
|
||||
{
|
||||
}
|
||||
|
||||
/*
|
||||
* nothing to do
|
||||
*/
|
||||
#define arch_decomp_setup()
|
||||
#define arch_decomp_wdog()
|
|
@ -0,0 +1,5 @@
|
|||
/*
|
||||
* linux/arch/arm/mach-mmp/include/mach/vmalloc.h
|
||||
*/
|
||||
|
||||
#define VMALLOC_END 0xfe000000
|
|
@ -0,0 +1,55 @@
|
|||
/*
|
||||
* linux/arch/arm/mach-mmp/irq.c
|
||||
*
|
||||
* Generic IRQ handling, GPIO IRQ demultiplexing, etc.
|
||||
*
|
||||
* Author: Bin Yang <bin.yang@marvell.com>
|
||||
* Created: Sep 30, 2008
|
||||
* Copyright: Marvell International Ltd.
|
||||
*
|
||||
* 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 <linux/init.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
#include <mach/regs-icu.h>
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#define IRQ_ROUTE_TO_AP (ICU_INT_CONF_AP_INT | ICU_INT_CONF_IRQ)
|
||||
|
||||
#define PRIORITY_DEFAULT 0x1
|
||||
#define PRIORITY_NONE 0x0 /* means IRQ disabled */
|
||||
|
||||
static void icu_mask_irq(unsigned int irq)
|
||||
{
|
||||
__raw_writel(PRIORITY_NONE, ICU_INT_CONF(irq));
|
||||
}
|
||||
|
||||
static void icu_unmask_irq(unsigned int irq)
|
||||
{
|
||||
__raw_writel(IRQ_ROUTE_TO_AP | PRIORITY_DEFAULT, ICU_INT_CONF(irq));
|
||||
}
|
||||
|
||||
static struct irq_chip icu_irq_chip = {
|
||||
.name = "icu_irq",
|
||||
.ack = icu_mask_irq,
|
||||
.mask = icu_mask_irq,
|
||||
.unmask = icu_unmask_irq,
|
||||
};
|
||||
|
||||
void __init icu_init_irq(void)
|
||||
{
|
||||
int irq;
|
||||
|
||||
for (irq = 0; irq < 64; irq++) {
|
||||
icu_mask_irq(irq);
|
||||
set_irq_chip(irq, &icu_irq_chip);
|
||||
set_irq_handler(irq, handle_level_irq);
|
||||
set_irq_flags(irq, IRQF_VALID);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,111 @@
|
|||
/*
|
||||
* linux/arch/arm/mach-mmp/pxa168.c
|
||||
*
|
||||
* Code specific to PXA168
|
||||
*
|
||||
* 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 <linux/module.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/clk.h>
|
||||
|
||||
#include <asm/mach/time.h>
|
||||
#include <mach/addr-map.h>
|
||||
#include <mach/cputype.h>
|
||||
#include <mach/regs-apbc.h>
|
||||
#include <mach/irqs.h>
|
||||
#include <mach/gpio.h>
|
||||
#include <mach/dma.h>
|
||||
#include <mach/devices.h>
|
||||
#include <mach/mfp.h>
|
||||
|
||||
#include "common.h"
|
||||
#include "clock.h"
|
||||
|
||||
#define MFPR_VIRT_BASE (APB_VIRT_BASE + 0x1e000)
|
||||
|
||||
static struct mfp_addr_map pxa168_mfp_addr_map[] __initdata =
|
||||
{
|
||||
MFP_ADDR_X(GPIO0, GPIO36, 0x04c),
|
||||
MFP_ADDR_X(GPIO37, GPIO55, 0x000),
|
||||
MFP_ADDR_X(GPIO56, GPIO123, 0x0e0),
|
||||
MFP_ADDR_X(GPIO124, GPIO127, 0x0f4),
|
||||
|
||||
MFP_ADDR_END,
|
||||
};
|
||||
|
||||
#define APMASK(i) (GPIO_REGS_VIRT + BANK_OFF(i) + 0x09c)
|
||||
|
||||
static void __init pxa168_init_gpio(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
/* enable GPIO clock */
|
||||
__raw_writel(APBC_APBCLK | APBC_FNCLK, APBC_PXA168_GPIO);
|
||||
|
||||
/* unmask GPIO edge detection for all 4 banks - APMASKx */
|
||||
for (i = 0; i < 4; i++)
|
||||
__raw_writel(0xffffffff, APMASK(i));
|
||||
|
||||
pxa_init_gpio(IRQ_PXA168_GPIOX, 0, 127, NULL);
|
||||
}
|
||||
|
||||
void __init pxa168_init_irq(void)
|
||||
{
|
||||
icu_init_irq();
|
||||
pxa168_init_gpio();
|
||||
}
|
||||
|
||||
/* APB peripheral clocks */
|
||||
static APBC_CLK(uart1, PXA168_UART1, 1, 14745600);
|
||||
static APBC_CLK(uart2, PXA168_UART2, 1, 14745600);
|
||||
|
||||
/* device and clock bindings */
|
||||
static struct clk_lookup pxa168_clkregs[] = {
|
||||
INIT_CLKREG(&clk_uart1, "pxa2xx-uart.0", NULL),
|
||||
INIT_CLKREG(&clk_uart2, "pxa2xx-uart.1", NULL),
|
||||
};
|
||||
|
||||
static int __init pxa168_init(void)
|
||||
{
|
||||
if (cpu_is_pxa168()) {
|
||||
mfp_init_base(MFPR_VIRT_BASE);
|
||||
mfp_init_addr(pxa168_mfp_addr_map);
|
||||
pxa_init_dma(IRQ_PXA168_DMA_INT0, 32);
|
||||
clks_register(ARRAY_AND_SIZE(pxa168_clkregs));
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
postcore_initcall(pxa168_init);
|
||||
|
||||
/* system timer - clock enabled, 3.25MHz */
|
||||
#define TIMER_CLK_RST (APBC_APBCLK | APBC_FNCLK | APBC_FNCLKSEL(3))
|
||||
|
||||
static void __init pxa168_timer_init(void)
|
||||
{
|
||||
/* this is early, we have to initialize the CCU registers by
|
||||
* ourselves instead of using clk_* API. Clock rate is defined
|
||||
* by APBC_TIMERS_CLK_RST (3.25MHz) and enabled free-running
|
||||
*/
|
||||
__raw_writel(APBC_APBCLK | APBC_RST, APBC_PXA168_TIMERS);
|
||||
|
||||
/* 3.25MHz, bus/functional clock enabled, release reset */
|
||||
__raw_writel(TIMER_CLK_RST, APBC_PXA168_TIMERS);
|
||||
|
||||
timer_init(IRQ_PXA168_TIMER1);
|
||||
}
|
||||
|
||||
struct sys_timer pxa168_timer = {
|
||||
.init = pxa168_timer_init,
|
||||
};
|
||||
|
||||
/* on-chip devices */
|
||||
PXA168_DEVICE(uart1, "pxa2xx-uart", 0, UART1, 0xd4017000, 0x30, 21, 22);
|
||||
PXA168_DEVICE(uart2, "pxa2xx-uart", 1, UART2, 0xd4018000, 0x30, 23, 24);
|
|
@ -0,0 +1,158 @@
|
|||
/*
|
||||
* linux/arch/arm/mach-mmp/pxa910.c
|
||||
*
|
||||
* Code specific to PXA910
|
||||
*
|
||||
* 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 <linux/module.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
#include <asm/mach/time.h>
|
||||
#include <mach/addr-map.h>
|
||||
#include <mach/regs-apbc.h>
|
||||
#include <mach/regs-apmu.h>
|
||||
#include <mach/cputype.h>
|
||||
#include <mach/irqs.h>
|
||||
#include <mach/gpio.h>
|
||||
#include <mach/dma.h>
|
||||
#include <mach/mfp.h>
|
||||
#include <mach/devices.h>
|
||||
|
||||
#include "common.h"
|
||||
#include "clock.h"
|
||||
|
||||
#define MFPR_VIRT_BASE (APB_VIRT_BASE + 0x1e000)
|
||||
|
||||
static struct mfp_addr_map pxa910_mfp_addr_map[] __initdata =
|
||||
{
|
||||
MFP_ADDR_X(GPIO0, GPIO54, 0xdc),
|
||||
MFP_ADDR_X(GPIO67, GPIO98, 0x1b8),
|
||||
MFP_ADDR_X(GPIO100, GPIO109, 0x238),
|
||||
|
||||
MFP_ADDR(GPIO123, 0xcc),
|
||||
MFP_ADDR(GPIO124, 0xd0),
|
||||
|
||||
MFP_ADDR(DF_IO0, 0x40),
|
||||
MFP_ADDR(DF_IO1, 0x3c),
|
||||
MFP_ADDR(DF_IO2, 0x38),
|
||||
MFP_ADDR(DF_IO3, 0x34),
|
||||
MFP_ADDR(DF_IO4, 0x30),
|
||||
MFP_ADDR(DF_IO5, 0x2c),
|
||||
MFP_ADDR(DF_IO6, 0x28),
|
||||
MFP_ADDR(DF_IO7, 0x24),
|
||||
MFP_ADDR(DF_IO8, 0x20),
|
||||
MFP_ADDR(DF_IO9, 0x1c),
|
||||
MFP_ADDR(DF_IO10, 0x18),
|
||||
MFP_ADDR(DF_IO11, 0x14),
|
||||
MFP_ADDR(DF_IO12, 0x10),
|
||||
MFP_ADDR(DF_IO13, 0xc),
|
||||
MFP_ADDR(DF_IO14, 0x8),
|
||||
MFP_ADDR(DF_IO15, 0x4),
|
||||
|
||||
MFP_ADDR(DF_nCS0_SM_nCS2, 0x44),
|
||||
MFP_ADDR(DF_nCS1_SM_nCS3, 0x48),
|
||||
MFP_ADDR(SM_nCS0, 0x4c),
|
||||
MFP_ADDR(SM_nCS1, 0x50),
|
||||
MFP_ADDR(DF_WEn, 0x54),
|
||||
MFP_ADDR(DF_REn, 0x58),
|
||||
MFP_ADDR(DF_CLE_SM_OEn, 0x5c),
|
||||
MFP_ADDR(DF_ALE_SM_WEn, 0x60),
|
||||
MFP_ADDR(SM_SCLK, 0x64),
|
||||
MFP_ADDR(DF_RDY0, 0x68),
|
||||
MFP_ADDR(SM_BE0, 0x6c),
|
||||
MFP_ADDR(SM_BE1, 0x70),
|
||||
MFP_ADDR(SM_ADV, 0x74),
|
||||
MFP_ADDR(DF_RDY1, 0x78),
|
||||
MFP_ADDR(SM_ADVMUX, 0x7c),
|
||||
MFP_ADDR(SM_RDY, 0x80),
|
||||
|
||||
MFP_ADDR_X(MMC1_DAT7, MMC1_WP, 0x84),
|
||||
|
||||
MFP_ADDR_END,
|
||||
};
|
||||
|
||||
#define APMASK(i) (GPIO_REGS_VIRT + BANK_OFF(i) + 0x09c)
|
||||
|
||||
static void __init pxa910_init_gpio(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
/* enable GPIO clock */
|
||||
__raw_writel(APBC_APBCLK | APBC_FNCLK, APBC_PXA910_GPIO);
|
||||
|
||||
/* unmask GPIO edge detection for all 4 banks - APMASKx */
|
||||
for (i = 0; i < 4; i++)
|
||||
__raw_writel(0xffffffff, APMASK(i));
|
||||
|
||||
pxa_init_gpio(IRQ_PXA910_AP_GPIO, 0, 127, NULL);
|
||||
}
|
||||
|
||||
void __init pxa910_init_irq(void)
|
||||
{
|
||||
icu_init_irq();
|
||||
pxa910_init_gpio();
|
||||
}
|
||||
|
||||
/* APB peripheral clocks */
|
||||
static APBC_CLK(uart1, PXA910_UART0, 1, 14745600);
|
||||
static APBC_CLK(uart2, PXA910_UART1, 1, 14745600);
|
||||
|
||||
/* device and clock bindings */
|
||||
static struct clk_lookup pxa910_clkregs[] = {
|
||||
INIT_CLKREG(&clk_uart1, "pxa2xx-uart.0", NULL),
|
||||
INIT_CLKREG(&clk_uart2, "pxa2xx-uart.1", NULL),
|
||||
};
|
||||
|
||||
static int __init pxa910_init(void)
|
||||
{
|
||||
if (cpu_is_pxa910()) {
|
||||
mfp_init_base(MFPR_VIRT_BASE);
|
||||
mfp_init_addr(pxa910_mfp_addr_map);
|
||||
pxa_init_dma(IRQ_PXA910_DMA_INT0, 32);
|
||||
clks_register(ARRAY_AND_SIZE(pxa910_clkregs));
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
postcore_initcall(pxa910_init);
|
||||
|
||||
/* system timer - clock enabled, 3.25MHz */
|
||||
#define TIMER_CLK_RST (APBC_APBCLK | APBC_FNCLK | APBC_FNCLKSEL(3))
|
||||
|
||||
static void __init pxa910_timer_init(void)
|
||||
{
|
||||
/* reset and configure */
|
||||
__raw_writel(APBC_APBCLK | APBC_RST, APBC_PXA910_TIMERS);
|
||||
__raw_writel(TIMER_CLK_RST, APBC_PXA910_TIMERS);
|
||||
|
||||
timer_init(IRQ_PXA910_AP1_TIMER1);
|
||||
}
|
||||
|
||||
struct sys_timer pxa910_timer = {
|
||||
.init = pxa910_timer_init,
|
||||
};
|
||||
|
||||
/* on-chip devices */
|
||||
|
||||
/* NOTE: there are totally 3 UARTs on PXA910:
|
||||
*
|
||||
* UART1 - Slow UART (can be used both by AP and CP)
|
||||
* UART2/3 - Fast UART
|
||||
*
|
||||
* To be backward compatible with the legacy FFUART/BTUART/STUART sequence,
|
||||
* they are re-ordered as:
|
||||
*
|
||||
* pxa910_device_uart1 - UART2 as FFUART
|
||||
* pxa910_device_uart2 - UART3 as BTUART
|
||||
*
|
||||
* UART1 is not used by AP for the moment.
|
||||
*/
|
||||
PXA910_DEVICE(uart1, "pxa2xx-uart", 0, UART2, 0xd4017000, 0x30, 21, 22);
|
||||
PXA910_DEVICE(uart2, "pxa2xx-uart", 1, UART3, 0xd4018000, 0x30, 23, 24);
|
|
@ -0,0 +1,109 @@
|
|||
/*
|
||||
* linux/arch/arm/mach-mmp/tavorevb.c
|
||||
*
|
||||
* Support for the Marvell PXA910-based TavorEVB Development Platform.
|
||||
*
|
||||
* 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
|
||||
* publishhed by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/smc91x.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <mach/addr-map.h>
|
||||
#include <mach/mfp-pxa910.h>
|
||||
#include <mach/pxa910.h>
|
||||
#include <mach/gpio.h>
|
||||
|
||||
#include "common.h"
|
||||
|
||||
static unsigned long tavorevb_pin_config[] __initdata = {
|
||||
/* UART2 */
|
||||
GPIO47_UART2_RXD,
|
||||
GPIO48_UART2_TXD,
|
||||
|
||||
/* SMC */
|
||||
SM_nCS0_nCS0,
|
||||
SM_ADV_SM_ADV,
|
||||
SM_SCLK_SM_SCLK,
|
||||
SM_SCLK_SM_SCLK,
|
||||
SM_BE0_SM_BE0,
|
||||
SM_BE1_SM_BE1,
|
||||
|
||||
/* DFI */
|
||||
DF_IO0_ND_IO0,
|
||||
DF_IO1_ND_IO1,
|
||||
DF_IO2_ND_IO2,
|
||||
DF_IO3_ND_IO3,
|
||||
DF_IO4_ND_IO4,
|
||||
DF_IO5_ND_IO5,
|
||||
DF_IO6_ND_IO6,
|
||||
DF_IO7_ND_IO7,
|
||||
DF_IO8_ND_IO8,
|
||||
DF_IO9_ND_IO9,
|
||||
DF_IO10_ND_IO10,
|
||||
DF_IO11_ND_IO11,
|
||||
DF_IO12_ND_IO12,
|
||||
DF_IO13_ND_IO13,
|
||||
DF_IO14_ND_IO14,
|
||||
DF_IO15_ND_IO15,
|
||||
DF_nCS0_SM_nCS2_nCS0,
|
||||
DF_ALE_SM_WEn_ND_ALE,
|
||||
DF_CLE_SM_OEn_ND_CLE,
|
||||
DF_WEn_DF_WEn,
|
||||
DF_REn_DF_REn,
|
||||
DF_RDY0_DF_RDY0,
|
||||
};
|
||||
|
||||
static struct smc91x_platdata tavorevb_smc91x_info = {
|
||||
.flags = SMC91X_USE_16BIT | SMC91X_NOWAIT,
|
||||
};
|
||||
|
||||
static struct resource smc91x_resources[] = {
|
||||
[0] = {
|
||||
.start = SMC_CS1_PHYS_BASE + 0x300,
|
||||
.end = SMC_CS1_PHYS_BASE + 0xfffff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = {
|
||||
.start = gpio_to_irq(80),
|
||||
.end = gpio_to_irq(80),
|
||||
.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE,
|
||||
}
|
||||
};
|
||||
|
||||
static struct platform_device smc91x_device = {
|
||||
.name = "smc91x",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.platform_data = &tavorevb_smc91x_info,
|
||||
},
|
||||
.num_resources = ARRAY_SIZE(smc91x_resources),
|
||||
.resource = smc91x_resources,
|
||||
};
|
||||
|
||||
static void __init tavorevb_init(void)
|
||||
{
|
||||
mfp_config(ARRAY_AND_SIZE(tavorevb_pin_config));
|
||||
|
||||
/* on-chip devices */
|
||||
pxa910_add_uart(1);
|
||||
|
||||
/* off-chip devices */
|
||||
platform_device_register(&smc91x_device);
|
||||
}
|
||||
|
||||
MACHINE_START(TAVOREVB, "PXA910 Evaluation Board (aka TavorEVB)")
|
||||
.phys_io = APB_PHYS_BASE,
|
||||
.boot_params = 0x00000100,
|
||||
.io_pg_offst = (APB_VIRT_BASE >> 18) & 0xfffc,
|
||||
.map_io = pxa_map_io,
|
||||
.init_irq = pxa910_init_irq,
|
||||
.timer = &pxa910_timer,
|
||||
.init_machine = tavorevb_init,
|
||||
MACHINE_END
|
|
@ -0,0 +1,199 @@
|
|||
/*
|
||||
* linux/arch/arm/mach-mmp/time.c
|
||||
*
|
||||
* Support for clocksource and clockevents
|
||||
*
|
||||
* Copyright (C) 2008 Marvell International Ltd.
|
||||
* All rights reserved.
|
||||
*
|
||||
* 2008-04-11: Jason Chagas <Jason.chagas@marvell.com>
|
||||
* 2008-10-08: Bin Yang <bin.yang@marvell.com>
|
||||
*
|
||||
* The timers module actually includes three timers, each timer with upto
|
||||
* three match comparators. Timer #0 is used here in free-running mode as
|
||||
* the clock source, and match comparator #1 used as clock event device.
|
||||
*
|
||||
* 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 <linux/init.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/clockchips.h>
|
||||
|
||||
#include <linux/io.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/cnt32_to_63.h>
|
||||
|
||||
#include <mach/addr-map.h>
|
||||
#include <mach/regs-timers.h>
|
||||
#include <mach/irqs.h>
|
||||
|
||||
#include "clock.h"
|
||||
|
||||
#define TIMERS_VIRT_BASE TIMERS1_VIRT_BASE
|
||||
|
||||
#define MAX_DELTA (0xfffffffe)
|
||||
#define MIN_DELTA (16)
|
||||
|
||||
#define TCR2NS_SCALE_FACTOR 10
|
||||
|
||||
static unsigned long tcr2ns_scale;
|
||||
|
||||
static void __init set_tcr2ns_scale(unsigned long tcr_rate)
|
||||
{
|
||||
unsigned long long v = 1000000000ULL << TCR2NS_SCALE_FACTOR;
|
||||
do_div(v, tcr_rate);
|
||||
tcr2ns_scale = v;
|
||||
/*
|
||||
* We want an even value to automatically clear the top bit
|
||||
* returned by cnt32_to_63() without an additional run time
|
||||
* instruction. So if the LSB is 1 then round it up.
|
||||
*/
|
||||
if (tcr2ns_scale & 1)
|
||||
tcr2ns_scale++;
|
||||
}
|
||||
|
||||
/*
|
||||
* FIXME: the timer needs some delay to stablize the counter capture
|
||||
*/
|
||||
static inline uint32_t timer_read(void)
|
||||
{
|
||||
int delay = 100;
|
||||
|
||||
__raw_writel(1, TIMERS_VIRT_BASE + TMR_CVWR(0));
|
||||
|
||||
while (delay--)
|
||||
cpu_relax();
|
||||
|
||||
return __raw_readl(TIMERS_VIRT_BASE + TMR_CVWR(0));
|
||||
}
|
||||
|
||||
unsigned long long sched_clock(void)
|
||||
{
|
||||
unsigned long long v = cnt32_to_63(timer_read());
|
||||
return (v * tcr2ns_scale) >> TCR2NS_SCALE_FACTOR;
|
||||
}
|
||||
|
||||
static irqreturn_t timer_interrupt(int irq, void *dev_id)
|
||||
{
|
||||
struct clock_event_device *c = dev_id;
|
||||
|
||||
/* disable and clear pending interrupt status */
|
||||
__raw_writel(0x0, TIMERS_VIRT_BASE + TMR_IER(0));
|
||||
__raw_writel(0x1, TIMERS_VIRT_BASE + TMR_ICR(0));
|
||||
c->event_handler(c);
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
static int timer_set_next_event(unsigned long delta,
|
||||
struct clock_event_device *dev)
|
||||
{
|
||||
unsigned long flags, next;
|
||||
|
||||
local_irq_save(flags);
|
||||
|
||||
/* clear pending interrupt status and enable */
|
||||
__raw_writel(0x01, TIMERS_VIRT_BASE + TMR_ICR(0));
|
||||
__raw_writel(0x01, TIMERS_VIRT_BASE + TMR_IER(0));
|
||||
|
||||
next = timer_read() + delta;
|
||||
__raw_writel(next, TIMERS_VIRT_BASE + TMR_TN_MM(0, 0));
|
||||
|
||||
local_irq_restore(flags);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void timer_set_mode(enum clock_event_mode mode,
|
||||
struct clock_event_device *dev)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
local_irq_save(flags);
|
||||
switch (mode) {
|
||||
case CLOCK_EVT_MODE_ONESHOT:
|
||||
case CLOCK_EVT_MODE_UNUSED:
|
||||
case CLOCK_EVT_MODE_SHUTDOWN:
|
||||
/* disable the matching interrupt */
|
||||
__raw_writel(0x00, TIMERS_VIRT_BASE + TMR_IER(0));
|
||||
break;
|
||||
case CLOCK_EVT_MODE_RESUME:
|
||||
case CLOCK_EVT_MODE_PERIODIC:
|
||||
break;
|
||||
}
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
|
||||
static struct clock_event_device ckevt = {
|
||||
.name = "clockevent",
|
||||
.features = CLOCK_EVT_FEAT_ONESHOT,
|
||||
.shift = 32,
|
||||
.rating = 200,
|
||||
.set_next_event = timer_set_next_event,
|
||||
.set_mode = timer_set_mode,
|
||||
};
|
||||
|
||||
static cycle_t clksrc_read(void)
|
||||
{
|
||||
return timer_read();
|
||||
}
|
||||
|
||||
static struct clocksource cksrc = {
|
||||
.name = "clocksource",
|
||||
.shift = 20,
|
||||
.rating = 200,
|
||||
.read = clksrc_read,
|
||||
.mask = CLOCKSOURCE_MASK(32),
|
||||
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
|
||||
};
|
||||
|
||||
static void __init timer_config(void)
|
||||
{
|
||||
uint32_t ccr = __raw_readl(TIMERS_VIRT_BASE + TMR_CCR);
|
||||
uint32_t cer = __raw_readl(TIMERS_VIRT_BASE + TMR_CER);
|
||||
uint32_t cmr = __raw_readl(TIMERS_VIRT_BASE + TMR_CMR);
|
||||
|
||||
__raw_writel(cer & ~0x1, TIMERS_VIRT_BASE + TMR_CER); /* disable */
|
||||
|
||||
ccr &= TMR_CCR_CS_0(0x3);
|
||||
__raw_writel(ccr, TIMERS_VIRT_BASE + TMR_CCR);
|
||||
|
||||
/* free-running mode */
|
||||
__raw_writel(cmr | 0x01, TIMERS_VIRT_BASE + TMR_CMR);
|
||||
|
||||
__raw_writel(0x0, TIMERS_VIRT_BASE + TMR_PLCR(0)); /* free-running */
|
||||
__raw_writel(0x7, TIMERS_VIRT_BASE + TMR_ICR(0)); /* clear status */
|
||||
__raw_writel(0x0, TIMERS_VIRT_BASE + TMR_IER(0));
|
||||
|
||||
/* enable timer counter */
|
||||
__raw_writel(cer | 0x01, TIMERS_VIRT_BASE + TMR_CER);
|
||||
}
|
||||
|
||||
static struct irqaction timer_irq = {
|
||||
.name = "timer",
|
||||
.flags = IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL,
|
||||
.handler = timer_interrupt,
|
||||
.dev_id = &ckevt,
|
||||
};
|
||||
|
||||
void __init timer_init(int irq)
|
||||
{
|
||||
timer_config();
|
||||
|
||||
set_tcr2ns_scale(CLOCK_TICK_RATE);
|
||||
|
||||
ckevt.mult = div_sc(CLOCK_TICK_RATE, NSEC_PER_SEC, ckevt.shift);
|
||||
ckevt.max_delta_ns = clockevent_delta2ns(MAX_DELTA, &ckevt);
|
||||
ckevt.min_delta_ns = clockevent_delta2ns(MIN_DELTA, &ckevt);
|
||||
ckevt.cpumask = cpumask_of(0);
|
||||
|
||||
cksrc.mult = clocksource_hz2mult(CLOCK_TICK_RATE, cksrc.shift);
|
||||
|
||||
setup_irq(irq, &timer_irq);
|
||||
|
||||
clocksource_register(&cksrc);
|
||||
clockevents_register_device(&ckevt);
|
||||
}
|
|
@ -0,0 +1,47 @@
|
|||
/*
|
||||
* linux/arch/arm/mach-mmp/ttc_dkb.c
|
||||
*
|
||||
* Support for the Marvell PXA910-based TTC_DKB Development Platform.
|
||||
*
|
||||
* 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
|
||||
* publishhed by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <mach/addr-map.h>
|
||||
#include <mach/mfp-pxa910.h>
|
||||
#include <mach/pxa910.h>
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#define ARRAY_AND_SIZE(x) (x), ARRAY_SIZE(x)
|
||||
|
||||
static unsigned long ttc_dkb_pin_config[] __initdata = {
|
||||
/* UART2 */
|
||||
GPIO47_UART2_RXD,
|
||||
GPIO48_UART2_TXD,
|
||||
};
|
||||
|
||||
static void __init ttc_dkb_init(void)
|
||||
{
|
||||
mfp_config(ARRAY_AND_SIZE(ttc_dkb_pin_config));
|
||||
|
||||
/* on-chip devices */
|
||||
pxa910_add_uart(1);
|
||||
}
|
||||
|
||||
MACHINE_START(TTC_DKB, "PXA910-based TTC_DKB Development Platform")
|
||||
.phys_io = APB_PHYS_BASE,
|
||||
.boot_params = 0x00000100,
|
||||
.io_pg_offst = (APB_VIRT_BASE >> 18) & 0xfffc,
|
||||
.map_io = pxa_map_io,
|
||||
.init_irq = pxa910_init_irq,
|
||||
.timer = &pxa910_timer,
|
||||
.init_machine = ttc_dkb_init,
|
||||
MACHINE_END
|
|
@ -262,9 +262,19 @@ config MACH_EXEDA
|
|||
select PXA27x
|
||||
|
||||
config MACH_COLIBRI
|
||||
bool "Toradex Colibri PX27x"
|
||||
bool "Toradex Colibri PXA270"
|
||||
select PXA27x
|
||||
|
||||
config MACH_COLIBRI300
|
||||
bool "Toradex Colibri PXA300/310"
|
||||
select PXA3xx
|
||||
select CPU_PXA300
|
||||
|
||||
config MACH_COLIBRI320
|
||||
bool "Toradex Colibri PXA320"
|
||||
select PXA3xx
|
||||
select CPU_PXA320
|
||||
|
||||
config MACH_ZYLONITE
|
||||
bool "PXA3xx Development Platform (aka Zylonite)"
|
||||
select PXA3xx
|
||||
|
|
|
@ -3,8 +3,8 @@
|
|||
#
|
||||
|
||||
# Common support (must be linked before board specific support)
|
||||
obj-y += clock.o devices.o generic.o irq.o dma.o \
|
||||
time.o gpio.o reset.o
|
||||
obj-y += clock.o devices.o generic.o irq.o \
|
||||
time.o reset.o
|
||||
obj-$(CONFIG_PM) += pm.o sleep.o standby.o
|
||||
|
||||
ifeq ($(CONFIG_CPU_FREQ),y)
|
||||
|
@ -35,7 +35,9 @@ obj-$(CONFIG_MACH_MAINSTONE) += mainstone.o
|
|||
obj-$(CONFIG_MACH_MP900C) += mp900.o
|
||||
obj-$(CONFIG_ARCH_PXA_IDP) += idp.o
|
||||
obj-$(CONFIG_MACH_TRIZEPS4) += trizeps4.o
|
||||
obj-$(CONFIG_MACH_COLIBRI) += colibri.o
|
||||
obj-$(CONFIG_MACH_COLIBRI) += colibri-pxa270.o
|
||||
obj-$(CONFIG_MACH_COLIBRI300) += colibri-pxa3xx.o colibri-pxa300.o
|
||||
obj-$(CONFIG_MACH_COLIBRI320) += colibri-pxa3xx.o colibri-pxa320.o
|
||||
obj-$(CONFIG_MACH_H5000) += h5000.o
|
||||
obj-$(CONFIG_PXA_SHARP_C7xx) += corgi.o sharpsl_pm.o corgi_pm.o
|
||||
obj-$(CONFIG_PXA_SHARP_Cxx00) += spitz.o sharpsl_pm.o spitz_pm.o
|
||||
|
|
|
@ -87,7 +87,7 @@ void clks_register(struct clk_lookup *clks, size_t num)
|
|||
clkdev_add(&clks[i]);
|
||||
}
|
||||
|
||||
int clk_add_alias(char *alias, struct device *alias_dev, char *id,
|
||||
int clk_add_alias(const char *alias, const char *alias_dev_name, char *id,
|
||||
struct device *dev)
|
||||
{
|
||||
struct clk *r = clk_get(dev, id);
|
||||
|
@ -96,7 +96,7 @@ int clk_add_alias(char *alias, struct device *alias_dev, char *id,
|
|||
if (!r)
|
||||
return -ENODEV;
|
||||
|
||||
l = clkdev_alloc(r, alias, alias_dev ? dev_name(alias_dev) : NULL);
|
||||
l = clkdev_alloc(r, alias, alias_dev_name);
|
||||
clk_put(r);
|
||||
if (!l)
|
||||
return -ENODEV;
|
||||
|
|
|
@ -69,6 +69,6 @@ extern void clk_pxa3xx_cken_disable(struct clk *);
|
|||
#endif
|
||||
|
||||
void clks_register(struct clk_lookup *clks, size_t num);
|
||||
int clk_add_alias(char *alias, struct device *alias_dev, char *id,
|
||||
int clk_add_alias(const char *alias, const char *alias_name, char *id,
|
||||
struct device *dev);
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* linux/arch/arm/mach-pxa/colibri.c
|
||||
* linux/arch/arm/mach-pxa/colibri-pxa270.c
|
||||
*
|
||||
* Support for Toradex PXA27x based Colibri module
|
||||
* Support for Toradex PXA270 based Colibri module
|
||||
* Daniel Mack <daniel@caiaq.de>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
@ -20,6 +20,7 @@
|
|||
#include <linux/mtd/mtd.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
#include <linux/mtd/physmap.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <mach/hardware.h>
|
||||
#include <asm/irq.h>
|
||||
|
@ -35,13 +36,16 @@
|
|||
#include "generic.h"
|
||||
#include "devices.h"
|
||||
|
||||
static unsigned long colibri_pin_config[] __initdata = {
|
||||
/*
|
||||
* GPIO configuration
|
||||
*/
|
||||
static mfp_cfg_t colibri_pxa270_pin_config[] __initdata = {
|
||||
GPIO78_nCS_2, /* Ethernet CS */
|
||||
GPIO114_GPIO, /* Ethernet IRQ */
|
||||
};
|
||||
|
||||
/*
|
||||
* Flash
|
||||
* NOR flash
|
||||
*/
|
||||
static struct mtd_partition colibri_partitions[] = {
|
||||
{
|
||||
|
@ -70,39 +74,40 @@ static struct physmap_flash_data colibri_flash_data[] = {
|
|||
}
|
||||
};
|
||||
|
||||
static struct resource flash_resource = {
|
||||
static struct resource colibri_pxa270_flash_resource = {
|
||||
.start = PXA_CS0_PHYS,
|
||||
.end = PXA_CS0_PHYS + SZ_32M - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
};
|
||||
|
||||
static struct platform_device flash_device = {
|
||||
static struct platform_device colibri_pxa270_flash_device = {
|
||||
.name = "physmap-flash",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.platform_data = colibri_flash_data,
|
||||
},
|
||||
.resource = &flash_resource,
|
||||
.resource = &colibri_pxa270_flash_resource,
|
||||
.num_resources = 1,
|
||||
};
|
||||
|
||||
/*
|
||||
* DM9000 Ethernet
|
||||
*/
|
||||
#if defined(CONFIG_DM9000)
|
||||
static struct resource dm9000_resources[] = {
|
||||
[0] = {
|
||||
.start = COLIBRI_ETH_PHYS,
|
||||
.end = COLIBRI_ETH_PHYS + 3,
|
||||
.start = COLIBRI_PXA270_ETH_PHYS,
|
||||
.end = COLIBRI_PXA270_ETH_PHYS + 3,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = {
|
||||
.start = COLIBRI_ETH_PHYS + 4,
|
||||
.end = COLIBRI_ETH_PHYS + 4 + 500,
|
||||
.start = COLIBRI_PXA270_ETH_PHYS + 4,
|
||||
.end = COLIBRI_PXA270_ETH_PHYS + 4 + 500,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[2] = {
|
||||
.start = COLIBRI_ETH_IRQ,
|
||||
.end = COLIBRI_ETH_IRQ,
|
||||
.start = COLIBRI_PXA270_ETH_IRQ,
|
||||
.end = COLIBRI_PXA270_ETH_IRQ,
|
||||
.flags = IORESOURCE_IRQ | IRQF_TRIGGER_RISING,
|
||||
},
|
||||
};
|
||||
|
@ -113,25 +118,28 @@ static struct platform_device dm9000_device = {
|
|||
.num_resources = ARRAY_SIZE(dm9000_resources),
|
||||
.resource = dm9000_resources,
|
||||
};
|
||||
#endif /* CONFIG_DM9000 */
|
||||
|
||||
static struct platform_device *colibri_devices[] __initdata = {
|
||||
&flash_device,
|
||||
static struct platform_device *colibri_pxa270_devices[] __initdata = {
|
||||
&colibri_pxa270_flash_device,
|
||||
#if defined(CONFIG_DM9000)
|
||||
&dm9000_device,
|
||||
#endif
|
||||
};
|
||||
|
||||
static void __init colibri_init(void)
|
||||
static void __init colibri_pxa270_init(void)
|
||||
{
|
||||
pxa2xx_mfp_config(ARRAY_AND_SIZE(colibri_pin_config));
|
||||
|
||||
platform_add_devices(colibri_devices, ARRAY_SIZE(colibri_devices));
|
||||
pxa2xx_mfp_config(ARRAY_AND_SIZE(colibri_pxa270_pin_config));
|
||||
platform_add_devices(ARRAY_AND_SIZE(colibri_pxa270_devices));
|
||||
}
|
||||
|
||||
MACHINE_START(COLIBRI, "Toradex Colibri PXA27x")
|
||||
MACHINE_START(COLIBRI, "Toradex Colibri PXA270")
|
||||
.phys_io = 0x40000000,
|
||||
.io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
|
||||
.boot_params = COLIBRI_SDRAM_BASE + 0x100,
|
||||
.init_machine = colibri_init,
|
||||
.init_machine = colibri_pxa270_init,
|
||||
.map_io = pxa_map_io,
|
||||
.init_irq = pxa27x_init_irq,
|
||||
.timer = &pxa_timer,
|
||||
MACHINE_END
|
||||
|
|
@ -0,0 +1,190 @@
|
|||
/*
|
||||
* arch/arm/mach-pxa/colibri-pxa300.c
|
||||
*
|
||||
* Support for Toradex PXA300/310 based Colibri module
|
||||
*
|
||||
* Daniel Mack <daniel@caiaq.de>
|
||||
* Matthias Meier <matthias.j.meier@gmx.net>
|
||||
*
|
||||
* 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 <linux/init.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <net/ax88796.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/irq.h>
|
||||
|
||||
#include <mach/pxa300.h>
|
||||
#include <mach/colibri.h>
|
||||
#include <mach/ohci.h>
|
||||
#include <mach/pxafb.h>
|
||||
|
||||
#include "generic.h"
|
||||
#include "devices.h"
|
||||
|
||||
#if defined(CONFIG_AX88796)
|
||||
#define COLIBRI_ETH_IRQ_GPIO mfp_to_gpio(GPIO26_GPIO)
|
||||
/*
|
||||
* Asix AX88796 Ethernet
|
||||
*/
|
||||
static struct ax_plat_data colibri_asix_platdata = {
|
||||
.flags = AXFLG_MAC_FROMDEV,
|
||||
.wordlength = 2
|
||||
};
|
||||
|
||||
static struct resource colibri_asix_resource[] = {
|
||||
[0] = {
|
||||
.start = PXA3xx_CS2_PHYS,
|
||||
.end = PXA3xx_CS2_PHYS + (0x20 * 2) - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = {
|
||||
.start = gpio_to_irq(COLIBRI_ETH_IRQ_GPIO),
|
||||
.end = gpio_to_irq(COLIBRI_ETH_IRQ_GPIO),
|
||||
.flags = IORESOURCE_IRQ
|
||||
}
|
||||
};
|
||||
|
||||
static struct platform_device asix_device = {
|
||||
.name = "ax88796",
|
||||
.id = 0,
|
||||
.num_resources = ARRAY_SIZE(colibri_asix_resource),
|
||||
.resource = colibri_asix_resource,
|
||||
.dev = {
|
||||
.platform_data = &colibri_asix_platdata
|
||||
}
|
||||
};
|
||||
|
||||
static mfp_cfg_t colibri_pxa300_eth_pin_config[] __initdata = {
|
||||
GPIO1_nCS2, /* AX88796 chip select */
|
||||
GPIO26_GPIO | MFP_PULL_HIGH /* AX88796 IRQ */
|
||||
};
|
||||
|
||||
static void __init colibri_pxa300_init_eth(void)
|
||||
{
|
||||
pxa3xx_mfp_config(ARRAY_AND_SIZE(colibri_pxa300_eth_pin_config));
|
||||
set_irq_type(gpio_to_irq(COLIBRI_ETH_IRQ_GPIO), IRQ_TYPE_EDGE_FALLING);
|
||||
platform_device_register(&asix_device);
|
||||
}
|
||||
#else
|
||||
static inline void __init colibri_pxa300_init_eth(void) {}
|
||||
#endif /* CONFIG_AX88796 */
|
||||
|
||||
#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE)
|
||||
static mfp_cfg_t colibri_pxa300_usb_pin_config[] __initdata = {
|
||||
GPIO0_2_USBH_PEN,
|
||||
GPIO1_2_USBH_PWR,
|
||||
};
|
||||
|
||||
static struct pxaohci_platform_data colibri_pxa300_ohci_info = {
|
||||
.port_mode = PMM_GLOBAL_MODE,
|
||||
.flags = ENABLE_PORT1 | POWER_CONTROL_LOW | POWER_SENSE_LOW,
|
||||
};
|
||||
|
||||
void __init colibri_pxa300_init_ohci(void)
|
||||
{
|
||||
pxa3xx_mfp_config(ARRAY_AND_SIZE(colibri_pxa300_usb_pin_config));
|
||||
pxa_set_ohci_info(&colibri_pxa300_ohci_info);
|
||||
}
|
||||
#else
|
||||
static inline void colibri_pxa300_init_ohci(void) {}
|
||||
#endif /* CONFIG_USB_OHCI_HCD || CONFIG_USB_OHCI_HCD_MODULE */
|
||||
|
||||
static mfp_cfg_t colibri_pxa300_mmc_pin_config[] __initdata = {
|
||||
GPIO7_MMC1_CLK,
|
||||
GPIO14_MMC1_CMD,
|
||||
GPIO3_MMC1_DAT0,
|
||||
GPIO4_MMC1_DAT1,
|
||||
GPIO5_MMC1_DAT2,
|
||||
GPIO6_MMC1_DAT3,
|
||||
};
|
||||
|
||||
#if defined(CONFIG_FB_PXA) || defined(CONFIG_FB_PXA_MODULE)
|
||||
static mfp_cfg_t colibri_pxa300_lcd_pin_config[] __initdata = {
|
||||
GPIO54_LCD_LDD_0,
|
||||
GPIO55_LCD_LDD_1,
|
||||
GPIO56_LCD_LDD_2,
|
||||
GPIO57_LCD_LDD_3,
|
||||
GPIO58_LCD_LDD_4,
|
||||
GPIO59_LCD_LDD_5,
|
||||
GPIO60_LCD_LDD_6,
|
||||
GPIO61_LCD_LDD_7,
|
||||
GPIO62_LCD_LDD_8,
|
||||
GPIO63_LCD_LDD_9,
|
||||
GPIO64_LCD_LDD_10,
|
||||
GPIO65_LCD_LDD_11,
|
||||
GPIO66_LCD_LDD_12,
|
||||
GPIO67_LCD_LDD_13,
|
||||
GPIO68_LCD_LDD_14,
|
||||
GPIO69_LCD_LDD_15,
|
||||
GPIO70_LCD_LDD_16,
|
||||
GPIO71_LCD_LDD_17,
|
||||
GPIO62_LCD_CS_N,
|
||||
GPIO72_LCD_FCLK,
|
||||
GPIO73_LCD_LCLK,
|
||||
GPIO74_LCD_PCLK,
|
||||
GPIO75_LCD_BIAS,
|
||||
GPIO76_LCD_VSYNC,
|
||||
};
|
||||
|
||||
static void __init colibri_pxa300_init_lcd(void)
|
||||
{
|
||||
pxa3xx_mfp_config(ARRAY_AND_SIZE(colibri_pxa300_lcd_pin_config));
|
||||
}
|
||||
|
||||
#else
|
||||
static inline void colibri_pxa300_init_lcd(void) {}
|
||||
#endif /* CONFIG_FB_PXA || CONFIG_FB_PXA_MODULE */
|
||||
|
||||
#if defined(SND_AC97_CODEC) || defined(SND_AC97_CODEC_MODULE)
|
||||
static mfp_cfg_t colibri_pxa310_ac97_pin_config[] __initdata = {
|
||||
GPIO24_AC97_SYSCLK,
|
||||
GPIO23_AC97_nACRESET,
|
||||
GPIO25_AC97_SDATA_IN_0,
|
||||
GPIO27_AC97_SDATA_OUT,
|
||||
GPIO28_AC97_SYNC,
|
||||
GPIO29_AC97_BITCLK
|
||||
};
|
||||
|
||||
static inline void __init colibri_pxa310_init_ac97(void)
|
||||
{
|
||||
/* no AC97 codec on Colibri PXA300 */
|
||||
if (!cpu_is_pxa310())
|
||||
return;
|
||||
|
||||
pxa3xx_mfp_config(ARRAY_AND_SIZE(colibri_pxa310_ac97_pin_config));
|
||||
pxa_set_ac97_info(NULL);
|
||||
}
|
||||
#else
|
||||
static inline void colibri_pxa310_init_ac97(void) {}
|
||||
#endif
|
||||
|
||||
void __init colibri_pxa300_init(void)
|
||||
{
|
||||
colibri_pxa300_init_eth();
|
||||
colibri_pxa300_init_ohci();
|
||||
colibri_pxa300_init_lcd();
|
||||
colibri_pxa3xx_init_lcd(mfp_to_gpio(GPIO49_GPIO));
|
||||
colibri_pxa310_init_ac97();
|
||||
colibri_pxa3xx_init_mmc(ARRAY_AND_SIZE(colibri_pxa300_mmc_pin_config),
|
||||
mfp_to_gpio(MFP_PIN_GPIO13));
|
||||
}
|
||||
|
||||
MACHINE_START(COLIBRI300, "Toradex Colibri PXA300")
|
||||
.phys_io = 0x40000000,
|
||||
.io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
|
||||
.boot_params = COLIBRI_SDRAM_BASE + 0x100,
|
||||
.init_machine = colibri_pxa300_init,
|
||||
.map_io = pxa_map_io,
|
||||
.init_irq = pxa3xx_init_irq,
|
||||
.timer = &pxa_timer,
|
||||
MACHINE_END
|
||||
|
|
@ -0,0 +1,187 @@
|
|||
/*
|
||||
* arch/arm/mach-pxa/colibri-pxa320.c
|
||||
*
|
||||
* Support for Toradex PXA320/310 based Colibri module
|
||||
*
|
||||
* Daniel Mack <daniel@caiaq.de>
|
||||
* Matthias Meier <matthias.j.meier@gmx.net>
|
||||
*
|
||||
* 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 <linux/init.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <net/ax88796.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/irq.h>
|
||||
|
||||
#include <mach/pxa3xx-regs.h>
|
||||
#include <mach/mfp-pxa320.h>
|
||||
#include <mach/colibri.h>
|
||||
#include <mach/pxafb.h>
|
||||
#include <mach/ohci.h>
|
||||
|
||||
#include "generic.h"
|
||||
#include "devices.h"
|
||||
|
||||
#if defined(CONFIG_AX88796)
|
||||
#define COLIBRI_ETH_IRQ_GPIO mfp_to_gpio(GPIO36_GPIO)
|
||||
|
||||
/*
|
||||
* Asix AX88796 Ethernet
|
||||
*/
|
||||
static struct ax_plat_data colibri_asix_platdata = {
|
||||
.flags = AXFLG_MAC_FROMDEV,
|
||||
.wordlength = 2
|
||||
};
|
||||
|
||||
static struct resource colibri_asix_resource[] = {
|
||||
[0] = {
|
||||
.start = PXA3xx_CS2_PHYS,
|
||||
.end = PXA3xx_CS2_PHYS + (0x20 * 2) - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = {
|
||||
.start = gpio_to_irq(COLIBRI_ETH_IRQ_GPIO),
|
||||
.end = gpio_to_irq(COLIBRI_ETH_IRQ_GPIO),
|
||||
.flags = IORESOURCE_IRQ
|
||||
}
|
||||
};
|
||||
|
||||
static struct platform_device asix_device = {
|
||||
.name = "ax88796",
|
||||
.id = 0,
|
||||
.num_resources = ARRAY_SIZE(colibri_asix_resource),
|
||||
.resource = colibri_asix_resource,
|
||||
.dev = {
|
||||
.platform_data = &colibri_asix_platdata
|
||||
}
|
||||
};
|
||||
|
||||
static mfp_cfg_t colibri_pxa320_eth_pin_config[] __initdata = {
|
||||
GPIO3_nCS2, /* AX88796 chip select */
|
||||
GPIO36_GPIO | MFP_PULL_HIGH /* AX88796 IRQ */
|
||||
};
|
||||
|
||||
static void __init colibri_pxa320_init_eth(void)
|
||||
{
|
||||
pxa3xx_mfp_config(ARRAY_AND_SIZE(colibri_pxa320_eth_pin_config));
|
||||
set_irq_type(gpio_to_irq(COLIBRI_ETH_IRQ_GPIO), IRQ_TYPE_EDGE_FALLING);
|
||||
platform_device_register(&asix_device);
|
||||
}
|
||||
#else
|
||||
static inline void __init colibri_pxa320_init_eth(void) {}
|
||||
#endif /* CONFIG_AX88796 */
|
||||
|
||||
#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE)
|
||||
static mfp_cfg_t colibri_pxa320_usb_pin_config[] __initdata = {
|
||||
GPIO2_2_USBH_PEN,
|
||||
GPIO3_2_USBH_PWR,
|
||||
};
|
||||
|
||||
static struct pxaohci_platform_data colibri_pxa320_ohci_info = {
|
||||
.port_mode = PMM_GLOBAL_MODE,
|
||||
.flags = ENABLE_PORT1 | POWER_CONTROL_LOW | POWER_SENSE_LOW,
|
||||
};
|
||||
|
||||
void __init colibri_pxa320_init_ohci(void)
|
||||
{
|
||||
pxa3xx_mfp_config(ARRAY_AND_SIZE(colibri_pxa320_usb_pin_config));
|
||||
pxa_set_ohci_info(&colibri_pxa320_ohci_info);
|
||||
}
|
||||
#else
|
||||
static inline void colibri_pxa320_init_ohci(void) {}
|
||||
#endif /* CONFIG_USB_OHCI_HCD || CONFIG_USB_OHCI_HCD_MODULE */
|
||||
|
||||
static mfp_cfg_t colibri_pxa320_mmc_pin_config[] __initdata = {
|
||||
GPIO22_MMC1_CLK,
|
||||
GPIO23_MMC1_CMD,
|
||||
GPIO18_MMC1_DAT0,
|
||||
GPIO19_MMC1_DAT1,
|
||||
GPIO20_MMC1_DAT2,
|
||||
GPIO21_MMC1_DAT3
|
||||
};
|
||||
|
||||
#if defined(CONFIG_FB_PXA) || defined(CONFIG_FB_PXA_MODULE)
|
||||
static mfp_cfg_t colibri_pxa320_lcd_pin_config[] __initdata = {
|
||||
GPIO6_2_LCD_LDD_0,
|
||||
GPIO7_2_LCD_LDD_1,
|
||||
GPIO8_2_LCD_LDD_2,
|
||||
GPIO9_2_LCD_LDD_3,
|
||||
GPIO10_2_LCD_LDD_4,
|
||||
GPIO11_2_LCD_LDD_5,
|
||||
GPIO12_2_LCD_LDD_6,
|
||||
GPIO13_2_LCD_LDD_7,
|
||||
GPIO63_LCD_LDD_8,
|
||||
GPIO64_LCD_LDD_9,
|
||||
GPIO65_LCD_LDD_10,
|
||||
GPIO66_LCD_LDD_11,
|
||||
GPIO67_LCD_LDD_12,
|
||||
GPIO68_LCD_LDD_13,
|
||||
GPIO69_LCD_LDD_14,
|
||||
GPIO70_LCD_LDD_15,
|
||||
GPIO71_LCD_LDD_16,
|
||||
GPIO72_LCD_LDD_17,
|
||||
GPIO73_LCD_CS_N,
|
||||
GPIO74_LCD_VSYNC,
|
||||
GPIO14_2_LCD_FCLK,
|
||||
GPIO15_2_LCD_LCLK,
|
||||
GPIO16_2_LCD_PCLK,
|
||||
GPIO17_2_LCD_BIAS,
|
||||
};
|
||||
|
||||
static void __init colibri_pxa320_init_lcd(void)
|
||||
{
|
||||
pxa3xx_mfp_config(ARRAY_AND_SIZE(colibri_pxa320_lcd_pin_config));
|
||||
}
|
||||
#else
|
||||
static inline void colibri_pxa320_init_lcd(void) {}
|
||||
#endif
|
||||
|
||||
#if defined(SND_AC97_CODEC) || defined(SND_AC97_CODEC_MODULE)
|
||||
static mfp_cfg_t colibri_pxa320_ac97_pin_config[] __initdata = {
|
||||
GPIO34_AC97_SYSCLK,
|
||||
GPIO35_AC97_SDATA_IN_0,
|
||||
GPIO37_AC97_SDATA_OUT,
|
||||
GPIO38_AC97_SYNC,
|
||||
GPIO39_AC97_BITCLK,
|
||||
GPIO40_AC97_nACRESET
|
||||
};
|
||||
|
||||
static inline void __init colibri_pxa320_init_ac97(void)
|
||||
{
|
||||
pxa3xx_mfp_config(ARRAY_AND_SIZE(colibri_pxa320_ac97_pin_config));
|
||||
pxa_set_ac97_info(NULL);
|
||||
}
|
||||
#else
|
||||
static inline void colibri_pxa320_init_ac97(void) {}
|
||||
#endif
|
||||
|
||||
void __init colibri_pxa320_init(void)
|
||||
{
|
||||
colibri_pxa320_init_eth();
|
||||
colibri_pxa320_init_ohci();
|
||||
colibri_pxa320_init_lcd();
|
||||
colibri_pxa3xx_init_lcd(mfp_to_gpio(GPIO39_GPIO));
|
||||
colibri_pxa320_init_ac97();
|
||||
colibri_pxa3xx_init_mmc(ARRAY_AND_SIZE(colibri_pxa320_mmc_pin_config),
|
||||
mfp_to_gpio(MFP_PIN_GPIO28));
|
||||
}
|
||||
|
||||
MACHINE_START(COLIBRI320, "Toradex Colibri PXA320")
|
||||
.phys_io = 0x40000000,
|
||||
.io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
|
||||
.boot_params = COLIBRI_SDRAM_BASE + 0x100,
|
||||
.init_machine = colibri_pxa320_init,
|
||||
.map_io = pxa_map_io,
|
||||
.init_irq = pxa3xx_init_irq,
|
||||
.timer = &pxa_timer,
|
||||
MACHINE_END
|
||||
|
|
@ -0,0 +1,121 @@
|
|||
/*
|
||||
* arch/arm/mach-pxa/colibri-pxa3xx.c
|
||||
*
|
||||
* Common functions for all Toradex PXA3xx modules
|
||||
*
|
||||
* Daniel Mack <daniel@caiaq.de>
|
||||
*
|
||||
* 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 <linux/init.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <mach/hardware.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/irq.h>
|
||||
#include <mach/pxa3xx-regs.h>
|
||||
#include <mach/mfp-pxa300.h>
|
||||
#include <mach/colibri.h>
|
||||
#include <mach/mmc.h>
|
||||
#include <mach/pxafb.h>
|
||||
|
||||
#include "generic.h"
|
||||
#include "devices.h"
|
||||
|
||||
#if defined(CONFIG_MMC_PXA) || defined(CONFIG_MMC_PXA_MODULE)
|
||||
static int mmc_detect_pin;
|
||||
|
||||
static int colibri_pxa3xx_mci_init(struct device *dev,
|
||||
irq_handler_t colibri_mmc_detect_int,
|
||||
void *data)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = gpio_request(mmc_detect_pin, "mmc card detect");
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
gpio_direction_input(mmc_detect_pin);
|
||||
ret = request_irq(gpio_to_irq(mmc_detect_pin), colibri_mmc_detect_int,
|
||||
IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
|
||||
"MMC card detect", data);
|
||||
if (ret) {
|
||||
gpio_free(mmc_detect_pin);
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void colibri_pxa3xx_mci_exit(struct device *dev, void *data)
|
||||
{
|
||||
free_irq(mmc_detect_pin, data);
|
||||
gpio_free(gpio_to_irq(mmc_detect_pin));
|
||||
}
|
||||
|
||||
static struct pxamci_platform_data colibri_pxa3xx_mci_platform_data = {
|
||||
.detect_delay = 20,
|
||||
.ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,
|
||||
.init = colibri_pxa3xx_mci_init,
|
||||
.exit = colibri_pxa3xx_mci_exit,
|
||||
};
|
||||
|
||||
void __init colibri_pxa3xx_init_mmc(mfp_cfg_t *pins, int len, int detect_pin)
|
||||
{
|
||||
pxa3xx_mfp_config(pins, len);
|
||||
mmc_detect_pin = detect_pin;
|
||||
pxa_set_mci_info(&colibri_pxa3xx_mci_platform_data);
|
||||
}
|
||||
#endif /* CONFIG_MMC_PXA || CONFIG_MMC_PXA_MODULE */
|
||||
|
||||
#if defined(CONFIG_FB_PXA) || defined(CONFIG_FB_PXA_MODULE)
|
||||
static int lcd_bl_pin;
|
||||
|
||||
/*
|
||||
* LCD panel (Sharp LQ043T3DX02)
|
||||
*/
|
||||
static void colibri_lcd_backlight(int on)
|
||||
{
|
||||
gpio_set_value(lcd_bl_pin, !!on);
|
||||
}
|
||||
|
||||
static struct pxafb_mode_info sharp_lq43_mode = {
|
||||
.pixclock = 101936,
|
||||
.xres = 480,
|
||||
.yres = 272,
|
||||
.bpp = 32,
|
||||
.depth = 18,
|
||||
.hsync_len = 41,
|
||||
.left_margin = 2,
|
||||
.right_margin = 2,
|
||||
.vsync_len = 10,
|
||||
.upper_margin = 2,
|
||||
.lower_margin = 2,
|
||||
.sync = 0,
|
||||
.cmap_greyscale = 0,
|
||||
};
|
||||
|
||||
static struct pxafb_mach_info sharp_lq43_info = {
|
||||
.modes = &sharp_lq43_mode,
|
||||
.num_modes = 1,
|
||||
.cmap_inverse = 0,
|
||||
.cmap_static = 0,
|
||||
.lcd_conn = LCD_COLOR_TFT_18BPP,
|
||||
.pxafb_backlight_power = colibri_lcd_backlight,
|
||||
};
|
||||
|
||||
void __init colibri_pxa3xx_init_lcd(int bl_pin)
|
||||
{
|
||||
lcd_bl_pin = bl_pin;
|
||||
gpio_request(bl_pin, "lcd backlight");
|
||||
gpio_direction_output(bl_pin, 0);
|
||||
set_pxa_fb_info(&sharp_lq43_info);
|
||||
}
|
||||
#endif
|
||||
|
|
@ -187,7 +187,7 @@ static void __init e740_init(void)
|
|||
{
|
||||
pxa2xx_mfp_config(ARRAY_AND_SIZE(e740_pin_config));
|
||||
eseries_register_clks();
|
||||
clk_add_alias("CLK_CK48M", &e740_t7l66xb_device.dev,
|
||||
clk_add_alias("CLK_CK48M", e740_t7l66xb_device.name,
|
||||
"UDCCLK", &pxa25x_device_udc.dev),
|
||||
eseries_get_tmio_gpios();
|
||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||
|
|
|
@ -188,7 +188,7 @@ static struct platform_device *devices[] __initdata = {
|
|||
static void __init e750_init(void)
|
||||
{
|
||||
pxa2xx_mfp_config(ARRAY_AND_SIZE(e750_pin_config));
|
||||
clk_add_alias("CLK_CK3P6MI", &e750_tc6393xb_device.dev,
|
||||
clk_add_alias("CLK_CK3P6MI", e750_tc6393xb_device.name,
|
||||
"GPIO11_CLK", NULL),
|
||||
eseries_get_tmio_gpios();
|
||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||
|
|
|
@ -194,7 +194,7 @@ static struct platform_device *devices[] __initdata = {
|
|||
|
||||
static void __init e800_init(void)
|
||||
{
|
||||
clk_add_alias("CLK_CK3P6MI", &e800_tc6393xb_device.dev,
|
||||
clk_add_alias("CLK_CK3P6MI", e800_tc6393xb_device.name,
|
||||
"GPIO11_CLK", NULL),
|
||||
eseries_get_tmio_gpios();
|
||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||
|
|
|
@ -1,19 +1,31 @@
|
|||
#ifndef _COLIBRI_H_
|
||||
#define _COLIBRI_H_
|
||||
/*
|
||||
* common settings for all modules
|
||||
*/
|
||||
|
||||
#if defined(CONFIG_MMC_PXA) || defined(CONFIG_MMC_PXA_MODULE)
|
||||
extern void colibri_pxa3xx_init_mmc(mfp_cfg_t *pins, int len, int detect_pin);
|
||||
#else
|
||||
static inline void colibri_pxa3xx_init_mmc(mfp_cfg_t *, int, int) {}
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_FB_PXA) || defined(CONFIG_FB_PXA_MODULE)
|
||||
extern void colibri_pxa3xx_init_lcd(int bl_pin);
|
||||
#else
|
||||
static inline void colibri_pxa3xx_init_lcd(int) {}
|
||||
#endif
|
||||
|
||||
/* physical memory regions */
|
||||
#define COLIBRI_FLASH_PHYS (PXA_CS0_PHYS) /* Flash region */
|
||||
#define COLIBRI_ETH_PHYS (PXA_CS2_PHYS) /* Ethernet DM9000 region */
|
||||
#define COLIBRI_SDRAM_BASE 0xa0000000 /* SDRAM region */
|
||||
|
||||
/* virtual memory regions */
|
||||
#define COLIBRI_DISK_VIRT 0xF0000000 /* Disk On Chip region */
|
||||
/* definitions for Colibri PXA270 */
|
||||
|
||||
/* size of flash */
|
||||
#define COLIBRI_FLASH_SIZE 0x02000000 /* Flash size 32 MB */
|
||||
|
||||
/* Ethernet Controller Davicom DM9000 */
|
||||
#define GPIO_DM9000 114
|
||||
#define COLIBRI_ETH_IRQ IRQ_GPIO(GPIO_DM9000)
|
||||
#define COLIBRI_PXA270_FLASH_PHYS (PXA_CS0_PHYS) /* Flash region */
|
||||
#define COLIBRI_PXA270_ETH_PHYS (PXA_CS2_PHYS) /* Ethernet */
|
||||
#define COLIBRI_PXA270_ETH_IRQ_GPIO 114
|
||||
#define COLIBRI_PXA270_ETH_IRQ \
|
||||
gpio_to_irq(mfp_to_gpio(COLIBRI_PXA270_ETH_IRQ_GPIO))
|
||||
|
||||
#endif /* _COLIBRI_H_ */
|
||||
|
||||
|
|
|
@ -16,87 +16,6 @@
|
|||
|
||||
/* DMA Controller Registers Definitions */
|
||||
#define DMAC_REGS_VIRT io_p2v(0x40000000)
|
||||
#define DMAC_REG(x) (*((volatile u32 *)(DMAC_REGS_VIRT + (x))))
|
||||
|
||||
#define DCSR(n) DMAC_REG((n) << 2)
|
||||
#define DALGN DMAC_REG(0x00a0) /* DMA Alignment Register */
|
||||
#define DINT DMAC_REG(0x00f0) /* DMA Interrupt Register */
|
||||
#define DDADR(n) DMAC_REG(0x0200 + ((n) << 4))
|
||||
#define DSADR(n) DMAC_REG(0x0204 + ((n) << 4))
|
||||
#define DTADR(n) DMAC_REG(0x0208 + ((n) << 4))
|
||||
#define DCMD(n) DMAC_REG(0x020c + ((n) << 4))
|
||||
#define DRCMR(n) DMAC_REG((((n) < 64) ? 0x0100 : 0x1100) + \
|
||||
(((n) & 0x3f) << 2))
|
||||
|
||||
#define DCSR_RUN (1 << 31) /* Run Bit (read / write) */
|
||||
#define DCSR_NODESC (1 << 30) /* No-Descriptor Fetch (read / write) */
|
||||
#define DCSR_STOPIRQEN (1 << 29) /* Stop Interrupt Enable (read / write) */
|
||||
#define DCSR_REQPEND (1 << 8) /* Request Pending (read-only) */
|
||||
#define DCSR_STOPSTATE (1 << 3) /* Stop State (read-only) */
|
||||
#define DCSR_ENDINTR (1 << 2) /* End Interrupt (read / write) */
|
||||
#define DCSR_STARTINTR (1 << 1) /* Start Interrupt (read / write) */
|
||||
#define DCSR_BUSERR (1 << 0) /* Bus Error Interrupt (read / write) */
|
||||
|
||||
#if defined(CONFIG_PXA27x) || defined(CONFIG_PXA3xx)
|
||||
#define DCSR_EORIRQEN (1 << 28) /* End of Receive Interrupt Enable (R/W) */
|
||||
#define DCSR_EORJMPEN (1 << 27) /* Jump to next descriptor on EOR */
|
||||
#define DCSR_EORSTOPEN (1 << 26) /* STOP on an EOR */
|
||||
#define DCSR_SETCMPST (1 << 25) /* Set Descriptor Compare Status */
|
||||
#define DCSR_CLRCMPST (1 << 24) /* Clear Descriptor Compare Status */
|
||||
#define DCSR_CMPST (1 << 10) /* The Descriptor Compare Status */
|
||||
#define DCSR_EORINTR (1 << 9) /* The end of Receive */
|
||||
#endif
|
||||
|
||||
#define DRCMR_MAPVLD (1 << 7) /* Map Valid (read / write) */
|
||||
#define DRCMR_CHLNUM 0x1f /* mask for Channel Number (read / write) */
|
||||
|
||||
#define DDADR_DESCADDR 0xfffffff0 /* Address of next descriptor (mask) */
|
||||
#define DDADR_STOP (1 << 0) /* Stop (read / write) */
|
||||
|
||||
#define DCMD_INCSRCADDR (1 << 31) /* Source Address Increment Setting. */
|
||||
#define DCMD_INCTRGADDR (1 << 30) /* Target Address Increment Setting. */
|
||||
#define DCMD_FLOWSRC (1 << 29) /* Flow Control by the source. */
|
||||
#define DCMD_FLOWTRG (1 << 28) /* Flow Control by the target. */
|
||||
#define DCMD_STARTIRQEN (1 << 22) /* Start Interrupt Enable */
|
||||
#define DCMD_ENDIRQEN (1 << 21) /* End Interrupt Enable */
|
||||
#define DCMD_ENDIAN (1 << 18) /* Device Endian-ness. */
|
||||
#define DCMD_BURST8 (1 << 16) /* 8 byte burst */
|
||||
#define DCMD_BURST16 (2 << 16) /* 16 byte burst */
|
||||
#define DCMD_BURST32 (3 << 16) /* 32 byte burst */
|
||||
#define DCMD_WIDTH1 (1 << 14) /* 1 byte width */
|
||||
#define DCMD_WIDTH2 (2 << 14) /* 2 byte width (HalfWord) */
|
||||
#define DCMD_WIDTH4 (3 << 14) /* 4 byte width (Word) */
|
||||
#define DCMD_LENGTH 0x01fff /* length mask (max = 8K - 1) */
|
||||
|
||||
/*
|
||||
* Descriptor structure for PXA's DMA engine
|
||||
* Note: this structure must always be aligned to a 16-byte boundary.
|
||||
*/
|
||||
|
||||
typedef struct pxa_dma_desc {
|
||||
volatile u32 ddadr; /* Points to the next descriptor + flags */
|
||||
volatile u32 dsadr; /* DSADR value for the current transfer */
|
||||
volatile u32 dtadr; /* DTADR value for the current transfer */
|
||||
volatile u32 dcmd; /* DCMD value for the current transfer */
|
||||
} pxa_dma_desc;
|
||||
|
||||
typedef enum {
|
||||
DMA_PRIO_HIGH = 0,
|
||||
DMA_PRIO_MEDIUM = 1,
|
||||
DMA_PRIO_LOW = 2
|
||||
} pxa_dma_prio;
|
||||
|
||||
/*
|
||||
* DMA registration
|
||||
*/
|
||||
|
||||
int __init pxa_init_dma(int irq, int num_ch);
|
||||
|
||||
int pxa_request_dma (char *name,
|
||||
pxa_dma_prio prio,
|
||||
void (*irq_handler)(int, void *),
|
||||
void *data);
|
||||
|
||||
void pxa_free_dma (int dma_ch);
|
||||
|
||||
#include <plat/dma.h>
|
||||
#endif /* _ASM_ARCH_DMA_H */
|
||||
|
|
|
@ -99,40 +99,12 @@
|
|||
#define GAFR(x) GPIO_REG(0x54 + (((x) & 0x70) >> 2))
|
||||
|
||||
|
||||
/* NOTE: some PXAs have fewer on-chip GPIOs (like PXA255, with 85).
|
||||
* Those cases currently cause holes in the GPIO number space, the
|
||||
* actual number of the last GPIO is recorded by 'pxa_last_gpio'.
|
||||
*/
|
||||
extern int pxa_last_gpio;
|
||||
|
||||
#define NR_BUILTIN_GPIO 128
|
||||
|
||||
static inline int gpio_get_value(unsigned gpio)
|
||||
{
|
||||
if (__builtin_constant_p(gpio) && (gpio < NR_BUILTIN_GPIO))
|
||||
return GPLR(gpio) & GPIO_bit(gpio);
|
||||
else
|
||||
return __gpio_get_value(gpio);
|
||||
}
|
||||
|
||||
static inline void gpio_set_value(unsigned gpio, int value)
|
||||
{
|
||||
if (__builtin_constant_p(gpio) && (gpio < NR_BUILTIN_GPIO)) {
|
||||
if (value)
|
||||
GPSR(gpio) = GPIO_bit(gpio);
|
||||
else
|
||||
GPCR(gpio) = GPIO_bit(gpio);
|
||||
} else {
|
||||
__gpio_set_value(gpio, value);
|
||||
}
|
||||
}
|
||||
|
||||
#define gpio_cansleep __gpio_cansleep
|
||||
#define gpio_to_bank(gpio) ((gpio) >> 5)
|
||||
#define gpio_to_irq(gpio) IRQ_GPIO(gpio)
|
||||
#define irq_to_gpio(irq) IRQ_TO_GPIO(irq)
|
||||
|
||||
|
||||
#ifdef CONFIG_CPU_PXA26x
|
||||
/* GPIO86/87/88/89 on PXA26x have their direction bits in GPDR2 inverted,
|
||||
* as well as their Alternate Function value being '1' for GPIO in GAFRx.
|
||||
|
@ -165,7 +137,5 @@ static inline int __gpio_is_occupied(unsigned gpio)
|
|||
return GPDR(gpio) & GPIO_bit(gpio);
|
||||
}
|
||||
|
||||
typedef int (*set_wake_t)(unsigned int irq, unsigned int on);
|
||||
|
||||
extern void pxa_init_gpio(int mux_irq, int start, int end, set_wake_t fn);
|
||||
#include <plat/gpio.h>
|
||||
#endif
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
#ifndef __ASM_ARCH_MFP_PXA25X_H
|
||||
#define __ASM_ARCH_MFP_PXA25X_H
|
||||
|
||||
#include <mach/mfp.h>
|
||||
#include <mach/mfp-pxa2xx.h>
|
||||
|
||||
/* GPIO */
|
||||
|
|
|
@ -8,7 +8,6 @@
|
|||
* specific controller, and this should work in most cases.
|
||||
*/
|
||||
|
||||
#include <mach/mfp.h>
|
||||
#include <mach/mfp-pxa2xx.h>
|
||||
|
||||
/* Note: GPIO3/GPIO4 will be driven by Power I2C when PCFR/PI2C_EN
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#ifndef __ASM_ARCH_MFP_PXA2XX_H
|
||||
#define __ASM_ARCH_MFP_PXA2XX_H
|
||||
|
||||
#include <mach/mfp.h>
|
||||
#include <plat/mfp.h>
|
||||
|
||||
/*
|
||||
* the following MFP_xxx bit definitions in mfp.h are re-used for pxa2xx:
|
||||
|
|
|
@ -15,7 +15,6 @@
|
|||
#ifndef __ASM_ARCH_MFP_PXA300_H
|
||||
#define __ASM_ARCH_MFP_PXA300_H
|
||||
|
||||
#include <mach/mfp.h>
|
||||
#include <mach/mfp-pxa3xx.h>
|
||||
|
||||
/* GPIO */
|
||||
|
@ -41,6 +40,7 @@
|
|||
#endif
|
||||
|
||||
/* Chip Select */
|
||||
#define GPIO1_nCS2 MFP_CFG(GPIO1, AF1)
|
||||
#define GPIO2_nCS3 MFP_CFG(GPIO2, AF1)
|
||||
|
||||
/* AC97 */
|
||||
|
|
|
@ -15,7 +15,6 @@
|
|||
#ifndef __ASM_ARCH_MFP_PXA320_H
|
||||
#define __ASM_ARCH_MFP_PXA320_H
|
||||
|
||||
#include <mach/mfp.h>
|
||||
#include <mach/mfp-pxa3xx.h>
|
||||
|
||||
/* GPIO */
|
||||
|
@ -38,6 +37,7 @@
|
|||
#define GPIO17_2_GPIO MFP_CFG(GPIO17_2, AF0)
|
||||
|
||||
/* Chip Select */
|
||||
#define GPIO3_nCS2 MFP_CFG(GPIO3, AF1)
|
||||
#define GPIO4_nCS3 MFP_CFG(GPIO4, AF1)
|
||||
|
||||
/* AC97 */
|
||||
|
|
|
@ -1,68 +1,9 @@
|
|||
#ifndef __ASM_ARCH_MFP_PXA3XX_H
|
||||
#define __ASM_ARCH_MFP_PXA3XX_H
|
||||
|
||||
#include <plat/mfp.h>
|
||||
|
||||
#define MFPR_BASE (0x40e10000)
|
||||
#define MFPR_SIZE (PAGE_SIZE)
|
||||
|
||||
/* MFPR register bit definitions */
|
||||
#define MFPR_PULL_SEL (0x1 << 15)
|
||||
#define MFPR_PULLUP_EN (0x1 << 14)
|
||||
#define MFPR_PULLDOWN_EN (0x1 << 13)
|
||||
#define MFPR_SLEEP_SEL (0x1 << 9)
|
||||
#define MFPR_SLEEP_OE_N (0x1 << 7)
|
||||
#define MFPR_EDGE_CLEAR (0x1 << 6)
|
||||
#define MFPR_EDGE_FALL_EN (0x1 << 5)
|
||||
#define MFPR_EDGE_RISE_EN (0x1 << 4)
|
||||
|
||||
#define MFPR_SLEEP_DATA(x) ((x) << 8)
|
||||
#define MFPR_DRIVE(x) (((x) & 0x7) << 10)
|
||||
#define MFPR_AF_SEL(x) (((x) & 0x7) << 0)
|
||||
|
||||
#define MFPR_EDGE_NONE (0)
|
||||
#define MFPR_EDGE_RISE (MFPR_EDGE_RISE_EN)
|
||||
#define MFPR_EDGE_FALL (MFPR_EDGE_FALL_EN)
|
||||
#define MFPR_EDGE_BOTH (MFPR_EDGE_RISE | MFPR_EDGE_FALL)
|
||||
|
||||
/*
|
||||
* Table that determines the low power modes outputs, with actual settings
|
||||
* used in parentheses for don't-care values. Except for the float output,
|
||||
* the configured driven and pulled levels match, so if there is a need for
|
||||
* non-LPM pulled output, the same configuration could probably be used.
|
||||
*
|
||||
* Output value sleep_oe_n sleep_data pullup_en pulldown_en pull_sel
|
||||
* (bit 7) (bit 8) (bit 14) (bit 13) (bit 15)
|
||||
*
|
||||
* Input 0 X(0) X(0) X(0) 0
|
||||
* Drive 0 0 0 0 X(1) 0
|
||||
* Drive 1 0 1 X(1) 0 0
|
||||
* Pull hi (1) 1 X(1) 1 0 0
|
||||
* Pull lo (0) 1 X(0) 0 1 0
|
||||
* Z (float) 1 X(0) 0 0 0
|
||||
*/
|
||||
#define MFPR_LPM_INPUT (0)
|
||||
#define MFPR_LPM_DRIVE_LOW (MFPR_SLEEP_DATA(0) | MFPR_PULLDOWN_EN)
|
||||
#define MFPR_LPM_DRIVE_HIGH (MFPR_SLEEP_DATA(1) | MFPR_PULLUP_EN)
|
||||
#define MFPR_LPM_PULL_LOW (MFPR_LPM_DRIVE_LOW | MFPR_SLEEP_OE_N)
|
||||
#define MFPR_LPM_PULL_HIGH (MFPR_LPM_DRIVE_HIGH | MFPR_SLEEP_OE_N)
|
||||
#define MFPR_LPM_FLOAT (MFPR_SLEEP_OE_N)
|
||||
#define MFPR_LPM_MASK (0xe080)
|
||||
|
||||
/*
|
||||
* The pullup and pulldown state of the MFP pin at run mode is by default
|
||||
* determined by the selected alternate function. In case that some buggy
|
||||
* devices need to override this default behavior, the definitions below
|
||||
* indicates the setting of corresponding MFPR bits
|
||||
*
|
||||
* Definition pull_sel pullup_en pulldown_en
|
||||
* MFPR_PULL_NONE 0 0 0
|
||||
* MFPR_PULL_LOW 1 0 1
|
||||
* MFPR_PULL_HIGH 1 1 0
|
||||
* MFPR_PULL_BOTH 1 1 1
|
||||
*/
|
||||
#define MFPR_PULL_NONE (0)
|
||||
#define MFPR_PULL_LOW (MFPR_PULL_SEL | MFPR_PULLDOWN_EN)
|
||||
#define MFPR_PULL_BOTH (MFPR_PULL_LOW | MFPR_PULLUP_EN)
|
||||
#define MFPR_PULL_HIGH (MFPR_PULL_SEL | MFPR_PULLUP_EN)
|
||||
|
||||
/* PXA3xx common MFP configurations - processor specific ones defined
|
||||
* in mfp-pxa300.h and mfp-pxa320.h
|
||||
|
@ -197,56 +138,21 @@
|
|||
#define GPIO5_2_GPIO MFP_CFG(GPIO5_2, AF0)
|
||||
#define GPIO6_2_GPIO MFP_CFG(GPIO6_2, AF0)
|
||||
|
||||
/*
|
||||
* each MFP pin will have a MFPR register, since the offset of the
|
||||
* register varies between processors, the processor specific code
|
||||
* should initialize the pin offsets by pxa3xx_mfp_init_addr()
|
||||
*
|
||||
* pxa3xx_mfp_init_addr - accepts a table of "pxa3xx_mfp_addr_map"
|
||||
* structure, which represents a range of MFP pins from "start" to
|
||||
* "end", with the offset begining at "offset", to define a single
|
||||
* pin, let "end" = -1
|
||||
*
|
||||
* use
|
||||
*
|
||||
* MFP_ADDR_X() to define a range of pins
|
||||
* MFP_ADDR() to define a single pin
|
||||
* MFP_ADDR_END to signal the end of pin offset definitions
|
||||
/* NOTE: usage of these two functions is not recommended,
|
||||
* use pxa3xx_mfp_config() instead.
|
||||
*/
|
||||
struct pxa3xx_mfp_addr_map {
|
||||
unsigned int start;
|
||||
unsigned int end;
|
||||
unsigned long offset;
|
||||
};
|
||||
static inline unsigned long pxa3xx_mfp_read(int mfp)
|
||||
{
|
||||
return mfp_read(mfp);
|
||||
}
|
||||
|
||||
#define MFP_ADDR_X(start, end, offset) \
|
||||
{ MFP_PIN_##start, MFP_PIN_##end, offset }
|
||||
static inline void pxa3xx_mfp_write(int mfp, unsigned long val)
|
||||
{
|
||||
mfp_write(mfp, val);
|
||||
}
|
||||
|
||||
#define MFP_ADDR(pin, offset) \
|
||||
{ MFP_PIN_##pin, -1, offset }
|
||||
|
||||
#define MFP_ADDR_END { MFP_PIN_INVALID, 0 }
|
||||
|
||||
/*
|
||||
* pxa3xx_mfp_read()/pxa3xx_mfp_write() - for direct read/write access
|
||||
* to the MFPR register
|
||||
*/
|
||||
unsigned long pxa3xx_mfp_read(int mfp);
|
||||
void pxa3xx_mfp_write(int mfp, unsigned long mfpr_val);
|
||||
|
||||
/*
|
||||
* pxa3xx_mfp_config - configure the MFPR registers
|
||||
*
|
||||
* used by board specific initialization code
|
||||
*/
|
||||
void pxa3xx_mfp_config(unsigned long *mfp_cfgs, int num);
|
||||
|
||||
/*
|
||||
* pxa3xx_mfp_init_addr() - initialize the mapping between mfp pin
|
||||
* index and MFPR register offset
|
||||
*
|
||||
* used by processor specific code
|
||||
*/
|
||||
void __init pxa3xx_mfp_init_addr(struct pxa3xx_mfp_addr_map *);
|
||||
void __init pxa3xx_init_mfp(void);
|
||||
static inline void pxa3xx_mfp_config(unsigned long *mfp_cfg, int num)
|
||||
{
|
||||
mfp_config(mfp_cfg, num);
|
||||
}
|
||||
#endif /* __ASM_ARCH_MFP_PXA3XX_H */
|
||||
|
|
|
@ -13,7 +13,6 @@
|
|||
#ifndef __ASM_ARCH_MFP_PXA9xx_H
|
||||
#define __ASM_ARCH_MFP_PXA9xx_H
|
||||
|
||||
#include <mach/mfp.h>
|
||||
#include <mach/mfp-pxa3xx.h>
|
||||
|
||||
/* GPIO */
|
||||
|
|
|
@ -20,183 +20,9 @@
|
|||
#include <linux/sysdev.h>
|
||||
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/mfp.h>
|
||||
#include <mach/mfp-pxa3xx.h>
|
||||
#include <mach/pxa3xx-regs.h>
|
||||
|
||||
/* mfp_spin_lock is used to ensure that MFP register configuration
|
||||
* (most likely a read-modify-write operation) is atomic, and that
|
||||
* mfp_table[] is consistent
|
||||
*/
|
||||
static DEFINE_SPINLOCK(mfp_spin_lock);
|
||||
|
||||
static void __iomem *mfpr_mmio_base = (void __iomem *)&__REG(MFPR_BASE);
|
||||
|
||||
struct pxa3xx_mfp_pin {
|
||||
unsigned long config; /* -1 for not configured */
|
||||
unsigned long mfpr_off; /* MFPRxx Register offset */
|
||||
unsigned long mfpr_run; /* Run-Mode Register Value */
|
||||
unsigned long mfpr_lpm; /* Low Power Mode Register Value */
|
||||
};
|
||||
|
||||
static struct pxa3xx_mfp_pin mfp_table[MFP_PIN_MAX];
|
||||
|
||||
/* mapping of MFP_LPM_* definitions to MFPR_LPM_* register bits */
|
||||
static const unsigned long mfpr_lpm[] = {
|
||||
MFPR_LPM_INPUT,
|
||||
MFPR_LPM_DRIVE_LOW,
|
||||
MFPR_LPM_DRIVE_HIGH,
|
||||
MFPR_LPM_PULL_LOW,
|
||||
MFPR_LPM_PULL_HIGH,
|
||||
MFPR_LPM_FLOAT,
|
||||
};
|
||||
|
||||
/* mapping of MFP_PULL_* definitions to MFPR_PULL_* register bits */
|
||||
static const unsigned long mfpr_pull[] = {
|
||||
MFPR_PULL_NONE,
|
||||
MFPR_PULL_LOW,
|
||||
MFPR_PULL_HIGH,
|
||||
MFPR_PULL_BOTH,
|
||||
};
|
||||
|
||||
/* mapping of MFP_LPM_EDGE_* definitions to MFPR_EDGE_* register bits */
|
||||
static const unsigned long mfpr_edge[] = {
|
||||
MFPR_EDGE_NONE,
|
||||
MFPR_EDGE_RISE,
|
||||
MFPR_EDGE_FALL,
|
||||
MFPR_EDGE_BOTH,
|
||||
};
|
||||
|
||||
#define mfpr_readl(off) \
|
||||
__raw_readl(mfpr_mmio_base + (off))
|
||||
|
||||
#define mfpr_writel(off, val) \
|
||||
__raw_writel(val, mfpr_mmio_base + (off))
|
||||
|
||||
#define mfp_configured(p) ((p)->config != -1)
|
||||
|
||||
/*
|
||||
* perform a read-back of any MFPR register to make sure the
|
||||
* previous writings are finished
|
||||
*/
|
||||
#define mfpr_sync() (void)__raw_readl(mfpr_mmio_base + 0)
|
||||
|
||||
static inline void __mfp_config_run(struct pxa3xx_mfp_pin *p)
|
||||
{
|
||||
if (mfp_configured(p))
|
||||
mfpr_writel(p->mfpr_off, p->mfpr_run);
|
||||
}
|
||||
|
||||
static inline void __mfp_config_lpm(struct pxa3xx_mfp_pin *p)
|
||||
{
|
||||
if (mfp_configured(p)) {
|
||||
unsigned long mfpr_clr = (p->mfpr_run & ~MFPR_EDGE_BOTH) | MFPR_EDGE_CLEAR;
|
||||
if (mfpr_clr != p->mfpr_run)
|
||||
mfpr_writel(p->mfpr_off, mfpr_clr);
|
||||
if (p->mfpr_lpm != mfpr_clr)
|
||||
mfpr_writel(p->mfpr_off, p->mfpr_lpm);
|
||||
}
|
||||
}
|
||||
|
||||
void pxa3xx_mfp_config(unsigned long *mfp_cfgs, int num)
|
||||
{
|
||||
unsigned long flags;
|
||||
int i;
|
||||
|
||||
spin_lock_irqsave(&mfp_spin_lock, flags);
|
||||
|
||||
for (i = 0; i < num; i++, mfp_cfgs++) {
|
||||
unsigned long tmp, c = *mfp_cfgs;
|
||||
struct pxa3xx_mfp_pin *p;
|
||||
int pin, af, drv, lpm, edge, pull;
|
||||
|
||||
pin = MFP_PIN(c);
|
||||
BUG_ON(pin >= MFP_PIN_MAX);
|
||||
p = &mfp_table[pin];
|
||||
|
||||
af = MFP_AF(c);
|
||||
drv = MFP_DS(c);
|
||||
lpm = MFP_LPM_STATE(c);
|
||||
edge = MFP_LPM_EDGE(c);
|
||||
pull = MFP_PULL(c);
|
||||
|
||||
/* run-mode pull settings will conflict with MFPR bits of
|
||||
* low power mode state, calculate mfpr_run and mfpr_lpm
|
||||
* individually if pull != MFP_PULL_NONE
|
||||
*/
|
||||
tmp = MFPR_AF_SEL(af) | MFPR_DRIVE(drv);
|
||||
|
||||
if (likely(pull == MFP_PULL_NONE)) {
|
||||
p->mfpr_run = tmp | mfpr_lpm[lpm] | mfpr_edge[edge];
|
||||
p->mfpr_lpm = p->mfpr_run;
|
||||
} else {
|
||||
p->mfpr_lpm = tmp | mfpr_lpm[lpm] | mfpr_edge[edge];
|
||||
p->mfpr_run = tmp | mfpr_pull[pull];
|
||||
}
|
||||
|
||||
p->config = c; __mfp_config_run(p);
|
||||
}
|
||||
|
||||
mfpr_sync();
|
||||
spin_unlock_irqrestore(&mfp_spin_lock, flags);
|
||||
}
|
||||
|
||||
unsigned long pxa3xx_mfp_read(int mfp)
|
||||
{
|
||||
unsigned long val, flags;
|
||||
|
||||
BUG_ON(mfp >= MFP_PIN_MAX);
|
||||
|
||||
spin_lock_irqsave(&mfp_spin_lock, flags);
|
||||
val = mfpr_readl(mfp_table[mfp].mfpr_off);
|
||||
spin_unlock_irqrestore(&mfp_spin_lock, flags);
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
void pxa3xx_mfp_write(int mfp, unsigned long val)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
BUG_ON(mfp >= MFP_PIN_MAX);
|
||||
|
||||
spin_lock_irqsave(&mfp_spin_lock, flags);
|
||||
mfpr_writel(mfp_table[mfp].mfpr_off, val);
|
||||
mfpr_sync();
|
||||
spin_unlock_irqrestore(&mfp_spin_lock, flags);
|
||||
}
|
||||
|
||||
void __init pxa3xx_mfp_init_addr(struct pxa3xx_mfp_addr_map *map)
|
||||
{
|
||||
struct pxa3xx_mfp_addr_map *p;
|
||||
unsigned long offset, flags;
|
||||
int i;
|
||||
|
||||
spin_lock_irqsave(&mfp_spin_lock, flags);
|
||||
|
||||
for (p = map; p->start != MFP_PIN_INVALID; p++) {
|
||||
offset = p->offset;
|
||||
i = p->start;
|
||||
|
||||
do {
|
||||
mfp_table[i].mfpr_off = offset;
|
||||
mfp_table[i].mfpr_run = 0;
|
||||
mfp_table[i].mfpr_lpm = 0;
|
||||
offset += 4; i++;
|
||||
} while ((i <= p->end) && (p->end != -1));
|
||||
}
|
||||
|
||||
spin_unlock_irqrestore(&mfp_spin_lock, flags);
|
||||
}
|
||||
|
||||
void __init pxa3xx_init_mfp(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(mfp_table); i++)
|
||||
mfp_table[i].config = -1;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
/*
|
||||
* Configure the MFPs appropriately for suspend/resume.
|
||||
|
@ -207,23 +33,13 @@ void __init pxa3xx_init_mfp(void)
|
|||
*/
|
||||
static int pxa3xx_mfp_suspend(struct sys_device *d, pm_message_t state)
|
||||
{
|
||||
int pin;
|
||||
|
||||
for (pin = 0; pin < ARRAY_SIZE(mfp_table); pin++) {
|
||||
struct pxa3xx_mfp_pin *p = &mfp_table[pin];
|
||||
__mfp_config_lpm(p);
|
||||
}
|
||||
mfp_config_lpm();
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int pxa3xx_mfp_resume(struct sys_device *d)
|
||||
{
|
||||
int pin;
|
||||
|
||||
for (pin = 0; pin < ARRAY_SIZE(mfp_table); pin++) {
|
||||
struct pxa3xx_mfp_pin *p = &mfp_table[pin];
|
||||
__mfp_config_run(p);
|
||||
}
|
||||
mfp_config_run();
|
||||
|
||||
/* clear RDH bit when MFP settings are restored
|
||||
*
|
||||
|
@ -231,7 +47,6 @@ static int pxa3xx_mfp_resume(struct sys_device *d)
|
|||
* preserve them here in case they will be referenced later
|
||||
*/
|
||||
ASCR &= ~(ASCR_RDH | ASCR_D1S | ASCR_D2S | ASCR_D3S);
|
||||
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
#include "devices.h"
|
||||
#include "clock.h"
|
||||
|
||||
static struct pxa3xx_mfp_addr_map pxa300_mfp_addr_map[] __initdata = {
|
||||
static struct mfp_addr_map pxa300_mfp_addr_map[] __initdata = {
|
||||
|
||||
MFP_ADDR_X(GPIO0, GPIO2, 0x00b4),
|
||||
MFP_ADDR_X(GPIO3, GPIO26, 0x027c),
|
||||
|
@ -72,7 +72,7 @@ static struct pxa3xx_mfp_addr_map pxa300_mfp_addr_map[] __initdata = {
|
|||
};
|
||||
|
||||
/* override pxa300 MFP register addresses */
|
||||
static struct pxa3xx_mfp_addr_map pxa310_mfp_addr_map[] __initdata = {
|
||||
static struct mfp_addr_map pxa310_mfp_addr_map[] __initdata = {
|
||||
MFP_ADDR_X(GPIO30, GPIO98, 0x0418),
|
||||
MFP_ADDR_X(GPIO7_2, GPIO12_2, 0x052C),
|
||||
|
||||
|
@ -98,13 +98,13 @@ static struct clk_lookup pxa310_clkregs[] = {
|
|||
static int __init pxa300_init(void)
|
||||
{
|
||||
if (cpu_is_pxa300() || cpu_is_pxa310()) {
|
||||
pxa3xx_init_mfp();
|
||||
pxa3xx_mfp_init_addr(pxa300_mfp_addr_map);
|
||||
mfp_init_base(io_p2v(MFPR_BASE));
|
||||
mfp_init_addr(pxa300_mfp_addr_map);
|
||||
clks_register(ARRAY_AND_SIZE(common_clkregs));
|
||||
}
|
||||
|
||||
if (cpu_is_pxa310()) {
|
||||
pxa3xx_mfp_init_addr(pxa310_mfp_addr_map);
|
||||
mfp_init_addr(pxa310_mfp_addr_map);
|
||||
clks_register(ARRAY_AND_SIZE(pxa310_clkregs));
|
||||
}
|
||||
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
#include "devices.h"
|
||||
#include "clock.h"
|
||||
|
||||
static struct pxa3xx_mfp_addr_map pxa320_mfp_addr_map[] __initdata = {
|
||||
static struct mfp_addr_map pxa320_mfp_addr_map[] __initdata = {
|
||||
|
||||
MFP_ADDR_X(GPIO0, GPIO4, 0x0124),
|
||||
MFP_ADDR_X(GPIO5, GPIO9, 0x028C),
|
||||
|
@ -86,8 +86,8 @@ static struct clk_lookup pxa320_clkregs[] = {
|
|||
static int __init pxa320_init(void)
|
||||
{
|
||||
if (cpu_is_pxa320()) {
|
||||
pxa3xx_init_mfp();
|
||||
pxa3xx_mfp_init_addr(pxa320_mfp_addr_map);
|
||||
mfp_init_base(io_p2v(MFPR_BASE));
|
||||
mfp_init_addr(pxa320_mfp_addr_map);
|
||||
clks_register(ARRAY_AND_SIZE(pxa320_clkregs));
|
||||
}
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
|
||||
#include <mach/pxa930.h>
|
||||
|
||||
static struct pxa3xx_mfp_addr_map pxa930_mfp_addr_map[] __initdata = {
|
||||
static struct mfp_addr_map pxa930_mfp_addr_map[] __initdata = {
|
||||
|
||||
MFP_ADDR(GPIO0, 0x02e0),
|
||||
MFP_ADDR(GPIO1, 0x02dc),
|
||||
|
@ -179,8 +179,8 @@ static struct pxa3xx_mfp_addr_map pxa930_mfp_addr_map[] __initdata = {
|
|||
static int __init pxa930_init(void)
|
||||
{
|
||||
if (cpu_is_pxa930()) {
|
||||
pxa3xx_init_mfp();
|
||||
pxa3xx_mfp_init_addr(pxa930_mfp_addr_map);
|
||||
mfp_init_base(io_p2v(MFPR_BASE));
|
||||
mfp_init_addr(pxa930_mfp_addr_map);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -919,7 +919,7 @@ static void __init tosa_init(void)
|
|||
pxa2xx_set_spi_info(2, &pxa_ssp_master_info);
|
||||
spi_register_board_info(spi_board_info, ARRAY_SIZE(spi_board_info));
|
||||
|
||||
clk_add_alias("CLK_CK3P6MI", &tc6393xb_device.dev, "GPIO11_CLK", NULL);
|
||||
clk_add_alias("CLK_CK3P6MI", tc6393xb_device.name, "GPIO11_CLK", NULL);
|
||||
|
||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||
}
|
||||
|
|
|
@ -340,6 +340,17 @@ config CPU_XSC3
|
|||
select CPU_TLB_V4WBI if MMU
|
||||
select IO_36
|
||||
|
||||
# Marvell PJ1 (Mohawk)
|
||||
config CPU_MOHAWK
|
||||
bool
|
||||
select CPU_32v5
|
||||
select CPU_ABRT_EV5T
|
||||
select CPU_PABRT_NOIFAR
|
||||
select CPU_CACHE_VIVT
|
||||
select CPU_CP15_MMU
|
||||
select CPU_TLB_V4WBI if MMU
|
||||
select CPU_COPY_V4WB if MMU
|
||||
|
||||
# Feroceon
|
||||
config CPU_FEROCEON
|
||||
bool
|
||||
|
@ -569,7 +580,7 @@ comment "Processor Features"
|
|||
|
||||
config ARM_THUMB
|
||||
bool "Support Thumb user binaries"
|
||||
depends on CPU_ARM720T || CPU_ARM740T || CPU_ARM920T || CPU_ARM922T || CPU_ARM925T || CPU_ARM926T || CPU_ARM940T || CPU_ARM946E || CPU_ARM1020 || CPU_ARM1020E || CPU_ARM1022 || CPU_ARM1026 || CPU_XSCALE || CPU_XSC3 || CPU_V6 || CPU_V7 || CPU_FEROCEON
|
||||
depends on CPU_ARM720T || CPU_ARM740T || CPU_ARM920T || CPU_ARM922T || CPU_ARM925T || CPU_ARM926T || CPU_ARM940T || CPU_ARM946E || CPU_ARM1020 || CPU_ARM1020E || CPU_ARM1022 || CPU_ARM1026 || CPU_XSCALE || CPU_XSC3 || CPU_MOHAWK || CPU_V6 || CPU_V7 || CPU_FEROCEON
|
||||
default y
|
||||
help
|
||||
Say Y if you want to include kernel support for running user space
|
||||
|
@ -653,7 +664,7 @@ config CPU_CACHE_ROUND_ROBIN
|
|||
|
||||
config CPU_BPREDICT_DISABLE
|
||||
bool "Disable branch prediction"
|
||||
depends on CPU_ARM1020 || CPU_V6 || CPU_XSC3 || CPU_V7
|
||||
depends on CPU_ARM1020 || CPU_V6 || CPU_MOHAWK || CPU_XSC3 || CPU_V7
|
||||
help
|
||||
Say Y here to disable branch prediction. If unsure, say N.
|
||||
|
||||
|
|
|
@ -70,6 +70,7 @@ obj-$(CONFIG_CPU_SA110) += proc-sa110.o
|
|||
obj-$(CONFIG_CPU_SA1100) += proc-sa1100.o
|
||||
obj-$(CONFIG_CPU_XSCALE) += proc-xscale.o
|
||||
obj-$(CONFIG_CPU_XSC3) += proc-xsc3.o
|
||||
obj-$(CONFIG_CPU_MOHAWK) += proc-mohawk.o
|
||||
obj-$(CONFIG_CPU_FEROCEON) += proc-feroceon.o
|
||||
obj-$(CONFIG_CPU_V6) += proc-v6.o
|
||||
obj-$(CONFIG_CPU_V7) += proc-v7.o
|
||||
|
|
|
@ -0,0 +1,416 @@
|
|||
/*
|
||||
* linux/arch/arm/mm/proc-mohawk.S: MMU functions for Marvell PJ1 core
|
||||
*
|
||||
* PJ1 (codename Mohawk) is a hybrid of the xscale3 and Marvell's own core.
|
||||
*
|
||||
* Heavily based on proc-arm926.S and proc-xsc3.S
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include <linux/linkage.h>
|
||||
#include <linux/init.h>
|
||||
#include <asm/assembler.h>
|
||||
#include <asm/hwcap.h>
|
||||
#include <asm/pgtable-hwdef.h>
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/page.h>
|
||||
#include <asm/ptrace.h>
|
||||
#include "proc-macros.S"
|
||||
|
||||
/*
|
||||
* This is the maximum size of an area which will be flushed. If the
|
||||
* area is larger than this, then we flush the whole cache.
|
||||
*/
|
||||
#define CACHE_DLIMIT 32768
|
||||
|
||||
/*
|
||||
* The cache line size of the L1 D cache.
|
||||
*/
|
||||
#define CACHE_DLINESIZE 32
|
||||
|
||||
/*
|
||||
* cpu_mohawk_proc_init()
|
||||
*/
|
||||
ENTRY(cpu_mohawk_proc_init)
|
||||
mov pc, lr
|
||||
|
||||
/*
|
||||
* cpu_mohawk_proc_fin()
|
||||
*/
|
||||
ENTRY(cpu_mohawk_proc_fin)
|
||||
stmfd sp!, {lr}
|
||||
mov ip, #PSR_F_BIT | PSR_I_BIT | SVC_MODE
|
||||
msr cpsr_c, ip
|
||||
bl mohawk_flush_kern_cache_all
|
||||
mrc p15, 0, r0, c1, c0, 0 @ ctrl register
|
||||
bic r0, r0, #0x1800 @ ...iz...........
|
||||
bic r0, r0, #0x0006 @ .............ca.
|
||||
mcr p15, 0, r0, c1, c0, 0 @ disable caches
|
||||
ldmfd sp!, {pc}
|
||||
|
||||
/*
|
||||
* cpu_mohawk_reset(loc)
|
||||
*
|
||||
* Perform a soft reset of the system. Put the CPU into the
|
||||
* same state as it would be if it had been reset, and branch
|
||||
* to what would be the reset vector.
|
||||
*
|
||||
* loc: location to jump to for soft reset
|
||||
*
|
||||
* (same as arm926)
|
||||
*/
|
||||
.align 5
|
||||
ENTRY(cpu_mohawk_reset)
|
||||
mov ip, #0
|
||||
mcr p15, 0, ip, c7, c7, 0 @ invalidate I,D caches
|
||||
mcr p15, 0, ip, c7, c10, 4 @ drain WB
|
||||
mcr p15, 0, ip, c8, c7, 0 @ invalidate I & D TLBs
|
||||
mrc p15, 0, ip, c1, c0, 0 @ ctrl register
|
||||
bic ip, ip, #0x0007 @ .............cam
|
||||
bic ip, ip, #0x1100 @ ...i...s........
|
||||
mcr p15, 0, ip, c1, c0, 0 @ ctrl register
|
||||
mov pc, r0
|
||||
|
||||
/*
|
||||
* cpu_mohawk_do_idle()
|
||||
*
|
||||
* Called with IRQs disabled
|
||||
*/
|
||||
.align 5
|
||||
ENTRY(cpu_mohawk_do_idle)
|
||||
mov r0, #0
|
||||
mcr p15, 0, r0, c7, c10, 4 @ drain write buffer
|
||||
mcr p15, 0, r0, c7, c0, 4 @ wait for interrupt
|
||||
mov pc, lr
|
||||
|
||||
/*
|
||||
* flush_user_cache_all()
|
||||
*
|
||||
* Clean and invalidate all cache entries in a particular
|
||||
* address space.
|
||||
*/
|
||||
ENTRY(mohawk_flush_user_cache_all)
|
||||
/* FALLTHROUGH */
|
||||
|
||||
/*
|
||||
* flush_kern_cache_all()
|
||||
*
|
||||
* Clean and invalidate the entire cache.
|
||||
*/
|
||||
ENTRY(mohawk_flush_kern_cache_all)
|
||||
mov r2, #VM_EXEC
|
||||
mov ip, #0
|
||||
__flush_whole_cache:
|
||||
mcr p15, 0, ip, c7, c14, 0 @ clean & invalidate all D cache
|
||||
tst r2, #VM_EXEC
|
||||
mcrne p15, 0, ip, c7, c5, 0 @ invalidate I cache
|
||||
mcrne p15, 0, ip, c7, c10, 0 @ drain write buffer
|
||||
mov pc, lr
|
||||
|
||||
/*
|
||||
* flush_user_cache_range(start, end, flags)
|
||||
*
|
||||
* Clean and invalidate a range of cache entries in the
|
||||
* specified address range.
|
||||
*
|
||||
* - start - start address (inclusive)
|
||||
* - end - end address (exclusive)
|
||||
* - flags - vm_flags describing address space
|
||||
*
|
||||
* (same as arm926)
|
||||
*/
|
||||
ENTRY(mohawk_flush_user_cache_range)
|
||||
mov ip, #0
|
||||
sub r3, r1, r0 @ calculate total size
|
||||
cmp r3, #CACHE_DLIMIT
|
||||
bgt __flush_whole_cache
|
||||
1: tst r2, #VM_EXEC
|
||||
mcr p15, 0, r0, c7, c14, 1 @ clean and invalidate D entry
|
||||
mcrne p15, 0, r0, c7, c5, 1 @ invalidate I entry
|
||||
add r0, r0, #CACHE_DLINESIZE
|
||||
mcr p15, 0, r0, c7, c14, 1 @ clean and invalidate D entry
|
||||
mcrne p15, 0, r0, c7, c5, 1 @ invalidate I entry
|
||||
add r0, r0, #CACHE_DLINESIZE
|
||||
cmp r0, r1
|
||||
blo 1b
|
||||
tst r2, #VM_EXEC
|
||||
mcrne p15, 0, ip, c7, c10, 4 @ drain WB
|
||||
mov pc, lr
|
||||
|
||||
/*
|
||||
* coherent_kern_range(start, end)
|
||||
*
|
||||
* Ensure coherency between the Icache and the Dcache in the
|
||||
* region described by start, end. If you have non-snooping
|
||||
* Harvard caches, you need to implement this function.
|
||||
*
|
||||
* - start - virtual start address
|
||||
* - end - virtual end address
|
||||
*/
|
||||
ENTRY(mohawk_coherent_kern_range)
|
||||
/* FALLTHROUGH */
|
||||
|
||||
/*
|
||||
* coherent_user_range(start, end)
|
||||
*
|
||||
* Ensure coherency between the Icache and the Dcache in the
|
||||
* region described by start, end. If you have non-snooping
|
||||
* Harvard caches, you need to implement this function.
|
||||
*
|
||||
* - start - virtual start address
|
||||
* - end - virtual end address
|
||||
*
|
||||
* (same as arm926)
|
||||
*/
|
||||
ENTRY(mohawk_coherent_user_range)
|
||||
bic r0, r0, #CACHE_DLINESIZE - 1
|
||||
1: mcr p15, 0, r0, c7, c10, 1 @ clean D entry
|
||||
mcr p15, 0, r0, c7, c5, 1 @ invalidate I entry
|
||||
add r0, r0, #CACHE_DLINESIZE
|
||||
cmp r0, r1
|
||||
blo 1b
|
||||
mcr p15, 0, r0, c7, c10, 4 @ drain WB
|
||||
mov pc, lr
|
||||
|
||||
/*
|
||||
* flush_kern_dcache_page(void *page)
|
||||
*
|
||||
* Ensure no D cache aliasing occurs, either with itself or
|
||||
* the I cache
|
||||
*
|
||||
* - addr - page aligned address
|
||||
*/
|
||||
ENTRY(mohawk_flush_kern_dcache_page)
|
||||
add r1, r0, #PAGE_SZ
|
||||
1: mcr p15, 0, r0, c7, c14, 1 @ clean+invalidate D entry
|
||||
add r0, r0, #CACHE_DLINESIZE
|
||||
cmp r0, r1
|
||||
blo 1b
|
||||
mov r0, #0
|
||||
mcr p15, 0, r0, c7, c5, 0 @ invalidate I cache
|
||||
mcr p15, 0, r0, c7, c10, 4 @ drain WB
|
||||
mov pc, lr
|
||||
|
||||
/*
|
||||
* dma_inv_range(start, end)
|
||||
*
|
||||
* Invalidate (discard) the specified virtual address range.
|
||||
* May not write back any entries. If 'start' or 'end'
|
||||
* are not cache line aligned, those lines must be written
|
||||
* back.
|
||||
*
|
||||
* - start - virtual start address
|
||||
* - end - virtual end address
|
||||
*
|
||||
* (same as v4wb)
|
||||
*/
|
||||
ENTRY(mohawk_dma_inv_range)
|
||||
tst r0, #CACHE_DLINESIZE - 1
|
||||
mcrne p15, 0, r0, c7, c10, 1 @ clean D entry
|
||||
tst r1, #CACHE_DLINESIZE - 1
|
||||
mcrne p15, 0, r1, c7, c10, 1 @ clean D entry
|
||||
bic r0, r0, #CACHE_DLINESIZE - 1
|
||||
1: mcr p15, 0, r0, c7, c6, 1 @ invalidate D entry
|
||||
add r0, r0, #CACHE_DLINESIZE
|
||||
cmp r0, r1
|
||||
blo 1b
|
||||
mcr p15, 0, r0, c7, c10, 4 @ drain WB
|
||||
mov pc, lr
|
||||
|
||||
/*
|
||||
* dma_clean_range(start, end)
|
||||
*
|
||||
* Clean the specified virtual address range.
|
||||
*
|
||||
* - start - virtual start address
|
||||
* - end - virtual end address
|
||||
*
|
||||
* (same as v4wb)
|
||||
*/
|
||||
ENTRY(mohawk_dma_clean_range)
|
||||
bic r0, r0, #CACHE_DLINESIZE - 1
|
||||
1: mcr p15, 0, r0, c7, c10, 1 @ clean D entry
|
||||
add r0, r0, #CACHE_DLINESIZE
|
||||
cmp r0, r1
|
||||
blo 1b
|
||||
mcr p15, 0, r0, c7, c10, 4 @ drain WB
|
||||
mov pc, lr
|
||||
|
||||
/*
|
||||
* dma_flush_range(start, end)
|
||||
*
|
||||
* Clean and invalidate the specified virtual address range.
|
||||
*
|
||||
* - start - virtual start address
|
||||
* - end - virtual end address
|
||||
*/
|
||||
ENTRY(mohawk_dma_flush_range)
|
||||
bic r0, r0, #CACHE_DLINESIZE - 1
|
||||
1:
|
||||
mcr p15, 0, r0, c7, c14, 1 @ clean+invalidate D entry
|
||||
add r0, r0, #CACHE_DLINESIZE
|
||||
cmp r0, r1
|
||||
blo 1b
|
||||
mcr p15, 0, r0, c7, c10, 4 @ drain WB
|
||||
mov pc, lr
|
||||
|
||||
ENTRY(mohawk_cache_fns)
|
||||
.long mohawk_flush_kern_cache_all
|
||||
.long mohawk_flush_user_cache_all
|
||||
.long mohawk_flush_user_cache_range
|
||||
.long mohawk_coherent_kern_range
|
||||
.long mohawk_coherent_user_range
|
||||
.long mohawk_flush_kern_dcache_page
|
||||
.long mohawk_dma_inv_range
|
||||
.long mohawk_dma_clean_range
|
||||
.long mohawk_dma_flush_range
|
||||
|
||||
ENTRY(cpu_mohawk_dcache_clean_area)
|
||||
1: mcr p15, 0, r0, c7, c10, 1 @ clean D entry
|
||||
add r0, r0, #CACHE_DLINESIZE
|
||||
subs r1, r1, #CACHE_DLINESIZE
|
||||
bhi 1b
|
||||
mcr p15, 0, r0, c7, c10, 4 @ drain WB
|
||||
mov pc, lr
|
||||
|
||||
/*
|
||||
* cpu_mohawk_switch_mm(pgd)
|
||||
*
|
||||
* Set the translation base pointer to be as described by pgd.
|
||||
*
|
||||
* pgd: new page tables
|
||||
*/
|
||||
.align 5
|
||||
ENTRY(cpu_mohawk_switch_mm)
|
||||
mov ip, #0
|
||||
mcr p15, 0, ip, c7, c14, 0 @ clean & invalidate all D cache
|
||||
mcr p15, 0, ip, c7, c5, 0 @ invalidate I cache
|
||||
mcr p15, 0, ip, c7, c10, 4 @ drain WB
|
||||
orr r0, r0, #0x18 @ cache the page table in L2
|
||||
mcr p15, 0, r0, c2, c0, 0 @ load page table pointer
|
||||
mcr p15, 0, ip, c8, c7, 0 @ invalidate I & D TLBs
|
||||
mov pc, lr
|
||||
|
||||
/*
|
||||
* cpu_mohawk_set_pte_ext(ptep, pte, ext)
|
||||
*
|
||||
* Set a PTE and flush it out
|
||||
*/
|
||||
.align 5
|
||||
ENTRY(cpu_mohawk_set_pte_ext)
|
||||
armv3_set_pte_ext
|
||||
mov r0, r0
|
||||
mcr p15, 0, r0, c7, c10, 1 @ clean D entry
|
||||
mcr p15, 0, r0, c7, c10, 4 @ drain WB
|
||||
mov pc, lr
|
||||
|
||||
__INIT
|
||||
|
||||
.type __mohawk_setup, #function
|
||||
__mohawk_setup:
|
||||
mov r0, #0
|
||||
mcr p15, 0, r0, c7, c7 @ invalidate I,D caches
|
||||
mcr p15, 0, r0, c7, c10, 4 @ drain write buffer
|
||||
mcr p15, 0, r0, c8, c7 @ invalidate I,D TLBs
|
||||
orr r4, r4, #0x18 @ cache the page table in L2
|
||||
mcr p15, 0, r4, c2, c0, 0 @ load page table pointer
|
||||
|
||||
mov r0, #0 @ don't allow CP access
|
||||
mcr p15, 0, r0, c15, c1, 0 @ write CP access register
|
||||
|
||||
adr r5, mohawk_crval
|
||||
ldmia r5, {r5, r6}
|
||||
mrc p15, 0, r0, c1, c0 @ get control register
|
||||
bic r0, r0, r5
|
||||
orr r0, r0, r6
|
||||
mov pc, lr
|
||||
|
||||
.size __mohawk_setup, . - __mohawk_setup
|
||||
|
||||
/*
|
||||
* R
|
||||
* .RVI ZFRS BLDP WCAM
|
||||
* .011 1001 ..00 0101
|
||||
*
|
||||
*/
|
||||
.type mohawk_crval, #object
|
||||
mohawk_crval:
|
||||
crval clear=0x00007f3f, mmuset=0x00003905, ucset=0x00001134
|
||||
|
||||
__INITDATA
|
||||
|
||||
/*
|
||||
* Purpose : Function pointers used to access above functions - all calls
|
||||
* come through these
|
||||
*/
|
||||
.type mohawk_processor_functions, #object
|
||||
mohawk_processor_functions:
|
||||
.word v5t_early_abort
|
||||
.word pabort_noifar
|
||||
.word cpu_mohawk_proc_init
|
||||
.word cpu_mohawk_proc_fin
|
||||
.word cpu_mohawk_reset
|
||||
.word cpu_mohawk_do_idle
|
||||
.word cpu_mohawk_dcache_clean_area
|
||||
.word cpu_mohawk_switch_mm
|
||||
.word cpu_mohawk_set_pte_ext
|
||||
.size mohawk_processor_functions, . - mohawk_processor_functions
|
||||
|
||||
.section ".rodata"
|
||||
|
||||
.type cpu_arch_name, #object
|
||||
cpu_arch_name:
|
||||
.asciz "armv5te"
|
||||
.size cpu_arch_name, . - cpu_arch_name
|
||||
|
||||
.type cpu_elf_name, #object
|
||||
cpu_elf_name:
|
||||
.asciz "v5"
|
||||
.size cpu_elf_name, . - cpu_elf_name
|
||||
|
||||
.type cpu_mohawk_name, #object
|
||||
cpu_mohawk_name:
|
||||
.asciz "Marvell 88SV331x"
|
||||
.size cpu_mohawk_name, . - cpu_mohawk_name
|
||||
|
||||
.align
|
||||
|
||||
.section ".proc.info.init", #alloc, #execinstr
|
||||
|
||||
.type __88sv331x_proc_info,#object
|
||||
__88sv331x_proc_info:
|
||||
.long 0x56158000 @ Marvell 88SV331x (MOHAWK)
|
||||
.long 0xfffff000
|
||||
.long PMD_TYPE_SECT | \
|
||||
PMD_SECT_BUFFERABLE | \
|
||||
PMD_SECT_CACHEABLE | \
|
||||
PMD_BIT4 | \
|
||||
PMD_SECT_AP_WRITE | \
|
||||
PMD_SECT_AP_READ
|
||||
.long PMD_TYPE_SECT | \
|
||||
PMD_BIT4 | \
|
||||
PMD_SECT_AP_WRITE | \
|
||||
PMD_SECT_AP_READ
|
||||
b __mohawk_setup
|
||||
.long cpu_arch_name
|
||||
.long cpu_elf_name
|
||||
.long HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP
|
||||
.long cpu_mohawk_name
|
||||
.long mohawk_processor_functions
|
||||
.long v4wbi_tlb_fns
|
||||
.long v4wb_user_fns
|
||||
.long mohawk_cache_fns
|
||||
.size __88sv331x_proc_info, . - __88sv331x_proc_info
|
|
@ -0,0 +1,3 @@
|
|||
if PLAT_PXA
|
||||
|
||||
endif
|
|
@ -0,0 +1,7 @@
|
|||
#
|
||||
# Makefile for code common across different PXA processor families
|
||||
#
|
||||
|
||||
obj-y := dma.o mfp.o
|
||||
|
||||
obj-$(CONFIG_GENERIC_GPIO) += gpio.o
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* linux/arch/arm/mach-pxa/dma.c
|
||||
* linux/arch/arm/plat-pxa/dma.c
|
||||
*
|
||||
* PXA DMA registration and IRQ dispatching
|
||||
*
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* linux/arch/arm/mach-pxa/gpio.c
|
||||
* linux/arch/arm/plat-pxa/gpio.c
|
||||
*
|
||||
* Generic PXA GPIO handling
|
||||
*
|
||||
|
@ -22,34 +22,6 @@
|
|||
|
||||
int pxa_last_gpio;
|
||||
|
||||
/*
|
||||
* We handle the GPIOs by banks, each bank covers up to 32 GPIOs with
|
||||
* one set of registers. The register offsets are organized below:
|
||||
*
|
||||
* GPLR GPDR GPSR GPCR GRER GFER GEDR
|
||||
* BANK 0 - 0x0000 0x000C 0x0018 0x0024 0x0030 0x003C 0x0048
|
||||
* BANK 1 - 0x0004 0x0010 0x001C 0x0028 0x0034 0x0040 0x004C
|
||||
* BANK 2 - 0x0008 0x0014 0x0020 0x002C 0x0038 0x0044 0x0050
|
||||
*
|
||||
* BANK 3 - 0x0100 0x010C 0x0118 0x0124 0x0130 0x013C 0x0148
|
||||
* BANK 4 - 0x0104 0x0110 0x011C 0x0128 0x0134 0x0140 0x014C
|
||||
* BANK 5 - 0x0108 0x0114 0x0120 0x012C 0x0138 0x0144 0x0150
|
||||
*
|
||||
* NOTE:
|
||||
* BANK 3 is only available on PXA27x and later processors.
|
||||
* BANK 4 and 5 are only available on PXA935
|
||||
*/
|
||||
|
||||
#define GPIO_BANK(n) (GPIO_REGS_VIRT + BANK_OFF(n))
|
||||
|
||||
#define GPLR_OFFSET 0x00
|
||||
#define GPDR_OFFSET 0x0C
|
||||
#define GPSR_OFFSET 0x18
|
||||
#define GPCR_OFFSET 0x24
|
||||
#define GRER_OFFSET 0x30
|
||||
#define GFER_OFFSET 0x3C
|
||||
#define GEDR_OFFSET 0x48
|
||||
|
||||
struct pxa_gpio_chip {
|
||||
struct gpio_chip chip;
|
||||
void __iomem *regbase;
|
|
@ -0,0 +1,85 @@
|
|||
#ifndef __PLAT_DMA_H
|
||||
#define __PLAT_DMA_H
|
||||
|
||||
#define DMAC_REG(x) (*((volatile u32 *)(DMAC_REGS_VIRT + (x))))
|
||||
|
||||
#define DCSR(n) DMAC_REG((n) << 2)
|
||||
#define DALGN DMAC_REG(0x00a0) /* DMA Alignment Register */
|
||||
#define DINT DMAC_REG(0x00f0) /* DMA Interrupt Register */
|
||||
#define DDADR(n) DMAC_REG(0x0200 + ((n) << 4))
|
||||
#define DSADR(n) DMAC_REG(0x0204 + ((n) << 4))
|
||||
#define DTADR(n) DMAC_REG(0x0208 + ((n) << 4))
|
||||
#define DCMD(n) DMAC_REG(0x020c + ((n) << 4))
|
||||
#define DRCMR(n) DMAC_REG((((n) < 64) ? 0x0100 : 0x1100) + \
|
||||
(((n) & 0x3f) << 2))
|
||||
|
||||
#define DCSR_RUN (1 << 31) /* Run Bit (read / write) */
|
||||
#define DCSR_NODESC (1 << 30) /* No-Descriptor Fetch (read / write) */
|
||||
#define DCSR_STOPIRQEN (1 << 29) /* Stop Interrupt Enable (read / write) */
|
||||
#define DCSR_REQPEND (1 << 8) /* Request Pending (read-only) */
|
||||
#define DCSR_STOPSTATE (1 << 3) /* Stop State (read-only) */
|
||||
#define DCSR_ENDINTR (1 << 2) /* End Interrupt (read / write) */
|
||||
#define DCSR_STARTINTR (1 << 1) /* Start Interrupt (read / write) */
|
||||
#define DCSR_BUSERR (1 << 0) /* Bus Error Interrupt (read / write) */
|
||||
|
||||
#define DCSR_EORIRQEN (1 << 28) /* End of Receive Interrupt Enable (R/W) */
|
||||
#define DCSR_EORJMPEN (1 << 27) /* Jump to next descriptor on EOR */
|
||||
#define DCSR_EORSTOPEN (1 << 26) /* STOP on an EOR */
|
||||
#define DCSR_SETCMPST (1 << 25) /* Set Descriptor Compare Status */
|
||||
#define DCSR_CLRCMPST (1 << 24) /* Clear Descriptor Compare Status */
|
||||
#define DCSR_CMPST (1 << 10) /* The Descriptor Compare Status */
|
||||
#define DCSR_EORINTR (1 << 9) /* The end of Receive */
|
||||
|
||||
#define DRCMR_MAPVLD (1 << 7) /* Map Valid (read / write) */
|
||||
#define DRCMR_CHLNUM 0x1f /* mask for Channel Number (read / write) */
|
||||
|
||||
#define DDADR_DESCADDR 0xfffffff0 /* Address of next descriptor (mask) */
|
||||
#define DDADR_STOP (1 << 0) /* Stop (read / write) */
|
||||
|
||||
#define DCMD_INCSRCADDR (1 << 31) /* Source Address Increment Setting. */
|
||||
#define DCMD_INCTRGADDR (1 << 30) /* Target Address Increment Setting. */
|
||||
#define DCMD_FLOWSRC (1 << 29) /* Flow Control by the source. */
|
||||
#define DCMD_FLOWTRG (1 << 28) /* Flow Control by the target. */
|
||||
#define DCMD_STARTIRQEN (1 << 22) /* Start Interrupt Enable */
|
||||
#define DCMD_ENDIRQEN (1 << 21) /* End Interrupt Enable */
|
||||
#define DCMD_ENDIAN (1 << 18) /* Device Endian-ness. */
|
||||
#define DCMD_BURST8 (1 << 16) /* 8 byte burst */
|
||||
#define DCMD_BURST16 (2 << 16) /* 16 byte burst */
|
||||
#define DCMD_BURST32 (3 << 16) /* 32 byte burst */
|
||||
#define DCMD_WIDTH1 (1 << 14) /* 1 byte width */
|
||||
#define DCMD_WIDTH2 (2 << 14) /* 2 byte width (HalfWord) */
|
||||
#define DCMD_WIDTH4 (3 << 14) /* 4 byte width (Word) */
|
||||
#define DCMD_LENGTH 0x01fff /* length mask (max = 8K - 1) */
|
||||
|
||||
/*
|
||||
* Descriptor structure for PXA's DMA engine
|
||||
* Note: this structure must always be aligned to a 16-byte boundary.
|
||||
*/
|
||||
|
||||
typedef struct pxa_dma_desc {
|
||||
volatile u32 ddadr; /* Points to the next descriptor + flags */
|
||||
volatile u32 dsadr; /* DSADR value for the current transfer */
|
||||
volatile u32 dtadr; /* DTADR value for the current transfer */
|
||||
volatile u32 dcmd; /* DCMD value for the current transfer */
|
||||
} pxa_dma_desc;
|
||||
|
||||
typedef enum {
|
||||
DMA_PRIO_HIGH = 0,
|
||||
DMA_PRIO_MEDIUM = 1,
|
||||
DMA_PRIO_LOW = 2
|
||||
} pxa_dma_prio;
|
||||
|
||||
/*
|
||||
* DMA registration
|
||||
*/
|
||||
|
||||
int __init pxa_init_dma(int irq, int num_ch);
|
||||
|
||||
int pxa_request_dma (char *name,
|
||||
pxa_dma_prio prio,
|
||||
void (*irq_handler)(int, void *),
|
||||
void *data);
|
||||
|
||||
void pxa_free_dma (int dma_ch);
|
||||
|
||||
#endif /* __PLAT_DMA_H */
|
|
@ -0,0 +1,62 @@
|
|||
#ifndef __PLAT_GPIO_H
|
||||
#define __PLAT_GPIO_H
|
||||
|
||||
/*
|
||||
* We handle the GPIOs by banks, each bank covers up to 32 GPIOs with
|
||||
* one set of registers. The register offsets are organized below:
|
||||
*
|
||||
* GPLR GPDR GPSR GPCR GRER GFER GEDR
|
||||
* BANK 0 - 0x0000 0x000C 0x0018 0x0024 0x0030 0x003C 0x0048
|
||||
* BANK 1 - 0x0004 0x0010 0x001C 0x0028 0x0034 0x0040 0x004C
|
||||
* BANK 2 - 0x0008 0x0014 0x0020 0x002C 0x0038 0x0044 0x0050
|
||||
*
|
||||
* BANK 3 - 0x0100 0x010C 0x0118 0x0124 0x0130 0x013C 0x0148
|
||||
* BANK 4 - 0x0104 0x0110 0x011C 0x0128 0x0134 0x0140 0x014C
|
||||
* BANK 5 - 0x0108 0x0114 0x0120 0x012C 0x0138 0x0144 0x0150
|
||||
*
|
||||
* NOTE:
|
||||
* BANK 3 is only available on PXA27x and later processors.
|
||||
* BANK 4 and 5 are only available on PXA935
|
||||
*/
|
||||
|
||||
#define GPIO_BANK(n) (GPIO_REGS_VIRT + BANK_OFF(n))
|
||||
|
||||
#define GPLR_OFFSET 0x00
|
||||
#define GPDR_OFFSET 0x0C
|
||||
#define GPSR_OFFSET 0x18
|
||||
#define GPCR_OFFSET 0x24
|
||||
#define GRER_OFFSET 0x30
|
||||
#define GFER_OFFSET 0x3C
|
||||
#define GEDR_OFFSET 0x48
|
||||
|
||||
static inline int gpio_get_value(unsigned gpio)
|
||||
{
|
||||
if (__builtin_constant_p(gpio) && (gpio < NR_BUILTIN_GPIO))
|
||||
return GPLR(gpio) & GPIO_bit(gpio);
|
||||
else
|
||||
return __gpio_get_value(gpio);
|
||||
}
|
||||
|
||||
static inline void gpio_set_value(unsigned gpio, int value)
|
||||
{
|
||||
if (__builtin_constant_p(gpio) && (gpio < NR_BUILTIN_GPIO)) {
|
||||
if (value)
|
||||
GPSR(gpio) = GPIO_bit(gpio);
|
||||
else
|
||||
GPCR(gpio) = GPIO_bit(gpio);
|
||||
} else
|
||||
__gpio_set_value(gpio, value);
|
||||
}
|
||||
|
||||
#define gpio_cansleep __gpio_cansleep
|
||||
|
||||
/* NOTE: some PXAs have fewer on-chip GPIOs (like PXA255, with 85).
|
||||
* Those cases currently cause holes in the GPIO number space, the
|
||||
* actual number of the last GPIO is recorded by 'pxa_last_gpio'.
|
||||
*/
|
||||
extern int pxa_last_gpio;
|
||||
|
||||
typedef int (*set_wake_t)(unsigned int irq, unsigned int on);
|
||||
|
||||
extern void pxa_init_gpio(int mux_irq, int start, int end, set_wake_t fn);
|
||||
#endif /* __PLAT_GPIO_H */
|
|
@ -0,0 +1,399 @@
|
|||
/*
|
||||
* arch/arm/plat-pxa/include/plat/mfp.h
|
||||
*
|
||||
* Common Multi-Function Pin Definitions
|
||||
*
|
||||
* Copyright (C) 2007 Marvell International Ltd.
|
||||
*
|
||||
* 2007-8-21: eric miao <eric.miao@marvell.com>
|
||||
* initial version
|
||||
*
|
||||
* 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_PLAT_MFP_H
|
||||
#define __ASM_PLAT_MFP_H
|
||||
|
||||
#define mfp_to_gpio(m) ((m) % 128)
|
||||
|
||||
/* list of all the configurable MFP pins */
|
||||
enum {
|
||||
MFP_PIN_INVALID = -1,
|
||||
|
||||
MFP_PIN_GPIO0 = 0,
|
||||
MFP_PIN_GPIO1,
|
||||
MFP_PIN_GPIO2,
|
||||
MFP_PIN_GPIO3,
|
||||
MFP_PIN_GPIO4,
|
||||
MFP_PIN_GPIO5,
|
||||
MFP_PIN_GPIO6,
|
||||
MFP_PIN_GPIO7,
|
||||
MFP_PIN_GPIO8,
|
||||
MFP_PIN_GPIO9,
|
||||
MFP_PIN_GPIO10,
|
||||
MFP_PIN_GPIO11,
|
||||
MFP_PIN_GPIO12,
|
||||
MFP_PIN_GPIO13,
|
||||
MFP_PIN_GPIO14,
|
||||
MFP_PIN_GPIO15,
|
||||
MFP_PIN_GPIO16,
|
||||
MFP_PIN_GPIO17,
|
||||
MFP_PIN_GPIO18,
|
||||
MFP_PIN_GPIO19,
|
||||
MFP_PIN_GPIO20,
|
||||
MFP_PIN_GPIO21,
|
||||
MFP_PIN_GPIO22,
|
||||
MFP_PIN_GPIO23,
|
||||
MFP_PIN_GPIO24,
|
||||
MFP_PIN_GPIO25,
|
||||
MFP_PIN_GPIO26,
|
||||
MFP_PIN_GPIO27,
|
||||
MFP_PIN_GPIO28,
|
||||
MFP_PIN_GPIO29,
|
||||
MFP_PIN_GPIO30,
|
||||
MFP_PIN_GPIO31,
|
||||
MFP_PIN_GPIO32,
|
||||
MFP_PIN_GPIO33,
|
||||
MFP_PIN_GPIO34,
|
||||
MFP_PIN_GPIO35,
|
||||
MFP_PIN_GPIO36,
|
||||
MFP_PIN_GPIO37,
|
||||
MFP_PIN_GPIO38,
|
||||
MFP_PIN_GPIO39,
|
||||
MFP_PIN_GPIO40,
|
||||
MFP_PIN_GPIO41,
|
||||
MFP_PIN_GPIO42,
|
||||
MFP_PIN_GPIO43,
|
||||
MFP_PIN_GPIO44,
|
||||
MFP_PIN_GPIO45,
|
||||
MFP_PIN_GPIO46,
|
||||
MFP_PIN_GPIO47,
|
||||
MFP_PIN_GPIO48,
|
||||
MFP_PIN_GPIO49,
|
||||
MFP_PIN_GPIO50,
|
||||
MFP_PIN_GPIO51,
|
||||
MFP_PIN_GPIO52,
|
||||
MFP_PIN_GPIO53,
|
||||
MFP_PIN_GPIO54,
|
||||
MFP_PIN_GPIO55,
|
||||
MFP_PIN_GPIO56,
|
||||
MFP_PIN_GPIO57,
|
||||
MFP_PIN_GPIO58,
|
||||
MFP_PIN_GPIO59,
|
||||
MFP_PIN_GPIO60,
|
||||
MFP_PIN_GPIO61,
|
||||
MFP_PIN_GPIO62,
|
||||
MFP_PIN_GPIO63,
|
||||
MFP_PIN_GPIO64,
|
||||
MFP_PIN_GPIO65,
|
||||
MFP_PIN_GPIO66,
|
||||
MFP_PIN_GPIO67,
|
||||
MFP_PIN_GPIO68,
|
||||
MFP_PIN_GPIO69,
|
||||
MFP_PIN_GPIO70,
|
||||
MFP_PIN_GPIO71,
|
||||
MFP_PIN_GPIO72,
|
||||
MFP_PIN_GPIO73,
|
||||
MFP_PIN_GPIO74,
|
||||
MFP_PIN_GPIO75,
|
||||
MFP_PIN_GPIO76,
|
||||
MFP_PIN_GPIO77,
|
||||
MFP_PIN_GPIO78,
|
||||
MFP_PIN_GPIO79,
|
||||
MFP_PIN_GPIO80,
|
||||
MFP_PIN_GPIO81,
|
||||
MFP_PIN_GPIO82,
|
||||
MFP_PIN_GPIO83,
|
||||
MFP_PIN_GPIO84,
|
||||
MFP_PIN_GPIO85,
|
||||
MFP_PIN_GPIO86,
|
||||
MFP_PIN_GPIO87,
|
||||
MFP_PIN_GPIO88,
|
||||
MFP_PIN_GPIO89,
|
||||
MFP_PIN_GPIO90,
|
||||
MFP_PIN_GPIO91,
|
||||
MFP_PIN_GPIO92,
|
||||
MFP_PIN_GPIO93,
|
||||
MFP_PIN_GPIO94,
|
||||
MFP_PIN_GPIO95,
|
||||
MFP_PIN_GPIO96,
|
||||
MFP_PIN_GPIO97,
|
||||
MFP_PIN_GPIO98,
|
||||
MFP_PIN_GPIO99,
|
||||
MFP_PIN_GPIO100,
|
||||
MFP_PIN_GPIO101,
|
||||
MFP_PIN_GPIO102,
|
||||
MFP_PIN_GPIO103,
|
||||
MFP_PIN_GPIO104,
|
||||
MFP_PIN_GPIO105,
|
||||
MFP_PIN_GPIO106,
|
||||
MFP_PIN_GPIO107,
|
||||
MFP_PIN_GPIO108,
|
||||
MFP_PIN_GPIO109,
|
||||
MFP_PIN_GPIO110,
|
||||
MFP_PIN_GPIO111,
|
||||
MFP_PIN_GPIO112,
|
||||
MFP_PIN_GPIO113,
|
||||
MFP_PIN_GPIO114,
|
||||
MFP_PIN_GPIO115,
|
||||
MFP_PIN_GPIO116,
|
||||
MFP_PIN_GPIO117,
|
||||
MFP_PIN_GPIO118,
|
||||
MFP_PIN_GPIO119,
|
||||
MFP_PIN_GPIO120,
|
||||
MFP_PIN_GPIO121,
|
||||
MFP_PIN_GPIO122,
|
||||
MFP_PIN_GPIO123,
|
||||
MFP_PIN_GPIO124,
|
||||
MFP_PIN_GPIO125,
|
||||
MFP_PIN_GPIO126,
|
||||
MFP_PIN_GPIO127,
|
||||
MFP_PIN_GPIO0_2,
|
||||
MFP_PIN_GPIO1_2,
|
||||
MFP_PIN_GPIO2_2,
|
||||
MFP_PIN_GPIO3_2,
|
||||
MFP_PIN_GPIO4_2,
|
||||
MFP_PIN_GPIO5_2,
|
||||
MFP_PIN_GPIO6_2,
|
||||
MFP_PIN_GPIO7_2,
|
||||
MFP_PIN_GPIO8_2,
|
||||
MFP_PIN_GPIO9_2,
|
||||
MFP_PIN_GPIO10_2,
|
||||
MFP_PIN_GPIO11_2,
|
||||
MFP_PIN_GPIO12_2,
|
||||
MFP_PIN_GPIO13_2,
|
||||
MFP_PIN_GPIO14_2,
|
||||
MFP_PIN_GPIO15_2,
|
||||
MFP_PIN_GPIO16_2,
|
||||
MFP_PIN_GPIO17_2,
|
||||
|
||||
MFP_PIN_ULPI_STP,
|
||||
MFP_PIN_ULPI_NXT,
|
||||
MFP_PIN_ULPI_DIR,
|
||||
|
||||
MFP_PIN_nXCVREN,
|
||||
MFP_PIN_DF_CLE_nOE,
|
||||
MFP_PIN_DF_nADV1_ALE,
|
||||
MFP_PIN_DF_SCLK_E,
|
||||
MFP_PIN_DF_SCLK_S,
|
||||
MFP_PIN_nBE0,
|
||||
MFP_PIN_nBE1,
|
||||
MFP_PIN_DF_nADV2_ALE,
|
||||
MFP_PIN_DF_INT_RnB,
|
||||
MFP_PIN_DF_nCS0,
|
||||
MFP_PIN_DF_nCS1,
|
||||
MFP_PIN_nLUA,
|
||||
MFP_PIN_nLLA,
|
||||
MFP_PIN_DF_nWE,
|
||||
MFP_PIN_DF_ALE_nWE,
|
||||
MFP_PIN_DF_nRE_nOE,
|
||||
MFP_PIN_DF_ADDR0,
|
||||
MFP_PIN_DF_ADDR1,
|
||||
MFP_PIN_DF_ADDR2,
|
||||
MFP_PIN_DF_ADDR3,
|
||||
MFP_PIN_DF_IO0,
|
||||
MFP_PIN_DF_IO1,
|
||||
MFP_PIN_DF_IO2,
|
||||
MFP_PIN_DF_IO3,
|
||||
MFP_PIN_DF_IO4,
|
||||
MFP_PIN_DF_IO5,
|
||||
MFP_PIN_DF_IO6,
|
||||
MFP_PIN_DF_IO7,
|
||||
MFP_PIN_DF_IO8,
|
||||
MFP_PIN_DF_IO9,
|
||||
MFP_PIN_DF_IO10,
|
||||
MFP_PIN_DF_IO11,
|
||||
MFP_PIN_DF_IO12,
|
||||
MFP_PIN_DF_IO13,
|
||||
MFP_PIN_DF_IO14,
|
||||
MFP_PIN_DF_IO15,
|
||||
MFP_PIN_DF_nCS0_SM_nCS2,
|
||||
MFP_PIN_DF_nCS1_SM_nCS3,
|
||||
MFP_PIN_SM_nCS0,
|
||||
MFP_PIN_SM_nCS1,
|
||||
MFP_PIN_DF_WEn,
|
||||
MFP_PIN_DF_REn,
|
||||
MFP_PIN_DF_CLE_SM_OEn,
|
||||
MFP_PIN_DF_ALE_SM_WEn,
|
||||
MFP_PIN_DF_RDY0,
|
||||
MFP_PIN_DF_RDY1,
|
||||
|
||||
MFP_PIN_SM_SCLK,
|
||||
MFP_PIN_SM_BE0,
|
||||
MFP_PIN_SM_BE1,
|
||||
MFP_PIN_SM_ADV,
|
||||
MFP_PIN_SM_ADVMUX,
|
||||
MFP_PIN_SM_RDY,
|
||||
|
||||
MFP_PIN_MMC1_DAT7,
|
||||
MFP_PIN_MMC1_DAT6,
|
||||
MFP_PIN_MMC1_DAT5,
|
||||
MFP_PIN_MMC1_DAT4,
|
||||
MFP_PIN_MMC1_DAT3,
|
||||
MFP_PIN_MMC1_DAT2,
|
||||
MFP_PIN_MMC1_DAT1,
|
||||
MFP_PIN_MMC1_DAT0,
|
||||
MFP_PIN_MMC1_CMD,
|
||||
MFP_PIN_MMC1_CLK,
|
||||
MFP_PIN_MMC1_CD,
|
||||
MFP_PIN_MMC1_WP,
|
||||
|
||||
/* additional pins on PXA930 */
|
||||
MFP_PIN_GSIM_UIO,
|
||||
MFP_PIN_GSIM_UCLK,
|
||||
MFP_PIN_GSIM_UDET,
|
||||
MFP_PIN_GSIM_nURST,
|
||||
MFP_PIN_PMIC_INT,
|
||||
MFP_PIN_RDY,
|
||||
|
||||
MFP_PIN_MAX,
|
||||
};
|
||||
|
||||
/*
|
||||
* a possible MFP configuration is represented by a 32-bit integer
|
||||
*
|
||||
* bit 0.. 9 - MFP Pin Number (1024 Pins Maximum)
|
||||
* bit 10..12 - Alternate Function Selection
|
||||
* bit 13..15 - Drive Strength
|
||||
* bit 16..18 - Low Power Mode State
|
||||
* bit 19..20 - Low Power Mode Edge Detection
|
||||
* bit 21..22 - Run Mode Pull State
|
||||
*
|
||||
* to facilitate the definition, the following macros are provided
|
||||
*
|
||||
* MFP_CFG_DEFAULT - default MFP configuration value, with
|
||||
* alternate function = 0,
|
||||
* drive strength = fast 3mA (MFP_DS03X)
|
||||
* low power mode = default
|
||||
* edge detection = none
|
||||
*
|
||||
* MFP_CFG - default MFPR value with alternate function
|
||||
* MFP_CFG_DRV - default MFPR value with alternate function and
|
||||
* pin drive strength
|
||||
* MFP_CFG_LPM - default MFPR value with alternate function and
|
||||
* low power mode
|
||||
* MFP_CFG_X - default MFPR value with alternate function,
|
||||
* pin drive strength and low power mode
|
||||
*/
|
||||
|
||||
typedef unsigned long mfp_cfg_t;
|
||||
|
||||
#define MFP_PIN(x) ((x) & 0x3ff)
|
||||
|
||||
#define MFP_AF0 (0x0 << 10)
|
||||
#define MFP_AF1 (0x1 << 10)
|
||||
#define MFP_AF2 (0x2 << 10)
|
||||
#define MFP_AF3 (0x3 << 10)
|
||||
#define MFP_AF4 (0x4 << 10)
|
||||
#define MFP_AF5 (0x5 << 10)
|
||||
#define MFP_AF6 (0x6 << 10)
|
||||
#define MFP_AF7 (0x7 << 10)
|
||||
#define MFP_AF_MASK (0x7 << 10)
|
||||
#define MFP_AF(x) (((x) >> 10) & 0x7)
|
||||
|
||||
#define MFP_DS01X (0x0 << 13)
|
||||
#define MFP_DS02X (0x1 << 13)
|
||||
#define MFP_DS03X (0x2 << 13)
|
||||
#define MFP_DS04X (0x3 << 13)
|
||||
#define MFP_DS06X (0x4 << 13)
|
||||
#define MFP_DS08X (0x5 << 13)
|
||||
#define MFP_DS10X (0x6 << 13)
|
||||
#define MFP_DS13X (0x7 << 13)
|
||||
#define MFP_DS_MASK (0x7 << 13)
|
||||
#define MFP_DS(x) (((x) >> 13) & 0x7)
|
||||
|
||||
#define MFP_LPM_DEFAULT (0x0 << 16)
|
||||
#define MFP_LPM_DRIVE_LOW (0x1 << 16)
|
||||
#define MFP_LPM_DRIVE_HIGH (0x2 << 16)
|
||||
#define MFP_LPM_PULL_LOW (0x3 << 16)
|
||||
#define MFP_LPM_PULL_HIGH (0x4 << 16)
|
||||
#define MFP_LPM_FLOAT (0x5 << 16)
|
||||
#define MFP_LPM_INPUT (0x6 << 16)
|
||||
#define MFP_LPM_STATE_MASK (0x7 << 16)
|
||||
#define MFP_LPM_STATE(x) (((x) >> 16) & 0x7)
|
||||
|
||||
#define MFP_LPM_EDGE_NONE (0x0 << 19)
|
||||
#define MFP_LPM_EDGE_RISE (0x1 << 19)
|
||||
#define MFP_LPM_EDGE_FALL (0x2 << 19)
|
||||
#define MFP_LPM_EDGE_BOTH (0x3 << 19)
|
||||
#define MFP_LPM_EDGE_MASK (0x3 << 19)
|
||||
#define MFP_LPM_EDGE(x) (((x) >> 19) & 0x3)
|
||||
|
||||
#define MFP_PULL_NONE (0x0 << 21)
|
||||
#define MFP_PULL_LOW (0x1 << 21)
|
||||
#define MFP_PULL_HIGH (0x2 << 21)
|
||||
#define MFP_PULL_BOTH (0x3 << 21)
|
||||
#define MFP_PULL_MASK (0x3 << 21)
|
||||
#define MFP_PULL(x) (((x) >> 21) & 0x3)
|
||||
|
||||
#define MFP_CFG_DEFAULT (MFP_AF0 | MFP_DS03X | MFP_LPM_DEFAULT |\
|
||||
MFP_LPM_EDGE_NONE | MFP_PULL_NONE)
|
||||
|
||||
#define MFP_CFG(pin, af) \
|
||||
((MFP_CFG_DEFAULT & ~MFP_AF_MASK) |\
|
||||
(MFP_PIN(MFP_PIN_##pin) | MFP_##af))
|
||||
|
||||
#define MFP_CFG_DRV(pin, af, drv) \
|
||||
((MFP_CFG_DEFAULT & ~(MFP_AF_MASK | MFP_DS_MASK)) |\
|
||||
(MFP_PIN(MFP_PIN_##pin) | MFP_##af | MFP_##drv))
|
||||
|
||||
#define MFP_CFG_LPM(pin, af, lpm) \
|
||||
((MFP_CFG_DEFAULT & ~(MFP_AF_MASK | MFP_LPM_STATE_MASK)) |\
|
||||
(MFP_PIN(MFP_PIN_##pin) | MFP_##af | MFP_LPM_##lpm))
|
||||
|
||||
#define MFP_CFG_X(pin, af, drv, lpm) \
|
||||
((MFP_CFG_DEFAULT & ~(MFP_AF_MASK | MFP_DS_MASK | MFP_LPM_STATE_MASK)) |\
|
||||
(MFP_PIN(MFP_PIN_##pin) | MFP_##af | MFP_##drv | MFP_LPM_##lpm))
|
||||
|
||||
#if defined(CONFIG_PXA3xx) || defined(CONFIG_ARCH_MMP)
|
||||
/*
|
||||
* each MFP pin will have a MFPR register, since the offset of the
|
||||
* register varies between processors, the processor specific code
|
||||
* should initialize the pin offsets by mfp_init()
|
||||
*
|
||||
* mfp_init_base() - accepts a virtual base for all MFPR registers and
|
||||
* initialize the MFP table to a default state
|
||||
*
|
||||
* mfp_init_addr() - accepts a table of "mfp_addr_map" structure, which
|
||||
* represents a range of MFP pins from "start" to "end", with the offset
|
||||
* begining at "offset", to define a single pin, let "end" = -1.
|
||||
*
|
||||
* use
|
||||
*
|
||||
* MFP_ADDR_X() to define a range of pins
|
||||
* MFP_ADDR() to define a single pin
|
||||
* MFP_ADDR_END to signal the end of pin offset definitions
|
||||
*/
|
||||
struct mfp_addr_map {
|
||||
unsigned int start;
|
||||
unsigned int end;
|
||||
unsigned long offset;
|
||||
};
|
||||
|
||||
#define MFP_ADDR_X(start, end, offset) \
|
||||
{ MFP_PIN_##start, MFP_PIN_##end, offset }
|
||||
|
||||
#define MFP_ADDR(pin, offset) \
|
||||
{ MFP_PIN_##pin, -1, offset }
|
||||
|
||||
#define MFP_ADDR_END { MFP_PIN_INVALID, 0 }
|
||||
|
||||
void __init mfp_init_base(unsigned long mfpr_base);
|
||||
void __init mfp_init_addr(struct mfp_addr_map *map);
|
||||
|
||||
/*
|
||||
* mfp_{read, write}() - for direct read/write access to the MFPR register
|
||||
* mfp_config() - for configuring a group of MFPR registers
|
||||
* mfp_config_lpm() - configuring all low power MFPR registers for suspend
|
||||
* mfp_config_run() - configuring all run time MFPR registers after resume
|
||||
*/
|
||||
unsigned long mfp_read(int mfp);
|
||||
void mfp_write(int mfp, unsigned long mfpr_val);
|
||||
void mfp_config(unsigned long *mfp_cfgs, int num);
|
||||
void mfp_config_run(void);
|
||||
void mfp_config_lpm(void);
|
||||
#endif /* CONFIG_PXA3xx || CONFIG_ARCH_MMP */
|
||||
|
||||
#endif /* __ASM_PLAT_MFP_H */
|
|
@ -0,0 +1,278 @@
|
|||
/*
|
||||
* linux/arch/arm/plat-pxa/mfp.c
|
||||
*
|
||||
* Multi-Function Pin Support
|
||||
*
|
||||
* Copyright (C) 2007 Marvell Internation Ltd.
|
||||
*
|
||||
* 2007-08-21: eric miao <eric.miao@marvell.com>
|
||||
* initial version
|
||||
*
|
||||
* 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 <linux/module.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/sysdev.h>
|
||||
|
||||
#include <plat/mfp.h>
|
||||
|
||||
#define MFPR_SIZE (PAGE_SIZE)
|
||||
|
||||
/* MFPR register bit definitions */
|
||||
#define MFPR_PULL_SEL (0x1 << 15)
|
||||
#define MFPR_PULLUP_EN (0x1 << 14)
|
||||
#define MFPR_PULLDOWN_EN (0x1 << 13)
|
||||
#define MFPR_SLEEP_SEL (0x1 << 9)
|
||||
#define MFPR_SLEEP_OE_N (0x1 << 7)
|
||||
#define MFPR_EDGE_CLEAR (0x1 << 6)
|
||||
#define MFPR_EDGE_FALL_EN (0x1 << 5)
|
||||
#define MFPR_EDGE_RISE_EN (0x1 << 4)
|
||||
|
||||
#define MFPR_SLEEP_DATA(x) ((x) << 8)
|
||||
#define MFPR_DRIVE(x) (((x) & 0x7) << 10)
|
||||
#define MFPR_AF_SEL(x) (((x) & 0x7) << 0)
|
||||
|
||||
#define MFPR_EDGE_NONE (0)
|
||||
#define MFPR_EDGE_RISE (MFPR_EDGE_RISE_EN)
|
||||
#define MFPR_EDGE_FALL (MFPR_EDGE_FALL_EN)
|
||||
#define MFPR_EDGE_BOTH (MFPR_EDGE_RISE | MFPR_EDGE_FALL)
|
||||
|
||||
/*
|
||||
* Table that determines the low power modes outputs, with actual settings
|
||||
* used in parentheses for don't-care values. Except for the float output,
|
||||
* the configured driven and pulled levels match, so if there is a need for
|
||||
* non-LPM pulled output, the same configuration could probably be used.
|
||||
*
|
||||
* Output value sleep_oe_n sleep_data pullup_en pulldown_en pull_sel
|
||||
* (bit 7) (bit 8) (bit 14) (bit 13) (bit 15)
|
||||
*
|
||||
* Input 0 X(0) X(0) X(0) 0
|
||||
* Drive 0 0 0 0 X(1) 0
|
||||
* Drive 1 0 1 X(1) 0 0
|
||||
* Pull hi (1) 1 X(1) 1 0 0
|
||||
* Pull lo (0) 1 X(0) 0 1 0
|
||||
* Z (float) 1 X(0) 0 0 0
|
||||
*/
|
||||
#define MFPR_LPM_INPUT (0)
|
||||
#define MFPR_LPM_DRIVE_LOW (MFPR_SLEEP_DATA(0) | MFPR_PULLDOWN_EN)
|
||||
#define MFPR_LPM_DRIVE_HIGH (MFPR_SLEEP_DATA(1) | MFPR_PULLUP_EN)
|
||||
#define MFPR_LPM_PULL_LOW (MFPR_LPM_DRIVE_LOW | MFPR_SLEEP_OE_N)
|
||||
#define MFPR_LPM_PULL_HIGH (MFPR_LPM_DRIVE_HIGH | MFPR_SLEEP_OE_N)
|
||||
#define MFPR_LPM_FLOAT (MFPR_SLEEP_OE_N)
|
||||
#define MFPR_LPM_MASK (0xe080)
|
||||
|
||||
/*
|
||||
* The pullup and pulldown state of the MFP pin at run mode is by default
|
||||
* determined by the selected alternate function. In case that some buggy
|
||||
* devices need to override this default behavior, the definitions below
|
||||
* indicates the setting of corresponding MFPR bits
|
||||
*
|
||||
* Definition pull_sel pullup_en pulldown_en
|
||||
* MFPR_PULL_NONE 0 0 0
|
||||
* MFPR_PULL_LOW 1 0 1
|
||||
* MFPR_PULL_HIGH 1 1 0
|
||||
* MFPR_PULL_BOTH 1 1 1
|
||||
*/
|
||||
#define MFPR_PULL_NONE (0)
|
||||
#define MFPR_PULL_LOW (MFPR_PULL_SEL | MFPR_PULLDOWN_EN)
|
||||
#define MFPR_PULL_BOTH (MFPR_PULL_LOW | MFPR_PULLUP_EN)
|
||||
#define MFPR_PULL_HIGH (MFPR_PULL_SEL | MFPR_PULLUP_EN)
|
||||
|
||||
/* mfp_spin_lock is used to ensure that MFP register configuration
|
||||
* (most likely a read-modify-write operation) is atomic, and that
|
||||
* mfp_table[] is consistent
|
||||
*/
|
||||
static DEFINE_SPINLOCK(mfp_spin_lock);
|
||||
|
||||
static void __iomem *mfpr_mmio_base;
|
||||
|
||||
struct mfp_pin {
|
||||
unsigned long config; /* -1 for not configured */
|
||||
unsigned long mfpr_off; /* MFPRxx Register offset */
|
||||
unsigned long mfpr_run; /* Run-Mode Register Value */
|
||||
unsigned long mfpr_lpm; /* Low Power Mode Register Value */
|
||||
};
|
||||
|
||||
static struct mfp_pin mfp_table[MFP_PIN_MAX];
|
||||
|
||||
/* mapping of MFP_LPM_* definitions to MFPR_LPM_* register bits */
|
||||
static const unsigned long mfpr_lpm[] = {
|
||||
MFPR_LPM_INPUT,
|
||||
MFPR_LPM_DRIVE_LOW,
|
||||
MFPR_LPM_DRIVE_HIGH,
|
||||
MFPR_LPM_PULL_LOW,
|
||||
MFPR_LPM_PULL_HIGH,
|
||||
MFPR_LPM_FLOAT,
|
||||
};
|
||||
|
||||
/* mapping of MFP_PULL_* definitions to MFPR_PULL_* register bits */
|
||||
static const unsigned long mfpr_pull[] = {
|
||||
MFPR_PULL_NONE,
|
||||
MFPR_PULL_LOW,
|
||||
MFPR_PULL_HIGH,
|
||||
MFPR_PULL_BOTH,
|
||||
};
|
||||
|
||||
/* mapping of MFP_LPM_EDGE_* definitions to MFPR_EDGE_* register bits */
|
||||
static const unsigned long mfpr_edge[] = {
|
||||
MFPR_EDGE_NONE,
|
||||
MFPR_EDGE_RISE,
|
||||
MFPR_EDGE_FALL,
|
||||
MFPR_EDGE_BOTH,
|
||||
};
|
||||
|
||||
#define mfpr_readl(off) \
|
||||
__raw_readl(mfpr_mmio_base + (off))
|
||||
|
||||
#define mfpr_writel(off, val) \
|
||||
__raw_writel(val, mfpr_mmio_base + (off))
|
||||
|
||||
#define mfp_configured(p) ((p)->config != -1)
|
||||
|
||||
/*
|
||||
* perform a read-back of any MFPR register to make sure the
|
||||
* previous writings are finished
|
||||
*/
|
||||
#define mfpr_sync() (void)__raw_readl(mfpr_mmio_base + 0)
|
||||
|
||||
static inline void __mfp_config_run(struct mfp_pin *p)
|
||||
{
|
||||
if (mfp_configured(p))
|
||||
mfpr_writel(p->mfpr_off, p->mfpr_run);
|
||||
}
|
||||
|
||||
static inline void __mfp_config_lpm(struct mfp_pin *p)
|
||||
{
|
||||
if (mfp_configured(p)) {
|
||||
unsigned long mfpr_clr = (p->mfpr_run & ~MFPR_EDGE_BOTH) | MFPR_EDGE_CLEAR;
|
||||
if (mfpr_clr != p->mfpr_run)
|
||||
mfpr_writel(p->mfpr_off, mfpr_clr);
|
||||
if (p->mfpr_lpm != mfpr_clr)
|
||||
mfpr_writel(p->mfpr_off, p->mfpr_lpm);
|
||||
}
|
||||
}
|
||||
|
||||
void mfp_config(unsigned long *mfp_cfgs, int num)
|
||||
{
|
||||
unsigned long flags;
|
||||
int i;
|
||||
|
||||
spin_lock_irqsave(&mfp_spin_lock, flags);
|
||||
|
||||
for (i = 0; i < num; i++, mfp_cfgs++) {
|
||||
unsigned long tmp, c = *mfp_cfgs;
|
||||
struct mfp_pin *p;
|
||||
int pin, af, drv, lpm, edge, pull;
|
||||
|
||||
pin = MFP_PIN(c);
|
||||
BUG_ON(pin >= MFP_PIN_MAX);
|
||||
p = &mfp_table[pin];
|
||||
|
||||
af = MFP_AF(c);
|
||||
drv = MFP_DS(c);
|
||||
lpm = MFP_LPM_STATE(c);
|
||||
edge = MFP_LPM_EDGE(c);
|
||||
pull = MFP_PULL(c);
|
||||
|
||||
/* run-mode pull settings will conflict with MFPR bits of
|
||||
* low power mode state, calculate mfpr_run and mfpr_lpm
|
||||
* individually if pull != MFP_PULL_NONE
|
||||
*/
|
||||
tmp = MFPR_AF_SEL(af) | MFPR_DRIVE(drv);
|
||||
|
||||
if (likely(pull == MFP_PULL_NONE)) {
|
||||
p->mfpr_run = tmp | mfpr_lpm[lpm] | mfpr_edge[edge];
|
||||
p->mfpr_lpm = p->mfpr_run;
|
||||
} else {
|
||||
p->mfpr_lpm = tmp | mfpr_lpm[lpm] | mfpr_edge[edge];
|
||||
p->mfpr_run = tmp | mfpr_pull[pull];
|
||||
}
|
||||
|
||||
p->config = c; __mfp_config_run(p);
|
||||
}
|
||||
|
||||
mfpr_sync();
|
||||
spin_unlock_irqrestore(&mfp_spin_lock, flags);
|
||||
}
|
||||
|
||||
unsigned long mfp_read(int mfp)
|
||||
{
|
||||
unsigned long val, flags;
|
||||
|
||||
BUG_ON(mfp >= MFP_PIN_MAX);
|
||||
|
||||
spin_lock_irqsave(&mfp_spin_lock, flags);
|
||||
val = mfpr_readl(mfp_table[mfp].mfpr_off);
|
||||
spin_unlock_irqrestore(&mfp_spin_lock, flags);
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
void mfp_write(int mfp, unsigned long val)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
BUG_ON(mfp >= MFP_PIN_MAX);
|
||||
|
||||
spin_lock_irqsave(&mfp_spin_lock, flags);
|
||||
mfpr_writel(mfp_table[mfp].mfpr_off, val);
|
||||
mfpr_sync();
|
||||
spin_unlock_irqrestore(&mfp_spin_lock, flags);
|
||||
}
|
||||
|
||||
void __init mfp_init_base(unsigned long mfpr_base)
|
||||
{
|
||||
int i;
|
||||
|
||||
/* initialize the table with default - unconfigured */
|
||||
for (i = 0; i < ARRAY_SIZE(mfp_table); i++)
|
||||
mfp_table[i].config = -1;
|
||||
|
||||
mfpr_mmio_base = (void __iomem *)mfpr_base;
|
||||
}
|
||||
|
||||
void __init mfp_init_addr(struct mfp_addr_map *map)
|
||||
{
|
||||
struct mfp_addr_map *p;
|
||||
unsigned long offset, flags;
|
||||
int i;
|
||||
|
||||
spin_lock_irqsave(&mfp_spin_lock, flags);
|
||||
|
||||
for (p = map; p->start != MFP_PIN_INVALID; p++) {
|
||||
offset = p->offset;
|
||||
i = p->start;
|
||||
|
||||
do {
|
||||
mfp_table[i].mfpr_off = offset;
|
||||
mfp_table[i].mfpr_run = 0;
|
||||
mfp_table[i].mfpr_lpm = 0;
|
||||
offset += 4; i++;
|
||||
} while ((i <= p->end) && (p->end != -1));
|
||||
}
|
||||
|
||||
spin_unlock_irqrestore(&mfp_spin_lock, flags);
|
||||
}
|
||||
|
||||
void mfp_config_lpm(void)
|
||||
{
|
||||
struct mfp_pin *p = &mfp_table[0];
|
||||
int pin;
|
||||
|
||||
for (pin = 0; pin < ARRAY_SIZE(mfp_table); pin++, p++)
|
||||
__mfp_config_lpm(p);
|
||||
}
|
||||
|
||||
void mfp_config_run(void)
|
||||
{
|
||||
struct mfp_pin *p = &mfp_table[0];
|
||||
int pin;
|
||||
|
||||
for (pin = 0; pin < ARRAY_SIZE(mfp_table); pin++, p++)
|
||||
__mfp_config_run(p);
|
||||
}
|
|
@ -44,6 +44,7 @@
|
|||
defined(CONFIG_MACH_MAINSTONE) ||\
|
||||
defined(CONFIG_MACH_ZYLONITE) ||\
|
||||
defined(CONFIG_MACH_LITTLETON) ||\
|
||||
defined(CONFIG_MACH_ZYLONITE2) ||\
|
||||
defined(CONFIG_ARCH_VIPER)
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
|
|
|
@ -628,7 +628,7 @@ config SERIAL_MPSC_CONSOLE
|
|||
|
||||
config SERIAL_PXA
|
||||
bool "PXA serial port support"
|
||||
depends on ARM && ARCH_PXA
|
||||
depends on ARCH_PXA || ARCH_MMP
|
||||
select SERIAL_CORE
|
||||
help
|
||||
If you have a machine based on an Intel XScale PXA2xx CPU you
|
||||
|
|
|
@ -882,10 +882,21 @@ static void __devinit init_pxafb_overlay(struct pxafb_info *fbi,
|
|||
init_completion(&ofb->branch_done);
|
||||
}
|
||||
|
||||
static inline int pxafb_overlay_supported(void)
|
||||
{
|
||||
if (cpu_is_pxa27x() || cpu_is_pxa3xx())
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __devinit pxafb_overlay_init(struct pxafb_info *fbi)
|
||||
{
|
||||
int i, ret;
|
||||
|
||||
if (!pxafb_overlay_supported())
|
||||
return 0;
|
||||
|
||||
for (i = 0; i < 2; i++) {
|
||||
init_pxafb_overlay(fbi, &fbi->overlay[i], i);
|
||||
ret = register_framebuffer(&fbi->overlay[i].fb);
|
||||
|
@ -908,6 +919,9 @@ static void __devexit pxafb_overlay_exit(struct pxafb_info *fbi)
|
|||
{
|
||||
int i;
|
||||
|
||||
if (!pxafb_overlay_supported())
|
||||
return;
|
||||
|
||||
for (i = 0; i < 2; i++)
|
||||
unregister_framebuffer(&fbi->overlay[i].fb);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue