basic pxa support; likely broken
authorMike Baker <mbm@openwrt.org>
Wed, 31 Jan 2007 00:11:27 +0000 (00:11 +0000)
committerMike Baker <mbm@openwrt.org>
Wed, 31 Jan 2007 00:11:27 +0000 (00:11 +0000)
SVN-Revision: 6232

target/linux/pxa-2.6/Makefile [new file with mode: 0644]
target/linux/pxa-2.6/config [new file with mode: 0644]
target/linux/pxa-2.6/image [new symlink]
target/linux/pxa-2.6/patches/000-cpufreq.patch [new file with mode: 0644]
target/linux/pxa-2.6/patches/001-pm.patch [new file with mode: 0644]
target/linux/pxa-2.6/patches/002-usb_gadget.patch [new file with mode: 0644]
target/linux/pxa-2.6/patches/004-skbuf_hack.patch [new file with mode: 0644]
target/linux/pxa-2.6/patches/005-mtd.patch [new file with mode: 0644]

diff --git a/target/linux/pxa-2.6/Makefile b/target/linux/pxa-2.6/Makefile
new file mode 100644 (file)
index 0000000..94e9601
--- /dev/null
@@ -0,0 +1,20 @@
+# 
+# Copyright (C) 2006 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+include $(TOPDIR)/rules.mk
+
+ARCH:=arm
+BOARD:=pxa
+BOARDNAME:=PXA
+FEATURES:=jffs2 broken
+
+define Target/Description
+       Stub for boards based on intel PXA
+endef
+
+include $(INCLUDE_DIR)/kernel-build.mk
+
+$(eval $(call BuildKernel))
diff --git a/target/linux/pxa-2.6/config b/target/linux/pxa-2.6/config
new file mode 100644 (file)
index 0000000..ba94adc
--- /dev/null
@@ -0,0 +1,1214 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.17
+# Wed Oct 11 12:53:11 2006
+#
+CONFIG_ARM=y
+CONFIG_MMU=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_UID16=y
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_EMBEDDED=y
+# CONFIG_KALLSYMS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+# CONFIG_ELF_CORE is not set
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+CONFIG_OBSOLETE_INTERMODULE=y
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+# CONFIG_BLK_DEV_IO_TRACE is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+# CONFIG_DEFAULT_AS is not set
+CONFIG_DEFAULT_DEADLINE=y
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="deadline"
+
+#
+# System Type
+#
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_IOP3XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_AT91RM9200 is not set
+CONFIG_DMABOUNCE=y
+
+#
+# Intel PXA2xx Implementations
+#
+CONFIG_ARCH_LUBBOCK=y
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_PXA_SHARPSL is not set
+CONFIG_MACH_GTEK=y
+CONFIG_PXA25x=y
+CONFIG_GTEK_LCD=y
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+
+#
+# Processor Features
+#
+# CONFIG_ARM_THUMB is not set
+CONFIG_XSCALE_PMU=y
+CONFIG_SA1111=y
+CONFIG_FORCE_MAX_ZONEORDER=9
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+# CONFIG_PREEMPT is not set
+# CONFIG_NO_IDLE_HZ is not set
+CONFIG_HZ=100
+# CONFIG_AEABI is not set
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_LEDS is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="root=/dev/mtdblock0 rootfstype=jffs2 console=tty0 console=ttyS2,115200 mem=16M"
+# CONFIG_XIP_KERNEL is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+# CONFIG_CPU_FREQ_DEBUG is not set
+# CONFIG_CPU_FREQ_STAT is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
+# CONFIG_CPU_FREQ_GOV_PERFORMANCE is not set
+# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
+# CONFIG_CPU_FREQ_GOV_USERSPACE is not set
+CONFIG_CPU_FREQ_GOV_ONDEMAND=y
+# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set
+CONFIG_CPU_FREQ_PXA=y
+
+#
+# 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_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+# CONFIG_ARTHUR is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+CONFIG_PM_LEGACY=y
+# CONFIG_PM_DEBUG is not set
+# CONFIG_APM is not set
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+CONFIG_IP_ADVANCED_ROUTER=y
+CONFIG_ASK_IP_FIB_HASH=y
+# CONFIG_IP_FIB_TRIE is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_MULTIPLE_TABLES=y
+CONFIG_IP_ROUTE_FWMARK=y
+CONFIG_IP_ROUTE_MULTIPATH=y
+# CONFIG_IP_ROUTE_MULTIPATH_CACHED is not set
+# CONFIG_IP_ROUTE_VERBOSE is not set
+# CONFIG_IP_PNP is not set
+CONFIG_NET_IPIP=m
+CONFIG_NET_IPGRE=m
+# CONFIG_NET_IPGRE_BROADCAST is not set
+CONFIG_IPSEC_NAT_TRAVERSAL=y
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_TUNNEL=m
+CONFIG_INET_DIAG=m
+CONFIG_INET_TCP_DIAG=m
+CONFIG_TCP_CONG_ADVANCED=y
+
+#
+# TCP congestion control
+#
+CONFIG_TCP_CONG_BIC=m
+CONFIG_TCP_CONG_CUBIC=m
+CONFIG_TCP_CONG_WESTWOOD=m
+CONFIG_TCP_CONG_HTCP=m
+CONFIG_TCP_CONG_HSTCP=m
+CONFIG_TCP_CONG_HYBLA=m
+CONFIG_TCP_CONG_VEGAS=y
+CONFIG_TCP_CONG_SCALABLE=m
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+CONFIG_IPV6_ROUTER_PREF=y
+# CONFIG_IPV6_ROUTE_INFO is not set
+# CONFIG_INET6_AH is not set
+# CONFIG_INET6_ESP is not set
+# CONFIG_INET6_IPCOMP is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_IPV6_TUNNEL is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+CONFIG_NETFILTER_XTABLES=y
+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
+CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set
+# CONFIG_NETFILTER_XT_MATCH_CONNBYTES is not set
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y
+# CONFIG_NETFILTER_XT_MATCH_DCCP is not set
+CONFIG_NETFILTER_XT_MATCH_ESP=m
+CONFIG_NETFILTER_XT_MATCH_HELPER=m
+CONFIG_NETFILTER_XT_MATCH_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+CONFIG_NETFILTER_XT_MATCH_MULTIPORT=y
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP is not set
+CONFIG_NETFILTER_XT_MATCH_STATE=y
+CONFIG_NETFILTER_XT_MATCH_STRING=m
+CONFIG_NETFILTER_XT_MATCH_TCPMSS=y
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_CONNTRACK=y
+CONFIG_IP_NF_CT_ACCT=y
+CONFIG_IP_NF_CONNTRACK_MARK=y
+# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
+# CONFIG_IP_NF_CT_PROTO_SCTP is not set
+CONFIG_IP_NF_FTP=y
+CONFIG_IP_NF_IRC=y
+# CONFIG_IP_NF_NETBIOS_NS is not set
+CONFIG_IP_NF_TFTP=m
+CONFIG_IP_NF_AMANDA=m
+CONFIG_IP_NF_PPTP=m
+CONFIG_IP_NF_H323=m
+CONFIG_IP_NF_SIP=m
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=y
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_IPP2P=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_TIME=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_DSCP=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+# CONFIG_IP_NF_MATCH_ADDRTYPE is not set
+# CONFIG_IP_NF_MATCH_HASHLIMIT is not set
+CONFIG_IP_NF_MATCH_LAYER7=m
+# CONFIG_IP_NF_MATCH_LAYER7_DEBUG is not set
+CONFIG_IP_NF_FILTER=y
+CONFIG_IP_NF_TARGET_REJECT=y
+CONFIG_IP_NF_TARGET_IMQ=m
+# CONFIG_IP_NF_TARGET_LOG is not set
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_TARGET_TCPMSS=y
+CONFIG_IP_NF_NAT=y
+CONFIG_IP_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=y
+CONFIG_IP_NF_TARGET_REDIRECT=y
+CONFIG_IP_NF_TARGET_ROUTE=m
+# CONFIG_IP_NF_TARGET_NETMAP is not set
+# CONFIG_IP_NF_TARGET_SAME is not set
+# CONFIG_IP_NF_NAT_SNMP_BASIC is not set
+CONFIG_IP_NF_NAT_IRC=y
+CONFIG_IP_NF_NAT_FTP=y
+CONFIG_IP_NF_NAT_TFTP=m
+CONFIG_IP_NF_NAT_AMANDA=m
+CONFIG_IP_NF_NAT_PPTP=m
+CONFIG_IP_NF_NAT_H323=m
+CONFIG_IP_NF_NAT_SIP=m
+CONFIG_IP_NF_MANGLE=y
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_DSCP=m
+CONFIG_IP_NF_TARGET_TTL=m
+# CONFIG_IP_NF_TARGET_CLUSTERIP is not set
+CONFIG_IP_NF_RAW=m
+# CONFIG_IP_NF_ARPTABLES is not set
+CONFIG_IP_NF_SET=m
+CONFIG_IP_NF_SET_MAX=256
+CONFIG_IP_NF_SET_HASHSIZE=1024
+CONFIG_IP_NF_SET_IPMAP=m
+CONFIG_IP_NF_SET_MACIPMAP=m
+CONFIG_IP_NF_SET_PORTMAP=m
+CONFIG_IP_NF_SET_IPHASH=m
+CONFIG_IP_NF_SET_NETHASH=m
+CONFIG_IP_NF_SET_IPTREE=m
+CONFIG_IP_NF_MATCH_SET=m
+CONFIG_IP_NF_TARGET_SET=m
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+CONFIG_IP6_NF_QUEUE=m
+CONFIG_IP6_NF_IPTABLES=m
+# CONFIG_IP6_NF_MATCH_RT is not set
+# CONFIG_IP6_NF_MATCH_OPTS is not set
+# CONFIG_IP6_NF_MATCH_FRAG is not set
+# CONFIG_IP6_NF_MATCH_HL is not set
+CONFIG_IP6_NF_MATCH_OWNER=m
+# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
+CONFIG_IP6_NF_MATCH_AH=m
+CONFIG_IP6_NF_MATCH_EUI64=m
+CONFIG_IP6_NF_FILTER=m
+CONFIG_IP6_NF_TARGET_IMQ=m
+# CONFIG_IP6_NF_TARGET_LOG is not set
+CONFIG_IP6_NF_TARGET_REJECT=m
+CONFIG_IP6_NF_TARGET_ROUTE=m
+CONFIG_IP6_NF_MANGLE=m
+# CONFIG_IP6_NF_TARGET_HL is not set
+# CONFIG_IP6_NF_RAW is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+CONFIG_NET_DIVERT=y
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+CONFIG_NET_SCHED=y
+CONFIG_NET_SCH_CLK_JIFFIES=y
+# CONFIG_NET_SCH_CLK_GETTIMEOFDAY is not set
+# CONFIG_NET_SCH_CLK_CPU is not set
+
+#
+# Queueing/Scheduling
+#
+CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_HTB=m
+CONFIG_NET_SCH_HFSC=m
+CONFIG_NET_SCH_PRIO=m
+CONFIG_NET_SCH_RED=m
+CONFIG_NET_SCH_SFQ=m
+CONFIG_NET_SCH_ESFQ=m
+CONFIG_NET_SCH_TEQL=m
+CONFIG_NET_SCH_TBF=m
+CONFIG_NET_SCH_GRED=m
+CONFIG_NET_SCH_DSMARK=m
+# CONFIG_NET_SCH_NETEM is not set
+CONFIG_NET_SCH_INGRESS=m
+
+#
+# Classification
+#
+CONFIG_NET_CLS=y
+CONFIG_NET_CLS_BASIC=m
+CONFIG_NET_CLS_TCINDEX=m
+CONFIG_NET_CLS_ROUTE4=m
+CONFIG_NET_CLS_ROUTE=y
+CONFIG_NET_CLS_FW=m
+CONFIG_NET_CLS_U32=m
+# CONFIG_CLS_U32_PERF is not set
+# CONFIG_CLS_U32_MARK is not set
+CONFIG_NET_CLS_RSVP=m
+CONFIG_NET_CLS_RSVP6=m
+# CONFIG_NET_EMATCH is not set
+# CONFIG_NET_CLS_ACT is not set
+CONFIG_NET_CLS_POLICE=y
+# CONFIG_NET_CLS_IND is not set
+CONFIG_NET_ESTIMATOR=y
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_IEEE80211 is not set
+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+CONFIG_CONNECTOR=m
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+# CONFIG_MTD_XIP is not set
+
+#
+# Mapping drivers for chip access
+#
+CONFIG_MTD_COMPLEX_MAPPINGS=y
+# CONFIG_MTD_PHYSMAP is not set
+CONFIG_MTD_LUBBOCK=y
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+CONFIG_BLK_DEV_CRYPTOLOOP=m
+CONFIG_BLK_DEV_NBD=m
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_BLK_DEV_INITRD is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_IMQ=m
+# CONFIG_IMQ_BEHAVIOR_AA is not set
+# CONFIG_IMQ_BEHAVIOR_AB is not set
+CONFIG_IMQ_BEHAVIOR_BA=y
+# CONFIG_IMQ_BEHAVIOR_BB is not set
+CONFIG_IMQ_NUM_DEVS=2
+# CONFIG_TUN is not set
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+# CONFIG_NET_WIRELESS_RTNETLINK is not set
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+# CONFIG_HOSTAP is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=y
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=y
+CONFIG_PPP_SYNC_TTY=y
+CONFIG_PPP_DEFLATE=y
+CONFIG_PPP_BSDCOMP=y
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+
+#
+# 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_TSDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+CONFIG_KEYBOARD_ATKBD=y
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+CONFIG_KEYBOARD_GTEK=y
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_SA1111 is not set
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=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_LEGACY_PTYS is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_NVRAM is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=y
+CONFIG_I2C_CHARDEV=y
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+CONFIG_I2C_ALGOPCA=y
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_PXA=y
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+
+#
+# Misc devices
+#
+
+#
+# LED devices
+#
+# CONFIG_NEW_LEDS is not set
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+CONFIG_VIDEO_V4L2=y
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_FB=y
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_MACMODES is not set
+CONFIG_FB_FIRMWARE_EDID=y
+# CONFIG_FB_MODE_HELPERS is not set
+CONFIG_FB_TILEBLITTING=y
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+CONFIG_FONT_8x8=y
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+CONFIG_LOGO=y
+CONFIG_LOGO_LINUX_MONO=y
+CONFIG_LOGO_LINUX_VGA16=y
+CONFIG_LOGO_LINUX_CLUT224=y
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+CONFIG_SND_SEQUENCER=y
+# CONFIG_SND_SEQ_DUMMY is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=y
+CONFIG_SND_PCM_OSS=y
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_SEQUENCER_OSS is not set
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+CONFIG_SND_AC97_CODEC=y
+CONFIG_SND_AC97_BUS=y
+CONFIG_SND_DUMMY=m
+# CONFIG_SND_VIRMIDI is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+CONFIG_SND_PXA2XX_PCM=y
+CONFIG_SND_PXA2XX_AC97=y
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=m
+CONFIG_USB_GADGET_DEBUG_FILES=y
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+CONFIG_USB_GADGET_PXA2XX=y
+CONFIG_USB_PXA2XX=m
+# CONFIG_USB_PXA2XX_SMALL is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+# CONFIG_USB_FILE_STORAGE is not set
+CONFIG_USB_G_SERIAL=m
+
+#
+# MMC/SD Card support
+#
+# CONFIG_MMC is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# File systems
+#
+# CONFIG_EXT2_FS is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_INOTIFY is not set
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS 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_DEVFS_FS=y
+CONFIG_DEVFS_MOUNT=y
+# CONFIG_DEVFS_DEBUG is not set
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+CONFIG_CRAMFS=y
+# CONFIG_SQUASHFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+# CONFIG_NFS_FS is not set
+# CONFIG_NFSD 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
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+# CONFIG_NLS is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_DEBUG_FS is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_UNWIND_INFO is not set
+# CONFIG_DEBUG_USER is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+# CONFIG_CRYPTO_SHA1 is not set
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+# CONFIG_CRYPTO_ARC4 is not set
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_TEXTSEARCH=y
+CONFIG_TEXTSEARCH_KMP=m
+CONFIG_TEXTSEARCH_BM=m
+CONFIG_TEXTSEARCH_FSM=m
diff --git a/target/linux/pxa-2.6/image b/target/linux/pxa-2.6/image
new file mode 120000 (symlink)
index 0000000..a96fdd0
--- /dev/null
@@ -0,0 +1 @@
+../generic-2.6/image/
\ No newline at end of file
diff --git a/target/linux/pxa-2.6/patches/000-cpufreq.patch b/target/linux/pxa-2.6/patches/000-cpufreq.patch
new file mode 100644 (file)
index 0000000..3cb6676
--- /dev/null
@@ -0,0 +1,533 @@
+diff -Nurbw linux-2.6.17/arch/arm/Kconfig linux-2.6.17-patched/arch/arm/Kconfig
+--- linux-2.6.17/arch/arm/Kconfig      2006-06-17 18:49:35.000000000 -0700
++++ linux-2.6.17-patched/arch/arm/Kconfig      2006-09-21 14:57:02.000000000 -0700
+@@ -656,7 +656,7 @@
+ endmenu
+-if (ARCH_SA1100 || ARCH_INTEGRATOR || ARCH_OMAP1)
++if (ARCH_SA1100 || ARCH_INTEGRATOR || ARCH_OMAP1 || ARCH_PXA)
+ menu "CPU Frequency scaling"
+@@ -685,6 +685,13 @@
+ endmenu
++config CPU_FREQ_PXA
++      bool
++      depends on CPU_FREQ && ARCH_PXA
++      default y
++      select CPU_FREQ_DEFAULT_GOV_USERSPACE
++      select CPU_FREQ_TABLE
++
+ endif
+ menu "Floating point emulation"
+diff -Nurbw linux-2.6.17/arch/arm/mach-pxa/cpu-pxa.c linux-2.6.17-patched/arch/arm/mach-pxa/cpu-pxa.c
+--- linux-2.6.17/arch/arm/mach-pxa/cpu-pxa.c   1969-12-31 16:00:00.000000000 -0800
++++ linux-2.6.17-patched/arch/arm/mach-pxa/cpu-pxa.c   2006-09-21 14:57:02.000000000 -0700
+@@ -0,0 +1,324 @@
++/*
++ *  linux/arch/arm/mach-pxa/cpu-pxa.c
++ *
++ *  Copyright (C) 2002,2003 Intrinsyc Software
++ *
++ * 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
++ *
++ * History:
++ *   31-Jul-2002 : Initial version [FB]
++ *   29-Jan-2003 : added PXA255 support [FB]
++ *   20-Apr-2003 : ported to v2.5 (Dustin McIntire, Sensoria Corp.)
++ * 
++ * Note:
++ *   This driver may change the memory bus clock rate, but will not do any
++ *   platform specific access timing changes... for example if you have flash
++ *   memory connected to CS0, you will need to register a platform specific
++ *   notifier which will adjust the memory access strobes to maintain a 
++ *   minimum strobe width.
++ *
++ */
++
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/sched.h>
++#include <linux/init.h>
++#include <linux/cpufreq.h>
++
++#include <asm/hardware.h>
++#include <asm/arch/pxa-regs.h>
++
++#undef DEBUG
++
++#ifdef DEBUG
++  static unsigned int freq_debug = DEBUG;
++  module_param(freq_debug, int, 0);
++  MODULE_PARM_DESC(freq_debug, "Set the debug messages to on=1/off=0");
++#else
++  #define freq_debug  0
++#endif  
++
++typedef struct
++{
++    unsigned int khz;
++    unsigned int membus;
++    unsigned int cccr;
++    unsigned int div2;
++} pxa_freqs_t;
++
++/* Define the refresh period in mSec for the SDRAM and the number of rows */
++#define SDRAM_TREF          64      /* standard 64ms SDRAM */
++#define SDRAM_ROWS          2048    /* 64MB=8192 32MB=4096 */ 
++#define MDREFR_DRI(x)       ((x*SDRAM_TREF)/(SDRAM_ROWS*32))
++
++#define CCLKCFG_TURBO       0x1
++#define CCLKCFG_FCS         0x2
++#define PXA25x_MIN_FREQ     99533
++#define PXA25x_MAX_FREQ     530842
++#define MDREFR_DB2_MASK     (MDREFR_K2DB2 | MDREFR_K1DB2)
++#define MDREFR_DRI_MASK     0xFFF
++
++
++/* Use the run mode frequencies for the CPUFREQ_POLICY_PERFORMANCE policy */
++static pxa_freqs_t pxa255_run_freqs[] =
++{
++    /* CPU   MEMBUS  CCCR  DIV2*/
++    { 99533,  99533, 0x121, 1}, /* run= 99, turbo= 99, PXbus=50,  SDRAM=50 */
++    {132710, 132710, 0x123, 1}, /* run=133, turbo=133, PXbus=66,  SDRAM=66 */
++    {199066,  99533, 0x141, 0}, /* run=199, turbo=199, PXbus=99,  SDRAM=99 */
++    {265421, 132710, 0x143, 0}, /* run=265, turbo=265, PXbus=133, SDRAM=133 */
++    {331776, 165888, 0x145, 1}, /* run=331, turbo=331, PXbus=166, SDRAM=83 */
++    {398131,  99533, 0x161, 0}, /* run=398, turbo=398, PXbus=99,  SDRAM=99 */
++    {398131, 132710, 0x1c3, 0}, /* run=265, turbo=398, PXbus=133, SDRAM=133 */
++    {530842, 132710, 0x163, 0}, /* run=531, turbo=531, PXbus=133, SDRAM=133 */
++    {0,}
++};
++#define NUM_RUN_FREQS (sizeof(pxa255_run_freqs)/sizeof(pxa_freqs_t))
++
++static struct cpufreq_frequency_table pxa255_run_freq_table[NUM_RUN_FREQS+1];
++
++/* Use the turbo mode frequencies for the CPUFREQ_POLICY_POWERSAVE policy */
++static pxa_freqs_t pxa255_turbo_freqs[] =
++{
++    /* CPU   MEMBUS  CCCR  DIV2*/
++    { 99533, 99533,  0x121, 1}, /* run=99,  turbo= 99, PXbus=99, SDRAM=50 */
++    {149299, 99533,  0x1a1, 0}, /* run=99,  turbo=149, PXbus=99, SDRAM=99 */
++    {199066, 99533,  0x221, 0}, /* run=99,  turbo=199, PXbus=99, SDRAM=99 */
++    {298598, 99533,  0x321, 0}, /* run=99,  turbo=299, PXbus=99, SDRAM=99 */
++    {398131, 99533,  0x241, 1}, /* run=199, turbo=398, PXbus=99, SDRAM=50 */
++    {0,}
++};
++#define NUM_TURBO_FREQS (sizeof(pxa255_turbo_freqs)/sizeof(pxa_freqs_t))
++
++static struct cpufreq_frequency_table pxa255_turbo_freq_table[NUM_TURBO_FREQS+1];
++
++extern unsigned get_clk_frequency_khz(int info);
++
++/* find a valid frequency point */
++static int pxa_verify_policy(struct cpufreq_policy *policy)
++{
++    int ret;
++    struct cpufreq_frequency_table *pxa_freqs_table;
++
++    if(policy->policy == CPUFREQ_POLICY_PERFORMANCE) {
++        pxa_freqs_table = pxa255_run_freq_table;
++    } else if (policy->policy == CPUFREQ_POLICY_POWERSAVE) {
++        pxa_freqs_table = pxa255_turbo_freq_table;
++    } else {
++        printk("CPU PXA: Unknown policy found. "
++               "Using CPUFREQ_POLICY_PERFORMANCE\n");
++        pxa_freqs_table = pxa255_run_freq_table;
++    } 
++      ret=cpufreq_frequency_table_verify(policy, pxa_freqs_table);
++    
++    if(freq_debug) {
++        printk("Verified CPU policy: %dKhz min to %dKhz max\n",
++            policy->min, policy->max);
++    }
++
++    return ret;
++}
++
++static int pxa_set_target(struct cpufreq_policy *policy,
++                 unsigned int target_freq,
++                 unsigned int relation)
++{
++    int idx;
++    cpumask_t cpus_allowed;
++    int cpu = policy->cpu;
++    struct cpufreq_freqs freqs;
++    pxa_freqs_t *pxa_freq_settings;
++    struct cpufreq_frequency_table *pxa_freqs_table;
++    unsigned long flags;
++    unsigned int unused;
++    unsigned int preset_mdrefr, postset_mdrefr;
++    void *ramstart;
++
++    /*
++     * Save this threads cpus_allowed mask.
++     */
++    cpus_allowed = current->cpus_allowed;
++
++    /*
++     * Bind to the specified CPU.  When this call returns,
++     * we should be running on the right CPU.
++     */
++    set_cpus_allowed(current, cpumask_of_cpu(cpu));
++    BUG_ON(cpu != smp_processor_id());
++
++    /* Get the current policy */
++    if(policy->policy == CPUFREQ_POLICY_PERFORMANCE) {
++        pxa_freq_settings = pxa255_run_freqs;
++        pxa_freqs_table   = pxa255_run_freq_table;
++    }else if (policy->policy == CPUFREQ_POLICY_POWERSAVE) {
++        pxa_freq_settings = pxa255_turbo_freqs;
++        pxa_freqs_table   = pxa255_turbo_freq_table;
++    }else {
++        printk("CPU PXA: Unknown policy found. "
++               "Using CPUFREQ_POLICY_PERFORMANCE\n");
++        pxa_freq_settings = pxa255_run_freqs;
++        pxa_freqs_table   = pxa255_run_freq_table;
++    } 
++
++    /* Lookup the next frequency */
++      if (cpufreq_frequency_table_target(policy, pxa_freqs_table, 
++                                         target_freq, relation, &idx)) {
++              return -EINVAL;
++    }
++
++    freqs.old = policy->cur;
++    freqs.new = pxa_freq_settings[idx].khz;
++    freqs.cpu = policy->cpu;  
++    if(freq_debug) {
++        printk(KERN_INFO "Changing CPU frequency to %d Mhz, (SDRAM %d Mhz)\n", 
++            freqs.new/1000, (pxa_freq_settings[idx].div2) ? 
++            (pxa_freq_settings[idx].membus/2000) : 
++            (pxa_freq_settings[idx].membus/1000));
++    }
++
++    ramstart = phys_to_virt(0xa0000000);
++
++    /* 
++     * Tell everyone what we're about to do... 
++     * you should add a notify client with any platform specific 
++     * Vcc changing capability
++     */
++    cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE);
++
++    /* Calculate the next MDREFR.  If we're slowing down the SDRAM clock
++     * we need to preset the smaller DRI before the change.  If we're speeding
++     * up we need to set the larger DRI value after the change.  
++     */
++    preset_mdrefr = postset_mdrefr = MDREFR;
++    if((MDREFR & MDREFR_DRI_MASK) > MDREFR_DRI(pxa_freq_settings[idx].membus)) {    
++        preset_mdrefr = (preset_mdrefr & ~MDREFR_DRI_MASK) | 
++                        MDREFR_DRI(pxa_freq_settings[idx].membus);
++    }
++    postset_mdrefr = (postset_mdrefr & ~MDREFR_DRI_MASK) | 
++                    MDREFR_DRI(pxa_freq_settings[idx].membus);
++    
++    /* If we're dividing the memory clock by two for the SDRAM clock, this
++     * must be set prior to the change.  Clearing the divide must be done
++     * after the change.
++     */
++    if(pxa_freq_settings[idx].div2) { 
++        preset_mdrefr  |= MDREFR_DB2_MASK;
++        postset_mdrefr |= MDREFR_DB2_MASK;
++    } else { 
++        postset_mdrefr &= ~MDREFR_DB2_MASK; 
++    }
++    
++    local_irq_save(flags);
++    
++    /* Set new the CCCR */
++    CCCR = pxa_freq_settings[idx].cccr;
++
++    __asm__ __volatile__("                                  \
++        ldr r4, [%1] ;  /* load MDREFR */                   \
++        b   2f ;                                            \
++        .align  5 ;                                         \
++1:                                                          \
++        str %4, [%1] ;          /* preset the MDREFR */     \
++        mcr p14, 0, %2, c6, c0, 0 ; /* set CCLKCFG[FCS] */  \
++        str %5, [%1] ;          /* postset the MDREFR */    \
++                                                            \
++        b   3f       ;                                      \
++2:      b   1b       ;                                      \
++3:      nop          ;                                      \
++        "                                                                            
++        : "=&r" (unused)                                                             
++        : "r" (&MDREFR), "r" (CCLKCFG_TURBO|CCLKCFG_FCS), "r" (ramstart), \
++          "r" (preset_mdrefr), "r" (postset_mdrefr)             
++        : "r4", "r5");
++    local_irq_restore(flags);
++
++    /*
++     * Restore the CPUs allowed mask.
++     */
++    set_cpus_allowed(current, cpus_allowed);
++
++    /* 
++     * Tell everyone what we've just done... 
++     * you should add a notify client with any platform specific 
++     * SDRAM refresh timer adjustments
++     */
++    cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE);
++
++    return 0;
++}
++
++static int pxa_cpufreq_init(struct cpufreq_policy *policy)
++{
++    cpumask_t cpus_allowed;
++    unsigned int cpu = policy->cpu;
++    int i;
++
++      cpus_allowed = current->cpus_allowed;
++
++      set_cpus_allowed(current, cpumask_of_cpu(cpu));
++      BUG_ON(cpu != smp_processor_id());
++
++    /* set default policy and cpuinfo */
++    policy->governor = CPUFREQ_DEFAULT_GOVERNOR;
++    policy->policy = CPUFREQ_POLICY_PERFORMANCE;
++    policy->cpuinfo.max_freq = PXA25x_MAX_FREQ;
++    policy->cpuinfo.min_freq = PXA25x_MIN_FREQ;
++    policy->cpuinfo.transition_latency = 1000; /* FIXME: 1 ms, assumed */
++    policy->cur = get_clk_frequency_khz(0); /* current freq */
++    policy->min = policy->max = policy->cur;
++
++    /* Generate the run cpufreq_frequency_table struct */
++    for(i=0;i<NUM_RUN_FREQS;i++) {
++        pxa255_run_freq_table[i].frequency = pxa255_run_freqs[i].khz;
++        pxa255_run_freq_table[i].index = i;    
++    }
++    pxa255_run_freq_table[i].frequency = CPUFREQ_TABLE_END;
++    /* Generate the turbo cpufreq_frequency_table struct */
++    for(i=0;i<NUM_TURBO_FREQS;i++) {
++        pxa255_turbo_freq_table[i].frequency = pxa255_turbo_freqs[i].khz;
++        pxa255_turbo_freq_table[i].index = i;    
++    }
++    pxa255_turbo_freq_table[i].frequency = CPUFREQ_TABLE_END;
++    
++    set_cpus_allowed(current, cpus_allowed);
++    printk(KERN_INFO "PXA CPU frequency change support initialized\n");
++
++    return 0;
++}
++
++static struct cpufreq_driver pxa_cpufreq_driver = {
++    .verify     = pxa_verify_policy,
++    .target     = pxa_set_target,
++    .init       = pxa_cpufreq_init,
++    .name       = "PXA25x",
++};
++
++static int __init pxa_cpu_init(void)
++{
++    return cpufreq_register_driver(&pxa_cpufreq_driver);
++}
++
++static void __exit pxa_cpu_exit(void)
++{
++    cpufreq_unregister_driver(&pxa_cpufreq_driver);
++}
++
++
++MODULE_AUTHOR ("Intrinsyc Software Inc.");
++MODULE_DESCRIPTION ("CPU frequency changing driver for the PXA architecture");
++MODULE_LICENSE("GPL");
++module_init(pxa_cpu_init);
++module_exit(pxa_cpu_exit);
++
+diff -Nurbw linux-2.6.17/arch/arm/mach-pxa/Makefile linux-2.6.17-patched/arch/arm/mach-pxa/Makefile
+--- linux-2.6.17/arch/arm/mach-pxa/Makefile    2006-09-21 15:11:33.000000000 -0700
++++ linux-2.6.17-patched/arch/arm/mach-pxa/Makefile    2006-09-21 14:57:02.000000000 -0700
+@@ -30,5 +30,6 @@
+ obj-$(CONFIG_PM) += pm.o sleep.o
+ obj-$(CONFIG_PXA_SSP) += ssp.o
++obj-$(CONFIG_CPU_FREQ) += cpu-pxa.o
+ ifeq ($(CONFIG_PXA27x),y)
+ obj-$(CONFIG_PM) += standby.o
+diff -Nurbw linux-2.6.17/Documentation/cpu-freq/user-guide.txt linux-2.6.17-patched/Documentation/cpu-freq/user-guide.txt
+--- linux-2.6.17/Documentation/cpu-freq/user-guide.txt 2006-06-17 18:49:35.000000000 -0700
++++ linux-2.6.17-patched/Documentation/cpu-freq/user-guide.txt 2006-09-21 14:57:02.000000000 -0700
+@@ -18,7 +18,7 @@
+ Contents:
+ ---------
+ 1. Supported Architectures and Processors
+-1.1 ARM
++1.1 ARM, PXA
+ 1.2 x86
+ 1.3 sparc64
+ 1.4 ppc
+@@ -37,14 +37,15 @@
+ 1. Supported Architectures and Processors
+ =========================================
+-1.1 ARM
+--------
++1.1 ARM, PXA
++------------
+ The following ARM processors are supported by cpufreq:
+ ARM Integrator
+ ARM-SA1100
+ ARM-SA1110
++Intel PXA
+ 1.2 x86
+diff -Nurbw linux-2.6.17/drivers/cpufreq/Kconfig linux-2.6.17-patched/drivers/cpufreq/Kconfig
+--- linux-2.6.17/drivers/cpufreq/Kconfig       2006-06-17 18:49:35.000000000 -0700
++++ linux-2.6.17-patched/drivers/cpufreq/Kconfig       2006-09-21 15:06:12.000000000 -0700
+@@ -46,13 +46,9 @@
+          This will show detail CPU frequency translation table in sysfs file
+          system
+-# Note that it is not currently possible to set the other governors (such as ondemand)
+-# as the default, since if they fail to initialise, cpufreq will be
+-# left in an undefined state.
+-
+ choice
+       prompt "Default CPUFreq governor"
+-      default CPU_FREQ_DEFAULT_GOV_USERSPACE if CPU_FREQ_SA1100 || CPU_FREQ_SA1110
++      default CPU_FREQ_DEFAULT_GOV_USERSPACE if CPU_FREQ_SA1100 || CPU_FREQ_SA1110 || CPU_FREQ_PXA
+       default CPU_FREQ_DEFAULT_GOV_PERFORMANCE
+       help
+         This option sets which CPUFreq governor shall be loaded at
+@@ -66,6 +62,14 @@
+         the frequency statically to the highest frequency supported by
+         the CPU.
++config CPU_FREQ_DEFAULT_GOV_POWERSAVE
++      bool "powersave"
++      select CPU_FREQ_GOV_POWERSAVE
++      help
++        Use the CPUFreq governor 'powersave' as default. This sets
++        the frequency statically to the lowest frequency supported by
++        the CPU.
++
+ config CPU_FREQ_DEFAULT_GOV_USERSPACE
+       bool "userspace"
+       select CPU_FREQ_GOV_USERSPACE
+@@ -75,6 +79,23 @@
+         program shall be able to set the CPU dynamically without having
+         to enable the userspace governor manually.
++config CPU_FREQ_DEFAULT_GOV_ONDEMAND
++      bool "ondemand"
++      select CPU_FREQ_GOV_ONDEMAND
++      help
++        Use the CPUFreq governor 'ondemand' as default.  This sets
++        the frequency dynamically based on CPU load, throttling up
++        and down as necessary.
++
++config CPU_FREQ_DEFAULT_GOV_CONSERVATIVE
++      bool "conservative"
++      select CPU_FREQ_GOV_CONSERVATIVE
++      help
++        Use the CPUFreq governor 'conservative' as default. This sets
++        the frequency dynamically based on CPU load, throttling up
++        and down as necessary. The frequency is gracefully increased
++        and decreased rather than jumping to 100% when speed is required.
++
+ endchoice
+ config CPU_FREQ_GOV_PERFORMANCE
+diff -Nurbw linux-2.6.17/include/linux/cpufreq.h linux-2.6.17-patched/include/linux/cpufreq.h
+--- linux-2.6.17/include/linux/cpufreq.h       2006-06-17 18:49:35.000000000 -0700
++++ linux-2.6.17-patched/include/linux/cpufreq.h       2006-09-21 15:08:35.000000000 -0700
+@@ -276,9 +276,18 @@
+ #ifdef CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE
+ extern struct cpufreq_governor cpufreq_gov_performance;
+ #define CPUFREQ_DEFAULT_GOVERNOR      &cpufreq_gov_performance
++#elif defined(CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE)
++extern struct cpufreq_governor cpufreq_gov_powersave;
++#define CPUFREQ_DEFAULT_GOVERNOR      &cpufreq_gov_powersave
+ #elif defined(CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE)
+ extern struct cpufreq_governor cpufreq_gov_userspace;
+ #define CPUFREQ_DEFAULT_GOVERNOR      &cpufreq_gov_userspace
++#elif defined(CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND)
++extern struct cpufreq_governor cpufreq_gov_ondemand;
++#define CPUFREQ_DEFAULT_GOVERNOR      &cpufreq_gov_ondemand;
++#elif defined(CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE)
++extern struct cpufreq_governor cpufreq_gov_conservative;
++#define CPUFREQ_DEFAULT_GOVERNOR        &cpufreq_gov_conservative;
+ #endif
+diff -Nubrw --exclude='.*.o.cmd' linux-2.6.17/drivers/cpufreq/cpufreq_conservative.c linux-2.6.17-patched/drivers/cpufreq/cpufreq_conservative.c
+--- linux-2.6.17/drivers/cpufreq/cpufreq_conservative.c        2006-09-21 15:26:46.000000000 -0700
++++ linux-2.6.17-patched/drivers/cpufreq/cpufreq_conservative.c        2006-06-17 18:49:35.000000000 -0700
+@@ -529,7 +529,7 @@
+       return 0;
+ }
+-static struct cpufreq_governor cpufreq_gov_dbs = {
++struct cpufreq_governor cpufreq_gov_conservative = {
+       .name           = "conservative",
+       .governor       = cpufreq_governor_dbs,
+       .owner          = THIS_MODULE,
+@@ -537,7 +537,7 @@
+ static int __init cpufreq_gov_dbs_init(void)
+ {
+-      return cpufreq_register_governor(&cpufreq_gov_dbs);
++      return cpufreq_register_governor(&cpufreq_gov_conservative);
+ }
+ static void __exit cpufreq_gov_dbs_exit(void)
+@@ -545,7 +545,7 @@
+       /* Make sure that the scheduled work is indeed not running */
+       flush_scheduled_work();
+-      cpufreq_unregister_governor(&cpufreq_gov_dbs);
++      cpufreq_unregister_governor(&cpufreq_gov_conservative);
+ }
+diff -Nubrw --exclude='.*.o.cmd' linux-2.6.17/drivers/cpufreq/cpufreq_ondemand.c linux-2.6.17-patched/drivers/cpufreq/cpufreq_ondemand.c
+--- linux-2.6.17/drivers/cpufreq/cpufreq_ondemand.c    2006-06-17 18:49:35.000000000 -0700
++++ linux-2.6.17-patched/drivers/cpufreq/cpufreq_ondemand.c    2006-09-27 14:00:15.000000000 -0700
+@@ -484,7 +484,7 @@
+       return 0;
+ }
+-static struct cpufreq_governor cpufreq_gov_dbs = {
++struct cpufreq_governor cpufreq_gov_ondemand = {
+       .name           = "ondemand",
+       .governor       = cpufreq_governor_dbs,
+       .owner          = THIS_MODULE,
+@@ -492,7 +492,7 @@
+ static int __init cpufreq_gov_dbs_init(void)
+ {
+-      return cpufreq_register_governor(&cpufreq_gov_dbs);
++      return cpufreq_register_governor(&cpufreq_gov_ondemand);
+ }
+ static void __exit cpufreq_gov_dbs_exit(void)
+@@ -504,7 +504,7 @@
+               destroy_workqueue(dbs_workq);
+       }
+-      cpufreq_unregister_governor(&cpufreq_gov_dbs);
++      cpufreq_unregister_governor(&cpufreq_gov_ondemand);
+ }
diff --git a/target/linux/pxa-2.6/patches/001-pm.patch b/target/linux/pxa-2.6/patches/001-pm.patch
new file mode 100644 (file)
index 0000000..799b9bd
--- /dev/null
@@ -0,0 +1,869 @@
+diff -NurbwB linux-2.6.17/arch/arm/mach-pxa/pm.c linux-2.6.17-patched/arch/arm/mach-pxa/pm.c
+--- linux-2.6.17/arch/arm/mach-pxa/pm.c        2006-06-17 18:49:35.000000000 -0700
++++ linux-2.6.17-patched/arch/arm/mach-pxa/pm.c        2006-09-11 10:58:41.000000000 -0700
+@@ -10,35 +10,50 @@
+  * This program is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU General Public License.
+  */
++
+ #include <linux/config.h>
+ #include <linux/init.h>
+-#include <linux/module.h>
+-#include <linux/suspend.h>
++#include <linux/pm.h>
++#include <linux/slab.h>
++#include <linux/sched.h>
++#include <linux/interrupt.h>
++#include <linux/sysctl.h>
+ #include <linux/errno.h>
+-#include <linux/time.h>
+ #include <asm/hardware.h>
+ #include <asm/memory.h>
+ #include <asm/system.h>
+-#include <asm/arch/pm.h>
++#include <asm/leds.h>
++#include <asm/uaccess.h>
+ #include <asm/arch/pxa-regs.h>
+ #include <asm/arch/lubbock.h>
+ #include <asm/mach/time.h>
++/**/
++#include <linux/module.h>
++/**/
++//kirti
++#include <linux/delay.h>
++//kirti~
+ /*
+  * Debug macros
+  */
+-#undef DEBUG
++#define DEBUG
++
++extern void pxa_cpu_suspend(void);
++extern void pxa_cpu_resume(void);
++
++int pm_pwronoff;
++/*Angelia Additions */
++int pm_pedr=0;
++EXPORT_SYMBOL(pm_pwronoff);
++EXPORT_SYMBOL(pm_pedr);
++
+ #define SAVE(x)               sleep_save[SLEEP_SAVE_##x] = x
+ #define RESTORE(x)    x = sleep_save[SLEEP_SAVE_##x]
+-#define RESTORE_GPLEVEL(n) do { \
+-      GPSR##n = sleep_save[SLEEP_SAVE_GPLR##n]; \
+-      GPCR##n = ~sleep_save[SLEEP_SAVE_GPLR##n]; \
+-} while (0)
+-
+ /*
+  * List of global PXA peripheral registers to preserve.
+  * More ones like CP and general purpose register values are preserved
+@@ -46,97 +61,405 @@
+  */
+ enum {        SLEEP_SAVE_START = 0,
+-      SLEEP_SAVE_GPLR0, SLEEP_SAVE_GPLR1, SLEEP_SAVE_GPLR2, SLEEP_SAVE_GPLR3,
+-      SLEEP_SAVE_GPDR0, SLEEP_SAVE_GPDR1, SLEEP_SAVE_GPDR2, SLEEP_SAVE_GPDR3,
+-      SLEEP_SAVE_GRER0, SLEEP_SAVE_GRER1, SLEEP_SAVE_GRER2, SLEEP_SAVE_GRER3,
+-      SLEEP_SAVE_GFER0, SLEEP_SAVE_GFER1, SLEEP_SAVE_GFER2, SLEEP_SAVE_GFER3,
+-      SLEEP_SAVE_PGSR0, SLEEP_SAVE_PGSR1, SLEEP_SAVE_PGSR2, SLEEP_SAVE_PGSR3,
+-
+-      SLEEP_SAVE_GAFR0_L, SLEEP_SAVE_GAFR0_U,
+-      SLEEP_SAVE_GAFR1_L, SLEEP_SAVE_GAFR1_U,
+-      SLEEP_SAVE_GAFR2_L, SLEEP_SAVE_GAFR2_U,
+-      SLEEP_SAVE_GAFR3_L, SLEEP_SAVE_GAFR3_U,
++      SLEEP_SAVE_OSCR, SLEEP_SAVE_OIER,
++      SLEEP_SAVE_OSMR0, SLEEP_SAVE_OSMR1, SLEEP_SAVE_OSMR2, SLEEP_SAVE_OSMR3,
+-      SLEEP_SAVE_PSTR,
++      SLEEP_SAVE_GPDR0, SLEEP_SAVE_GPDR1, SLEEP_SAVE_GPDR2,
++      SLEEP_SAVE_GRER0, SLEEP_SAVE_GRER1, SLEEP_SAVE_GRER2,
++      SLEEP_SAVE_GFER0, SLEEP_SAVE_GFER1, SLEEP_SAVE_GFER2,
++      SLEEP_SAVE_GAFR0_L, SLEEP_SAVE_GAFR1_L, SLEEP_SAVE_GAFR2_L,
++      SLEEP_SAVE_GAFR0_U, SLEEP_SAVE_GAFR1_U, SLEEP_SAVE_GAFR2_U,
++
++      SLEEP_SAVE_FFIER, SLEEP_SAVE_FFLCR, SLEEP_SAVE_FFMCR,
++      SLEEP_SAVE_FFSPR, SLEEP_SAVE_FFISR,
++      SLEEP_SAVE_FFDLL, SLEEP_SAVE_FFDLH,SLEEP_SAVE_FFFCR,
++
++      SLEEP_SAVE_STIER, SLEEP_SAVE_STLCR, SLEEP_SAVE_STMCR,
++      SLEEP_SAVE_STSPR, SLEEP_SAVE_STISR,
++      SLEEP_SAVE_STDLL, SLEEP_SAVE_STDLH,
++
++      SLEEP_SAVE_BTIER, SLEEP_SAVE_BTLCR, SLEEP_SAVE_BTMCR,
++      SLEEP_SAVE_BTSPR, SLEEP_SAVE_BTISR,
++      SLEEP_SAVE_BTDLL, SLEEP_SAVE_BTDLH,
+       SLEEP_SAVE_ICMR,
+       SLEEP_SAVE_CKEN,
+-#ifdef CONFIG_PXA27x
+-      SLEEP_SAVE_MDREFR,
+-      SLEEP_SAVE_PWER, SLEEP_SAVE_PCFR, SLEEP_SAVE_PRER,
+-      SLEEP_SAVE_PFER, SLEEP_SAVE_PKWR,
+-#endif
++      SLEEP_SAVE_LCCR0, SLEEP_SAVE_LCCR1, SLEEP_SAVE_LCCR2,SLEEP_SAVE_LCCR3,
++      SLEEP_SAVE_TMEDCR, SLEEP_SAVE_FDADR0, SLEEP_SAVE_FSADR0,SLEEP_SAVE_FIDR0,SLEEP_SAVE_FDADR1,
++      SLEEP_SAVE_LDCMD0,
++
++      SLEEP_SAVE_NSSCR0,SLEEP_SAVE_NSSCR1,SLEEP_SAVE_NSSSR,SLEEP_SAVE_NSSITR,SLEEP_SAVE_NSSDR,
++      SLEEP_SAVE_NSSTO,SLEEP_SAVE_NSSPSP,
+-      SLEEP_SAVE_CKSUM,
++      SLEEP_SAVE_CKSUM,
+       SLEEP_SAVE_SIZE
+ };
++/**/
++#define UART_DTR      1
++#define UART_RTS      2
++
++/**/
+-int pxa_pm_enter(suspend_state_t state)
++int pm_do_suspend(void)
+ {
+       unsigned long sleep_save[SLEEP_SAVE_SIZE];
+       unsigned long checksum = 0;
+-      struct timespec delta, rtc;
+       int i;
++      int valbefore,valafter,valafter1;
++      int gpsr0,gpsr1,gpsr2;
+       extern void pxa_cpu_pm_enter(suspend_state_t state);
+-#ifdef CONFIG_IWMMXT
+-      /* force any iWMMXt context to ram **/
+-      iwmmxt_task_disable(NULL);
+-#endif
++      // YoKu 16Feb06 GPIO Changed ----->
++
++      PGSR2 |= GPIO_bit(78);
++/*    if(GPLR2 & GPIO_bit(78))                // LCD Reset Pin
++              PGSR2 |= GPIO_bit(78);
++      else
++              PGSR2 &= ~GPIO_bit(78);         */
++      GPDR0 &= ~GPIO_bit(0);
++      GPDR0 &= ~GPIO_bit(1);
++      GPDR0 &= ~GPIO_bit(3); //Tushar: 20 apr GPIO3 configured as input
++      GPDR0 &= ~GPIO_bit(2);
++//    GPDR0 &= ~GPIO_bit(5);
++//    GPDR0 &= ~GPIO_bit(6);
++//    GPDR0 &= ~GPIO_bit(7);
++//    GPDR0 &= ~GPIO_bit(8);  
++
++
++// KeyCol pin Status in sleep mode
++      PGSR0 &= ~GPIO_bit(9);         //19
++        PGSR0 &= ~GPIO_bit(10);        //20
++        PGSR0 &= ~GPIO_bit(11);        //21
++        PGSR0 &= ~GPIO_bit(12);        //22
++        PGSR0 &= ~GPIO_bit(13);        //23
++        PGSR0 &= ~GPIO_bit(14);        //24
++
++      printk("KER_PM: Setting up wakeup sources 26May06\n");
++
++      // KeyPad
++      //printk("KER_PM: Uncommented key pad wakeup sources\n");
++      PWER |= GPIO_bit(5);            //11
++      PWER |= GPIO_bit(6);            //12
++      PWER |= GPIO_bit(7);            //13
++      PWER |= GPIO_bit(8);            //14
++      PFER |= GPIO_bit(5);            //11
++      PFER |= GPIO_bit(6);            //12
++      PFER |= GPIO_bit(7);            //13
++      PFER |= GPIO_bit(8);            //14
++      PRER |= GPIO_bit(5);            //11
++      PRER |= GPIO_bit(6);            //12
++      PRER |= GPIO_bit(7);            //13
++      PRER |= GPIO_bit(8);            //14            
++
++      // USB
++      PWER |= GPIO_bit(3);            //6
++      PFER |= GPIO_bit(3);            //6
++      PRER |= GPIO_bit(3);            //6
++
++      // PMU
++      PWER |= GPIO_bit(2);            //4
++      PFER |= GPIO_bit(2);            //4
++      PRER |= GPIO_bit(2);            //4
++
++      // Anup : GSM RI
++        PWER |= GPIO_bit(0);          //0
++        PFER |= GPIO_bit(0);          //0
++        PRER |= GPIO_bit(0);          //0
++      // anup prashant : for gsm reset problem 19 may 2006
++      //GPDR0 |= GPIO_bit(18);        YoKu Commented this line, GPIO18 should be i/p pin to avoid GSM Reset pulse     
++      PGSR0 |= GPIO_bit(18);          // GSM reset pin
++      PGSR0 |= GPIO_bit(0);           //
++      PGSR1 |= GPIO_bit(38);          // commneted .18 apr
++      //  <----- YoKu
++
++      // YoKu ----->
++      // When exiting from sleep mode, 10us Low pulse comes on GSM Reset and Pwr pin
++      // to avoid this configure GPIO 18,80 as input pins before going to sleep mode
++        GPDR0 &= ~GPIO_bit(18);
++        //GPDR2 &= ~GPIO_bit(80);
++        // <----- YoKu
++
++      //kirti for RTC
++        PWER |= PWER_RTC;
++      //kirti cli();
++      local_irq_disable();
++      //kirti clf();
++      local_fiq_disable();
++      leds_event(led_stop);
++
++      /* Put Current time into RCNR */
++      RCNR = xtime.tv_sec;
+-      /* preserve current time */
+-      rtc.tv_sec = RCNR;
+-      rtc.tv_nsec = 0;
+-      save_time_delta(&delta, &rtc);
++      printk("11May2006 KERR: pgsr0=0x%08x pgsr1=0x%08x pgsr2= 0x%08x\n",PGSR0,PGSR1,PGSR2);
++      printk("KER_PM_DELAY: SSCR Going to Sleep at RCNR =%d\n\n\n\n\n\n",RCNR);
++
++      /* 
++       * Temporary solution.  This won't be necessary once
++       * we move pxa support into the serial driver
++       * Save the FF UART 
++       */
++
++      // Anup : commented for power saving mode problem
++      printk("\nPM: Why doesnt it prnt?? 26May06\n");
++      printk("\nPM : GSM Sleep Mode enabled");
++
++
++      FFMCR &= ~UART_RTS;
++      udelay(2000);
++      udelay(2000);
++      FFMCR &= ~UART_DTR ;
++      udelay(2000);
++      
++      udelay(2000);
++      // rupali
++      // Anup : Do not check here
++/*    if(!pm_pwronoff)
++      {
++              printk("\nPM : Modem Control Register = %x " , FFMCR);
++              while( FFMSR & 0x00000020)
++              {
++                      printk("\nPM : FFFSR = %x " , FFMSR);
++              }
++      }               */
++      udelay(2000);
++                                                      
++//Tushar: 19 apr
++//    NSSCR0 &= 0xFFFFFF7F;
++//    printk("\nPM: NSSCR0 = %x" ,NSSCR0 );
++
++      SAVE(FFIER);
++      SAVE(FFLCR);
++      SAVE(FFMCR);
++      SAVE(FFSPR);
++      SAVE(FFISR);
++      FFLCR |= 0x80;
++      SAVE(FFDLL);
++      SAVE(FFDLH);
++      SAVE(FFFCR);
++      FFLCR &= 0xef;
++
++      SAVE(STIER);
++      SAVE(STLCR);
++      SAVE(STMCR);
++      SAVE(STSPR);
++      SAVE(STISR);
++      STLCR |= 0x80;
++      SAVE(STDLL);
++      SAVE(STDLH);
++      STLCR &= 0xef;
++
++      SAVE(BTIER);
++      SAVE(BTLCR);
++      SAVE(BTMCR);
++      SAVE(BTSPR);
++      SAVE(BTISR);
++      BTLCR |= 0x80;
++      SAVE(BTDLL);
++      SAVE(BTDLH);
++      BTLCR &= 0xef;
++
++      /* save vital registers */
++      SAVE(OSCR);
++      SAVE(OSMR0);
++      SAVE(OSMR1);
++      SAVE(OSMR2);
++      SAVE(OSMR3);
++      SAVE(OIER);
+-      SAVE(GPLR0); SAVE(GPLR1); SAVE(GPLR2);
+       SAVE(GPDR0); SAVE(GPDR1); SAVE(GPDR2);
+       SAVE(GRER0); SAVE(GRER1); SAVE(GRER2);
+       SAVE(GFER0); SAVE(GFER1); SAVE(GFER2);
+-      SAVE(PGSR0); SAVE(PGSR1); SAVE(PGSR2);
+-
+       SAVE(GAFR0_L); SAVE(GAFR0_U);
+       SAVE(GAFR1_L); SAVE(GAFR1_U);
+       SAVE(GAFR2_L); SAVE(GAFR2_U);
+-#ifdef CONFIG_PXA27x
+-      SAVE(MDREFR);
+-      SAVE(GPLR3); SAVE(GPDR3); SAVE(GRER3); SAVE(GFER3); SAVE(PGSR3);
+-      SAVE(GAFR3_L); SAVE(GAFR3_U);
+-      SAVE(PWER); SAVE(PCFR); SAVE(PRER);
+-      SAVE(PFER); SAVE(PKWR);
+-#endif
++      // YoKu 23Feb06 Added To save LCD Registers, updated by kirti 24Feb06 ----->
++      SAVE(LCCR0); SAVE(LCCR1); SAVE(LCCR2); SAVE(LCCR3);
++      SAVE(FDADR0); 
++      SAVE(FDADR1); 
++      LCSR = 0xffffffff;      /* Clear LCD Status Register */
++      
++//    LCCR0 &= ~LCCR0_LDM;    /* Enable LCD Disable Done Interrupt */
++//    LCCR0 |= LCCR0_DIS;     /* Disable LCD Controller */
++
++      SAVE(LDCMD0);           
++      // <----- YoKu
++
++//    LCCR0 &= ~LCCR0_LDM;    /* Enable LCD Disable Done Interrupt */
++//      LCCR0 |= LCCR0_DIS;     /* Disable LCD Controller */
++
+       SAVE(ICMR);
+       ICMR = 0;
+       SAVE(CKEN);
+-      SAVE(PSTR);
++      CKEN = 0;
++
++      // Anup : For Wifi power saving mode 2 May 2006
++        SAVE(NSSCR0);SAVE(NSSCR1);SAVE(NSSSR);SAVE(NSSITR);SAVE(NSSDR);SAVE(NSSTO);
++        SAVE(NSSPSP);
++        printk("\nMY favourite mode in life.......sleep.....\n");
++
+       /* Note: wake up source are set up in each machine specific files */
++      /*Changes to keep the right sim selected */
++      gpsr0 = GPLR0;
++      gpsr1 = GPLR1;
++      gpsr2 = GPLR2;
++
++      /*Sim 1 selected */
++      // YoKu GPIOs Changed ----->
++      if( (GPLR0 & GPIO_bit(21)) && !(GPLR0 & GPIO_bit(22)) ) // 62,63
++      {
++              PGSR0 |= GPIO_bit(21) ;         //62
++              PGSR0 &= ~GPIO_bit(22) ;        //63    
++      }
++      else if (!(GPLR0 & GPIO_bit(21)) && (GPLR0 & GPIO_bit(22)) ) // 62,63
++      {
++              PGSR0 |= GPIO_bit(22) ;         //63
++              PGSR0 &= ~GPIO_bit(21) ;        //62
++      } /* sim 2*/
++      // <----- YoKu
++
+       /* clear GPIO transition detect  bits */
+       GEDR0 = GEDR0; GEDR1 = GEDR1; GEDR2 = GEDR2;
+-#ifdef CONFIG_PXA27x
+-      GEDR3 = GEDR3;
+-#endif
+       /* Clear sleep reset status */
+       RCSR = RCSR_SMR;
++      /* set resume return address */
++      PSPR = virt_to_phys(pxa_cpu_resume);
++
+       /* before sleeping, calculate and save a checksum */
+       for (i = 0; i < SLEEP_SAVE_SIZE - 1; i++)
+               checksum += sleep_save[i];
+       sleep_save[SLEEP_SAVE_CKSUM] = checksum;
+-      /* *** go zzz *** */
+-      pxa_cpu_pm_enter(state);
++       PGSR0 |= GPIO_bit(15);   //sidd for wake from Sleep 15, YoKu Comented ?? GPIO15 was ChipSelect
++      PGSR2 |= GPIO_bit(80);   //sidd for GSM Engine 69, YoKu GPIO Changed    Anup :commented
++
++      PGSR1 &= ~GPIO_bit(33); //Tushar: BT Codec Power Down
++
++      PGSR0 &= ~GPIO_bit(23); //Tushar: BGW200 Regulator OFF  
++
++//    GPDR1 |= GPIO_bit(49); //Tushar: LCD Serial Data in changed to O/P
++
++//    PGSR1 &= ~GPIO_bit(48);//Tushar: LCD Serial Pins
++
++//    PGSR1 &= ~GPIO_bit(49);
++
++//    PGSR1 &= ~GPIO_bit(50);
++
++//    PGSR1 |= GPIO_bit(51);
++
++//    PGSR1 &= 0x03FFFFFF;//Tushar: 24apr LCD datalines
++//    PGSR2 &= 0xFFFFFC00;
++
++      PGSR0 &= ~GPIO_bit(24); //Tushar: Mux Control Signals
++
++      PGSR0 &= ~GPIO_bit(25);
++
++      PGSR0 &= ~GPIO_bit(26);
++
++      PGSR0 &= ~GPIO_bit(27);
++
++ //       GPDR0 |= GPIO_bit(17); //Tushar: unused GPIOs 19apr
++   //     GPCR0 |= GPIO_bit(17);
++        PGSR0 &= ~GPIO_bit(17);
++
++//    GPDR1 |= GPIO_bit(56); //Tushar: unused GPIOs 19apr
++  //      GPCR1 |= GPIO_bit(56);
++        PGSR1 &= ~GPIO_bit(56);
++
++//    GPDR2 |= GPIO_bit(79);//Tushar: unused GPIOs 19apr
++//    GPCR2 |= GPIO_bit(79);
++      PGSR2 &= ~GPIO_bit(79);
++
++//    GPDR1 |= 0x03F00000;//Tushar: unused GPIOs 19apr
++//    GPCR1 |= 0x03F00000;
++      PGSR1 &= 0xFC0FFFFF; 
++
++
++      GPDR0 |= GPIO_bit(19);//Tushar: SIM Present Inputs configured as outputs
++      GPDR0 |= GPIO_bit(20);
++      PGSR0 &= ~GPIO_bit(19);
++      PGSR0 &= ~GPIO_bit(20);
++
++      
++//Tushar: 25apr FFRTS FFDTR & FFTXD 
++
++      PGSR1 |= GPIO_bit(39);
++      PGSR1 |= GPIO_bit(40);
++      PGSR1 |= GPIO_bit(41);
++/*
++      PGSR2 &= GPIO_bit(81); //Tushar: 24apr NSSP pins
++      PGSR2 &= GPIO_bit(82);
++      PGSR2 &= GPIO_bit(83);
++
++      PGSR2 |= GPIO_bit(74);
++      PGSR2 |= GPIO_bit(75);
++      PGSR2 |= GPIO_bit(76);
++      PGSR2 |= GPIO_bit(77);
++*/
++      if(pm_pwronoff)
++      {
++              /* We are here bcos of pressing of on off switch
++                 We wake up now only on pwr switch */
++              printk("Anup: Before sleeping \n");     
++              pm_pwronoff = 0;
++              PGSR0 &= ~GPIO_bit(23);         //7  YoKu GPIO Changed
++              //PGSR2 &= ~GPIO_bit(64);       //64 YoKu Commented in PWG500 64,7 was WifiReg, IN PWG600 it is 23
++
++              PGSR2 &= ~GPIO_bit(80);         //69 YoKu GPIO Changed  Anup : commnented
++              PWER = 0x0004;                  // YoKu Changed from 0x10 to 0x04 (i.e GPIO 4 -> 2)
++              PFER = 0x0004;
++              PRER = 0x0004;
++
++// YoKu ---->
++// 11May2006 To reduce Power Off current from 7mA to 4mA
++              GPDR0 |= GPIO_bit(16);  // BTReset o/p Low
++              PGSR0 &= ~GPIO_bit(16);
++
++              GPDR1 |= GPIO_bit(33);  // nMEC/nPDI o/p Low
++                PGSR1 &= ~GPIO_bit(33);
++
++              GPDR1 |= GPIO_bit(45);  // BTRTS o/p High
++                PGSR1 |= GPIO_bit(45);
++
++              
++              GPDR1 |= GPIO_bit(43);  // BTTXD o/p High
++                PGSR1 |= GPIO_bit(43);
++              
++              GPDR1 &= ~GPIO_bit(42); // BTRXD i/p
++              GPDR1 &= ~GPIO_bit(44); // BTCTS i/p
++// <---- YoKu
++
++              PSPR = virt_to_phys(pxa_cpu_resume);    // YoKu 29July05 to Resume from where u left, Original PSPR = 0
++      }
++
++      valbefore = GPLR0 & (GPIO_bit(21) | GPIO_bit(22)) ; // 62,63 YoKu GPIO Changed
++
++      //printk("Anup: Before sleeping gpsr0=0x%08x gpsr1=0x%08x gpsr2= 0x%08x\n",gpsr0,gpsr1,gpsr2);  
++      //kirti pxa_cpu_suspend();
++      //printk("KER_PM: Going to sleep zzzzzzzzz\n");
++      
++//    OSCC |= OSCC_OON; //Tushar: 18 apr. enable 32.768KHz Oscillator
++
++//    PCFR |= PCFR_OPDE; //Tushar: 18 apr. disable 3.6864MHz oscillator       
++
++      pxa_cpu_pm_enter(PM_SUSPEND_MEM);
+       cpu_init();
++      //kirti~
++      /**/
++      //FFMCR |=  UART_DTR ;
++      /**/
++
+       /* after sleeping, validate the checksum */
+       checksum = 0;
+       for (i = 0; i < SLEEP_SAVE_SIZE - 1; i++)
+@@ -141,39 +464,63 @@
+       checksum = 0;
+       for (i = 0; i < SLEEP_SAVE_SIZE - 1; i++)
+               checksum += sleep_save[i];
+-
+       /* if invalid, display message and wait for a hardware reset */
+-      if (checksum != sleep_save[SLEEP_SAVE_CKSUM]) {
++      if (checksum != sleep_save[SLEEP_SAVE_CKSUM]) 
++      {
+ #ifdef CONFIG_ARCH_LUBBOCK
+               LUB_HEXLED = 0xbadbadc5;
+ #endif
+               while (1)
+-                      pxa_cpu_pm_enter(state);
++              {
++                      printk("\n\n\nKERN_PM: CRC Error!!! after wakeup\n\n\n"); // YoKu 25May06
++
+       }
++      }
++      valafter = GPLR0 & (GPIO_bit(21) | GPIO_bit(22)) ;      //62,63 YoKu GPIO Changed
++      pm_pedr = PEDR ;
++ 
+       /* ensure not to come back here if it wasn't intended */
+       PSPR = 0;
++      /*printk("YoKu: gafr0_L=0x%08x gafr0_U=0x%08x\n",GAFR0_L,GAFR0_U); 
++      printk(" gafr1_L= 0x%08x gafr1_U= 0x%08x\n",GAFR1_L,GAFR1_U);   
++      printk(" gafr2_L= 0x%08x gafr2_U= 0x%08x\n",GAFR2_L,GAFR2_U);   */
+       /* restore registers */
+-      RESTORE_GPLEVEL(0); RESTORE_GPLEVEL(1); RESTORE_GPLEVEL(2);
+       RESTORE(GPDR0); RESTORE(GPDR1); RESTORE(GPDR2);
++      RESTORE(GRER0); RESTORE(GRER1); RESTORE(GRER2);
++      RESTORE(GFER0); RESTORE(GFER1); RESTORE(GFER2);
+       RESTORE(GAFR0_L); RESTORE(GAFR0_U);
+       RESTORE(GAFR1_L); RESTORE(GAFR1_U);
+       RESTORE(GAFR2_L); RESTORE(GAFR2_U);
+-      RESTORE(GRER0); RESTORE(GRER1); RESTORE(GRER2);
+-      RESTORE(GFER0); RESTORE(GFER1); RESTORE(GFER2);
+-      RESTORE(PGSR0); RESTORE(PGSR1); RESTORE(PGSR2);
+-#ifdef CONFIG_PXA27x
+-      RESTORE(MDREFR);
+-      RESTORE_GPLEVEL(3); RESTORE(GPDR3);
+-      RESTORE(GAFR3_L); RESTORE(GAFR3_U);
+-      RESTORE(GRER3); RESTORE(GFER3); RESTORE(PGSR3);
+-      RESTORE(PWER); RESTORE(PCFR); RESTORE(PRER);
+-      RESTORE(PFER); RESTORE(PKWR);
+-#endif
+-      PSSR = PSSR_RDH | PSSR_PH;
++      // Anup : For Wifi power saving mode 2 May 2006
++        RESTORE(NSSCR0);RESTORE(NSSCR1);RESTORE(NSSSR);RESTORE(NSSITR);RESTORE(NSSDR);RESTORE(NSSTO);
++        RESTORE(NSSPSP);
++
++      // PSSR = PSSR_PH;
++      GPSR0 = gpsr0;
++      GPSR1 = gpsr1;
++      GPSR2 = gpsr2;
++      
++      // Anup : check values of these registers
++//     printk("YoKu: gpsr0=0x%08x gpsr1=0x%08x gpsr2= 0x%08x\n",gpsr0,gpsr1,gpsr2);   
++      //sidd
++
++      GPCR0 |= ~gpsr0;
++      GPCR1 |= ~gpsr1;
++      GPCR2 |= ~gpsr2;
++
++      
++      PSSR = ~PSSR_PH;
++
++      RESTORE(OSMR0);
++      RESTORE(OSMR1);
++      RESTORE(OSMR2);
++      RESTORE(OSMR3);
++      RESTORE(OSCR);
++      RESTORE(OIER);
+       RESTORE(CKEN);
+@@ -181,62 +528,181 @@
+       ICCR = 1;
+       RESTORE(ICMR);
+-      RESTORE(PSTR);
++      /* 
++       * Temporary solution.  This won't be necessary once
++       * we move pxa support into the serial driver.
++       * Restore the FF UART.
++       */
++      RESTORE(BTMCR);
++      RESTORE(BTSPR);
++      RESTORE(BTLCR);
++      BTLCR |= 0x80;
++      RESTORE(BTDLH);
++      RESTORE(BTDLL);
++      RESTORE(BTLCR);
++      RESTORE(BTISR);
++      BTFCR = 0xc7;
++      RESTORE(BTIER);
++
++      RESTORE(STMCR);
++      RESTORE(STSPR);
++      RESTORE(STLCR);
++      STLCR |= 0x80;
++      RESTORE(STDLH);
++      RESTORE(STDLL);
++      RESTORE(STLCR);
++      RESTORE(STISR);
++      STFCR = 0xc7;
++      RESTORE(STIER);
++
++      RESTORE(FFMCR);
++      RESTORE(FFSPR);
++      RESTORE(FFLCR);
++      FFLCR |= 0x80;
++      RESTORE(FFDLH);
++      RESTORE(FFDLL);
++      RESTORE(FFLCR);
++      RESTORE(FFISR);
++      RESTORE(FFFCR);
++      FFFCR = 0xc7;
++      RESTORE(FFIER);
++
++       // YoKu 23Feb06 Added To save LCD Registers, updated by kirti 24Feb06 ----->
++        RESTORE(LCCR3); RESTORE(LCCR2); RESTORE(LCCR1); 
++      LCCR0=RESTORE(LCCR0) & ~LCCR0_ENB;
++        RESTORE(FDADR0); RESTORE(FDADR1);
++      LCCR0 |= LCCR0_ENB;
++      
++        // <----- YoKu
+       /* restore current time */
+-      rtc.tv_sec = RCNR;
+-      restore_time_delta(&delta, &rtc);
++      xtime.tv_sec = RCNR;
++
++      valafter1 = GPLR0 & (GPIO_bit(21) | GPIO_bit(22)) ;     //62,63 YoKu GPIO Changed
++
++//    SSCR0 &=0xFFFFFFFF;
++//    printk("\nPM : val of SSCR0 = %x " , SSCR0);
++
++      printk("KER_PM: Resumed at RCNR = %d RTSR= %x\n",RCNR,RTSR);
++
++      printk("YoKu: pgsr0=0x%08x pgsr1=0x%08x pgsr2= 0x%08x\n",PGSR0,PGSR1,PGSR2);
++
++      OSMR0 = 0;              /* set initial match at 0 */
++      OSSR = 0xf;             /* clear status on all timers */
++      OIER |= OIER_E0;        /* enable match on timer 0 to cause interrupts */
++      OSCR = 0;               /* initialize free-running timer, force first match */
++
++      leds_event(led_start);
++      //kirti sti();
++      // call i2c reset here---->
++      ICR = ICR_UR;
++      ISR = 0x7FF; //I2C_ISR_INIT;
++      ICR &= ~ICR_UR;
++
++      ISAR = 0x32;//i2c->slave_addr;
++
++      /* set control register values */
++      ICR = (ICR_BEIE | ICR_IRFIE | ICR_ITEIE | ICR_GCD | ICR_SCLE);//I2C_ICR_INIT;
++
++      /* enable unit */
++      ICR |= ICR_IUE;
++      udelay(100);
++      //<-----
++
++      local_irq_enable();
+-#ifdef DEBUG
+-      printk(KERN_DEBUG "*** made it back from resume\n");
+-#endif
+       return 0;
+ }
+-EXPORT_SYMBOL_GPL(pxa_pm_enter);
+-
+ unsigned long sleep_phys_sp(void *sp)
+ {
+       return virt_to_phys(sp);
+ }
++#ifdef CONFIG_SYSCTL
+ /*
+- * Called after processes are frozen, but before we shut down devices.
++ * ARGH!  ACPI people defined CTL_ACPI in linux/acpi.h rather than
++ * linux/sysctl.h.
++ *
++ * This means our interface here won't survive long - it needs a new
++ * interface.  Quick hack to get this working - use sysctl id 9999.
+  */
+-int pxa_pm_prepare(suspend_state_t state)
+-{
+-      extern int pxa_cpu_pm_prepare(suspend_state_t state);
++#warning ACPI broke the kernel, this interface needs to be fixed up.
++#define CTL_ACPI 9999
++#define ACPI_S1_SLP_TYP 19
+-      return pxa_cpu_pm_prepare(state);
++/*
++ * Send us to sleep.
++ */
++static int sysctl_pm_do_suspend(ctl_table *ctl, int write, struct file *filp,
++              void *buffer, size_t *lenp)
++{
++      int retval=0;
++      unsigned i , clock ;  
++      if (write) 
++      {
++              char buf[16], *p;
++              unsigned int sleepsec;
++              int len,left = *lenp;
++
++              len = left;
++              if (left > sizeof(buf))
++                      left = sizeof(buf);
++              if (!copy_from_user(buf, buffer, left))
++              {
++                      buf[sizeof(buf) - 1] = '\0';
++                      sleepsec = simple_strtoul(buf, &p, 0);
++                      printk("\nSleeping %d Pwronoff=%x RCNR=%d\n",sleepsec,pm_pwronoff,RCNR);
++                      printk("\nPWER %x PFER=%x PRER=%x\n",PWER,PFER,PRER);
++                      RTAR = xtime.tv_sec + sleepsec;
++                      printk("\nRTAR=%d \n",RTAR);
++              }
++      }
++      retval = pm_do_suspend();
++      clock = get_memclk_frequency_10khz();
++      return retval;
+ }
+-
+-EXPORT_SYMBOL_GPL(pxa_pm_prepare);
+ /*
+- * Called after devices are re-setup, but before processes are thawed.
++static struct ctl_table pm_table[] =
++{
++      {ACPI_S1_SLP_TYP, "suspend", NULL, 0, 0600, NULL, (proc_handler *)&sysctl_pm_do_suspend},
++      {0}
++};
+  */
+-int pxa_pm_finish(suspend_state_t state)
++static struct ctl_table pm_table[] =
+ {
+-      return 0;
++      { 
++      ctl_name:       ACPI_S1_SLP_TYP, 
++      procname:       "suspend", 
++      mode:           0600, 
++      proc_handler:   (proc_handler *)&sysctl_pm_do_suspend,
++      },
++      {
++      ctl_name: 0
+ }
++};
+-EXPORT_SYMBOL_GPL(pxa_pm_finish);
++static struct ctl_table pm_dir_table[] =
++{
++      {CTL_ACPI, "pm", NULL, 0, 0555, pm_table},
++      {0}
++};
+ /*
+- * Set to PM_DISK_FIRMWARE so we can quickly veto suspend-to-disk.
++ * Initialize power interface
+  */
+-static struct pm_ops pxa_pm_ops = {
+-      .pm_disk_mode   = PM_DISK_FIRMWARE,
+-      .prepare        = pxa_pm_prepare,
+-      .enter          = pxa_pm_enter,
+-      .finish         = pxa_pm_finish,
+-};
+-
+-static int __init pxa_pm_init(void)
++static int __init pm_init(void)
+ {
+-      pm_set_ops(&pxa_pm_ops);
++      register_sysctl_table(pm_dir_table, 1);
++        /*Adi: Adjust for clock value to RTC
++        RTTR = RTC clk - 1*/
++        RTTR = 32913;
++
+       return 0;
+ }
+-device_initcall(pxa_pm_init);
++__initcall(pm_init);
++
++#endif
+diff -NurbwB linux-2.6.17/arch/arm/mach-pxa/sleep.S linux-2.6.17-patched/arch/arm/mach-pxa/sleep.S
+--- linux-2.6.17/arch/arm/mach-pxa/sleep.S     2006-06-17 18:49:35.000000000 -0700
++++ linux-2.6.17-patched/arch/arm/mach-pxa/sleep.S     2006-09-11 13:07:05.000000000 -0700
+@@ -79,7 +79,7 @@
+       ldr     r5, [r4]
+       @ enable SDRAM self-refresh mode
+-      orr     r5, r5, #MDREFR_SLFRSH
++      orr     r5, r5, #(MDREFR_SLFRSH | MDREFR_APD)
+ #ifdef CONFIG_PXA27x
+       @ set SDCLKx divide-by-2 bits (this is part of a workaround for Errata 50)
+diff -NurbwB linux-2.6.17/include/asm-arm/arch-pxa/pxa-regs.h linux-2.6.17-patched/include/asm-arm/arch-pxa/pxa-regs.h
+--- linux-2.6.17/include/asm-arm/arch-pxa/pxa-regs.h   2006-06-17 18:49:35.000000000 -0700
++++ linux-2.6.17-patched/include/asm-arm/arch-pxa/pxa-regs.h   2006-09-11 11:04:36.000000000 -0700
+@@ -1748,6 +1748,15 @@
+ #define SSTO_P(x) (*(((x) == 1) ? &SSTO_P1 : ((x) == 2) ? &SSTO_P2 : ((x) == 3) ? &SSTO_P3 : NULL))
+ #define SSPSP_P(x) (*(((x) == 1) ? &SSPSP_P1 : ((x) == 2) ? &SSPSP_P2 : ((x) == 3) ? &SSPSP_P3 : NULL))
++#define NSSCR0          __REG(0x41400000)  /* SSP Port 1 Control Register 0 */
++#define NSSCR1          __REG(0x41400004)  /* SSP Port 1 Control Register 1 */
++#define NSSSR           __REG(0x41400008)  /* SSP Port 1 Status Register */
++#define NSSITR          __REG(0x4140000C)  /* SSP Port 1 Interrupt Test Register */
++#define NSSDR           __REG(0x41400010)  /* (Write / Read) SSP Port 1 Data Write Register/SSP Data Read Register */
++#define NSSTO           __REG(0x41400028)  /* SSP Port 1 Time Out Register */
++#define NSSPSP          __REG(0x4140002C)  /* SSP Port 1 Programmable Serial Port Register */
++
++
+ /*
+  * MultiMediaCard (MMC) controller
+  */
+diff -NurbwB linux-2.6.17/kernel/power/main.c linux-2.6.17-patched/kernel/power/main.c
+--- linux-2.6.17/kernel/power/main.c   2006-06-17 18:49:35.000000000 -0700
++++ linux-2.6.17-patched/kernel/power/main.c   2006-09-11 12:59:20.000000000 -0700
+@@ -66,10 +66,12 @@
+               goto Enable_cpu;
+       }
++      /*
+       if (freeze_processes()) {
+               error = -EAGAIN;
+               goto Thaw;
+       }
++      */
+       if ((free_pages = nr_free_pages()) < FREE_PAGE_NUMBER) {
+               pr_debug("PM: free some memory\n");
+@@ -110,12 +112,15 @@
+       local_irq_save(flags);
++      /*
+       if ((error = device_power_down(PMSG_SUSPEND))) {
+               printk(KERN_ERR "Some devices failed to power down\n");
+               goto Done;
+       }
++      */
++
+       error = pm_ops->enter(state);
+-      device_power_up();
++      //device_power_up();
+  Done:
+       local_irq_restore(flags);
+       return error;
diff --git a/target/linux/pxa-2.6/patches/002-usb_gadget.patch b/target/linux/pxa-2.6/patches/002-usb_gadget.patch
new file mode 100644 (file)
index 0000000..b6766d9
--- /dev/null
@@ -0,0 +1,58 @@
+diff -NurbwB linux-2.6.17/drivers/usb/gadget/pxa2xx_udc.c linux-2.6.17-patched/drivers/usb/gadget/pxa2xx_udc.c
+--- linux-2.6.17/drivers/usb/gadget/pxa2xx_udc.c       2006-06-17 18:49:35.000000000 -0700
++++ linux-2.6.17-patched/drivers/usb/gadget/pxa2xx_udc.c       2006-09-11 13:02:39.000000000 -0700
+@@ -87,8 +87,8 @@
+ static const char ep0name [] = "ep0";
+-// #define    USE_DMA
+-// #define    USE_OUT_DMA
++#define       USE_DMA
++#define       USE_OUT_DMA
+ // #define    DISABLE_TEST_MODE
+ #ifdef CONFIG_ARCH_IXP4XX
+@@ -1513,7 +1513,7 @@
+ #endif
+       /* try to clear these bits before we enable the udc */
+-      udc_ack_int_UDCCR(UDCCR_SUSIR|/*UDCCR_RSTIR|*/UDCCR_RESIR);
++      udc_ack_int_UDCCR(UDCCR_SUSIR|UDCCR_RSTIR|UDCCR_RESIR);
+       ep0_idle(dev);
+       dev->gadget.speed = USB_SPEED_UNKNOWN;
+@@ -2043,6 +2043,9 @@
+       struct pxa2xx_udc       *dev = _dev;
+       int                     handled;
++
++      udc_set_mask_UDCCR( UDCCR_REM | UDCCR_SRM);
++
+       dev->stats.irqs++;
+       HEX_DISPLAY(dev->stats.irqs);
+       do {
+@@ -2137,6 +2139,8 @@
+               /* we could also ask for 1 msec SOF (SIR) interrupts */
+       } while (handled);
++
++      udc_clear_mask_UDCCR( UDCCR_SRM | UDCCR_REM);
+       return IRQ_HANDLED;
+ }
+@@ -2437,6 +2441,7 @@
+       int retval, out_dma = 1;
+       u32 chiprev;
++      local_irq_disable();
+       /* insist on Intel/ARM/XScale */
+       asm("mrc%? p15, 0, %0, c0, c0" : "=r" (chiprev));
+       if ((chiprev & CP15R0_VENDOR_MASK) != CP15R0_XSCALE_VALUE) {
+@@ -2553,6 +2558,7 @@
+ #endif
+       }
+ #endif
++      local_irq_enable();
+       create_proc_files();
+       return 0;
diff --git a/target/linux/pxa-2.6/patches/004-skbuf_hack.patch b/target/linux/pxa-2.6/patches/004-skbuf_hack.patch
new file mode 100644 (file)
index 0000000..434e3b9
--- /dev/null
@@ -0,0 +1,10 @@
+--- linux-2.6.17/include/linux/skbuff.h        2006-09-20 16:13:42.000000000 -0700
++++ linux-2.6.17-patched/include/linux/skbuff.h        2006-09-20 16:14:29.000000000 -0700
+@@ -239,6 +239,7 @@
+       } nh;
+       union {
++              struct ethhdr   *ethernet;
+               unsigned char   *raw;
+       } mac;
diff --git a/target/linux/pxa-2.6/patches/005-mtd.patch b/target/linux/pxa-2.6/patches/005-mtd.patch
new file mode 100644 (file)
index 0000000..6156b6a
--- /dev/null
@@ -0,0 +1,111 @@
+diff -Nurb linux-2.6.17/drivers/mtd/chips/cfi_cmdset_0001.c linux-2.6.17-patched/drivers/mtd/chips/cfi_cmdset_0001.c
+--- linux-2.6.17/drivers/mtd/chips/cfi_cmdset_0001.c   2006-06-17 18:49:35.000000000 -0700
++++ linux-2.6.17-patched/drivers/mtd/chips/cfi_cmdset_0001.c   2006-09-25 11:27:06.000000000 -0700
+@@ -40,7 +40,7 @@
+ /* #define CMDSET0001_DISABLE_WRITE_SUSPEND */
+ // debugging, turns off buffer write mode if set to 1
+-#define FORCE_WORD_WRITE 0
++#define FORCE_WORD_WRITE 1
+ #define MANUFACTURER_INTEL    0x0089
+ #define I82802AB      0x00ad
+diff -Nurb linux-2.6.17/drivers/mtd/maps/lubbock-flash.c linux-2.6.17-patched/drivers/mtd/maps/lubbock-flash.c
+--- linux-2.6.17/drivers/mtd/maps/lubbock-flash.c      2006-06-17 18:49:35.000000000 -0700
++++ linux-2.6.17-patched/drivers/mtd/maps/lubbock-flash.c      2006-09-25 10:50:08.000000000 -0700
+@@ -26,6 +26,7 @@
+ #include <asm/hardware.h>
+ #include <asm/arch/pxa-regs.h>
+ #include <asm/arch/lubbock.h>
++#include <linux/mtd/concat.h>
+ #define ROM_ADDR      0x00000000
+@@ -48,24 +49,27 @@
+       .inval_cache =  lubbock_map_inval_cache,
+ } };
+-static struct mtd_partition lubbock_partitions[] = {
++static struct mtd_partition lubbock_partitions[] =
++{
+       {
+-              .name =         "Bootloader",
+-              .size =         0x00040000,
+-              .offset =       0,
+-              .mask_flags =   MTD_WRITEABLE  /* force read-only */
+-      },{
+-              .name =         "Kernel",
+-              .size =         0x00100000,
+-              .offset =       0x00040000,
+-      },{
+-              .name =         "Filesystem",
+-              .size =         MTDPART_SIZ_FULL,
+-              .offset =       0x00140000
+-      }
++              .name   =   "root",
++              .offset =   0x00410000
++      },
++      {
++              .name   =  "kernel",
++              .size   =  0x00150000,
++              .offset =  0x000B0000
++      },
++      {
++              .name   =  "bootloader",
++              .size   =  0x000B0000,
++              .offset =  0x00000000
++      },
+ };
++
+ static struct mtd_info *mymtds[2];
++static struct mtd_info *merged_mtd;
+ static struct mtd_partition *parsed_parts[2];
+ static int nr_parsed_parts[2];
+@@ -83,8 +87,8 @@
+       printk(KERN_NOTICE "Lubbock configured to boot from %s (bank %d)\n",
+              flashboot?"Flash":"ROM", flashboot);
+-      lubbock_maps[flashboot^1].name = "Lubbock Application Flash";
+-      lubbock_maps[flashboot].name = "Lubbock Boot ROM";
++      lubbock_maps[flashboot^1].name = "Flash-1";
++      lubbock_maps[flashboot].name = "Flash-0";
+       for (i = 0; i < 2; i++) {
+               lubbock_maps[i].virt = ioremap(lubbock_maps[i].phys, WINDOW_SIZE);
+@@ -125,25 +129,23 @@
+       if (!mymtds[0] && !mymtds[1])
+               return ret;
+-      for (i = 0; i < 2; i++) {
+-              if (!mymtds[i]) {
+-                      printk(KERN_WARNING "%s is absent. Skipping\n", lubbock_maps[i].name);
+-              } else if (nr_parsed_parts[i]) {
+-                      add_mtd_partitions(mymtds[i], parsed_parts[i], nr_parsed_parts[i]);
+-              } else if (!i) {
+-                      printk("Using static partitions on %s\n", lubbock_maps[i].name);
+-                      add_mtd_partitions(mymtds[i], lubbock_partitions, ARRAY_SIZE(lubbock_partitions));
+-              } else {
+-                      printk("Registering %s as whole device\n", lubbock_maps[i].name);
+-                      add_mtd_device(mymtds[i]);
+-              }
+-      }
++      if (mymtds[0] && mymtds[1]) {
++              merged_mtd = mtd_concat_create(mymtds, 2, "Concated Flash #1 and #2");
++              if(merged_mtd)
++                      add_mtd_partitions(merged_mtd, lubbock_partitions, ARRAY_SIZE(lubbock_partitions));
++              else
++                      printk("YoKu: Failed to concate\n");
+       return 0;
++      }
+ }
+ static void __exit cleanup_lubbock(void)
+ {
+       int i;
++
++      del_mtd_partitions(merged_mtd);
++      map_destroy(merged_mtd);
++
+       for (i = 0; i < 2; i++) {