diff options
| author | mbm <mbm@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2007-01-31 00:11:27 +0000 | 
|---|---|---|
| committer | mbm <mbm@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2007-01-31 00:11:27 +0000 | 
| commit | da5f3d25a76d1e0b3063f3ef5fe229e179e8bf5e (patch) | |
| tree | 146dc39ca428c431866ad9a86ca80c065a24269f /target | |
| parent | dc251a5ea66495620ffa33444c5db032148c2c75 (diff) | |
basic pxa support; likely broken
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@6232 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target')
| -rw-r--r-- | target/linux/pxa-2.6/Makefile | 20 | ||||
| -rw-r--r-- | target/linux/pxa-2.6/config | 1214 | ||||
| l--------- | target/linux/pxa-2.6/image | 1 | ||||
| -rw-r--r-- | target/linux/pxa-2.6/patches/000-cpufreq.patch | 533 | ||||
| -rw-r--r-- | target/linux/pxa-2.6/patches/001-pm.patch | 869 | ||||
| -rw-r--r-- | target/linux/pxa-2.6/patches/002-usb_gadget.patch | 58 | ||||
| -rw-r--r-- | target/linux/pxa-2.6/patches/004-skbuf_hack.patch | 10 | ||||
| -rw-r--r-- | target/linux/pxa-2.6/patches/005-mtd.patch | 111 | 
8 files changed, 2816 insertions, 0 deletions
| diff --git a/target/linux/pxa-2.6/Makefile b/target/linux/pxa-2.6/Makefile new file mode 100644 index 000000000..94e9601b9 --- /dev/null +++ b/target/linux/pxa-2.6/Makefile @@ -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 index 000000000..ba94adcd6 --- /dev/null +++ b/target/linux/pxa-2.6/config @@ -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 index 000000000..a96fdd0ab --- /dev/null +++ b/target/linux/pxa-2.6/image @@ -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 index 000000000..3cb6676b4 --- /dev/null +++ b/target/linux/pxa-2.6/patches/000-cpufreq.patch @@ -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 index 000000000..799b9bd53 --- /dev/null +++ b/target/linux/pxa-2.6/patches/001-pm.patch @@ -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 index 000000000..b6766d9b3 --- /dev/null +++ b/target/linux/pxa-2.6/patches/002-usb_gadget.patch @@ -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 index 000000000..434e3b98b --- /dev/null +++ b/target/linux/pxa-2.6/patches/004-skbuf_hack.patch @@ -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 index 000000000..6156b6a93 --- /dev/null +++ b/target/linux/pxa-2.6/patches/005-mtd.patch @@ -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++) { | 
