diff -ruN kernel-2.6.32-220.el6.src.rpm-rpmbuild/SOURCES/cfs_rq_load_stamp.patch kernel-2.6.32-220.el6.kirkwood.src.rpm-rpmbuild/SOURCES/cfs_rq_load_stamp.patch
--- kernel-2.6.32-220.el6.src.rpm-rpmbuild/SOURCES/cfs_rq_load_stamp.patch	1970-01-01 01:00:00.000000000 +0100
+++ kernel-2.6.32-220.el6.kirkwood.src.rpm-rpmbuild/SOURCES/cfs_rq_load_stamp.patch	2011-12-19 05:54:53.000000000 +0000
@@ -0,0 +1,11 @@
+--- linux-2.6.32-220.el6.kirkwood.armv5tel/kernel/sched.c.orig	2011-12-19 05:52:45.960988121 +0000
++++ linux-2.6.32-220.el6.kirkwood.armv5tel/kernel/sched.c	2011-12-19 05:53:04.101469567 +0000
+@@ -9867,8 +9867,6 @@
+ 	INIT_LIST_HEAD(&cfs_rq->tasks);
+ #ifdef CONFIG_FAIR_GROUP_SCHED
+ 	cfs_rq->rq = rq;
+-	/* allow initial update_cfs_load() to truncate */
+-	cfs_rq->load_stamp = 1;
+ #endif
+ 	cfs_rq->min_vruntime = (u64)(-(1LL << 20));
+ }
diff -ruN kernel-2.6.32-220.el6.src.rpm-rpmbuild/SOURCES/config-arm-kirkwood-debug kernel-2.6.32-220.el6.kirkwood.src.rpm-rpmbuild/SOURCES/config-arm-kirkwood-debug
--- kernel-2.6.32-220.el6.src.rpm-rpmbuild/SOURCES/config-arm-kirkwood-debug	1970-01-01 01:00:00.000000000 +0100
+++ kernel-2.6.32-220.el6.kirkwood.src.rpm-rpmbuild/SOURCES/config-arm-kirkwood-debug	2011-12-19 02:09:28.000000000 +0000
@@ -0,0 +1 @@
+
diff -ruN kernel-2.6.32-220.el6.src.rpm-rpmbuild/SOURCES/config-arm-kirkwood-debug-rhel kernel-2.6.32-220.el6.kirkwood.src.rpm-rpmbuild/SOURCES/config-arm-kirkwood-debug-rhel
--- kernel-2.6.32-220.el6.src.rpm-rpmbuild/SOURCES/config-arm-kirkwood-debug-rhel	1970-01-01 01:00:00.000000000 +0100
+++ kernel-2.6.32-220.el6.kirkwood.src.rpm-rpmbuild/SOURCES/config-arm-kirkwood-debug-rhel	2011-12-19 02:11:44.000000000 +0000
@@ -0,0 +1 @@
+
diff -ruN kernel-2.6.32-220.el6.src.rpm-rpmbuild/SOURCES/config-arm-kirkwood-generic kernel-2.6.32-220.el6.kirkwood.src.rpm-rpmbuild/SOURCES/config-arm-kirkwood-generic
--- kernel-2.6.32-220.el6.src.rpm-rpmbuild/SOURCES/config-arm-kirkwood-generic	1970-01-01 01:00:00.000000000 +0100
+++ kernel-2.6.32-220.el6.kirkwood.src.rpm-rpmbuild/SOURCES/config-arm-kirkwood-generic	2011-12-21 14:49:55.000000000 +0000
@@ -0,0 +1,645 @@
+# Linux kernel version: 2.6.32.45
+# Sat Aug 20 08:14:46 2011
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_HAVE_LATENCYTOP_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+CONFIG_CONSTRUCTORS=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SYSVIPC_SYSCTL=y
+# RCU Subsystem
+CONFIG_TREE_RCU=y
+# CONFIG_TREE_PREEMPT_RCU is not set
+CONFIG_RCU_FANOUT=32
+# CONFIG_TREE_RCU_TRACE is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_NAMESPACES=y
+CONFIG_RD_GZIP=y
+CONFIG_RD_BZIP2=y
+CONFIG_RD_LZMA=y
+CONFIG_ANON_INODES=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_AIO=y
+# Kernel Performance Events And Counters
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_PCI_QUIRKS=y
+CONFIG_SLUB_DEBUG=y
+CONFIG_COMPAT_BRK=y
+# CONFIG_SLAB is not set
+# CONFIG_SLOB is not set
+CONFIG_HAVE_OPROFILE=y
+CONFIG_KRETPROBES=y
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+# GCOV-based kernel profiling
+# CONFIG_SLOW_WORK_DEBUG is not set
+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+CONFIG_BASE_SMALL=0
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+CONFIG_BLOCK=y
+# IO Schedulers
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="cfq"
+CONFIG_FREEZER=y
+# System Type
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_GEMINI is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_STMP3XXX is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_NOMADIK is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+CONFIG_ARCH_KIRKWOOD=y
+# CONFIG_ARCH_LOKI is not set
+# CONFIG_ARCH_MV78XX0 is not set
+# CONFIG_ARCH_ORION5X is not set
+# CONFIG_ARCH_MMP is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_W90X900 is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_MSM is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_S3C64XX is not set
+# CONFIG_ARCH_S5PC1XX is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_U300 is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_ARCH_BCMRING is not set
+# Marvell Kirkwood Implementations
+CONFIG_MACH_DB88F6281_BP=y
+CONFIG_MACH_RD88F6192_NAS=y
+CONFIG_MACH_RD88F6281=y
+CONFIG_MACH_MV88F6281GTW_GE=y
+CONFIG_MACH_SHEEVAPLUG=y
+CONFIG_MACH_TS219=y
+CONFIG_MACH_OPENRD_BASE=y
+CONFIG_PLAT_ORION=y
+# Processor Type
+CONFIG_CPU_32=y
+CONFIG_CPU_FEROCEON=y
+CONFIG_CPU_FEROCEON_OLD_ID=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_PABRT_LEGACY=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_COPY_FEROCEON=y
+CONFIG_CPU_TLB_FEROCEON=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+# Processor Features
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+CONFIG_OUTER_CACHE=y
+CONFIG_CACHE_FEROCEON_L2=y
+# CONFIG_CACHE_FEROCEON_L2_WRITETHROUGH is not set
+CONFIG_ARM_L1_CACHE_SHIFT=5
+# Bus support
+CONFIG_PCI_SYSCALL=y
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+# Kernel Features
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_VMSPLIT_3G=y
+# CONFIG_VMSPLIT_2G is not set
+# CONFIG_VMSPLIT_1G is not set
+CONFIG_PAGE_OFFSET=0xC0000000
+CONFIG_HZ=100
+CONFIG_AEABI=y
+# CONFIG_OABI_COMPAT is not set
+# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
+# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
+# CONFIG_HIGHMEM is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_PAGEFLAGS_EXTENDED=y
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_PHYS_ADDR_T_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=0
+CONFIG_VIRT_TO_BUS=y
+CONFIG_HAVE_MLOCK=y
+CONFIG_HAVE_MLOCKED_PAGE_BIT=y
+CONFIG_ALIGNMENT_TRAP=y
+CONFIG_UACCESS_WITH_MEMCPY=y
+# Boot options
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE=""
+# CONFIG_XIP_KERNEL is not set
+# CPU Power Management
+CONFIG_CPU_IDLE=y
+CONFIG_CPU_IDLE_GOV_LADDER=y
+CONFIG_CPU_IDLE_GOV_MENU=y
+# Floating point emulation
+# At least one emulation must be selected
+# CONFIG_VFP is not set
+# Userspace binary formats
+CONFIG_HAVE_AOUT=y
+# Power management options
+CONFIG_PM=y
+CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND=y
+CONFIG_SUSPEND_FREEZER=y
+# CONFIG_APM_EMULATION is not set
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+CONFIG_XFRM_IPCOMP=m
+CONFIG_ASK_IP_FIB_HASH=y
+# CONFIG_IP_FIB_TRIE is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+# CONFIG_IP_PNP_RARP is not set
+CONFIG_INET_XFRM_TUNNEL=m
+CONFIG_INET_TCP_DIAG=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_IPV6_NDISC_NODETYPE=y
+# CONFIG_NETWORK_SECMARK is not set
+# Core Netfilter Configuration
+CONFIG_NF_CT_PROTO_GRE=m
+CONFIG_NETFILTER_XT_TARGET_HL=m
+CONFIG_NETFILTER_XT_MATCH_RECENT_PROC_COMPAT=y
+CONFIG_NF_DEFRAG_IPV4=m
+CONFIG_NF_CONNTRACK_PROC_COMPAT=y
+CONFIG_NF_NAT_NEEDED=y
+CONFIG_NF_NAT_PROTO_DCCP=m
+CONFIG_NF_NAT_PROTO_GRE=m
+CONFIG_NF_NAT_PROTO_UDPLITE=m
+CONFIG_NF_NAT_PROTO_SCTP=m
+CONFIG_NF_NAT_FTP=m
+CONFIG_NF_NAT_IRC=m
+CONFIG_NF_NAT_TFTP=m
+CONFIG_NF_NAT_AMANDA=m
+CONFIG_NF_NAT_PPTP=m
+CONFIG_NF_NAT_H323=m
+CONFIG_NF_NAT_SIP=m
+CONFIG_STP=m
+# CONFIG_NET_DSA_TAG_DSA is not set
+CONFIG_NET_DSA_TAG_EDSA=y
+# CONFIG_NET_DSA_TAG_TRAILER is not set
+CONFIG_NET_DSA_MV88E6XXX=y
+# CONFIG_NET_DSA_MV88E6XXX_NEED_PPU is not set
+# Queueing/Scheduling
+# Classification
+CONFIG_NET_SCH_FIFO=y
+CONFIG_CFG80211_DEFAULT_PS_VALUE=1
+CONFIG_WIRELESS_OLD_REGULATORY=y
+CONFIG_MAC80211_HAS_RC=y
+CONFIG_FIRMWARE_IN_KERNEL=y
+# CONFIG_SYS_HYPERVISOR is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+# CONFIG_MG_DISK is not set
+CONFIG_HAVE_IDE=y
+CONFIG_SCSI_DMA=y
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_WAIT_SCAN=m
+# SCSI Transports
+# CONFIG_ATA_NONSTANDARD is not set
+CONFIG_MD_RAID6_PQ=m
+# You can enable one or both FireWire driver stacks.
+# See the help texts for more information.
+# MII PHY device drivers
+# CONFIG_AX88796 is not set
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_ENC28J60 is not set
+# CONFIG_SMC911X is not set
+# CONFIG_SMSC911X is not set
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
+# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
+# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
+# CONFIG_KS8851 is not set
+CONFIG_MV643XX_ETH=y
+# CONFIG_TR is not set
+# CONFIG_LIBERTAS_SPI is not set
+# Enable WiMAX (Networking options) to see the WiMAX drivers
+# USB Network Adapters
+CONFIG_USB_NET_CDCETHER=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_SLHC=m
+# CONFIG_NETPOLL is not set
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_KEYBOARD_GPIO=y
+# Hardware I/O ports
+CONFIG_SERIO_LIBPS2=y
+CONFIG_CONSOLE_TRANSLATIONS=y
+CONFIG_SERIAL_8250_PCI=y
+# CONFIG_SERIAL_MAX3100 is not set
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=16
+CONFIG_DEVPORT=y
+CONFIG_I2C_BOARDINFO=y
+# PC SMBus host controller drivers
+# I2C system bus drivers (mostly embedded / system-on-chip)
+# CONFIG_I2C_GPIO is not set
+CONFIG_I2C_MV64XXX=y
+# External I2C/SMBus adapter drivers
+# Graphics adapter I2C/DDC channel drivers
+# Other I2C/SMBus bus drivers
+# Miscellaneous I2C Chip support
+CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+# SPI Master Controller Drivers
+# CONFIG_SPI_BITBANG is not set
+# CONFIG_SPI_GPIO is not set
+CONFIG_SPI_ORION=y
+# SPI Protocol Masters
+# CONFIG_SPI_SPIDEV is not set
+# CONFIG_SPI_TLE62X0 is not set
+# PPS support
+CONFIG_ARCH_REQUIRE_GPIOLIB=y
+CONFIG_GPIOLIB=y
+# CONFIG_DEBUG_GPIO is not set
+# CONFIG_GPIO_SYSFS is not set
+# Memory mapped GPIO expanders:
+# I2C GPIO expanders:
+# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_PCA953X is not set
+# CONFIG_GPIO_PCF857X is not set
+# PCI GPIO expanders:
+# CONFIG_GPIO_BT8XX is not set
+# CONFIG_GPIO_LANGWELL is not set
+# SPI GPIO expanders:
+# CONFIG_GPIO_MAX7301 is not set
+# CONFIG_GPIO_MCP23S08 is not set
+# CONFIG_GPIO_MC33880 is not set
+# AC97 GPIO expanders:
+# CONFIG_THERMAL is not set
+# Watchdog Device Drivers
+CONFIG_ORION_WATCHDOG=m
+# PCI-based Watchdog Cards
+# USB-based Watchdog Cards
+CONFIG_SSB_POSSIBLE=y
+# Multifunction device drivers
+# CONFIG_MFD_CORE is not set
+# CONFIG_MFD_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_TWL4030_CORE is not set
+# CONFIG_MFD_TMIO is not set
+# CONFIG_PMIC_DA903X is not set
+# CONFIG_MFD_MC13783 is not set
+# CONFIG_EZX_PCAP is not set
+# Multimedia core support
+CONFIG_VIDEO_V4L2_COMMON=m
+CONFIG_VIDEO_MEDIA=m
+# Multimedia drivers
+CONFIG_MEDIA_TUNER=m
+CONFIG_MEDIA_TUNER_CUSTOMISE=y
+CONFIG_MEDIA_TUNER_SIMPLE=m
+CONFIG_MEDIA_TUNER_TDA8290=m
+CONFIG_MEDIA_TUNER_TDA827X=m
+CONFIG_MEDIA_TUNER_TDA18271=m
+CONFIG_MEDIA_TUNER_TDA9887=m
+CONFIG_MEDIA_TUNER_TEA5761=m
+CONFIG_MEDIA_TUNER_TEA5767=m
+CONFIG_MEDIA_TUNER_MT20XX=m
+CONFIG_MEDIA_TUNER_MT2060=m
+CONFIG_MEDIA_TUNER_MT2266=m
+CONFIG_MEDIA_TUNER_MT2131=m
+CONFIG_MEDIA_TUNER_QT1010=m
+CONFIG_MEDIA_TUNER_XC2028=m
+CONFIG_MEDIA_TUNER_XC5000=m
+CONFIG_MEDIA_TUNER_MXL5005S=m
+CONFIG_MEDIA_TUNER_MXL5007T=m
+CONFIG_MEDIA_TUNER_MC44S803=m
+CONFIG_VIDEO_V4L1=m
+CONFIG_VIDEOBUF_GEN=m
+CONFIG_VIDEOBUF_VMALLOC=m
+CONFIG_VIDEOBUF_DVB=m
+CONFIG_VIDEO_IR=m
+CONFIG_VIDEO_TVEEPROM=m
+CONFIG_VIDEO_IR_I2C=m
+CONFIG_VIDEO_MSP3400=m
+CONFIG_VIDEO_CS53L32A=m
+CONFIG_VIDEO_M52790=m
+CONFIG_VIDEO_WM8775=m
+CONFIG_VIDEO_WM8739=m
+CONFIG_VIDEO_VP27SMPX=m
+CONFIG_VIDEO_MT9V011=m
+CONFIG_VIDEO_SAA711X=m
+CONFIG_VIDEO_SAA717X=m
+CONFIG_VIDEO_TVP5150=m
+CONFIG_VIDEO_CX25840=m
+CONFIG_VIDEO_CX2341X=m
+CONFIG_VIDEO_SAA7127=m
+CONFIG_VIDEO_UPD64031A=m
+CONFIG_VIDEO_UPD64083=m
+CONFIG_VIDEO_USBVIDEO=m
+# CONFIG_TTPCI_EEPROM is not set
+# Supported BT878 Adapters
+# Supported Pluto2 Adapters
+# Supported SDMC DM1105 Adapters
+# Supported Earthsoft PT1 Adapters
+# Supported DVB Frontends
+CONFIG_DVB_ZL10353=m
+CONFIG_DVB_TDA10048=m
+CONFIG_DVB_TDA10023=m
+CONFIG_DVB_LGDT330X=m
+CONFIG_DVB_S5H1409=m
+CONFIG_DVB_S5H1411=m
+# CONFIG_VGASTATE is not set
+# CONFIG_FB_DDC is not set
+# CONFIG_FB_BOOT_VESA_SUPPORT is not set
+# CONFIG_FB_CFB_FILLRECT is not set
+# CONFIG_FB_CFB_COPYAREA is not set
+CONFIG_FB_CFB_IMAGEBLIT=m
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_SYS_FOPS is not set
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# Frame buffer hardware drivers
+CONFIG_FB_UDLFB=m
+# Display device support
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+# CONFIG_SOUND_OSS_CORE is not set
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+CONFIG_SND_HWDEP=m
+CONFIG_SND_RAWMIDI=m
+CONFIG_SND_SUPPORT_OLD_API=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+CONFIG_SND_RAWMIDI_SEQ=m
+# CONFIG_SND_OPL3_LIB_SEQ is not set
+# CONFIG_SND_OPL4_LIB_SEQ is not set
+# CONFIG_SND_SBAWE_SEQ is not set
+# CONFIG_SND_EMU10K1_SEQ is not set
+CONFIG_SND_ARM=y
+CONFIG_SND_SPI=y
+# USB Input Devices
+# Special HID drivers
+CONFIG_HID_A4TECH=y
+CONFIG_HID_APPLE=y
+CONFIG_HID_BELKIN=y
+CONFIG_HID_CHERRY=y
+CONFIG_HID_CHICONY=y
+CONFIG_HID_CYPRESS=y
+CONFIG_HID_DRAGONRISE=y
+CONFIG_HID_EZKEY=y
+CONFIG_HID_KYE=y
+CONFIG_HID_GYRATION=y
+CONFIG_HID_TWINHAN=y
+CONFIG_HID_KENSINGTON=y
+CONFIG_HID_LOGITECH=y
+CONFIG_HID_MICROSOFT=y
+CONFIG_HID_MONTEREY=y
+CONFIG_HID_NTRIG=y
+CONFIG_HID_PANTHERLORD=y
+CONFIG_HID_PETALYNX=y
+CONFIG_HID_SAMSUNG=y
+CONFIG_HID_SONY=y
+CONFIG_HID_SUNPLUS=y
+CONFIG_HID_GREENASIA=y
+CONFIG_HID_SMARTJOYPLUS=y
+CONFIG_HID_TOPSEED=y
+CONFIG_HID_THRUSTMASTER=y
+CONFIG_HID_ZEROPLUS=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB_DEVICE_CLASS=y
+# CONFIG_USB_OTG is not set
+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
+# also be needed; see USB_STORAGE Help for more info
+# OTG and related infrastructure
+# CONFIG_USB_GPIO_VBUS is not set
+# MMC/SD/SDIO Card Drivers
+# MMC/SD/SDIO Host Controller Drivers
+# CONFIG_MMC_AT91 is not set
+# CONFIG_MMC_ATMELMCI is not set
+CONFIG_MMC_MVSDIO=y
+# CONFIG_MMC_SPI is not set
+# LED drivers
+CONFIG_LEDS_GPIO=y
+CONFIG_LEDS_GPIO_PLATFORM=y
+# CONFIG_LEDS_DAC124S085 is not set
+# LED Triggers
+CONFIG_LEDS_TRIGGER_GPIO=m
+# iptables trigger is under Netfilter config (LED target)
+CONFIG_RTC_LIB=y
+# RTC interfaces
+# I2C RTC drivers
+CONFIG_RTC_DRV_S35390A=y
+# SPI RTC drivers
+# CONFIG_RTC_DRV_M41T94 is not set
+# CONFIG_RTC_DRV_DS1305 is not set
+# CONFIG_RTC_DRV_DS1390 is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+# CONFIG_RTC_DRV_R9701 is not set
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_DS3234 is not set
+# CONFIG_RTC_DRV_PCF2123 is not set
+# Platform RTC drivers
+# on-CPU RTC drivers
+CONFIG_RTC_DRV_MV=y
+# DMA Devices
+CONFIG_MV_XOR=y
+# DMA Clients
+# TI VLYNQ
+# CONFIG_EXT4_DEBUG is not set
+# CONFIG_JBD2_DEBUG is not set
+CONFIG_FS_POSIX_ACL=y
+CONFIG_FILE_LOCKING=y
+CONFIG_AUTOFS_FS=m
+# Caches
+CONFIG_UDF_NLS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_SYSFS=y
+# CONFIG_ADFS_FS is not set
+CONFIG_ROOT_NFS=y
+CONFIG_NFS_COMMON=y
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
+CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0
+# CONFIG_DEBUG_OBJECTS is not set
+# CONFIG_SLUB_DEBUG_ON is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_WRITECOUNT is not set
+CONFIG_DEBUG_MEMORY_INIT=y
+# CONFIG_DEBUG_SG is not set
+# CONFIG_DEBUG_NOTIFIERS is not set
+# CONFIG_DEBUG_CREDENTIALS is not set
+# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_SYSCTL_SYSCALL_CHECK=y
+CONFIG_HAVE_FUNCTION_TRACER=y
+CONFIG_RING_BUFFER=y
+CONFIG_RING_BUFFER_ALLOW_SWAP=y
+CONFIG_TRACING_SUPPORT=y
+# CONFIG_PREEMPT is not set
+# CONFIG_PREEMPT_DEBUG is not set
+# CONFIG_PREEMPT_TRACER is not set
+# CONFIG_ENABLE_DEFAULT_TRACERS is not set
+CONFIG_BRANCH_PROFILE_NONE=y
+# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set
+# CONFIG_PROFILE_ALL_BRANCHES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+CONFIG_ARM_UNWIND=y
+CONFIG_DEBUG_USER=y
+# CONFIG_DEBUG_ERRORS is not set
+# CONFIG_DEBUG_STACK_USAGE is not set
+# CONFIG_DEBUG_LL is not set
+CONFIG_XOR_BLOCKS=m
+CONFIG_ASYNC_CORE=m
+CONFIG_ASYNC_MEMCPY=m
+CONFIG_ASYNC_XOR=m
+CONFIG_ASYNC_PQ=m
+CONFIG_ASYNC_RAID6_RECOV=m
+# Crypto core or helper
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_ALGAPI2=y
+CONFIG_CRYPTO_AEAD=m
+CONFIG_CRYPTO_AEAD2=y
+CONFIG_CRYPTO_BLKCIPHER2=y
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_HASH2=y
+CONFIG_CRYPTO_RNG=m
+CONFIG_CRYPTO_RNG2=y
+CONFIG_CRYPTO_PCOMP=y
+CONFIG_CRYPTO_MANAGER2=y
+CONFIG_CRYPTO_WORKQUEUE=y
+CONFIG_CRYPTO_CRYPTD=m
+# Authenticated Encryption with Associated Data
+# Block modes
+# Hash modes
+# Digest
+# Ciphers
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+# Compression
+# Random Number Generation
+CONFIG_CRYPTO_DEV_MV_CESA=m
+# CONFIG_BINARY_PRINTF is not set
+CONFIG_BITREVERSE=y
+CONFIG_GENERIC_FIND_LAST_BIT=y
+CONFIG_LZO_COMPRESS=y
+CONFIG_LZO_DECOMPRESS=y
+CONFIG_DECOMPRESS_GZIP=y
+CONFIG_DECOMPRESS_BZIP2=y
+CONFIG_DECOMPRESS_LZMA=y
+CONFIG_TEXTSEARCH=y
+CONFIG_TEXTSEARCH_KMP=m
+CONFIG_TEXTSEARCH_BM=m
+CONFIG_TEXTSEARCH_FSM=m
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
+CONFIG_NLATTR=y
+#
+# CONFIG_ATAGS_PROC is not set
+# CONFIG_MTD_AFS_PARTS is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_IMPA7 is not set
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SST25L is not set
+# CONFIG_MTD_NAND_GPIO is not set
+# CONFIG_MTD_NAND_ORION is not set
+# CONFIG_SGI_IOC4 is not set
+# CONFIG_EEPROM_AT25 is not set
+# CONFIG_MDIO_GPIO is not set
+# CONFIG_P54_SPI is not set
+# CONFIG_MOUSE_GPIO is not set
+# CONFIG_TOUCHSCREEN_ADS7846 is not set
+# CONFIG_TOUCHSCREEN_AD7877 is not set
+# CONFIG_SPI_BUTTERFLY is not set
+# CONFIG_SPI_LM70_LLP is not set
+# CONFIG_GPIO_WM831X is not set
+# CONFIG_SENSORS_ADCXX is not set
+# CONFIG_SENSORS_LM70 is not set
+# CONFIG_SENSORS_MAX1111 is not set
+# CONFIG_SENSORS_LIS3_SPI is not set
+# CONFIG_UCB1400_CORE is not set
+# CONFIG_MEDIA_TUNER_MAX2165 is not set
+# CONFIG_MEDIA_TUNER_TDA18218 is not set
+# CONFIG_LCD_LMS283GF05 is not set
+# CONFIG_LCD_LTV350QV is not set
+# CONFIG_LCD_TDO24M is not set
+# CONFIG_LCD_VGG2432A4 is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_SCSI_QLA_ISCSI is not set
+# CONFIG_USB_ISP1362_HCD is not set
+# CONFIG_SND_ALI5451 is not set
+# CONFIG_FB_SAVAGE is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_DRM_RADEON is not set
+# CONFIG_CRYPTO_SIGNATURE is not set
+# CONFIG_CRYPTO_SIGNATURE_DSA is not set
diff -ruN kernel-2.6.32-220.el6.src.rpm-rpmbuild/SOURCES/config-arm-kirkwood-generic-rhel kernel-2.6.32-220.el6.kirkwood.src.rpm-rpmbuild/SOURCES/config-arm-kirkwood-generic-rhel
--- kernel-2.6.32-220.el6.src.rpm-rpmbuild/SOURCES/config-arm-kirkwood-generic-rhel	1970-01-01 01:00:00.000000000 +0100
+++ kernel-2.6.32-220.el6.kirkwood.src.rpm-rpmbuild/SOURCES/config-arm-kirkwood-generic-rhel	2011-12-21 14:50:04.000000000 +0000
@@ -0,0 +1,645 @@
+# Linux kernel version: 2.6.32.45
+# Sat Aug 20 08:14:46 2011
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_HAVE_LATENCYTOP_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+CONFIG_CONSTRUCTORS=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SYSVIPC_SYSCTL=y
+# RCU Subsystem
+CONFIG_TREE_RCU=y
+# CONFIG_TREE_PREEMPT_RCU is not set
+CONFIG_RCU_FANOUT=32
+# CONFIG_TREE_RCU_TRACE is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_NAMESPACES=y
+CONFIG_RD_GZIP=y
+CONFIG_RD_BZIP2=y
+CONFIG_RD_LZMA=y
+CONFIG_ANON_INODES=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_AIO=y
+# Kernel Performance Events And Counters
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_PCI_QUIRKS=y
+CONFIG_SLUB_DEBUG=y
+CONFIG_COMPAT_BRK=y
+# CONFIG_SLAB is not set
+# CONFIG_SLOB is not set
+CONFIG_HAVE_OPROFILE=y
+CONFIG_KRETPROBES=y
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+# GCOV-based kernel profiling
+# CONFIG_SLOW_WORK_DEBUG is not set
+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+CONFIG_BASE_SMALL=0
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+CONFIG_BLOCK=y
+# IO Schedulers
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="cfq"
+CONFIG_FREEZER=y
+# System Type
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_GEMINI is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_STMP3XXX is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_NOMADIK is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+CONFIG_ARCH_KIRKWOOD=y
+# CONFIG_ARCH_LOKI is not set
+# CONFIG_ARCH_MV78XX0 is not set
+# CONFIG_ARCH_ORION5X is not set
+# CONFIG_ARCH_MMP is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_W90X900 is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_MSM is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_S3C64XX is not set
+# CONFIG_ARCH_S5PC1XX is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_U300 is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_ARCH_BCMRING is not set
+# Marvell Kirkwood Implementations
+CONFIG_MACH_DB88F6281_BP=y
+CONFIG_MACH_RD88F6192_NAS=y
+CONFIG_MACH_RD88F6281=y
+CONFIG_MACH_MV88F6281GTW_GE=y
+CONFIG_MACH_SHEEVAPLUG=y
+CONFIG_MACH_TS219=y
+CONFIG_MACH_OPENRD_BASE=y
+CONFIG_PLAT_ORION=y
+# Processor Type
+CONFIG_CPU_32=y
+CONFIG_CPU_FEROCEON=y
+CONFIG_CPU_FEROCEON_OLD_ID=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_PABRT_LEGACY=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_COPY_FEROCEON=y
+CONFIG_CPU_TLB_FEROCEON=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+# Processor Features
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+CONFIG_OUTER_CACHE=y
+CONFIG_CACHE_FEROCEON_L2=y
+# CONFIG_CACHE_FEROCEON_L2_WRITETHROUGH is not set
+CONFIG_ARM_L1_CACHE_SHIFT=5
+# Bus support
+CONFIG_PCI_SYSCALL=y
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+# Kernel Features
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_VMSPLIT_3G=y
+# CONFIG_VMSPLIT_2G is not set
+# CONFIG_VMSPLIT_1G is not set
+CONFIG_PAGE_OFFSET=0xC0000000
+CONFIG_HZ=100
+CONFIG_AEABI=y
+# CONFIG_OABI_COMPAT is not set
+# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
+# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
+# CONFIG_HIGHMEM is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_PAGEFLAGS_EXTENDED=y
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_PHYS_ADDR_T_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=0
+CONFIG_VIRT_TO_BUS=y
+CONFIG_HAVE_MLOCK=y
+CONFIG_HAVE_MLOCKED_PAGE_BIT=y
+CONFIG_ALIGNMENT_TRAP=y
+CONFIG_UACCESS_WITH_MEMCPY=y
+# Boot options
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE=""
+# CONFIG_XIP_KERNEL is not set
+# CPU Power Management
+CONFIG_CPU_IDLE=y
+CONFIG_CPU_IDLE_GOV_LADDER=y
+CONFIG_CPU_IDLE_GOV_MENU=y
+# Floating point emulation
+# At least one emulation must be selected
+# CONFIG_VFP is not set
+# Userspace binary formats
+CONFIG_HAVE_AOUT=y
+# Power management options
+CONFIG_PM=y
+CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND=y
+CONFIG_SUSPEND_FREEZER=y
+# CONFIG_APM_EMULATION is not set
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+CONFIG_XFRM_IPCOMP=m
+CONFIG_ASK_IP_FIB_HASH=y
+# CONFIG_IP_FIB_TRIE is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+# CONFIG_IP_PNP_RARP is not set
+CONFIG_INET_XFRM_TUNNEL=m
+CONFIG_INET_TCP_DIAG=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_IPV6_NDISC_NODETYPE=y
+# CONFIG_NETWORK_SECMARK is not set
+# Core Netfilter Configuration
+CONFIG_NF_CT_PROTO_GRE=m
+CONFIG_NETFILTER_XT_TARGET_HL=m
+CONFIG_NETFILTER_XT_MATCH_RECENT_PROC_COMPAT=y
+CONFIG_NF_DEFRAG_IPV4=m
+CONFIG_NF_CONNTRACK_PROC_COMPAT=y
+CONFIG_NF_NAT_NEEDED=y
+CONFIG_NF_NAT_PROTO_DCCP=m
+CONFIG_NF_NAT_PROTO_GRE=m
+CONFIG_NF_NAT_PROTO_UDPLITE=m
+CONFIG_NF_NAT_PROTO_SCTP=m
+CONFIG_NF_NAT_FTP=m
+CONFIG_NF_NAT_IRC=m
+CONFIG_NF_NAT_TFTP=m
+CONFIG_NF_NAT_AMANDA=m
+CONFIG_NF_NAT_PPTP=m
+CONFIG_NF_NAT_H323=m
+CONFIG_NF_NAT_SIP=m
+CONFIG_STP=m
+# CONFIG_NET_DSA_TAG_DSA is not set
+CONFIG_NET_DSA_TAG_EDSA=y
+# CONFIG_NET_DSA_TAG_TRAILER is not set
+CONFIG_NET_DSA_MV88E6XXX=y
+# CONFIG_NET_DSA_MV88E6XXX_NEED_PPU is not set
+# Queueing/Scheduling
+# Classification
+CONFIG_NET_SCH_FIFO=y
+CONFIG_CFG80211_DEFAULT_PS_VALUE=1
+CONFIG_WIRELESS_OLD_REGULATORY=y
+CONFIG_MAC80211_HAS_RC=y
+CONFIG_FIRMWARE_IN_KERNEL=y
+# CONFIG_SYS_HYPERVISOR is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+# CONFIG_MG_DISK is not set
+CONFIG_HAVE_IDE=y
+CONFIG_SCSI_DMA=y
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_WAIT_SCAN=m
+# SCSI Transports
+# CONFIG_ATA_NONSTANDARD is not set
+CONFIG_MD_RAID6_PQ=m
+# You can enable one or both FireWire driver stacks.
+# See the help texts for more information.
+# MII PHY device drivers
+# CONFIG_AX88796 is not set
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_ENC28J60 is not set
+# CONFIG_SMC911X is not set
+# CONFIG_SMSC911X is not set
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
+# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
+# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
+# CONFIG_KS8851 is not set
+CONFIG_MV643XX_ETH=y
+# CONFIG_TR is not set
+# CONFIG_LIBERTAS_SPI is not set
+# Enable WiMAX (Networking options) to see the WiMAX drivers
+# USB Network Adapters
+CONFIG_USB_NET_CDCETHER=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_SLHC=m
+# CONFIG_NETPOLL is not set
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_KEYBOARD_GPIO=y
+# Hardware I/O ports
+CONFIG_SERIO_LIBPS2=y
+CONFIG_CONSOLE_TRANSLATIONS=y
+CONFIG_SERIAL_8250_PCI=y
+# CONFIG_SERIAL_MAX3100 is not set
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=16
+CONFIG_DEVPORT=y
+CONFIG_I2C_BOARDINFO=y
+# PC SMBus host controller drivers
+# I2C system bus drivers (mostly embedded / system-on-chip)
+# CONFIG_I2C_GPIO is not set
+CONFIG_I2C_MV64XXX=y
+# External I2C/SMBus adapter drivers
+# Graphics adapter I2C/DDC channel drivers
+# Other I2C/SMBus bus drivers
+# Miscellaneous I2C Chip support
+CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+# SPI Master Controller Drivers
+# CONFIG_SPI_BITBANG is not set
+# CONFIG_SPI_GPIO is not set
+CONFIG_SPI_ORION=y
+# SPI Protocol Masters
+# CONFIG_SPI_SPIDEV is not set
+# CONFIG_SPI_TLE62X0 is not set
+# PPS support
+CONFIG_ARCH_REQUIRE_GPIOLIB=y
+CONFIG_GPIOLIB=y
+# CONFIG_DEBUG_GPIO is not set
+# CONFIG_GPIO_SYSFS is not set
+# Memory mapped GPIO expanders:
+# I2C GPIO expanders:
+# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_PCA953X is not set
+# CONFIG_GPIO_PCF857X is not set
+# PCI GPIO expanders:
+# CONFIG_GPIO_BT8XX is not set
+# CONFIG_GPIO_LANGWELL is not set
+# SPI GPIO expanders:
+# CONFIG_GPIO_MAX7301 is not set
+# CONFIG_GPIO_MCP23S08 is not set
+# CONFIG_GPIO_MC33880 is not set
+# AC97 GPIO expanders:
+# CONFIG_THERMAL is not set
+# Watchdog Device Drivers
+CONFIG_ORION_WATCHDOG=m
+# PCI-based Watchdog Cards
+# USB-based Watchdog Cards
+CONFIG_SSB_POSSIBLE=y
+# Multifunction device drivers
+# CONFIG_MFD_CORE is not set
+# CONFIG_MFD_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_TWL4030_CORE is not set
+# CONFIG_MFD_TMIO is not set
+# CONFIG_PMIC_DA903X is not set
+# CONFIG_MFD_MC13783 is not set
+# CONFIG_EZX_PCAP is not set
+# Multimedia core support
+CONFIG_VIDEO_V4L2_COMMON=m
+CONFIG_VIDEO_MEDIA=m
+# Multimedia drivers
+CONFIG_MEDIA_TUNER=m
+CONFIG_MEDIA_TUNER_CUSTOMISE=y
+CONFIG_MEDIA_TUNER_SIMPLE=m
+CONFIG_MEDIA_TUNER_TDA8290=m
+CONFIG_MEDIA_TUNER_TDA827X=m
+CONFIG_MEDIA_TUNER_TDA18271=m
+CONFIG_MEDIA_TUNER_TDA9887=m
+CONFIG_MEDIA_TUNER_TEA5761=m
+CONFIG_MEDIA_TUNER_TEA5767=m
+CONFIG_MEDIA_TUNER_MT20XX=m
+CONFIG_MEDIA_TUNER_MT2060=m
+CONFIG_MEDIA_TUNER_MT2266=m
+CONFIG_MEDIA_TUNER_MT2131=m
+CONFIG_MEDIA_TUNER_QT1010=m
+CONFIG_MEDIA_TUNER_XC2028=m
+CONFIG_MEDIA_TUNER_XC5000=m
+CONFIG_MEDIA_TUNER_MXL5005S=m
+CONFIG_MEDIA_TUNER_MXL5007T=m
+CONFIG_MEDIA_TUNER_MC44S803=m
+CONFIG_VIDEO_V4L1=m
+CONFIG_VIDEOBUF_GEN=m
+CONFIG_VIDEOBUF_VMALLOC=m
+CONFIG_VIDEOBUF_DVB=m
+CONFIG_VIDEO_IR=m
+CONFIG_VIDEO_TVEEPROM=m
+CONFIG_VIDEO_IR_I2C=m
+CONFIG_VIDEO_MSP3400=m
+CONFIG_VIDEO_CS53L32A=m
+CONFIG_VIDEO_M52790=m
+CONFIG_VIDEO_WM8775=m
+CONFIG_VIDEO_WM8739=m
+CONFIG_VIDEO_VP27SMPX=m
+CONFIG_VIDEO_MT9V011=m
+CONFIG_VIDEO_SAA711X=m
+CONFIG_VIDEO_SAA717X=m
+CONFIG_VIDEO_TVP5150=m
+CONFIG_VIDEO_CX25840=m
+CONFIG_VIDEO_CX2341X=m
+CONFIG_VIDEO_SAA7127=m
+CONFIG_VIDEO_UPD64031A=m
+CONFIG_VIDEO_UPD64083=m
+CONFIG_VIDEO_USBVIDEO=m
+# CONFIG_TTPCI_EEPROM is not set
+# Supported BT878 Adapters
+# Supported Pluto2 Adapters
+# Supported SDMC DM1105 Adapters
+# Supported Earthsoft PT1 Adapters
+# Supported DVB Frontends
+CONFIG_DVB_ZL10353=m
+CONFIG_DVB_TDA10048=m
+CONFIG_DVB_TDA10023=m
+CONFIG_DVB_LGDT330X=m
+CONFIG_DVB_S5H1409=m
+CONFIG_DVB_S5H1411=m
+# CONFIG_VGASTATE is not set
+# CONFIG_FB_DDC is not set
+# CONFIG_FB_BOOT_VESA_SUPPORT is not set
+# CONFIG_FB_CFB_FILLRECT is not set
+# CONFIG_FB_CFB_COPYAREA is not set
+CONFIG_FB_CFB_IMAGEBLIT=m
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_SYS_FOPS is not set
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# Frame buffer hardware drivers
+CONFIG_FB_UDLFB=m
+# Display device support
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+# CONFIG_SOUND_OSS_CORE is not set
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+CONFIG_SND_HWDEP=m
+CONFIG_SND_RAWMIDI=m
+CONFIG_SND_SUPPORT_OLD_API=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+CONFIG_SND_RAWMIDI_SEQ=m
+# CONFIG_SND_OPL3_LIB_SEQ is not set
+# CONFIG_SND_OPL4_LIB_SEQ is not set
+# CONFIG_SND_SBAWE_SEQ is not set
+# CONFIG_SND_EMU10K1_SEQ is not set
+CONFIG_SND_ARM=y
+CONFIG_SND_SPI=y
+# USB Input Devices
+# Special HID drivers
+CONFIG_HID_A4TECH=y
+CONFIG_HID_APPLE=y
+CONFIG_HID_BELKIN=y
+CONFIG_HID_CHERRY=y
+CONFIG_HID_CHICONY=y
+CONFIG_HID_CYPRESS=y
+CONFIG_HID_DRAGONRISE=y
+CONFIG_HID_EZKEY=y
+CONFIG_HID_KYE=y
+CONFIG_HID_GYRATION=y
+CONFIG_HID_TWINHAN=y
+CONFIG_HID_KENSINGTON=y
+CONFIG_HID_LOGITECH=y
+CONFIG_HID_MICROSOFT=y
+CONFIG_HID_MONTEREY=y
+CONFIG_HID_NTRIG=y
+CONFIG_HID_PANTHERLORD=y
+CONFIG_HID_PETALYNX=y
+CONFIG_HID_SAMSUNG=y
+CONFIG_HID_SONY=y
+CONFIG_HID_SUNPLUS=y
+CONFIG_HID_GREENASIA=y
+CONFIG_HID_SMARTJOYPLUS=y
+CONFIG_HID_TOPSEED=y
+CONFIG_HID_THRUSTMASTER=y
+CONFIG_HID_ZEROPLUS=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB_DEVICE_CLASS=y
+# CONFIG_USB_OTG is not set
+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
+# also be needed; see USB_STORAGE Help for more info
+# OTG and related infrastructure
+# CONFIG_USB_GPIO_VBUS is not set
+# MMC/SD/SDIO Card Drivers
+# MMC/SD/SDIO Host Controller Drivers
+# CONFIG_MMC_AT91 is not set
+# CONFIG_MMC_ATMELMCI is not set
+CONFIG_MMC_MVSDIO=y
+# CONFIG_MMC_SPI is not set
+# LED drivers
+CONFIG_LEDS_GPIO=y
+CONFIG_LEDS_GPIO_PLATFORM=y
+# CONFIG_LEDS_DAC124S085 is not set
+# LED Triggers
+CONFIG_LEDS_TRIGGER_GPIO=m
+# iptables trigger is under Netfilter config (LED target)
+CONFIG_RTC_LIB=y
+# RTC interfaces
+# I2C RTC drivers
+CONFIG_RTC_DRV_S35390A=y
+# SPI RTC drivers
+# CONFIG_RTC_DRV_M41T94 is not set
+# CONFIG_RTC_DRV_DS1305 is not set
+# CONFIG_RTC_DRV_DS1390 is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+# CONFIG_RTC_DRV_R9701 is not set
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_DS3234 is not set
+# CONFIG_RTC_DRV_PCF2123 is not set
+# Platform RTC drivers
+# on-CPU RTC drivers
+CONFIG_RTC_DRV_MV=y
+# DMA Devices
+CONFIG_MV_XOR=y
+# DMA Clients
+# TI VLYNQ
+# CONFIG_EXT4_DEBUG is not set
+# CONFIG_JBD2_DEBUG is not set
+CONFIG_FS_POSIX_ACL=y
+CONFIG_FILE_LOCKING=y
+CONFIG_AUTOFS_FS=m
+# Caches
+CONFIG_UDF_NLS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_SYSFS=y
+# CONFIG_ADFS_FS is not set
+CONFIG_ROOT_NFS=y
+CONFIG_NFS_COMMON=y
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
+CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0
+# CONFIG_DEBUG_OBJECTS is not set
+# CONFIG_SLUB_DEBUG_ON is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_WRITECOUNT is not set
+CONFIG_DEBUG_MEMORY_INIT=y
+# CONFIG_DEBUG_SG is not set
+# CONFIG_DEBUG_NOTIFIERS is not set
+# CONFIG_DEBUG_CREDENTIALS is not set
+# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_SYSCTL_SYSCALL_CHECK=y
+CONFIG_HAVE_FUNCTION_TRACER=y
+CONFIG_RING_BUFFER=y
+CONFIG_RING_BUFFER_ALLOW_SWAP=y
+CONFIG_TRACING_SUPPORT=y
+# CONFIG_PREEMPT is not set
+# CONFIG_PREEMPT_DEBUG is not set
+# CONFIG_PREEMPT_TRACER is not set
+# CONFIG_ENABLE_DEFAULT_TRACERS is not set
+CONFIG_BRANCH_PROFILE_NONE=y
+# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set
+# CONFIG_PROFILE_ALL_BRANCHES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+CONFIG_ARM_UNWIND=y
+CONFIG_DEBUG_USER=y
+# CONFIG_DEBUG_ERRORS is not set
+# CONFIG_DEBUG_STACK_USAGE is not set
+# CONFIG_DEBUG_LL is not set
+CONFIG_XOR_BLOCKS=m
+CONFIG_ASYNC_CORE=m
+CONFIG_ASYNC_MEMCPY=m
+CONFIG_ASYNC_XOR=m
+CONFIG_ASYNC_PQ=m
+CONFIG_ASYNC_RAID6_RECOV=m
+# Crypto core or helper
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_ALGAPI2=y
+CONFIG_CRYPTO_AEAD=m
+CONFIG_CRYPTO_AEAD2=y
+CONFIG_CRYPTO_BLKCIPHER2=y
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_HASH2=y
+CONFIG_CRYPTO_RNG=m
+CONFIG_CRYPTO_RNG2=y
+CONFIG_CRYPTO_PCOMP=y
+CONFIG_CRYPTO_MANAGER2=y
+CONFIG_CRYPTO_WORKQUEUE=y
+CONFIG_CRYPTO_CRYPTD=m
+# Authenticated Encryption with Associated Data
+# Block modes
+# Hash modes
+# Digest
+# Ciphers
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+# Compression
+# Random Number Generation
+CONFIG_CRYPTO_DEV_MV_CESA=m
+# CONFIG_BINARY_PRINTF is not set
+CONFIG_BITREVERSE=y
+CONFIG_GENERIC_FIND_LAST_BIT=y
+CONFIG_LZO_COMPRESS=y
+CONFIG_LZO_DECOMPRESS=y
+CONFIG_DECOMPRESS_GZIP=y
+CONFIG_DECOMPRESS_BZIP2=y
+CONFIG_DECOMPRESS_LZMA=y
+CONFIG_TEXTSEARCH=y
+CONFIG_TEXTSEARCH_KMP=m
+CONFIG_TEXTSEARCH_BM=m
+CONFIG_TEXTSEARCH_FSM=m
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
+CONFIG_NLATTR=y
+#
+# CONFIG_ATAGS_PROC is not set
+# CONFIG_MTD_AFS_PARTS is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_IMPA7 is not set
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SST25L is not set
+# CONFIG_MTD_NAND_GPIO is not set
+# CONFIG_MTD_NAND_ORION is not set
+# CONFIG_SGI_IOC4 is not set
+# CONFIG_EEPROM_AT25 is not set
+# CONFIG_MDIO_GPIO is not set
+# CONFIG_P54_SPI is not set
+# CONFIG_MOUSE_GPIO is not set
+# CONFIG_TOUCHSCREEN_ADS7846 is not set
+# CONFIG_TOUCHSCREEN_AD7877 is not set
+# CONFIG_SPI_BUTTERFLY is not set
+# CONFIG_SPI_LM70_LLP is not set
+# CONFIG_GPIO_WM831X is not set
+# CONFIG_SENSORS_ADCXX is not set
+# CONFIG_SENSORS_LM70 is not set
+# CONFIG_SENSORS_MAX1111 is not set
+# CONFIG_SENSORS_LIS3_SPI is not set
+# CONFIG_UCB1400_CORE is not set
+# CONFIG_MEDIA_TUNER_MAX2165 is not set
+# CONFIG_MEDIA_TUNER_TDA18218 is not set
+# CONFIG_LCD_LMS283GF05 is not set
+# CONFIG_LCD_LTV350QV is not set
+# CONFIG_LCD_TDO24M is not set
+# CONFIG_LCD_VGG2432A4 is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_SCSI_QLA_ISCSI is not set
+# CONFIG_USB_ISP1362_HCD is not set
+# CONFIG_SND_ALI5451 is not set
+# CONFIG_FB_SAVAGE is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_DRM_RADEON is not set
+# CONFIG_CRYPTO_SIGNATURE is not set
+# CONFIG_CRYPTO_SIGNATURE_DSA is not set
diff -ruN kernel-2.6.32-220.el6.src.rpm-rpmbuild/SOURCES/config-arm-kirkwood-nodebug kernel-2.6.32-220.el6.kirkwood.src.rpm-rpmbuild/SOURCES/config-arm-kirkwood-nodebug
--- kernel-2.6.32-220.el6.src.rpm-rpmbuild/SOURCES/config-arm-kirkwood-nodebug	1970-01-01 01:00:00.000000000 +0100
+++ kernel-2.6.32-220.el6.kirkwood.src.rpm-rpmbuild/SOURCES/config-arm-kirkwood-nodebug	2011-12-19 02:02:46.000000000 +0000
@@ -0,0 +1 @@
+
diff -ruN kernel-2.6.32-220.el6.src.rpm-rpmbuild/SOURCES/config-arm-kirkwood-nodebug-rhel kernel-2.6.32-220.el6.kirkwood.src.rpm-rpmbuild/SOURCES/config-arm-kirkwood-nodebug-rhel
--- kernel-2.6.32-220.el6.src.rpm-rpmbuild/SOURCES/config-arm-kirkwood-nodebug-rhel	1970-01-01 01:00:00.000000000 +0100
+++ kernel-2.6.32-220.el6.kirkwood.src.rpm-rpmbuild/SOURCES/config-arm-kirkwood-nodebug-rhel	2011-12-19 02:03:04.000000000 +0000
@@ -0,0 +1 @@
+
diff -ruN kernel-2.6.32-220.el6.src.rpm-rpmbuild/SOURCES/config-generic kernel-2.6.32-220.el6.kirkwood.src.rpm-rpmbuild/SOURCES/config-generic
--- kernel-2.6.32-220.el6.src.rpm-rpmbuild/SOURCES/config-generic	2011-01-13 12:29:51.000000000 +0000
+++ kernel-2.6.32-220.el6.kirkwood.src.rpm-rpmbuild/SOURCES/config-generic	2011-12-19 02:32:04.000000000 +0000
@@ -2,7 +2,6 @@
 # Automatically generated make config: don't edit
 #
 CONFIG_MMU=y
-CONFIG_SMP=y
 CONFIG_HOTPLUG_CPU=y
 CONFIG_LOCALVERSION=""
 
diff -ruN kernel-2.6.32-220.el6.src.rpm-rpmbuild/SOURCES/config-generic-rhel kernel-2.6.32-220.el6.kirkwood.src.rpm-rpmbuild/SOURCES/config-generic-rhel
--- kernel-2.6.32-220.el6.src.rpm-rpmbuild/SOURCES/config-generic-rhel	2011-08-23 18:35:13.000000000 +0100
+++ kernel-2.6.32-220.el6.kirkwood.src.rpm-rpmbuild/SOURCES/config-generic-rhel	2011-12-21 15:27:21.000000000 +0000
@@ -112,9 +112,9 @@
 CONFIG_NETFILTER_XT_SET=m
 CONFIG_MODULE_SIG=y
 CONFIG_CRYPTO_MPILIB=y
-CONFIG_CRYPTO_SIGNATURE_DSA=y
+# CONFIG_CRYPTO_SIGNATURE_DSA is not set
 CONFIG_MODULE_VERIFY_ELF=y
-CONFIG_CRYPTO_SIGNATURE=y
+# CONFIG_CRYPTO_SIGNATURE is not set
 CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
 CONFIG_USB_GSPCA=m
 CONFIG_USB_GSPCA_CONEX=m
diff -ruN kernel-2.6.32-220.el6.src.rpm-rpmbuild/SOURCES/config-x86_64-generic kernel-2.6.32-220.el6.kirkwood.src.rpm-rpmbuild/SOURCES/config-x86_64-generic
--- kernel-2.6.32-220.el6.src.rpm-rpmbuild/SOURCES/config-x86_64-generic	2009-11-18 20:10:13.000000000 +0000
+++ kernel-2.6.32-220.el6.kirkwood.src.rpm-rpmbuild/SOURCES/config-x86_64-generic	2011-12-19 02:31:36.000000000 +0000
@@ -16,6 +16,7 @@
 CONFIG_K8_NUMA=y
 CONFIG_X86_64_ACPI_NUMA=y
 # CONFIG_NUMA_EMU is not set
+CONFIG_SMP=y
 CONFIG_NR_CPUS=512
 CONFIG_X86_POWERNOW_K8=m
 CONFIG_X86_POWERNOW_K8_ACPI=y
diff -ruN kernel-2.6.32-220.el6.src.rpm-rpmbuild/SOURCES/elfnote.patch kernel-2.6.32-220.el6.kirkwood.src.rpm-rpmbuild/SOURCES/elfnote.patch
--- kernel-2.6.32-220.el6.src.rpm-rpmbuild/SOURCES/elfnote.patch	1970-01-01 01:00:00.000000000 +0100
+++ kernel-2.6.32-220.el6.kirkwood.src.rpm-rpmbuild/SOURCES/elfnote.patch	2011-12-22 20:30:43.000000000 +0000
@@ -0,0 +1,11 @@
+--- linux-2.6.32-220.el6.kirkwood.armv5tel/include/linux/elfnote.h.orig	2011-12-22 18:56:06.902307000 +0000
++++ linux-2.6.32-220.el6.kirkwood.armv5tel/include/linux/elfnote.h	2011-12-22 18:56:24.808916000 +0000
+@@ -39,7 +39,7 @@
+  *      ELFNOTE(XYZCo, 12, .long, 0xdeadbeef)
+  */
+ #define ELFNOTE_START(name, type, flags)	\
+-.pushsection .note.name, flags,@note	;	\
++.pushsection .note.name, flags		;	\
+   .balign 4				;	\
+   .long 2f - 1f		/* namesz */	;	\
+   .long 4484f - 3f	/* descsz */	;	\
diff -ruN kernel-2.6.32-220.el6.src.rpm-rpmbuild/SOURCES/linux-2.6.29-usb-serial-evdo.patch kernel-2.6.32-220.el6.kirkwood.src.rpm-rpmbuild/SOURCES/linux-2.6.29-usb-serial-evdo.patch
--- kernel-2.6.32-220.el6.src.rpm-rpmbuild/SOURCES/linux-2.6.29-usb-serial-evdo.patch	1970-01-01 01:00:00.000000000 +0100
+++ kernel-2.6.32-220.el6.kirkwood.src.rpm-rpmbuild/SOURCES/linux-2.6.29-usb-serial-evdo.patch	2011-12-19 01:05:37.000000000 +0000
@@ -0,0 +1,58 @@
+--- ./drivers/usb/serial/usb-serial.c.orig	2009-04-02 14:55:27.000000000 -0600
++++ ./drivers/usb/serial/usb-serial.c	2009-04-18 03:00:26.862440573 -0600
+@@ -59,6 +59,9 @@ static struct usb_driver usb_serial_driv
+    drivers depend on it.
+ */
+ 
++static ushort maxRSize __read_mostly = 0;
++static ushort maxWSize __read_mostly = 0;
++static ushort maxISize __read_mostly = 0;
+ static int debug;
+ /* initially all NULL */
+ static struct usb_serial *serial_table[SERIAL_TTY_MINORS];
+@@ -841,6 +844,8 @@ int usb_serial_probe(struct usb_interfac
+ 			goto probe_error;
+ 		}
+ 		buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
++		if (buffer_size < maxRSize)
++			buffer_size = maxRSize;
+ 		port->bulk_in_size = buffer_size;
+ 		port->bulk_in_endpointAddress = endpoint->bEndpointAddress;
+ 		port->bulk_in_buffer = kmalloc(buffer_size, GFP_KERNEL);
+@@ -865,6 +870,8 @@ int usb_serial_probe(struct usb_interfac
+ 			goto probe_error;
+ 		}
+ 		buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
++		if (buffer_size < maxWSize)
++			buffer_size = maxWSize;
+ 		port->bulk_out_size = buffer_size;
+ 		port->bulk_out_endpointAddress = endpoint->bEndpointAddress;
+ 		port->bulk_out_buffer = kmalloc(buffer_size, GFP_KERNEL);
+@@ -891,6 +898,8 @@ int usb_serial_probe(struct usb_interfac
+ 				goto probe_error;
+ 			}
+ 			buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
++			if (buffer_size < maxISize)
++				buffer_size = maxISize;
+ 			port->interrupt_in_endpointAddress =
+ 						endpoint->bEndpointAddress;
+ 			port->interrupt_in_buffer = kmalloc(buffer_size,
+@@ -922,6 +931,8 @@ int usb_serial_probe(struct usb_interfac
+ 				goto probe_error;
+ 			}
+ 			buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
++			if (buffer_size < maxISize)
++				buffer_size = maxISize;
+ 			port->interrupt_out_size = buffer_size;
+ 			port->interrupt_out_endpointAddress =
+ 						endpoint->bEndpointAddress;
+@@ -1269,3 +1280,9 @@ MODULE_LICENSE("GPL");
+ 
+ module_param(debug, bool, S_IRUGO | S_IWUSR);
+ MODULE_PARM_DESC(debug, "Debug enabled or not");
++module_param(maxRSize, ushort, 0);
++MODULE_PARM_DESC(maxRSize, "User specified USB input buffer size");
++module_param(maxWSize, ushort, 0);
++MODULE_PARM_DESC(maxWSize, "User specified USB output buffer size");
++module_param(maxISize, ushort, 0);
++MODULE_PARM_DESC(maxISize, "User specified USB interrupt buffer size");
diff -ruN kernel-2.6.32-220.el6.src.rpm-rpmbuild/SOURCES/linux-2.6.32-sheeva-sata.patch kernel-2.6.32-220.el6.kirkwood.src.rpm-rpmbuild/SOURCES/linux-2.6.32-sheeva-sata.patch
--- kernel-2.6.32-220.el6.src.rpm-rpmbuild/SOURCES/linux-2.6.32-sheeva-sata.patch	1970-01-01 01:00:00.000000000 +0100
+++ kernel-2.6.32-220.el6.kirkwood.src.rpm-rpmbuild/SOURCES/linux-2.6.32-sheeva-sata.patch	2011-12-19 01:05:37.000000000 +0000
@@ -0,0 +1,29 @@
+--- ./arch/arm/mach-kirkwood/sheevaplug-setup.c.orig	2010-02-23 08:38:51.000000000 -0700
++++ ./arch/arm/mach-kirkwood/sheevaplug-setup.c	2010-03-02 12:17:26.190730237 -0700
+@@ -12,6 +12,7 @@
+ #include <linux/init.h>
+ #include <linux/platform_device.h>
+ #include <linux/mtd/partitions.h>
++#include <linux/ata_platform.h>
+ #include <linux/mv643xx_eth.h>
+ #include <linux/gpio.h>
+ #include <linux/leds.h>
+@@ -42,6 +43,10 @@ static struct mv643xx_eth_platform_data
+ 	.phy_addr	= MV643XX_ETH_PHY_ADDR(0),
+ };
+ 
++static struct mv_sata_platform_data sheevaplug_sata_data = {
++	.n_ports	= 2,
++};
++
+ static struct mvsdio_platform_data sheevaplug_mvsdio_data = {
+ 	/* unfortunately the CD signal has not been connected */
+ };
+@@ -91,6 +96,7 @@ static void __init sheevaplug_init(void)
+ 	kirkwood_ehci_init();
+ 
+ 	kirkwood_ge00_init(&sheevaplug_ge00_data);
++	kirkwood_sata_init(&sheevaplug_sata_data);
+ 	kirkwood_sdio_init(&sheevaplug_mvsdio_data);
+ 
+ 	platform_device_register(&sheevaplug_leds);
diff -ruN kernel-2.6.32-220.el6.src.rpm-rpmbuild/SOURCES/Makefile.config kernel-2.6.32-220.el6.kirkwood.src.rpm-rpmbuild/SOURCES/Makefile.config
--- kernel-2.6.32-220.el6.src.rpm-rpmbuild/SOURCES/Makefile.config	2011-07-15 22:18:04.000000000 +0100
+++ kernel-2.6.32-220.el6.kirkwood.src.rpm-rpmbuild/SOURCES/Makefile.config	2011-12-19 04:34:15.000000000 +0000
@@ -17,6 +17,8 @@
 
 X86CONFIGFILES	= $(CFG)-i686.config $(CFG)-i686-debug.config
 
+KIRKWOODCONFIGFILES	= $(CFG)-arm-kirkwood.config $(CFG)-arm-kirkwood-debug.config
+
 S390CONFIGFILES = $(CFG)-s390x.config $(CFG)-s390x-debug.config \
 		   $(CFG)-s390x-kdump.config
 
@@ -24,11 +26,11 @@
 		  $(CFG)-ppc64-debug.config
 
 CONFIGFILES = $(X86_64CONFIGFILES) $(X86CONFIGFILES) $(S390CONFIGFILES) \
-	      $(PPCCONFIGFILES)
+	      $(PPCCONFIGFILES) $(KIRKWOODCONFIGFILES)
 
 ARCHCONFIG =
 
-PLATFORMS	= x86 x86_64 powerpc64 s390
+PLATFORMS	= x86 x86_64 powerpc64 s390 arm-kirkwood
 TEMPFILES	= $(addprefix temp-, $(addsuffix -generic, $(PLATFORMS)))
 
 configs: clean-configs $($(ARCHCONFIG)CONFIGFILES)
@@ -48,10 +50,10 @@
 
 # Augment the clean target to clean up our own cruft
 clean ::
-	@rm -fv $(CONFIGFILES) $(TEMPFILES) temp-generic kernel-*config config-*-merged *.include temp-i686-debug-final temp-i686-final
+	@rm -fv $(CONFIGFILES) $(TEMPFILES) temp-generic kernel-*config config-*-merged *.include temp-i686-debug-final temp-i686-final temp-arm-kirkwood-debug-final temp-arm-kirkwood-final
 
 clean-configs:
-	@rm -fv $(CONFIGFILES) $(TEMPFILES) temp-generic kernel-*config config-*-merged *.include temp-i686-debug-final temp-i686-final
+	@rm -fv $(CONFIGFILES) $(TEMPFILES) temp-generic kernel-*config config-*-merged *.include temp-i686-debug-final temp-i686-final temp-arm-kirkwood-debug-final temp-arm-kirkwood-final
 
 configs-prep: clean configs
 	@mkdir -p $(CFG_DIR)
@@ -111,6 +113,12 @@
 temp-i686-debug-final: config-i686-merged temp-x86-debug-generic
 	perl merge.pl $^ > $@
 
+temp-arm-kirkwood-generic: config-arm-kirkwood-generic-merged temp-generic
+	perl merge.pl $^ > $@
+
+temp-arm-kirkwood-debug-generic: config-arm-kirkwood-generic-merged temp-debug-generic
+	perl merge.pl $^ > $@
+
 kernel-$(VERSION)-i686.config: config-i686-nodebug-merged temp-i686-final
 	perl merge.pl $^ i386 > $@
 
@@ -141,3 +149,8 @@
 kernel-$(VERSION)-s390x-kdump.config: config-s390x-kdump-merged kernel-$(VERSION)-s390x.config
 	perl merge.pl $^ s390 > $@
 
+kernel-$(VERSION)-arm-kirkwood.config: config-arm-kirkwood-nodebug-merged temp-arm-kirkwood-generic
+	perl merge.pl $^ arm-kirkwood > $@
+
+kernel-$(VERSION)-arm-kirkwood-debug.config: config-arm-kirkwood-debug-merged temp-arm-kirkwood-debug-generic
+	perl merge.pl $^ arm-kirkwood > $@
diff -ruN kernel-2.6.32-220.el6.src.rpm-rpmbuild/SOURCES/mvsdio-1-2.6.30.patch kernel-2.6.32-220.el6.kirkwood.src.rpm-rpmbuild/SOURCES/mvsdio-1-2.6.30.patch
--- kernel-2.6.32-220.el6.src.rpm-rpmbuild/SOURCES/mvsdio-1-2.6.30.patch	1970-01-01 01:00:00.000000000 +0100
+++ kernel-2.6.32-220.el6.kirkwood.src.rpm-rpmbuild/SOURCES/mvsdio-1-2.6.30.patch	2011-12-19 01:05:37.000000000 +0000
@@ -0,0 +1,32 @@
+--- ./drivers/mmc/core/core.c.orig	2009-06-09 21:05:27.000000000 -0600
++++ ./drivers/mmc/core/core.c	2009-06-23 23:24:58.473855897 -0600
+@@ -286,9 +286,9 @@ void mmc_set_data_timeout(struct mmc_dat
+ 			 * The limit is really 250 ms, but that is
+ 			 * insufficient for some crappy cards.
+ 			 */
+-			limit_us = 300000;
++			limit_us = 500000;
+ 		else
+-			limit_us = 100000;
++			limit_us = 200000;
+ 
+ 		/*
+ 		 * SDHC cards always use these fixed values.
+--- ./drivers/mmc/host/mvsdio.c.orig	2009-06-09 21:05:27.000000000 -0600
++++ ./drivers/mmc/host/mvsdio.c	2009-06-23 23:20:36.085662093 -0600
+@@ -21,6 +21,7 @@
+ #include <linux/irq.h>
+ #include <linux/gpio.h>
+ #include <linux/mmc/host.h>
++#include <linux/mmc/sd.h>
+ 
+ #include <asm/sizes.h>
+ #include <asm/unaligned.h>
+@@ -148,6 +149,7 @@ static void mvsd_request(struct mmc_host
+ 
+ 	dev_dbg(host->dev, "cmd %d (hw state 0x%04x)\n",
+ 		cmd->opcode, mvsd_read(MVSD_HW_STATE));
++	if (cmd->opcode == SD_SWITCH) mdelay(1); /* Voodoo */
+ 
+ 	cmdreg = MVSD_CMD_INDEX(cmd->opcode);
+ 
diff -ruN kernel-2.6.32-220.el6.src.rpm-rpmbuild/SOURCES/mvsdio-2.patch kernel-2.6.32-220.el6.kirkwood.src.rpm-rpmbuild/SOURCES/mvsdio-2.patch
--- kernel-2.6.32-220.el6.src.rpm-rpmbuild/SOURCES/mvsdio-2.patch	1970-01-01 01:00:00.000000000 +0100
+++ kernel-2.6.32-220.el6.kirkwood.src.rpm-rpmbuild/SOURCES/mvsdio-2.patch	2011-12-19 01:05:38.000000000 +0000
@@ -0,0 +1,35 @@
+From: Nicolas Pitre <nico@cam.org>
+Date: Tue, 28 Apr 2009 02:38:12 +0000 (-0400)
+Subject: [MMC] give Sandisk/Kingston SDHC cards some slack before the SWITCH command
+X-Git-Url: http://git.marvell.com/?p=orion.git;a=commitdiff_plain;h=3ea638523747f6d312f11f643a3175c1a4661eec;hp=c0c3df02efed0e5dea9aa4d8313e06e1f68f2cb4
+
+[MMC] give Sandisk/Kingston SDHC cards some slack before the SWITCH command
+
+Without this delay, those cards simply won't work in high speed mode
+as the SWITCH command does not succeeds.
+
+Signed-off-by: Nicolas Pitre <nico@marvell.com>
+Tested-by: Martin Michlmayr <tbm@cyrius.com>
+---
+
+diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c
+index cd81c39..ba4c7ab 100644
+--- a/drivers/mmc/core/sd.c
++++ b/drivers/mmc/core/sd.c
+@@ -263,6 +263,15 @@ static int mmc_switch_hs(struct mmc_card *card)
+ 		return -ENOMEM;
+ 	}
+ 
++	/*
++	 * Some SDHC cards, notably those with a Sandisk SD controller
++	 * (also found in Kingston products) need a bit of slack
++	 * before successfully handling the SWITCH command.  So far,
++	 * cards identifying themselves as "SD04G" and "SD08G" are
++	 * affected
++	 */
++	udelay(100);
++
+ 	err = mmc_sd_switch(card, 1, 0, 1, status);
+ 	if (err)
+ 		goto out;
+
diff -ruN kernel-2.6.32-220.el6.src.rpm-rpmbuild/SOURCES/pci_enable_bridges.patch kernel-2.6.32-220.el6.kirkwood.src.rpm-rpmbuild/SOURCES/pci_enable_bridges.patch
--- kernel-2.6.32-220.el6.src.rpm-rpmbuild/SOURCES/pci_enable_bridges.patch	1970-01-01 01:00:00.000000000 +0100
+++ kernel-2.6.32-220.el6.kirkwood.src.rpm-rpmbuild/SOURCES/pci_enable_bridges.patch	2011-12-19 13:05:11.000000000 +0000
@@ -0,0 +1,14 @@
+--- linux-2.6.32-220.el6.kirkwood.armv5tel/drivers/pci/bus.c.orig	2011-12-19 13:04:02.887202127 +0000
++++ linux-2.6.32-220.el6.kirkwood.armv5tel/drivers/pci/bus.c	2011-12-19 13:04:19.527702069 +0000
+@@ -191,9 +191,9 @@
+ 	list_for_each_entry(dev, &bus->devices, bus_list) {
+ 		if (dev->subordinate) {
+ 			if (!pci_is_enabled(dev)) {
+-				if (dev->is_pcie)
+-					pcie_get_port_device_capability(dev);
+ 				retval = pci_enable_device(dev);
++				if (retval)
++					dev_err(&dev->dev, "Error enabling bridge (%d), continuing\n", retval);
+ 				pci_set_master(dev);
+ 			}
+ 			pci_enable_bridges(dev->subordinate);
diff -ruN kernel-2.6.32-220.el6.src.rpm-rpmbuild/SOURCES/pte_alloc_map.patch kernel-2.6.32-220.el6.kirkwood.src.rpm-rpmbuild/SOURCES/pte_alloc_map.patch
--- kernel-2.6.32-220.el6.src.rpm-rpmbuild/SOURCES/pte_alloc_map.patch	1970-01-01 01:00:00.000000000 +0100
+++ kernel-2.6.32-220.el6.kirkwood.src.rpm-rpmbuild/SOURCES/pte_alloc_map.patch	2011-12-19 05:42:41.000000000 +0000
@@ -0,0 +1,11 @@
+--- linux-2.6.32-220.el6.kirkwood.armv5tel/arch/arm/mm/pgd.c.orig	2011-12-19 05:41:16.612732320 +0000
++++ linux-2.6.32-220.el6.kirkwood.armv5tel/arch/arm/mm/pgd.c	2011-12-19 05:41:40.383351681 +0000
+@@ -51,7 +51,7 @@
+ 		if (!new_pmd)
+ 			goto no_pmd;
+ 
+-		new_pte = pte_alloc_map(mm, new_pmd, 0);
++		new_pte = pte_alloc_map(mm, NULL, new_pmd, 0);
+ 		if (!new_pte)
+ 			goto no_pte;
+ 
diff -ruN kernel-2.6.32-220.el6.src.rpm-rpmbuild/SOURCES/UdlFb-0.2.3-2.6.30.2.patch kernel-2.6.32-220.el6.kirkwood.src.rpm-rpmbuild/SOURCES/UdlFb-0.2.3-2.6.30.2.patch
--- kernel-2.6.32-220.el6.src.rpm-rpmbuild/SOURCES/UdlFb-0.2.3-2.6.30.2.patch	1970-01-01 01:00:00.000000000 +0100
+++ kernel-2.6.32-220.el6.kirkwood.src.rpm-rpmbuild/SOURCES/UdlFb-0.2.3-2.6.30.2.patch	2011-12-19 01:05:36.000000000 +0000
@@ -0,0 +1,1213 @@
+--- ./drivers/video/Kconfig.orig	2009-07-19 21:39:19.000000000 -0600
++++ ./drivers/video/Kconfig	2009-07-22 19:26:18.037723981 -0600
+@@ -2074,6 +2074,13 @@ config FB_METRONOME
+ 	  controller. The pre-release name for this device was 8track
+ 	  and could also have been called by some vendors as PVI-nnnn.
+ 
++config FB_UDLFB
++	tristate "UDLFB support"
++	depends on FB
++	select FB_CFB_IMAGEBLIT
++	help
++	  Frame buffer driver for USB devices.
++
+ config FB_MB862XX
+ 	tristate "Fujitsu MB862xx GDC support"
+ 	depends on FB
+--- ./drivers/video/Makefile.orig	2009-07-19 21:39:19.000000000 -0600
++++ ./drivers/video/Makefile	2009-07-22 18:42:05.476665439 -0600
+@@ -124,6 +124,7 @@ obj-$(CONFIG_FB_SH_MOBILE_LCDC)	  += sh_
+ obj-$(CONFIG_FB_OMAP)             += omap/
+ obj-$(CONFIG_XEN_FBDEV_FRONTEND)  += xen-fbfront.o
+ obj-$(CONFIG_FB_CARMINE)          += carminefb.o
++obj-$(CONFIG_FB_UDLFB)		+= udlfb/
+ obj-$(CONFIG_FB_MB862XX)	  += mb862xx/
+ 
+ # Platform or fallback drivers go here
+--- ./drivers/video/udlfb/Makefile.orig	2009-07-22 18:42:19.041599428 -0600
++++ ./drivers/video/udlfb/Makefile	2009-07-22 18:35:35.262452654 -0600
+@@ -0,0 +1,15 @@
++ifndef KERNELRELEASE
++
++PWD := $(shell pwd)
++all:
++	$(MAKE) -C /lib/modules/`uname -r`/build SUBDIRS=$(PWD) modules
++clean:
++	rm -f *.o *.ko *.mod.* .*.cmd Module.symvers
++	rm -rf .tmp_versions
++
++install:
++	$(MAKE) -C /lib/modules/`uname -r`/build SUBDIRS=$(PWD) modules_install
++
++else
++obj-$(CONFIG_FB_UDLFB)	:= udlfb.o
++endif
+--- ./drivers/video/udlfb/udlfb.c.orig	2009-07-22 18:42:30.389606995 -0600
++++ ./drivers/video/udlfb/udlfb.c	2009-07-22 19:07:38.925298472 -0600
+@@ -0,0 +1,932 @@
++/************************************************************************************
++ *                          DLFB Kernel Driver                                      *
++ *                            Version 0.2 (udlfb)                                   *
++ *             (C) 2009 Roberto De Ioris <roberto@unbit.it>                         *
++ *                                                                                  *
++ *     This file is licensed under the GPLv2. See COPYING in the package.           *
++ * Based on the amazing work of Florian Echtler and libdlo 0.1                      *
++ *                                                                                  *
++ *                                                                           	    *	
++ * 10.06.09 release 0.2.3 (edid ioctl, fallback for unsupported modes)              *
++ * 05.06.09 release 0.2.2 (real screen blanking, rle compression, double buffer)    *
++ * 31.05.09 release 0.2                                                      	    *
++ * 22.05.09 First public (ugly) release                                             *
++ ************************************************************************************/
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/usb.h>
++#include <linux/uaccess.h>
++#include <linux/mm.h>
++#include <linux/fb.h>
++#include <linux/mutex.h>
++#include <linux/vmalloc.h>
++
++#include "udlfb.h"
++
++#define DRIVER_VERSION "DLFB 0.2"
++
++/* memory functions taken from vfb */
++
++static void *rvmalloc(unsigned long size)
++{
++	void *mem;
++	unsigned long adr;
++
++	size = PAGE_ALIGN(size);
++	mem = vmalloc_32(size);
++	if (!mem)
++		return NULL;
++
++	memset(mem, 0, size);	/* Clear the ram out, no junk to the user */
++	adr = (unsigned long)mem;
++	while (size > 0) {
++		SetPageReserved(vmalloc_to_page((void *)adr));
++		adr += PAGE_SIZE;
++		size -= PAGE_SIZE;
++	}
++
++	return mem;
++}
++
++static void rvfree(void *mem, unsigned long size)
++{
++	unsigned long adr;
++
++	if (!mem)
++		return;
++
++	adr = (unsigned long)mem;
++	while ((long)size > 0) {
++		ClearPageReserved(vmalloc_to_page((void *)adr));
++		adr += PAGE_SIZE;
++		size -= PAGE_SIZE;
++	}
++	vfree(mem);
++}
++
++static int dlfb_mmap(struct fb_info *info, struct vm_area_struct *vma)
++{
++	unsigned long start = vma->vm_start;
++	unsigned long size = vma->vm_end - vma->vm_start;
++	unsigned long offset = vma->vm_pgoff << PAGE_SHIFT;
++	unsigned long page, pos;
++
++	printk("MMAP: %lu %u\n", offset + size, info->fix.smem_len);
++
++	if (offset + size > info->fix.smem_len)
++		return -EINVAL;
++
++	pos = (unsigned long)info->fix.smem_start + offset;
++
++	while (size > 0) {
++		page = vmalloc_to_pfn((void *)pos);
++		if (remap_pfn_range(vma, start, page, PAGE_SIZE, PAGE_SHARED))
++			return -EAGAIN;
++
++		start += PAGE_SIZE;
++		pos += PAGE_SIZE;
++		if (size > PAGE_SIZE)
++			size -= PAGE_SIZE;
++		else
++			size = 0;
++	}
++
++	vma->vm_flags |= VM_RESERVED;	/* avoid to swap out this VMA */
++	return 0;
++
++}
++
++/* ioctl structure */
++struct dloarea {
++	int x, y;
++	int w, h;
++	int x2, y2;
++};
++
++/*
++static struct usb_device_id id_table [] = {
++	{ USB_DEVICE(0x17e9, 0x023d) },
++	{ }
++};
++*/
++
++static struct usb_device_id id_table[] = {
++	{.idVendor = 0x17e9, .match_flags = USB_DEVICE_ID_MATCH_VENDOR,},
++	{},
++};
++MODULE_DEVICE_TABLE(usb, id_table);
++
++static struct usb_driver dlfb_driver;
++
++// thanks to Henrik Bjerregaard Pedersen for this function
++static char *
++rle_compress16(uint16_t *src, char *dst, int rem)
++{
++
++    int rl;
++    uint16_t pix0;
++    char *end_if_raw = dst + 6 + 2 * rem;
++
++    dst += 6; // header will be filled in if RLE is worth it
++
++    while (rem && dst < end_if_raw) {
++        char *start = (char *)src;
++
++        pix0 = *src++;
++        rl = 1;
++        rem--;
++        while (rem && *src == pix0)
++            rem--, rl++, src++;
++        *dst++ = rl;
++        *dst++ = start[1];
++        *dst++ = start[0];
++    }
++
++    return dst;
++}
++
++/*
++Thanks to Henrik Bjerregaard Pedersen for rle implementation and code refactoring.
++Next step is huffman compression.
++*/
++
++static int
++image_blit(struct dlfb_data *dev_info, int x, int y, int width, int height,
++	   char *data)
++{
++
++	int i, j, base;
++	int rem = width;
++	int ret;
++
++	int firstdiff, thistime;
++
++	char *bufptr;
++
++	if (x + width > dev_info->info->var.xres) {
++		return -EINVAL;
++	}
++
++	if (y + height > dev_info->info->var.yres) {
++		return -EINVAL;
++	}
++
++	mutex_lock(&dev_info->bulk_mutex);
++
++	base = dev_info->base16 + ( (dev_info->info->var.xres * 2 * y) + (x * 2) );
++
++	data += (dev_info->info->var.xres * 2 * y) + (x * 2);
++
++	//printk("IMAGE_BLIT\n");
++
++	bufptr = dev_info->buf;
++
++	for (i = y; i < y + height; i++) {
++
++		if (dev_info->bufend - bufptr < BUF_HIGH_WATER_MARK) {
++			ret = dlfb_bulk_msg(dev_info, bufptr - dev_info->buf);
++			bufptr = dev_info->buf;
++		}
++
++		rem = width;
++
++		//printk("WRITING LINE %d\n", i);
++
++		while (rem) {
++
++			if (dev_info->bufend - bufptr < BUF_HIGH_WATER_MARK) {
++				ret =
++				    dlfb_bulk_msg(dev_info,
++						  bufptr - dev_info->buf);
++				bufptr = dev_info->buf;
++			}
++
++            // number of pixels to consider this time
++            thistime = rem;
++            if (thistime > 255)
++                 thistime = 255;
++
++            // find position of first pixel that has changed
++			firstdiff = -1;
++			for (j = 0; j < thistime * 2; j++) {
++				if (dev_info->
++				    backing_buffer[ base - dev_info->base16 + j] !=
++				    data[j]) {
++					firstdiff = j/2;
++					break;
++				}
++			}
++
++			if (firstdiff >= 0) {
++                char *end_of_rle;
++
++                end_of_rle =
++                    rle_compress16((uint16_t *)(data + firstdiff * 2),
++                                     bufptr, thistime-firstdiff);
++
++                if (end_of_rle < bufptr + 6 + 2 * (thistime-firstdiff)) {
++                    bufptr[0] = 0xAF;
++		   		    bufptr[1] = 0x69;
++
++				    bufptr[2] = (char)((base+firstdiff*2) >> 16);
++				    bufptr[3] = (char)((base+firstdiff*2) >> 8);
++				    bufptr[4] = (char)(base+firstdiff*2);
++                    bufptr[5] = thistime-firstdiff;
++ 
++                    bufptr = end_of_rle;
++
++                } else {
++                    // fallback to raw (or some other encoding?)
++                    *bufptr++ = 0xAF;
++		   		    *bufptr++ = 0x68;
++
++				    *bufptr++ = (char)((base+firstdiff*2) >> 16);
++				    *bufptr++ = (char)((base+firstdiff*2) >> 8);
++				    *bufptr++ = (char)(base+firstdiff*2);
++				    *bufptr++ = thistime-firstdiff;
++				    // PUT COMPRESSION HERE
++				    for (j = firstdiff * 2; j < thistime * 2; j += 2) {
++					    *bufptr++ = data[j + 1];
++					    *bufptr++ = data[j];
++				    }
++                }
++			}
++
++			base += thistime * 2;
++			data += thistime * 2;
++			rem -= thistime;
++		}
++
++		memcpy(dev_info->backing_buffer + (base-dev_info->base16) - (width * 2),
++		       data - (width * 2), width * 2);
++
++		base += (dev_info->info->var.xres * 2) - (width * 2);
++		data += (dev_info->info->var.xres * 2) - (width * 2);
++
++	}
++
++	if (bufptr > dev_info->buf) {
++		ret = dlfb_bulk_msg(dev_info, bufptr - dev_info->buf);
++	}
++
++	mutex_unlock(&dev_info->bulk_mutex);
++
++	return base;
++
++}
++static int
++draw_rect(struct dlfb_data *dev_info, int x, int y, int width, int height,
++	  unsigned char red, unsigned char green, unsigned char blue)
++{
++
++	int i, j, base;
++	int ret;
++	unsigned short col =
++	    (((((red) & 0xF8) | ((green) >> 5)) & 0xFF) << 8) +
++	    (((((green) & 0x1C) << 3) | ((blue) >> 3)) & 0xFF);
++	int rem = width;
++
++	char *bufptr;
++
++	if (x + width > dev_info->info->var.xres)
++		return -EINVAL;
++
++	if (y + height > dev_info->info->var.yres)
++		return -EINVAL;
++
++	mutex_lock(&dev_info->bulk_mutex);
++
++	base = dev_info->base16 + (dev_info->info->var.xres * 2 * y) + (x * 2);
++
++	bufptr = dev_info->buf;
++
++	for (i = y; i < y + height; i++) {
++
++		for (j = 0; j < width * 2; j += 2) {
++			dev_info->backing_buffer[base - dev_info->base16 + j] = (char)(col >> 8);
++			dev_info->backing_buffer[base - dev_info->base16 + j + 1] = (char)(col);
++		}
++		if (dev_info->bufend - bufptr < BUF_HIGH_WATER_MARK) {
++			ret = dlfb_bulk_msg(dev_info, bufptr - dev_info->buf);
++			bufptr = dev_info->buf;
++		}
++
++		rem = width;
++
++		while (rem) {
++
++			if (dev_info->bufend - bufptr < BUF_HIGH_WATER_MARK) {
++				ret =
++				    dlfb_bulk_msg(dev_info,
++						  bufptr - dev_info->buf);
++				bufptr = dev_info->buf;
++			}
++
++			*bufptr++ = 0xAF;
++			*bufptr++ = 0x69;
++
++			*bufptr++ = (char)(base >> 16);
++			*bufptr++ = (char)(base >> 8);
++			*bufptr++ = (char)(base);
++
++			if (rem > 255) {
++				*bufptr++ = 255;
++				*bufptr++ = 255;
++				rem -= 255;
++				base += 255 * 2;
++			} else {
++				*bufptr++ = rem;
++				*bufptr++ = rem;
++				base += rem * 2;
++				rem = 0;
++			}
++
++			*bufptr++ = (char)(col >> 8);
++			*bufptr++ = (char)(col);
++
++		}
++
++		base += (dev_info->info->var.xres * 2) - (width * 2);
++
++	}
++
++	if (bufptr > dev_info->buf)
++		ret = dlfb_bulk_msg(dev_info, bufptr - dev_info->buf);
++
++	mutex_unlock(&dev_info->bulk_mutex);
++
++	return 1;
++}
++
++static void swapfb(struct dlfb_data *dev_info) {
++
++	int tmpbase;
++	char *bufptr;
++
++	mutex_lock(&dev_info->bulk_mutex);
++
++	tmpbase = dev_info->base16 ;
++
++	dev_info->base16 = dev_info->base16d;
++	dev_info->base16d = tmpbase;
++
++	bufptr = dev_info->buf;
++
++	bufptr = dlfb_set_register(bufptr, 0xFF, 0x00);
++	
++			// set addresses
++        		bufptr =
++        		dlfb_set_register(bufptr, 0x20,
++                                              (char)(dev_info->base16 >> 16));
++                        bufptr =
++                            dlfb_set_register(bufptr, 0x21,
++                                              (char)(dev_info->base16 >> 8));
++                        bufptr =
++                            dlfb_set_register(bufptr, 0x22,
++                                              (char)(dev_info->base16));
++
++	bufptr = dlfb_set_register(bufptr, 0xFF, 0x00);
++
++	dlfb_bulk_msg(dev_info, bufptr - dev_info->buf);
++
++	mutex_unlock(&dev_info->bulk_mutex);
++}
++
++static int copyfb(struct dlfb_data *dev_info)
++{
++	int base;
++        int source;
++        int rem;
++        int i, ret;
++
++        char *bufptr;
++
++
++	base = dev_info->base16d;
++
++	mutex_lock(&dev_info->bulk_mutex);
++
++	source = dev_info->base16;
++
++	bufptr = dev_info->buf;
++
++	for (i = 0; i < dev_info->info->var.yres; i++) {
++
++		if (dev_info->bufend - bufptr < BUF_HIGH_WATER_MARK) {
++                        ret = dlfb_bulk_msg(dev_info, bufptr - dev_info->buf);
++                        bufptr = dev_info->buf;
++                }
++
++                rem = dev_info->info->var.xres;
++
++		while (rem) {
++
++                        if (dev_info->bufend - bufptr < BUF_HIGH_WATER_MARK) {
++                                ret =
++                                    dlfb_bulk_msg(dev_info,
++                                                  bufptr - dev_info->buf);
++                                bufptr = dev_info->buf;
++
++			}
++
++                        *bufptr++ = 0xAF;
++                        *bufptr++ = 0x6A;
++
++                        *bufptr++ = (char)(base >> 16);
++                        *bufptr++ = (char)(base >> 8);
++                        *bufptr++ = (char)(base);
++
++			 if (rem > 255) {
++                                *bufptr++ = 255;
++                                *bufptr++ = (char)(source >> 16);
++                                *bufptr++ = (char)(source >> 8);
++                                *bufptr++ = (char)(source);
++
++                                rem -= 255;
++                                base += 255 * 2;
++                                source += 255 * 2;
++
++                        } else {
++                                *bufptr++ = rem;
++                                *bufptr++ = (char)(source >> 16);
++                                *bufptr++ = (char)(source >> 8);
++                                *bufptr++ = (char)(source);
++
++                                base += rem * 2;
++                                source += rem * 2;
++                                rem = 0;
++                        }
++                }
++        }
++
++        if (bufptr > dev_info->buf)
++                ret = dlfb_bulk_msg(dev_info, bufptr - dev_info->buf);
++
++        mutex_unlock(&dev_info->bulk_mutex);
++		
++	return 1;
++	
++}
++
++static int
++copyarea(struct dlfb_data *dev_info, int dx, int dy, int sx, int sy,
++	 int width, int height)
++{
++	int base;
++	int source;
++	int rem;
++	int i, ret;
++
++	char *bufptr;
++
++	if (dx + width > dev_info->info->var.xres)
++		return -EINVAL;
++
++	if (dy + height > dev_info->info->var.yres)
++		return -EINVAL;
++
++	mutex_lock(&dev_info->bulk_mutex);
++
++	base =
++	    dev_info->base16 + (dev_info->info->var.xres * 2 * dy) + (dx * 2);
++	source = (dev_info->info->var.xres * 2 * sy) + (sx * 2);
++
++	bufptr = dev_info->buf;
++
++	for (i = sy; i < sy + height; i++) {
++
++		memcpy(dev_info->backing_buffer + base - dev_info->base16,
++		       dev_info->backing_buffer + source, width * 2);
++
++		if (dev_info->bufend - bufptr < BUF_HIGH_WATER_MARK) {
++			ret = dlfb_bulk_msg(dev_info, bufptr - dev_info->buf);
++			bufptr = dev_info->buf;
++		}
++
++		rem = width;
++
++		while (rem) {
++
++			if (dev_info->bufend - bufptr < BUF_HIGH_WATER_MARK) {
++				ret =
++				    dlfb_bulk_msg(dev_info,
++						  bufptr - dev_info->buf);
++				bufptr = dev_info->buf;
++			}
++
++			*bufptr++ = 0xAF;
++			*bufptr++ = 0x6A;
++
++			*bufptr++ = (char)(base >> 16);
++			*bufptr++ = (char)(base >> 8);
++			*bufptr++ = (char)(base);
++
++			if (rem > 255) {
++				*bufptr++ = 255;
++				*bufptr++ = (char)(source >> 16);
++				*bufptr++ = (char)(source >> 8);
++				*bufptr++ = (char)(source);
++
++				rem -= 255;
++				base += 255 * 2;
++				source += 255 * 2;
++
++			} else {
++				*bufptr++ = rem;
++				*bufptr++ = (char)(source >> 16);
++				*bufptr++ = (char)(source >> 8);
++				*bufptr++ = (char)(source);
++
++				base += rem * 2;
++				source += rem * 2;
++				rem = 0;
++			}
++		}
++
++		base += (dev_info->info->var.xres * 2) - (width * 2);
++		source += (dev_info->info->var.xres * 2) - (width * 2);
++	}
++
++	if (bufptr > dev_info->buf)
++		ret = dlfb_bulk_msg(dev_info, bufptr - dev_info->buf);
++
++	mutex_unlock(&dev_info->bulk_mutex);
++
++	return 1;
++}
++
++static void dlfb_copyarea(struct fb_info *info, const struct fb_copyarea *area)
++{
++
++	struct dlfb_data *dev = info->par;
++
++	copyarea(dev, area->dx, area->dy, area->sx, area->sy, area->width,
++		 area->height);
++
++	/* printk("COPY AREA %d %d %d %d %d %d !!!\n", area->dx, area->dy, area->sx, area->sy, area->width, area->height); */
++
++}
++
++static void dlfb_imageblit(struct fb_info *info, const struct fb_image *image)
++{
++
++	int ret;
++	struct dlfb_data *dev = info->par;
++	/* printk("IMAGE BLIT (1) %d %d %d %d DEPTH %d {%p}!!!\n", image->dx, image->dy, image->width, image->height, image->depth, dev->udev); */
++	cfb_imageblit(info, image);
++	ret =
++	    image_blit(dev, image->dx, image->dy, image->width, image->height,
++		       info->screen_base);
++	/* printk("IMAGE BLIT (2) %d %d %d %d DEPTH %d {%p} %d!!!\n", image->dx, image->dy, image->width, image->height, image->depth, dev->udev, ret); */
++}
++
++static void dlfb_fillrect(struct fb_info *info, const struct fb_fillrect *region)
++{
++
++	unsigned char red, green, blue;
++	struct dlfb_data *dev = info->par;
++
++	memcpy(&red, &region->color, 1);
++	memcpy(&green, &region->color + 1, 1);
++	memcpy(&blue, &region->color + 2, 1);
++	draw_rect(dev, region->dx, region->dy, region->width, region->height,
++		  red, green, blue);
++	/* printk("FILL RECT %d %d !!!\n", region->dx, region->dy); */
++
++}
++
++static int dlfb_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg)
++{
++
++	struct dlfb_data *dev_info = info->par;
++	struct dloarea *area = NULL;
++	
++
++	if (cmd == 0xAD) {
++		char *edid = (char *)arg;
++		dlfb_edid(dev_info);
++		if (copy_to_user(edid, dev_info->edid, 128)) {
++			return -EFAULT;
++		}
++		return 0;
++	}
++
++	if (cmd == 0xAA || cmd == 0xAB || cmd == 0xAC) {
++
++		area = (struct dloarea *)arg;
++
++
++		if (area->x < 0)
++			area->x = 0;
++
++		if (area->x > info->var.xres)
++			area->x = info->var.xres;
++
++		if (area->y < 0)
++			area->y = 0;
++
++		if (area->y > info->var.yres)
++			area->y = info->var.yres;
++	}
++
++	if (cmd == 0xAA) {
++		image_blit(dev_info, area->x, area->y, area->w, area->h,
++			   info->screen_base);
++	}
++	if (cmd == 0xAC) {
++		copyfb(dev_info);
++		image_blit(dev_info, area->x, area->y, area->w, area->h,
++			   info->screen_base);
++		swapfb(dev_info);
++	}
++	else if (cmd == 0xAB) {
++
++		if (area->x2 < 0)
++                        area->x2 = 0;
++
++		if (area->y2 < 0)
++                        area->y2 = 0;
++
++		copyarea(dev_info,
++			area->x2, area->y2, area->x, area->y, area->w, area->h);
++	}
++	return 0;
++}
++
++/* taken from vesafb */
++
++static int
++dlfb_setcolreg(unsigned regno, unsigned red, unsigned green,
++	       unsigned blue, unsigned transp, struct fb_info *info)
++{
++	int err = 0;
++
++	if (regno >= info->cmap.len)
++		return 1;
++
++	if (regno < 16) {
++		if (info->var.red.offset == 10) {
++			/* 1:5:5:5 */
++			((u32 *) (info->pseudo_palette))[regno] =
++			    ((red & 0xf800) >> 1) |
++			    ((green & 0xf800) >> 6) | ((blue & 0xf800) >> 11);
++		} else {
++			/* 0:5:6:5 */
++			((u32 *) (info->pseudo_palette))[regno] =
++			    ((red & 0xf800)) |
++			    ((green & 0xfc00) >> 5) | ((blue & 0xf800) >> 11);
++		}
++	}
++
++	return err;
++}
++
++static int dlfb_release(struct fb_info *info, int user)
++{
++	struct dlfb_data *dev_info = info->par;
++	image_blit(dev_info, 0, 0, info->var.xres, info->var.yres,
++		   info->screen_base);
++	return 0;
++}
++
++static int dlfb_blank(int blank_mode, struct fb_info *info)
++{
++	struct dlfb_data *dev_info = info->par;
++	char *bufptr = dev_info->buf;
++
++	bufptr = dlfb_set_register(bufptr, 0xFF, 0x00);
++	if (blank_mode != FB_BLANK_UNBLANK) {
++		bufptr = dlfb_set_register(bufptr, 0x1F, 0x01);
++	}
++	else {
++		bufptr = dlfb_set_register(bufptr, 0x1F, 0x00);
++	}
++	bufptr = dlfb_set_register(bufptr, 0xFF, 0xFF);
++
++	dlfb_bulk_msg(dev_info, bufptr - dev_info->buf);
++
++	return 0;
++}
++
++static struct fb_ops dlfb_ops = {
++	.fb_setcolreg = dlfb_setcolreg,
++	.fb_fillrect = dlfb_fillrect,
++	.fb_copyarea = dlfb_copyarea,
++	.fb_imageblit = dlfb_imageblit,
++	.fb_mmap = dlfb_mmap,
++	.fb_ioctl = dlfb_ioctl,
++	.fb_release = dlfb_release,
++	.fb_blank = dlfb_blank,
++};
++
++static int
++dlfb_probe(struct usb_interface *interface, const struct usb_device_id *id)
++{
++	struct dlfb_data *dev_info;
++	struct fb_info *info;
++
++	int ret;
++	char rbuf[4];
++
++	dev_info = kzalloc(sizeof(*dev_info), GFP_KERNEL);
++	if (dev_info == NULL) {
++		printk("cannot allocate dev_info structure.\n");
++		return -ENOMEM;
++	}
++
++	mutex_init(&dev_info->bulk_mutex);
++
++	dev_info->udev = usb_get_dev(interface_to_usbdev(interface));
++	dev_info->interface = interface;
++
++	printk("DisplayLink device attached\n");
++
++	/* add framebuffer info to usb interface */
++	usb_set_intfdata(interface, dev_info);
++
++	dev_info->buf = kmalloc(BUF_SIZE, GFP_KERNEL);
++	/* usb_buffer_alloc(dev_info->udev, BUF_SIZE , GFP_KERNEL, &dev_info->tx_urb->transfer_dma); */
++
++	if (dev_info->buf == NULL) {
++		printk("unable to allocate memory for dlfb commands\n");
++		goto out;
++	}
++	dev_info->bufend = dev_info->buf + BUF_SIZE;
++
++	dev_info->tx_urb = usb_alloc_urb(0, GFP_KERNEL);
++	usb_fill_bulk_urb(dev_info->tx_urb, dev_info->udev,
++			  usb_sndbulkpipe(dev_info->udev, 1), dev_info->buf, 0,
++			  dlfb_bulk_callback, dev_info);
++
++	ret =
++	    usb_control_msg(dev_info->udev, usb_rcvctrlpipe(dev_info->udev, 0),
++			    (0x06), (0x80 | (0x02 << 5)), 0, 0, rbuf, 4, 0);
++	printk("ret control msg 0: %d %x%x%x%x\n", ret, rbuf[0], rbuf[1],
++	       rbuf[2], rbuf[3]);
++
++	dlfb_edid(dev_info);
++
++	info = framebuffer_alloc(sizeof(u32) * 256, &dev_info->udev->dev);
++
++	if (!info) {
++		printk("non posso allocare il framebuffer displaylink");
++		goto out;
++	}
++
++	fb_parse_edid(dev_info->edid, &info->var);
++
++	printk("EDID XRES %d YRES %d\n", info->var.xres, info->var.yres);
++	if (info->var.xres == 0 || info->var.yres == 0) {
++		info->var.xres = 1280;
++		info->var.yres = 1024;
++	}
++
++	if (dlfb_set_video_mode(dev_info, info->var.xres, info->var.yres) != 0)
++		goto out;
++
++	printk("found valid mode...%d\n", info->var.pixclock);
++
++	info->pseudo_palette = info->par;
++	info->par = dev_info;
++
++	dev_info->info = info;
++
++	info->flags =
++	    FBINFO_DEFAULT | FBINFO_READS_FAST | FBINFO_HWACCEL_IMAGEBLIT |
++	    FBINFO_HWACCEL_COPYAREA | FBINFO_HWACCEL_FILLRECT;
++	info->fbops = &dlfb_ops;
++	info->screen_base = rvmalloc(dev_info->screen_size);
++
++	if (info->screen_base == NULL) {
++		printk
++		    ("cannot allocate framebuffer virtual memory of %d bytes\n",
++		     dev_info->screen_size);
++		goto out0;
++	}
++
++	printk("screen base allocated !!!\n");
++
++	dev_info->backing_buffer = kzalloc(dev_info->screen_size, GFP_KERNEL);
++
++	if (!dev_info->backing_buffer)
++		printk("non posso allocare il backing buffer\n");
++
++	/* info->var = dev_info->si; */
++
++	info->var.bits_per_pixel = 16;
++	info->var.activate = FB_ACTIVATE_TEST;
++	info->var.vmode = FB_VMODE_NONINTERLACED;
++
++	info->var.red.offset = 11;
++	info->var.red.length = 5;
++	info->var.red.msb_right = 0;
++
++	info->var.green.offset = 5;
++	info->var.green.length = 6;
++	info->var.green.msb_right = 0;
++
++	info->var.blue.offset = 0;
++	info->var.blue.length = 5;
++	info->var.blue.msb_right = 0;
++
++	/* info->var.pixclock =  (10000000 / FB_W * 1000 / FB_H)/2 ; */
++
++	info->fix.smem_start = (unsigned long)info->screen_base;
++	info->fix.smem_len = PAGE_ALIGN(dev_info->screen_size);
++	if (strlen(dev_info->udev->product) > 15) {
++		memcpy(info->fix.id, dev_info->udev->product, 15);
++	}
++	else {
++		memcpy(info->fix.id, dev_info->udev->product, strlen(dev_info->udev->product));
++	}
++	info->fix.type = FB_TYPE_PACKED_PIXELS;
++	info->fix.visual = FB_VISUAL_TRUECOLOR;
++	info->fix.accel = info->flags;
++	info->fix.line_length = dev_info->line_length;
++
++	if (fb_alloc_cmap(&info->cmap, 256, 0) < 0)
++		goto out1;
++
++	printk("colormap allocated\n");
++	if (register_framebuffer(info) < 0)
++		goto out2;
++
++	draw_rect(dev_info, 0, 0, dev_info->info->var.xres,
++		  dev_info->info->var.yres, 0x30, 0xff, 0x30);
++
++	return 0;
++
++ out2:
++	fb_dealloc_cmap(&info->cmap);
++ out1:
++	rvfree(info->screen_base, dev_info->screen_size);
++ out0:
++	framebuffer_release(info);
++ out:
++	usb_set_intfdata(interface, NULL);
++	usb_put_dev(dev_info->udev);
++	kfree(dev_info);
++	return -ENOMEM;
++
++}
++
++static void dlfb_disconnect(struct usb_interface *interface)
++{
++	struct dlfb_data *dev_info = usb_get_intfdata(interface);
++
++	mutex_unlock(&dev_info->bulk_mutex);
++
++	usb_kill_urb(dev_info->tx_urb);
++	usb_free_urb(dev_info->tx_urb);
++	usb_set_intfdata(interface, NULL);
++	usb_put_dev(dev_info->udev);
++
++	if (dev_info->info) {
++		unregister_framebuffer(dev_info->info);
++		fb_dealloc_cmap(&dev_info->info->cmap);
++		rvfree(dev_info->info->screen_base, dev_info->screen_size);
++		kfree(dev_info->backing_buffer);
++		framebuffer_release(dev_info->info);
++
++	}
++
++	kfree(dev_info);
++
++	printk("DisplayLink device disconnected\n");
++}
++
++static struct usb_driver dlfb_driver = {
++	.name = "udlfb",
++	.probe = dlfb_probe,
++	.disconnect = dlfb_disconnect,
++	.id_table = id_table,
++};
++
++static int __init dlfb_init(void)
++{
++	int res;
++
++	dlfb_init_modes();
++
++	res = usb_register(&dlfb_driver);
++	if (res)
++		err("usb_register failed. Error number %d", res);
++
++	printk("VMODES initialized\n");
++
++	return res;
++}
++
++static void __exit dlfb_exit(void)
++{
++	usb_deregister(&dlfb_driver);
++}
++
++module_init(dlfb_init);
++module_exit(dlfb_exit);
++
++MODULE_AUTHOR("Roberto De Ioris <roberto@unbit.it>");
++MODULE_DESCRIPTION(DRIVER_VERSION);
++MODULE_LICENSE("GPL");
+--- ./drivers/video/udlfb/udlfb.h.orig	2009-07-22 18:42:35.559356043 -0600
++++ ./drivers/video/udlfb/udlfb.h	2009-06-10 08:38:09.000000000 -0600
+@@ -0,0 +1,231 @@
++#define MAX_VMODES 4
++#define FB_BPP 16
++
++#define STD_CHANNEL        "\x57\xCD\xDC\xA7\x1C\x88\x5E\x15\x60\xFE\xC6\x97\x16\x3D\x47\xF2"
++
++// as libdlo
++#define BUF_HIGH_WATER_MARK 1024
++#define BUF_SIZE 64*1024
++
++struct dlfb_data {
++	struct usb_device *udev;
++	struct usb_interface *interface;
++	struct urb *tx_urb, *ctrl_urb;
++	struct usb_ctrlrequest dr;
++	struct fb_info *info;
++	char *buf;
++	char *bufend;
++	char *backing_buffer;
++	struct mutex bulk_mutex;
++	char edid[128];
++	int screen_size;
++	int line_length;
++	struct completion done;
++	int base16;
++	int base16d;
++	int base8;
++	int base8d;
++};
++
++struct dlfb_video_mode {
++
++	uint8_t col;
++	uint32_t hclock;
++	uint32_t vclock;
++	uint8_t unknown1[6];
++	uint16_t xres;
++	uint8_t unknown2[6];
++	uint16_t yres;
++	uint8_t unknown3[4];
++
++} __attribute__ ((__packed__));
++
++struct dlfb_video_mode dlfb_video_modes[MAX_VMODES];
++
++static void dlfb_bulk_callback(struct urb *urb)
++{
++
++	struct dlfb_data *dev_info = urb->context;
++	complete(&dev_info->done);
++
++}
++
++static void dlfb_edid(struct dlfb_data *dev_info)
++{
++	int i;
++	int ret;
++	char rbuf[2];
++
++	for (i = 0; i < 128; i++) {
++                ret =
++                    usb_control_msg(dev_info->udev,
++                                    usb_rcvctrlpipe(dev_info->udev, 0), (0x02),
++                                    (0x80 | (0x02 << 5)), i << 8, 0xA1, rbuf, 2,
++                                    0);
++                /*printk("ret control msg edid %d: %d [%d]\n",i, ret, rbuf[1]);*/
++                dev_info->edid[i] = rbuf[1];
++        }
++
++}
++
++static int dlfb_bulk_msg(struct dlfb_data *dev_info, int len)
++{
++
++	int ret;
++
++	init_completion(&dev_info->done);
++
++	dev_info->tx_urb->actual_length = 0;
++	dev_info->tx_urb->transfer_buffer_length = len;
++
++	ret = usb_submit_urb(dev_info->tx_urb, GFP_KERNEL);
++	if (!wait_for_completion_timeout(&dev_info->done, 1000)) {
++		usb_kill_urb(dev_info->tx_urb);
++		printk("usb timeout !!!\n");
++	}
++
++	return dev_info->tx_urb->actual_length;
++
++}
++
++void dlfb_init_modes(void)
++{
++
++	dlfb_video_modes[0].col = 0;
++	memcpy(&dlfb_video_modes[0].hclock, "\x20\x3C\x7A\xC9", 4);
++	memcpy(&dlfb_video_modes[0].vclock, "\xF2\x6C\x48\xF9", 4);
++	memcpy(&dlfb_video_modes[0].unknown1, "\x70\x53\xFF\xFF\x21\x27", 6);
++	dlfb_video_modes[0].xres = 800;
++	memcpy(&dlfb_video_modes[0].unknown2, "\x91\xF3\xFF\xFF\xFF\xF9", 6);
++	dlfb_video_modes[0].yres = 480;
++	memcpy(&dlfb_video_modes[0].unknown3, "\x01\x02\xC8\x19", 4);
++
++	dlfb_video_modes[1].col = 0;
++	memcpy(&dlfb_video_modes[1].hclock, "\x36\x18\xD5\x10", 4);
++	memcpy(&dlfb_video_modes[1].vclock, "\x60\xA9\x7B\x33", 4);
++	memcpy(&dlfb_video_modes[1].unknown1, "\xA1\x2B\x27\x32\xFF\xFF", 6);
++	dlfb_video_modes[1].xres = 1024;
++	memcpy(&dlfb_video_modes[1].unknown2, "\xD9\x9A\xFF\xCA\xFF\xFF", 6);
++	dlfb_video_modes[1].yres = 768;
++	memcpy(&dlfb_video_modes[1].unknown3, "\x04\x03\xC8\x32", 4);
++
++	dlfb_video_modes[2].col = 0;
++	memcpy(&dlfb_video_modes[2].hclock, "\x98\xF8\x0D\x57", 4);
++	memcpy(&dlfb_video_modes[2].vclock, "\x2A\x55\x4D\x54", 4);
++	memcpy(&dlfb_video_modes[2].unknown1, "\xCA\x0D\xFF\xFF\x94\x43", 6);
++	dlfb_video_modes[2].xres = 1280;
++	memcpy(&dlfb_video_modes[2].unknown2, "\x9A\xA8\xFF\xFF\xFF\xF9", 6);
++	dlfb_video_modes[2].yres = 1024;
++	memcpy(&dlfb_video_modes[2].unknown3, "\x04\x02\x60\x54", 4);
++
++	dlfb_video_modes[3].col = 0;
++	memcpy(&dlfb_video_modes[3].hclock, "\x42\x24\x38\x36", 4);
++	memcpy(&dlfb_video_modes[3].vclock, "\xC1\x52\xD9\x29", 4);
++	memcpy(&dlfb_video_modes[3].unknown1, "\xEA\xB8\x32\x60\xFF\xFF", 6);
++	dlfb_video_modes[3].xres = 1400;
++	memcpy(&dlfb_video_modes[3].unknown2, "\xC9\x4E\xFF\xFF\xFF\xF2", 6);
++	dlfb_video_modes[3].yres = 1050;
++	memcpy(&dlfb_video_modes[3].unknown3, "\x04\x02\x1E\x5F", 4);
++
++}
++
++char *dlfb_set_register(char *bufptr, uint8_t reg, uint8_t val)
++{
++
++	*bufptr++ = 0xAF;
++	*bufptr++ = 0x20;
++	*bufptr++ = reg;
++	*bufptr++ = val;
++
++	return bufptr;
++
++}
++
++int dlfb_set_video_mode(struct dlfb_data *dev_info, int width, int height)
++{
++
++	int i, ret;
++	unsigned char j;
++	char *bufptr = dev_info->buf;
++	uint8_t *vdata;
++
++	for (i = 0; i < MAX_VMODES; i++) {
++		printk("INIT VIDEO %d %d %d\n", i, dlfb_video_modes[i].xres,
++		       dlfb_video_modes[i].yres);
++		if (dlfb_video_modes[i].xres == width
++		    && dlfb_video_modes[i].yres == height) {
++
++			dev_info->base16 = 0;
++			dev_info->base16d = width * height * (FB_BPP / 8) ;
++
++			//dev_info->base8 = width * height * (FB_BPP / 8);
++
++			dev_info->base8 = dev_info->base16;
++			dev_info->base8d = dev_info->base16d;
++
++			// set encryption key (null)
++			memcpy(dev_info->buf, STD_CHANNEL, 16);
++			ret =
++			    usb_control_msg(dev_info->udev,
++					    usb_sndctrlpipe(dev_info->udev, 0),
++					    0x12, (0x02 << 5), 0, 0,
++					    dev_info->buf, 16, 0);
++			printk("ret control msg 1 (STD_CHANNEL): %d\n", ret);
++
++			// set registers
++			bufptr = dlfb_set_register(bufptr, 0xFF, 0x00);
++
++			// set color depth
++			bufptr = dlfb_set_register(bufptr, 0x00, 0x00);
++
++			// set addresses
++			bufptr =
++			    dlfb_set_register(bufptr, 0x20,
++					      (char)(dev_info->base16 >> 16));
++			bufptr =
++			    dlfb_set_register(bufptr, 0x21,
++					      (char)(dev_info->base16 >> 8));
++			bufptr =
++			    dlfb_set_register(bufptr, 0x22,
++					      (char)(dev_info->base16));
++
++			bufptr =
++			    dlfb_set_register(bufptr, 0x26,
++					      (char)(dev_info->base8 >> 16));
++			bufptr =
++			    dlfb_set_register(bufptr, 0x27,
++					      (char)(dev_info->base8 >> 8));
++			bufptr =
++			    dlfb_set_register(bufptr, 0x28,
++					      (char)(dev_info->base8));
++
++			// set video mode
++			vdata = (uint8_t *) & dlfb_video_modes[i];
++			for (j = 0; j < 29; j++) {
++				bufptr = dlfb_set_register(bufptr, j, vdata[j]);
++			}
++
++			// blank
++			bufptr = dlfb_set_register(bufptr, 0x1F, 0x00);
++
++			// end registers
++			bufptr = dlfb_set_register(bufptr, 0xFF, 0xFF);
++
++			// send
++			ret = dlfb_bulk_msg(dev_info, bufptr - dev_info->buf);
++			printk("ret bulk 2: %d %d\n", ret,
++			       bufptr - dev_info->buf);
++
++			// flush
++			ret = dlfb_bulk_msg(dev_info, 0);
++			printk("ret bulk 3: %d\n", ret);
++
++			dev_info->screen_size = width * height * (FB_BPP / 8);
++			dev_info->line_length = width * (FB_BPP / 8);
++
++			return 0;
++		}
++	}
++
++	return -1;
++}
diff -ruN kernel-2.6.32-220.el6.src.rpm-rpmbuild/SPECS/kernel.spec kernel-2.6.32-220.el6.kirkwood.src.rpm-rpmbuild/SPECS/kernel.spec
--- kernel-2.6.32-220.el6.src.rpm-rpmbuild/SPECS/kernel.spec	2011-11-09 12:55:22.000000000 +0000
+++ kernel-2.6.32-220.el6.kirkwood.src.rpm-rpmbuild/SPECS/kernel.spec	2014-01-09 15:13:53.000000000 +0000
@@ -14,7 +14,7 @@
 # that the kernel isn't the stock distribution kernel, for example,
 # by setting the define to ".local" or ".bz123456"
 #
-# % define buildid .local
+%define buildid .kirkwood
 
 %define rhel 1
 %if %{rhel}
@@ -39,7 +39,7 @@
 %endif
 
 # if patch fuzzy patch applying will be forbidden
-%define with_fuzzy_patches 0
+%define with_fuzzy_patches 1
 
 # base_sublevel is the kernel version we're starting with and patching
 # on top of -- for example, 2.6.22-rc7-git1 starts with a 2.6.21 base,
@@ -368,8 +368,8 @@
 %define all_arch_configs kernel-%{version}-arm*.config
 %define image_install_path boot
 %define hdrarch arm
-%define make_target vmlinux
-%define kernel_image vmlinux
+%define make_target uImage
+%define kernel_image arch/arm/boot/uImage
 %endif
 
 %if %{nopatches}
@@ -393,7 +393,7 @@
 
 # We don't build a kernel on i386; we only do kernel-headers there,
 # and we no longer build for 31bit S390. Same for 32bit sparc and arm.
-%define nobuildarches i386 i586 s390 sparc sparc64 ppc ia64 %{arm}
+%define nobuildarches i386 i586 s390 sparc sparc64 ppc ia64
 
 %ifarch %nobuildarches
 %define with_up 0
@@ -528,6 +528,9 @@
 # Ensure glibc{,-devel} is installed so zfcpdump can be built
 BuildRequires: glibc-static
 %endif
+%ifarch %{arm}
+BuildRequires: uboot-tools
+%endif
 
 BuildConflicts: rhbuildsys(DiskFree) < 7Gb
 
@@ -600,6 +603,23 @@
 Source82: config-generic
 Source83: config-x86_64-debug-rhel
 
+Source10001: config-arm-kirkwood-debug
+Source10002: config-arm-kirkwood-debug-rhel
+Source10003: config-arm-kirkwood-generic
+Source10004: config-arm-kirkwood-generic-rhel
+Source10005: config-arm-kirkwood-nodebug
+Source10006: config-arm-kirkwood-nodebug-rhel
+
+Patch10000: UdlFb-0.2.3-2.6.30.2.patch
+Patch10001: linux-2.6.29-usb-serial-evdo.patch
+Patch10002: linux-2.6.32-sheeva-sata.patch
+Patch10003: mvsdio-1-2.6.30.patch
+Patch10004: mvsdio-2.patch
+Patch10005: pte_alloc_map.patch
+Patch10006: cfs_rq_load_stamp.patch
+Patch10007: pci_enable_bridges.patch
+Patch10008: elfnote.patch
+
 # empty final patch file to facilitate testing of kernel patches
 Patch999999: linux-kernel-test.patch
 
@@ -900,6 +920,16 @@
 # Dynamically generate kernel .config files from config-* files
 make -f %{SOURCE20} VERSION=%{version} configs
 
+ApplyOptionalPatch UdlFb-0.2.3-2.6.30.2.patch
+ApplyOptionalPatch linux-2.6.29-usb-serial-evdo.patch
+ApplyOptionalPatch linux-2.6.32-sheeva-sata.patch
+ApplyOptionalPatch mvsdio-1-2.6.30.patch
+ApplyOptionalPatch mvsdio-2.patch
+ApplyOptionalPatch pte_alloc_map.patch
+ApplyOptionalPatch cfs_rq_load_stamp.patch
+ApplyOptionalPatch pci_enable_bridges.patch
+ApplyOptionalPatch elfnote.patch
+
 ApplyOptionalPatch linux-kernel-test.patch
 
 # Any further pre-build tree manipulations happen here.
@@ -926,9 +956,11 @@
 for i in *.config
 do
   mv $i .config
-  Arch=`head -1 .config | cut -b 3-`
+  _Arch=`head -1 .config | cut -b 3-`
+  Arch=`head -1 .config | cut -b 3- | sed -e 's/^arm.*/arm/'`
+  
   make ARCH=$Arch %{oldconfig_target} > /dev/null
-  echo "# $Arch" > configs/$i
+  echo "# $_Arch" > configs/$i
   cat .config >> configs/$i
   rm -f include/generated/kernel.arch
   rm -f include/generated/kernel.cross
@@ -1004,8 +1036,10 @@
     Flavour=$3
     InstallName=${4:-vmlinuz}
 
+    _config=`ls configs/*.config | head -1`
+    Arch=`head -1 $_config | cut -b 3-`
     # Pick the right config file for the kernel we're building
-    Config=kernel-%{version}-%{_target_cpu}${Flavour:+-${Flavour}}.config
+    Config=kernel-%{version}-$Arch${Flavour:+-${Flavour}}.config
     DevelDir=/usr/src/kernels/%{KVERREL}${Flavour:+.${Flavour}}
 
     # When the bootable image is just the ELF kernel, strip it.
@@ -1034,7 +1068,7 @@
     make -s mrproper
     cp configs/$Config .config
 
-    Arch=`head -1 .config | cut -b 3-`
+    Arch=`head -1 .config | cut -b 3- | sed -e 's/^arm.*/arm/'`
     echo USING ARCH=$Arch
 
     if [ "$Arch" == "s390" -a "$Flavour" == "kdump" ]; then
@@ -1044,6 +1078,7 @@
     fi
     make -s ARCH=$Arch %{oldconfig_target} > /dev/null
     make -s ARCH=$Arch V=1 %{?_smp_mflags} $MakeTarget %{?sparse_mflags}
+
     if [ "$Arch" != "s390" -o "$Flavour" != "kdump" ]; then
         make -s ARCH=$Arch V=1 %{?_smp_mflags} modules %{?sparse_mflags} || exit 1
     fi
