add support for kernel 2.6.29 (rc3) by a patch based on the Openmoko patchset (git...
authorMirko Vogt <mirko@openwrt.org>
Sun, 10 May 2009 23:21:54 +0000 (23:21 +0000)
committerMirko Vogt <mirko@openwrt.org>
Sun, 10 May 2009 23:21:54 +0000 (23:21 +0000)
SVN-Revision: 15764

target/linux/s3c24xx/Makefile
target/linux/s3c24xx/config-2.6.29 [new file with mode: 0644]
target/linux/s3c24xx/patches-2.6.29/000-downgrade-to-rc3.patch [new file with mode: 0644]
target/linux/s3c24xx/patches-2.6.29/001-merge-openmoko.patch [new file with mode: 0644]
target/linux/s3c24xx/patches-2.6.29/002-call-preinit-instead-of-init.patch [new file with mode: 0644]

index c5a4a945099c86b4533fcf687c39f8b87c840eb8..33050cbbc600f0fd738f45a2e86a0ef7ef9a0d0d 100644 (file)
@@ -12,7 +12,7 @@ BOARDNAME:=Samsung S3C24xx
 FEATURES:=jffs2
 CFLAGS:=-O2 -pipe -march=armv4t -mtune=arm920t -funit-at-a-time
 
-LINUX_VERSION:=2.6.28.10
+LINUX_VERSION:=2.6.29
 
 DEVICE_TYPE=phone
 
diff --git a/target/linux/s3c24xx/config-2.6.29 b/target/linux/s3c24xx/config-2.6.29
new file mode 100644 (file)
index 0000000..c4dddb3
--- /dev/null
@@ -0,0 +1,587 @@
+# CONFIG_AEABI is not set
+CONFIG_ALIGNMENT_TRAP=y
+CONFIG_APM_EMULATION=y
+CONFIG_APM_POWER=y
+CONFIG_AR6000_WLAN=y
+# CONFIG_AR6000_WLAN_DEBUG is not set
+# CONFIG_AR6000_WLAN_RESET is not set
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_BAST is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+CONFIG_ARCH_FLATMEM_HAS_HOLES=y
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_H1940 is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_KIRKWOOD is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_LOKI is not set
+# CONFIG_ARCH_MSM is not set
+# CONFIG_ARCH_MV78XX0 is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_ARCH_ORION5X is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_REALVIEW is not set
+CONFIG_ARCH_REQUIRE_GPIOLIB=y
+# CONFIG_ARCH_RPC is not set
+CONFIG_ARCH_S3C2410=y
+CONFIG_ARCH_S3C2440=y
+# CONFIG_ARCH_S3C64XX is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_SMDK2410 is not set
+# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_W90X900 is not set
+CONFIG_ARM=y
+CONFIG_ARM_THUMB=y
+# CONFIG_ARPD is not set
+CONFIG_ASHMEM=y
+CONFIG_ATAGS_PROC=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_GENERIC=y
+CONFIG_BACKLIGHT_GTA01=y
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+# CONFIG_BACKLIGHT_PWM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_BATTERY_BQ27000_HDQ=y
+# CONFIG_BATTERY_BQ27x00 is not set
+# CONFIG_BATTERY_DS2760 is not set
+CONFIG_BATTERY_GTA01=y
+CONFIG_BITREVERSE=y
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=4096
+CONFIG_BRIDGE_NETFILTER=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_CHARGER_PCF50606=y
+CONFIG_CHARGER_PCF50633=y
+CONFIG_CMDLINE="unused -- bootloader passes ATAG list"
+CONFIG_COMPAT_BRK=y
+CONFIG_COMPAT_NET_DEV_OPS=y
+# CONFIG_CONFIGFS_FS is not set
+CONFIG_CONSOLE_TRANSLATIONS=y
+CONFIG_CPU_32=y
+CONFIG_CPU_32v4T=y
+CONFIG_CPU_ABRT_EV4T=y
+CONFIG_CPU_ARM920T=y
+CONFIG_CPU_CACHE_V4WT=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_COPY_V4WB=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
+# CONFIG_CPU_ICACHE_DISABLE is not set
+CONFIG_CPU_IDLE=y
+CONFIG_CPU_IDLE_GOV_LADDER=y
+CONFIG_CPU_LLSERIAL_S3C2410=y
+CONFIG_CPU_LLSERIAL_S3C2440=y
+CONFIG_CPU_PABRT_NOIFAR=y
+CONFIG_CPU_S3C2410=y
+CONFIG_CPU_S3C2410_DMA=y
+CONFIG_CPU_S3C2440=y
+CONFIG_CPU_S3C2442=y
+CONFIG_CPU_S3C244X=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CRC16=y
+CONFIG_CRC_CCITT=y
+CONFIG_CRC_T10DIF=y
+# CONFIG_CRYPTO_AEAD is not set
+CONFIG_CRYPTO_AEAD2=y
+CONFIG_CRYPTO_AES=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_ALGAPI2=y
+CONFIG_CRYPTO_ANSI_CPRNG=y
+CONFIG_CRYPTO_ARC4=y
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_BLKCIPHER2=y
+CONFIG_CRYPTO_CBC=y
+CONFIG_CRYPTO_DES=y
+CONFIG_CRYPTO_ECB=y
+CONFIG_CRYPTO_FIPS=y
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_HASH2=y
+CONFIG_CRYPTO_HMAC=y
+CONFIG_CRYPTO_HW=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_MANAGER2=y
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_RNG=y
+CONFIG_CRYPTO_RNG2=y
+CONFIG_CRYPTO_SHA1=y
+# CONFIG_DCB is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_FS is not set
+CONFIG_DEBUG_MEMORY_INIT=y
+CONFIG_DEBUG_S3C_UART=2
+# CONFIG_DEBUG_USER is not set
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
+CONFIG_DISPLAY_JBT6K74=y
+# CONFIG_DISPLAY_L1K002 is not set
+CONFIG_DISPLAY_SUPPORT=y
+CONFIG_DMADEVICES=y
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_ELF_CORE=y
+# CONFIG_EMBEDDED is not set
+# CONFIG_ENABLE_WARN_DEPRECATED is not set
+CONFIG_FB=y
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_BOOT_VESA_SUPPORT is not set
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+# CONFIG_FB_DDC is not set
+# CONFIG_FB_FOREIGN_ENDIAN is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_MB862XX is not set
+# CONFIG_FB_METRONOME is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_S3C2410=y
+# CONFIG_FB_S3C2410_DEBUG is not set
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_FOPS is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_TILEBLITTING is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FIND_IRQ_BLOCKERS is not set
+CONFIG_FIQ=y
+# CONFIG_FIRMWARE_EDID is not set
+CONFIG_FONTS=y
+# CONFIG_FONT_10x18 is not set
+CONFIG_FONT_6x11=y
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FPE_FASTFPE is not set
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FREEZER=y
+# CONFIG_GENERIC_CLOCKEVENTS is not set
+CONFIG_GENERIC_FIND_LAST_BIT=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
+# CONFIG_GENERIC_TIME is not set
+CONFIG_GPIOLIB=y
+CONFIG_GPIO_DEVICE=y
+CONFIG_GPIO_SYSFS=y
+# CONFIG_GREENASIA_FF is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_HAS_DMA=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAVE_AOUT=y
+CONFIG_HAVE_ARCH_KGDB=y
+CONFIG_HAVE_CLK=y
+CONFIG_HAVE_FUNCTION_TRACER=y
+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+CONFIG_HAVE_IDE=y
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+CONFIG_HAVE_LATENCYTOP_SUPPORT=y
+CONFIG_HAVE_OPROFILE=y
+CONFIG_HAVE_PWM=y
+# CONFIG_HDQ_GPIO_BITBANG is not set
+CONFIG_HID=y
+CONFIG_HID_A4TECH=y
+CONFIG_HID_APPLE=y
+CONFIG_HID_BELKIN=y
+CONFIG_HID_CHERRY=y
+CONFIG_HID_CHICONY=y
+CONFIG_HID_COMPAT=y
+CONFIG_HID_CYPRESS=y
+CONFIG_HID_EZKEY=y
+CONFIG_HID_GYRATION=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_PID=y
+CONFIG_HID_SAMSUNG=y
+CONFIG_HID_SONY=y
+CONFIG_HID_SUNPLUS=y
+CONFIG_HID_SUPPORT=y
+CONFIG_HID_TOPSEED=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_HW_RANDOM is not set
+CONFIG_HZ=200
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_CHARDEV=y
+CONFIG_I2C_HELPER_AUTO=y
+CONFIG_I2C_S3C2410=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+CONFIG_INPUT=y
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_GPIO_BUTTONS is not set
+CONFIG_INPUT_KEYBOARD=y
+CONFIG_INPUT_LIS302DL=y
+CONFIG_INPUT_MOUSE=y
+CONFIG_INPUT_MOUSEDEV=y
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=480
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=640
+CONFIG_INPUT_PCF50606_PMU=y
+CONFIG_INPUT_PCF50633_PMU=y
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_INPUT_YEALINK is not set
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_IP_ROUTE_MULTIPATH is not set
+# CONFIG_IP_ROUTE_VERBOSE is not set
+# CONFIG_ISDN is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_KALLSYMS=y
+CONFIG_KEXEC=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_GPIO is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+CONFIG_KEYBOARD_NEO1973=y
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+CONFIG_LCD_CLASS_DEVICE=y
+# CONFIG_LCD_ILI9320 is not set
+CONFIG_LCD_LTV350QV=y
+# CONFIG_LCD_PLATFORM is not set
+# CONFIG_LCD_TDO24M is not set
+# CONFIG_LCD_VGG2432A4 is not set
+CONFIG_LEDS_GPIO=y
+# CONFIG_LEDS_LP5521 is not set
+CONFIG_LEDS_NEO1973_GTA02=y
+CONFIG_LEDS_NEO1973_VIBRATOR=y
+CONFIG_LEDS_TRIGGER_BACKLIGHT=y
+# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LOCK_KERNEL=y
+# CONFIG_LOGO is not set
+CONFIG_LOG_BUF_SHIFT=18
+# CONFIG_MACH_AML_M5900 is not set
+# CONFIG_MACH_ANUBIS is not set
+# CONFIG_MACH_AT2440EVB is not set
+# CONFIG_MACH_JIVE is not set
+# CONFIG_MACH_N30 is not set
+CONFIG_MACH_NEO1973=y
+CONFIG_MACH_NEO1973_GTA01=y
+CONFIG_MACH_NEO1973_GTA02=y
+# CONFIG_MACH_NEXCODER_2440 is not set
+# CONFIG_MACH_OSIRIS is not set
+# CONFIG_MACH_OTOM is not set
+# CONFIG_MACH_QT2410 is not set
+# CONFIG_MACH_RX3715 is not set
+CONFIG_MACH_SMDK=y
+# CONFIG_MACH_SMDK2412 is not set
+# CONFIG_MACH_SMDK2413 is not set
+# CONFIG_MACH_SMDK2443 is not set
+# CONFIG_MACH_TCT_HAMMER is not set
+# CONFIG_MACH_VR1000 is not set
+# CONFIG_MACH_VSTMS is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MFD_GLAMO=y
+CONFIG_MFD_GLAMO_FB=y
+# CONFIG_MFD_GLAMO_FB_XGLAMO_WORKAROUND is not set
+CONFIG_MFD_GLAMO_MCI=y
+CONFIG_MFD_GLAMO_SPI_FB=y
+CONFIG_MFD_GLAMO_SPI_GPIO=y
+CONFIG_MFD_PCF50606=y
+CONFIG_MFD_PCF50633=y
+# CONFIG_MFD_T7L66XB is not set
+# CONFIG_MISC_DEVICES is not set
+CONFIG_MISC_FILESYSTEMS=y
+CONFIG_MMC=y
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_BOUNCE=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_S3C=y
+CONFIG_MMC_SDHCI=y
+CONFIG_MMC_SDHCI_S3C=y
+# CONFIG_MMC_SPI is not set
+CONFIG_MMC_UNSAFE_RESUME=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MOUSE_BCM5974 is not set
+# CONFIG_MOUSE_GPIO is not set
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+CONFIG_MTD_ABSENT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_NAND=y
+# CONFIG_MTD_NAND_GPIO is not set
+CONFIG_MTD_NAND_S3C2410=y
+# CONFIG_MTD_NAND_S3C2410_CLKSTOP is not set
+# CONFIG_MTD_NAND_S3C2410_DEBUG is not set
+CONFIG_MTD_NAND_S3C2410_HWECC=y
+CONFIG_MTD_NAND_VERIFY_WRITE=y
+CONFIG_MTD_PHYSMAP=y
+# CONFIG_MTD_PHYSMAP_COMPAT is not set
+# CONFIG_MTD_QINFO_PROBE is not set
+CONFIG_MTD_ROM=y
+CONFIG_NAMESPACES=y
+CONFIG_NEO1973_GTA02_2440=y
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETWORK_FILESYSTEMS is not set
+# CONFIG_NET_CLS_ACT is not set
+# CONFIG_NET_ETHERNET is not set
+# CONFIG_NET_NS is not set
+# CONFIG_NET_SCH_DRR is not set
+CONFIG_NF_CONNTRACK=y
+CONFIG_NF_CONNTRACK_IPV4=y
+# CONFIG_NF_CONNTRACK_MARK is not set
+# CONFIG_NF_CONNTRACK_PROC_COMPAT is not set
+CONFIG_NF_DEFRAG_IPV4=y
+CONFIG_NO_IOPORT=y
+CONFIG_NR_TTY_DEVICES=6
+# CONFIG_NVRAM is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_PAGEFLAGS_EXTENDED=y
+CONFIG_PAGE_OFFSET=0xC0000000
+CONFIG_PCA9632=y
+CONFIG_PCF50606_ADC=y
+CONFIG_PCF50606_GPO=y
+CONFIG_PCF50606_WATCHDOG=y
+CONFIG_PCF50633_ADC=y
+CONFIG_PCF50633_GPIO=y
+# CONFIG_PCI_SYSCALL is not set
+CONFIG_PDA_POWER=y
+# CONFIG_PHYS_ADDR_T_64BIT is not set
+CONFIG_PLAT_S3C=y
+CONFIG_PLAT_S3C24XX=y
+CONFIG_PM=y
+# CONFIG_PM_DEBUG is not set
+CONFIG_PM_SLEEP=y
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PREEMPT=y
+CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_REGULATOR=y
+CONFIG_REGULATOR_DEBUG=y
+CONFIG_REGULATOR_PCF50606=y
+CONFIG_REGULATOR_PCF50633=y
+CONFIG_RFKILL=y
+CONFIG_RFKILL_INPUT=y
+CONFIG_RFKILL_LEDS=y
+CONFIG_RTC_CLASS=y
+# CONFIG_RTC_DRV_CMOS is not set
+CONFIG_RTC_DRV_PCF50606=y
+CONFIG_RTC_DRV_PCF50633=y
+CONFIG_RTC_DRV_S3C=y
+CONFIG_S3C2410_CLOCK=y
+CONFIG_S3C2410_DMA=y
+# CONFIG_S3C2410_DMA_DEBUG is not set
+CONFIG_S3C2410_GPIO=y
+CONFIG_S3C2410_PM=y
+# CONFIG_S3C2410_PM_CHECK is not set
+# CONFIG_S3C2410_PM_DEBUG is not set
+CONFIG_S3C2410_WATCHDOG=y
+CONFIG_S3C2440_DMA=y
+# CONFIG_S3C24XX_ADC is not set
+CONFIG_S3C24XX_GPIO_EXTRA=0
+CONFIG_S3C24XX_PWM=y
+# CONFIG_S3C_BOOT_ERROR_RESET is not set
+CONFIG_S3C_BOOT_UART_FORCE_FIFO=y
+# CONFIG_S3C_BOOT_WATCHDOG is not set
+CONFIG_S3C_DEV_USB_HOST=y
+CONFIG_S3C_DMA=y
+CONFIG_S3C_GPIO_SPACE=0
+CONFIG_S3C_GPIO_TRACK=y
+CONFIG_S3C_LOWLEVEL_UART_PORT=2
+CONFIG_S3C_PWM=y
+CONFIG_SCSI=y
+# CONFIG_SCSI_LOWLEVEL is not set
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_PROC_FS is not set
+# CONFIG_SDIO_UART is not set
+# CONFIG_SENSORS_PCF50606 is not set
+# CONFIG_SERIAL_8250 is not set
+CONFIG_SERIAL_S3C2410=y
+CONFIG_SERIAL_S3C2440=y
+CONFIG_SERIAL_SAMSUNG=y
+CONFIG_SERIAL_SAMSUNG_CONSOLE=y
+CONFIG_SERIAL_SAMSUNG_UARTS=3
+CONFIG_SERIO=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_SERIO_SERPORT is not set
+CONFIG_SMDK2440_CPU2440=y
+CONFIG_SMDK2440_CPU2442=y
+CONFIG_SND=m
+# CONFIG_SND_ARM is not set
+# CONFIG_SND_DRIVERS is not set
+CONFIG_SND_PCM=m
+CONFIG_SND_S3C24XX_SOC=m
+CONFIG_SND_S3C24XX_SOC_I2S=m
+# CONFIG_SND_S3C24XX_SOC_LN2440SBC_ALC650 is not set
+CONFIG_SND_S3C24XX_SOC_NEO1973_GTA02_WM8753=m
+# CONFIG_SND_S3C24XX_SOC_NEO1973_WM8753 is not set
+# CONFIG_SND_S3C24XX_SOC_S3C24XX_UDA134X is not set
+# CONFIG_SND_S3C64XX_SOC_SMDK6410_WM8731 is not set
+CONFIG_SND_SOC=m
+# CONFIG_SND_SOC_ALL_CODECS is not set
+CONFIG_SND_SOC_I2C_AND_SPI=m
+CONFIG_SND_SOC_WM8753=m
+CONFIG_SND_TIMER=m
+# CONFIG_SND_USB is not set
+# CONFIG_SND_VERBOSE_PROCFS is not set
+CONFIG_SOUND=m
+# CONFIG_SOUND_OSS_CORE is not set
+CONFIG_SPI=y
+CONFIG_SPI_BITBANG=y
+# CONFIG_SPI_GPIO is not set
+# CONFIG_SPI_GPIO_OLD is not set
+CONFIG_SPI_MASTER=y
+CONFIG_SPI_S3C24XX=y
+CONFIG_SPI_S3C24XX_GPIO=y
+# CONFIG_SPI_SPIDEV is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_SQUASHFS is not set
+CONFIG_SUSPEND=y
+CONFIG_SUSPEND_FREEZER=y
+# CONFIG_SYSCTL_SYSCALL_CHECK is not set
+CONFIG_SYSFS_DEPRECATED=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_TCP_MD5SIG=y
+# CONFIG_TOUCHSCREEN_ADS7846 is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+CONFIG_TOUCHSCREEN_FILTER=y
+CONFIG_TOUCHSCREEN_FILTER_GROUP=y
+CONFIG_TOUCHSCREEN_FILTER_LINEAR=y
+CONFIG_TOUCHSCREEN_FILTER_MEAN=y
+CONFIG_TOUCHSCREEN_FILTER_MEDIAN=y
+# CONFIG_TOUCHSCREEN_FUJITSU is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_INEXIO is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_PCAP7200 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+CONFIG_TOUCHSCREEN_S3C2410=y
+# CONFIG_TOUCHSCREEN_S3C2410_DEBUG is not set
+# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_TSC2007 is not set
+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
+# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
+CONFIG_UID16=y
+CONFIG_UIO=y
+CONFIG_UIO_PDRV=y
+# CONFIG_UIO_PDRV_GENIRQ is not set
+# CONFIG_UIO_SERCOS3 is not set
+# CONFIG_UIO_SMX is not set
+CONFIG_UNEVICTABLE_LRU=y
+CONFIG_USB=y
+CONFIG_USB_ACM=y
+CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB_CDC_COMPOSITE is not set
+# CONFIG_USB_DEVICEFS is not set
+CONFIG_USB_ETH=y
+CONFIG_USB_ETH_RNDIS=y
+# CONFIG_USB_FILE_STORAGE is not set
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_ATMEL_USBA is not set
+# CONFIG_USB_GADGET_CI13XXX is not set
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_FSL_QE is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_IMX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_M66592 is not set
+# CONFIG_USB_GADGET_MUSB_HDRC is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_PXA25X is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+CONFIG_USB_GADGET_S3C2410=y
+# CONFIG_USB_GADGET_S3C_OTGD_HS is not set
+CONFIG_USB_GADGET_SELECTED=y
+CONFIG_USB_GADGET_VBUS_DRAW=500
+# CONFIG_USB_G_PRINTER is not set
+# CONFIG_USB_G_SERIAL is not set
+CONFIG_USB_HID=y
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_MUSB_HDRC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_HCD=y
+CONFIG_USB_S3C2410=y
+# CONFIG_USB_S3C2410_DEBUG is not set
+CONFIG_USB_SERIAL=y
+CONFIG_USB_SERIAL_CONSOLE=y
+# CONFIG_USB_SERIAL_OPTICON is not set
+CONFIG_USB_SERIAL_OPTION=y
+# CONFIG_USB_SERIAL_SIEMENS_MPI is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_SUSPEND=y
+# CONFIG_USB_ZERO is not set
+# CONFIG_USER_NS is not set
+CONFIG_VECTORS_BASE=0xffff0000
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_VIDEO_OUTPUT_CONTROL=y
+# CONFIG_VLAN_8021Q is not set
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_VT_HW_CONSOLE_BINDING=y
+# CONFIG_WIRELESS is not set
+# CONFIG_WLAN_80211 is not set
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZONE_DMA_FLAG=0
diff --git a/target/linux/s3c24xx/patches-2.6.29/000-downgrade-to-rc3.patch b/target/linux/s3c24xx/patches-2.6.29/000-downgrade-to-rc3.patch
new file mode 100644 (file)
index 0000000..c9c8453
--- /dev/null
@@ -0,0 +1,170300 @@
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/alpha/include/asm/bug.h linux-2.6.29-rc3.owrt/arch/alpha/include/asm/bug.h
+--- linux-2.6.29.owrt/arch/alpha/include/asm/bug.h     2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/alpha/include/asm/bug.h 2009-05-10 23:48:27.000000000 +0200
+@@ -8,12 +8,17 @@
+ /* ??? Would be nice to use .gprel32 here, but we can't be sure that the
+    function loaded the GP, so this could fail in modules.  */
+-#define BUG() do {                                                    \
+-      __asm__ __volatile__(                                           \
+-              "call_pal %0  # bugchk\n\t"                             \
+-              ".long %1\n\t.8byte %2"                                 \
+-              : : "i"(PAL_bugchk), "i"(__LINE__), "i"(__FILE__));     \
+-      for ( ; ; ); } while (0)
++static inline void ATTRIB_NORET __BUG(const char *file, int line)
++{
++      __asm__ __volatile__(
++              "call_pal %0  # bugchk\n\t"
++              ".long %1\n\t.8byte %2"
++                     : : "i" (PAL_bugchk), "i"(line), "i"(file));
++      for ( ; ; )
++              ;
++}
++
++#define BUG() __BUG(__FILE__, __LINE__)
+ #define HAVE_ARCH_BUG
+ #endif
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/alpha/include/asm/dma-mapping.h linux-2.6.29-rc3.owrt/arch/alpha/include/asm/dma-mapping.h
+--- linux-2.6.29.owrt/arch/alpha/include/asm/dma-mapping.h     2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/alpha/include/asm/dma-mapping.h 2009-05-10 23:48:27.000000000 +0200
+@@ -29,8 +29,6 @@
+ #else /* no PCI - no IOMMU. */
+-#include <asm/io.h>   /* for virt_to_phys() */
+-
+ struct scatterlist;
+ void *dma_alloc_coherent(struct device *dev, size_t size,
+                        dma_addr_t *dma_handle, gfp_t gfp);
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/alpha/Kconfig linux-2.6.29-rc3.owrt/arch/alpha/Kconfig
+--- linux-2.6.29.owrt/arch/alpha/Kconfig       2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/alpha/Kconfig   2009-05-10 23:48:27.000000000 +0200
+@@ -8,7 +8,6 @@
+       select HAVE_AOUT
+       select HAVE_IDE
+       select HAVE_OPROFILE
+-      select HAVE_SYSCALL_WRAPPERS
+       help
+         The Alpha is a 64-bit general-purpose processor designed and
+         marketed by the Digital Equipment Corporation of blessed memory,
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/alpha/kernel/entry.S linux-2.6.29-rc3.owrt/arch/alpha/kernel/entry.S
+--- linux-2.6.29.owrt/arch/alpha/kernel/entry.S        2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/alpha/kernel/entry.S    2009-05-10 23:48:27.000000000 +0200
+@@ -933,7 +933,7 @@
+ osf_sigprocmask:
+       .prologue 0
+       mov     $sp, $18
+-      jmp     $31, sys_osf_sigprocmask
++      jmp     $31, do_osf_sigprocmask
+ .end osf_sigprocmask
+       .align  4
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/alpha/kernel/osf_sys.c linux-2.6.29-rc3.owrt/arch/alpha/kernel/osf_sys.c
+--- linux-2.6.29.owrt/arch/alpha/kernel/osf_sys.c      2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/alpha/kernel/osf_sys.c  2009-05-10 23:48:27.000000000 +0200
+@@ -54,7 +54,8 @@
+  * identical to OSF as we don't return 0 on success, but doing otherwise
+  * would require changes to libc.  Hopefully this is good enough.
+  */
+-SYSCALL_DEFINE1(osf_brk, unsigned long, brk)
++asmlinkage unsigned long
++osf_brk(unsigned long brk)
+ {
+       unsigned long retval = sys_brk(brk);
+       if (brk && brk != retval)
+@@ -65,9 +66,9 @@
+ /*
+  * This is pure guess-work..
+  */
+-SYSCALL_DEFINE4(osf_set_program_attributes, unsigned long, text_start,
+-              unsigned long, text_len, unsigned long, bss_start,
+-              unsigned long, bss_len)
++asmlinkage int
++osf_set_program_attributes(unsigned long text_start, unsigned long text_len,
++                         unsigned long bss_start, unsigned long bss_len)
+ {
+       struct mm_struct *mm;
+@@ -145,9 +146,9 @@
+       return -EFAULT;
+ }
+-SYSCALL_DEFINE4(osf_getdirentries, unsigned int, fd,
+-              struct osf_dirent __user *, dirent, unsigned int, count,
+-              long __user *, basep)
++asmlinkage int
++osf_getdirentries(unsigned int fd, struct osf_dirent __user *dirent,
++                unsigned int count, long __user *basep)
+ {
+       int error;
+       struct file *file;
+@@ -176,9 +177,9 @@
+ #undef NAME_OFFSET
+-SYSCALL_DEFINE6(osf_mmap, unsigned long, addr, unsigned long, len,
+-              unsigned long, prot, unsigned long, flags, unsigned long, fd,
+-              unsigned long, off)
++asmlinkage unsigned long
++osf_mmap(unsigned long addr, unsigned long len, unsigned long prot,
++       unsigned long flags, unsigned long fd, unsigned long off)
+ {
+       struct file *file = NULL;
+       unsigned long ret = -EBADF;
+@@ -253,8 +254,8 @@
+       return error;   
+ }
+-SYSCALL_DEFINE3(osf_statfs, char __user *, pathname,
+-              struct osf_statfs __user *, buffer, unsigned long, bufsiz)
++asmlinkage int
++osf_statfs(char __user *pathname, struct osf_statfs __user *buffer, unsigned long bufsiz)
+ {
+       struct path path;
+       int retval;
+@@ -267,8 +268,8 @@
+       return retval;
+ }
+-SYSCALL_DEFINE3(osf_fstatfs, unsigned long, fd,
+-              struct osf_statfs __user *, buffer, unsigned long, bufsiz)
++asmlinkage int
++osf_fstatfs(unsigned long fd, struct osf_statfs __user *buffer, unsigned long bufsiz)
+ {
+       struct file *file;
+       int retval;
+@@ -367,8 +368,8 @@
+       return do_mount("", dirname, "proc", flags, NULL);
+ }
+-SYSCALL_DEFINE4(osf_mount, unsigned long, typenr, char __user *, path,
+-              int, flag, void __user *, data)
++asmlinkage int
++osf_mount(unsigned long typenr, char __user *path, int flag, void __user *data)
+ {
+       int retval = -EINVAL;
+       char *name;
+@@ -398,7 +399,8 @@
+       return retval;
+ }
+-SYSCALL_DEFINE1(osf_utsname, char __user *, name)
++asmlinkage int
++osf_utsname(char __user *name)
+ {
+       int error;
+@@ -421,12 +423,14 @@
+       return error;
+ }
+-SYSCALL_DEFINE0(getpagesize)
++asmlinkage unsigned long
++sys_getpagesize(void)
+ {
+       return PAGE_SIZE;
+ }
+-SYSCALL_DEFINE0(getdtablesize)
++asmlinkage unsigned long
++sys_getdtablesize(void)
+ {
+       return sysctl_nr_open;
+ }
+@@ -434,7 +438,8 @@
+ /*
+  * For compatibility with OSF/1 only.  Use utsname(2) instead.
+  */
+-SYSCALL_DEFINE2(osf_getdomainname, char __user *, name, int, namelen)
++asmlinkage int
++osf_getdomainname(char __user *name, int namelen)
+ {
+       unsigned len;
+       int i;
+@@ -522,8 +527,8 @@
+       PL_DEL = 5, PL_FDEL = 6
+ };
+-SYSCALL_DEFINE2(osf_proplist_syscall, enum pl_code, code,
+-              union pl_args __user *, args)
++asmlinkage long
++osf_proplist_syscall(enum pl_code code, union pl_args __user *args)
+ {
+       long error;
+       int __user *min_buf_size_ptr;
+@@ -562,8 +567,8 @@
+       return error;
+ }
+-SYSCALL_DEFINE2(osf_sigstack, struct sigstack __user *, uss,
+-              struct sigstack __user *, uoss)
++asmlinkage int
++osf_sigstack(struct sigstack __user *uss, struct sigstack __user *uoss)
+ {
+       unsigned long usp = rdusp();
+       unsigned long oss_sp = current->sas_ss_sp + current->sas_ss_size;
+@@ -603,7 +608,8 @@
+       return error;
+ }
+-SYSCALL_DEFINE3(osf_sysinfo, int, command, char __user *, buf, long, count)
++asmlinkage long
++osf_sysinfo(int command, char __user *buf, long count)
+ {
+       char *sysinfo_table[] = {
+               utsname()->sysname,
+@@ -641,8 +647,9 @@
+       return err;
+ }
+-SYSCALL_DEFINE5(osf_getsysinfo, unsigned long, op, void __user *, buffer,
+-              unsigned long, nbytes, int __user *, start, void __user *, arg)
++asmlinkage unsigned long
++osf_getsysinfo(unsigned long op, void __user *buffer, unsigned long nbytes,
++             int __user *start, void __user *arg)
+ {
+       unsigned long w;
+       struct percpu_struct *cpu;
+@@ -698,8 +705,9 @@
+       return -EOPNOTSUPP;
+ }
+-SYSCALL_DEFINE5(osf_setsysinfo, unsigned long, op, void __user *, buffer,
+-              unsigned long, nbytes, int __user *, start, void __user *, arg)
++asmlinkage unsigned long
++osf_setsysinfo(unsigned long op, void __user *buffer, unsigned long nbytes,
++             int __user *start, void __user *arg)
+ {
+       switch (op) {
+       case SSI_IEEE_FP_CONTROL: {
+@@ -872,8 +880,8 @@
+       value->tv_sec = jiffies / HZ;
+ }
+-SYSCALL_DEFINE2(osf_gettimeofday, struct timeval32 __user *, tv,
+-              struct timezone __user *, tz)
++asmlinkage int
++osf_gettimeofday(struct timeval32 __user *tv, struct timezone __user *tz)
+ {
+       if (tv) {
+               struct timeval ktv;
+@@ -888,8 +896,8 @@
+       return 0;
+ }
+-SYSCALL_DEFINE2(osf_settimeofday, struct timeval32 __user *, tv,
+-              struct timezone __user *, tz)
++asmlinkage int
++osf_settimeofday(struct timeval32 __user *tv, struct timezone __user *tz)
+ {
+       struct timespec kts;
+       struct timezone ktz;
+@@ -908,7 +916,8 @@
+       return do_sys_settimeofday(tv ? &kts : NULL, tz ? &ktz : NULL);
+ }
+-SYSCALL_DEFINE2(osf_getitimer, int, which, struct itimerval32 __user *, it)
++asmlinkage int
++osf_getitimer(int which, struct itimerval32 __user *it)
+ {
+       struct itimerval kit;
+       int error;
+@@ -920,8 +929,8 @@
+       return error;
+ }
+-SYSCALL_DEFINE3(osf_setitimer, int, which, struct itimerval32 __user *, in,
+-              struct itimerval32 __user *, out)
++asmlinkage int
++osf_setitimer(int which, struct itimerval32 __user *in, struct itimerval32 __user *out)
+ {
+       struct itimerval kin, kout;
+       int error;
+@@ -943,8 +952,8 @@
+ }
+-SYSCALL_DEFINE2(osf_utimes, char __user *, filename,
+-              struct timeval32 __user *, tvs)
++asmlinkage int
++osf_utimes(char __user *filename, struct timeval32 __user *tvs)
+ {
+       struct timespec tv[2];
+@@ -970,8 +979,9 @@
+ #define MAX_SELECT_SECONDS \
+       ((unsigned long) (MAX_SCHEDULE_TIMEOUT / HZ)-1)
+-SYSCALL_DEFINE5(osf_select, int, n, fd_set __user *, inp, fd_set __user *, outp,
+-              fd_set __user *, exp, struct timeval32 __user *, tvp)
++asmlinkage int
++osf_select(int n, fd_set __user *inp, fd_set __user *outp, fd_set __user *exp,
++         struct timeval32 __user *tvp)
+ {
+       struct timespec end_time, *to = NULL;
+       if (tvp) {
+@@ -1016,7 +1026,8 @@
+       long    ru_nivcsw;              /* involuntary " */
+ };
+-SYSCALL_DEFINE2(osf_getrusage, int, who, struct rusage32 __user *, ru)
++asmlinkage int
++osf_getrusage(int who, struct rusage32 __user *ru)
+ {
+       struct rusage32 r;
+@@ -1042,8 +1053,9 @@
+       return copy_to_user(ru, &r, sizeof(r)) ? -EFAULT : 0;
+ }
+-SYSCALL_DEFINE4(osf_wait4, pid_t, pid, int __user *, ustatus, int, options,
+-              struct rusage32 __user *, ur)
++asmlinkage long
++osf_wait4(pid_t pid, int __user *ustatus, int options,
++        struct rusage32 __user *ur)
+ {
+       struct rusage r;
+       long ret, err;
+@@ -1089,8 +1101,8 @@
+  * seems to be a timeval pointer, and I suspect the second
+  * one is the time remaining.. Ho humm.. No documentation.
+  */
+-SYSCALL_DEFINE2(osf_usleep_thread, struct timeval32 __user *, sleep,
+-              struct timeval32 __user *, remain)
++asmlinkage int
++osf_usleep_thread(struct timeval32 __user *sleep, struct timeval32 __user *remain)
+ {
+       struct timeval tmp;
+       unsigned long ticks;
+@@ -1143,7 +1155,8 @@
+       int  :32; int  :32; int  :32; int  :32;
+ };
+-SYSCALL_DEFINE1(old_adjtimex, struct timex32 __user *, txc_p)
++asmlinkage int
++sys_old_adjtimex(struct timex32 __user *txc_p)
+ {
+         struct timex txc;
+       int ret;
+@@ -1254,8 +1267,8 @@
+       return 0;
+ }
+-SYSCALL_DEFINE3(osf_readv, unsigned long, fd,
+-              const struct iovec __user *, vector, unsigned long, count)
++asmlinkage ssize_t
++osf_readv(unsigned long fd, const struct iovec __user * vector, unsigned long count)
+ {
+       if (unlikely(personality(current->personality) == PER_OSF4))
+               if (osf_fix_iov_len(vector, count))
+@@ -1263,8 +1276,8 @@
+       return sys_readv(fd, vector, count);
+ }
+-SYSCALL_DEFINE3(osf_writev, unsigned long, fd,
+-              const struct iovec __user *, vector, unsigned long, count)
++asmlinkage ssize_t
++osf_writev(unsigned long fd, const struct iovec __user * vector, unsigned long count)
+ {
+       if (unlikely(personality(current->personality) == PER_OSF4))
+               if (osf_fix_iov_len(vector, count))
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/alpha/kernel/pci-noop.c linux-2.6.29-rc3.owrt/arch/alpha/kernel/pci-noop.c
+--- linux-2.6.29.owrt/arch/alpha/kernel/pci-noop.c     2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/alpha/kernel/pci-noop.c 2009-05-10 23:48:27.000000000 +0200
+@@ -109,8 +109,7 @@
+ /* Stubs for the routines in pci_iommu.c: */
+ void *
+-__pci_alloc_consistent(struct pci_dev *pdev, size_t size,
+-                     dma_addr_t *dma_addrp, gfp_t gfp)
++pci_alloc_consistent(struct pci_dev *pdev, size_t size, dma_addr_t *dma_addrp)
+ {
+       return NULL;
+ }
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/alpha/kernel/process.c linux-2.6.29-rc3.owrt/arch/alpha/kernel/process.c
+--- linux-2.6.29.owrt/arch/alpha/kernel/process.c      2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/alpha/kernel/process.c  2009-05-10 23:48:27.000000000 +0200
+@@ -93,8 +93,8 @@
+       if (cpuid != boot_cpuid) {
+               flags |= 0x00040000UL; /* "remain halted" */
+               *pflags = flags;
+-              set_cpu_present(cpuid, false);
+-              set_cpu_possible(cpuid, false);
++              cpu_clear(cpuid, cpu_present_map);
++              cpu_clear(cpuid, cpu_possible_map);
+               halt();
+       }
+ #endif
+@@ -120,8 +120,8 @@
+ #ifdef CONFIG_SMP
+       /* Wait for the secondaries to halt. */
+-      set_cpu_present(boot_cpuid, false);
+-      set_cpu_possible(boot_cpuid, false);
++      cpu_clear(boot_cpuid, cpu_present_map);
++      cpu_clear(boot_cpuid, cpu_possible_map);
+       while (cpus_weight(cpu_present_map))
+               barrier();
+ #endif
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/alpha/kernel/signal.c linux-2.6.29-rc3.owrt/arch/alpha/kernel/signal.c
+--- linux-2.6.29.owrt/arch/alpha/kernel/signal.c       2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/alpha/kernel/signal.c   2009-05-10 23:48:27.000000000 +0200
+@@ -19,7 +19,6 @@
+ #include <linux/tty.h>
+ #include <linux/binfmts.h>
+ #include <linux/bitops.h>
+-#include <linux/syscalls.h>
+ #include <asm/uaccess.h>
+ #include <asm/sigcontext.h>
+@@ -52,8 +51,8 @@
+  * Note that we don't need to acquire the kernel lock for SMP
+  * operation, as all of this is local to this thread.
+  */
+-SYSCALL_DEFINE3(osf_sigprocmask, int, how, unsigned long, newmask,
+-              struct pt_regs *, regs)
++asmlinkage unsigned long
++do_osf_sigprocmask(int how, unsigned long newmask, struct pt_regs *regs)
+ {
+       unsigned long oldmask = -EINVAL;
+@@ -82,9 +81,9 @@
+       return oldmask;
+ }
+-SYSCALL_DEFINE3(osf_sigaction, int, sig,
+-              const struct osf_sigaction __user *, act,
+-              struct osf_sigaction __user *, oact)
++asmlinkage int 
++osf_sigaction(int sig, const struct osf_sigaction __user *act,
++            struct osf_sigaction __user *oact)
+ {
+       struct k_sigaction new_ka, old_ka;
+       int ret;
+@@ -113,9 +112,10 @@
+       return ret;
+ }
+-SYSCALL_DEFINE5(rt_sigaction, int, sig, const struct sigaction __user *, act,
+-              struct sigaction __user *, oact,
+-              size_t, sigsetsize, void __user *, restorer)
++asmlinkage long
++sys_rt_sigaction(int sig, const struct sigaction __user *act,
++               struct sigaction __user *oact,
++               size_t sigsetsize, void __user *restorer)
+ {
+       struct k_sigaction new_ka, old_ka;
+       int ret;
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/alpha/kernel/smp.c linux-2.6.29-rc3.owrt/arch/alpha/kernel/smp.c
+--- linux-2.6.29.owrt/arch/alpha/kernel/smp.c  2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/alpha/kernel/smp.c      2009-05-10 23:48:27.000000000 +0200
+@@ -121,11 +121,10 @@
+ {
+       int cpuid = hard_smp_processor_id();
+-      if (cpu_online(cpuid)) {
++      if (cpu_test_and_set(cpuid, cpu_online_map)) {
+               printk("??, cpu 0x%x already present??\n", cpuid);
+               BUG();
+       }
+-      set_cpu_online(cpuid, true);
+       /* Turn on machine checks.  */
+       wrmces(7);
+@@ -436,8 +435,8 @@
+                               ((char *)cpubase + i*hwrpb->processor_size);
+                       if ((cpu->flags & 0x1cc) == 0x1cc) {
+                               smp_num_probed++;
+-                              set_cpu_possible(i, true);
+-                              set_cpu_present(i, true);
++                              cpu_set(i, cpu_possible_map);
++                              cpu_set(i, cpu_present_map);
+                               cpu->pal_revision = boot_cpu_palrev;
+                       }
+@@ -470,8 +469,8 @@
+       /* Nothing to do on a UP box, or when told not to.  */
+       if (smp_num_probed == 1 || max_cpus == 0) {
+-              init_cpu_possible(cpumask_of(boot_cpuid));
+-              init_cpu_present(cpumask_of(boot_cpuid));
++              cpu_possible_map = cpumask_of_cpu(boot_cpuid);
++              cpu_present_map = cpumask_of_cpu(boot_cpuid);
+               printk(KERN_INFO "SMP mode deactivated.\n");
+               return;
+       }
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/alpha/kernel/systbls.S linux-2.6.29-rc3.owrt/arch/alpha/kernel/systbls.S
+--- linux-2.6.29.owrt/arch/alpha/kernel/systbls.S      2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/alpha/kernel/systbls.S  2009-05-10 23:48:27.000000000 +0200
+@@ -17,7 +17,7 @@
+       .quad sys_write
+       .quad alpha_ni_syscall                  /* 5 */
+       .quad sys_close
+-      .quad sys_osf_wait4
++      .quad osf_wait4
+       .quad alpha_ni_syscall
+       .quad sys_link
+       .quad sys_unlink                        /* 10 */
+@@ -27,11 +27,11 @@
+       .quad sys_mknod
+       .quad sys_chmod                         /* 15 */
+       .quad sys_chown
+-      .quad sys_osf_brk
++      .quad osf_brk
+       .quad alpha_ni_syscall
+       .quad sys_lseek
+       .quad sys_getxpid                       /* 20 */
+-      .quad sys_osf_mount
++      .quad osf_mount
+       .quad sys_umount
+       .quad sys_setuid
+       .quad sys_getxuid
+@@ -53,7 +53,7 @@
+       .quad alpha_ni_syscall                  /* 40 */
+       .quad sys_dup
+       .quad sys_alpha_pipe
+-      .quad sys_osf_set_program_attributes
++      .quad osf_set_program_attributes
+       .quad alpha_ni_syscall
+       .quad sys_open                          /* 45 */
+       .quad alpha_ni_syscall
+@@ -81,7 +81,7 @@
+       .quad sys_newlstat
+       .quad alpha_ni_syscall
+       .quad alpha_ni_syscall                  /* 70 */
+-      .quad sys_osf_mmap
++      .quad osf_mmap
+       .quad alpha_ni_syscall
+       .quad sys_munmap
+       .quad sys_mprotect
+@@ -94,17 +94,17 @@
+       .quad sys_setgroups                     /* 80 */
+       .quad alpha_ni_syscall
+       .quad sys_setpgid
+-      .quad sys_osf_setitimer
++      .quad osf_setitimer
+       .quad alpha_ni_syscall
+       .quad alpha_ni_syscall                  /* 85 */
+-      .quad sys_osf_getitimer
++      .quad osf_getitimer
+       .quad sys_gethostname
+       .quad sys_sethostname
+       .quad sys_getdtablesize
+       .quad sys_dup2                          /* 90 */
+       .quad sys_newfstat
+       .quad sys_fcntl
+-      .quad sys_osf_select
++      .quad osf_select
+       .quad sys_poll
+       .quad sys_fsync                         /* 95 */
+       .quad sys_setpriority
+@@ -123,22 +123,22 @@
+       .quad alpha_ni_syscall
+       .quad alpha_ni_syscall                  /* 110 */
+       .quad sys_sigsuspend
+-      .quad sys_osf_sigstack
++      .quad osf_sigstack
+       .quad sys_recvmsg
+       .quad sys_sendmsg
+       .quad alpha_ni_syscall                  /* 115 */
+-      .quad sys_osf_gettimeofday
+-      .quad sys_osf_getrusage
++      .quad osf_gettimeofday
++      .quad osf_getrusage
+       .quad sys_getsockopt
+       .quad alpha_ni_syscall
+ #ifdef CONFIG_OSF4_COMPAT
+-      .quad sys_osf_readv                     /* 120 */
+-      .quad sys_osf_writev
++      .quad osf_readv                         /* 120 */
++      .quad osf_writev
+ #else
+       .quad sys_readv                         /* 120 */
+       .quad sys_writev
+ #endif
+-      .quad sys_osf_settimeofday
++      .quad osf_settimeofday
+       .quad sys_fchown
+       .quad sys_fchmod
+       .quad sys_recvfrom                      /* 125 */
+@@ -154,7 +154,7 @@
+       .quad sys_socketpair                    /* 135 */
+       .quad sys_mkdir
+       .quad sys_rmdir
+-      .quad sys_osf_utimes
++      .quad osf_utimes
+       .quad alpha_ni_syscall
+       .quad alpha_ni_syscall                  /* 140 */
+       .quad sys_getpeername
+@@ -172,16 +172,16 @@
+       .quad alpha_ni_syscall
+       .quad alpha_ni_syscall
+       .quad alpha_ni_syscall                  /* 155 */
+-      .quad sys_osf_sigaction
++      .quad osf_sigaction
+       .quad alpha_ni_syscall
+       .quad alpha_ni_syscall
+-      .quad sys_osf_getdirentries
+-      .quad sys_osf_statfs                    /* 160 */
+-      .quad sys_osf_fstatfs
++      .quad osf_getdirentries
++      .quad osf_statfs                        /* 160 */
++      .quad osf_fstatfs
+       .quad alpha_ni_syscall
+       .quad alpha_ni_syscall
+       .quad alpha_ni_syscall
+-      .quad sys_osf_getdomainname             /* 165 */
++      .quad osf_getdomainname                 /* 165 */
+       .quad sys_setdomainname
+       .quad alpha_ni_syscall
+       .quad alpha_ni_syscall
+@@ -224,7 +224,7 @@
+       .quad sys_semctl
+       .quad sys_semget                        /* 205 */
+       .quad sys_semop
+-      .quad sys_osf_utsname
++      .quad osf_utsname
+       .quad sys_lchown
+       .quad sys_shmat
+       .quad sys_shmctl                        /* 210 */
+@@ -258,23 +258,23 @@
+       .quad alpha_ni_syscall
+       .quad alpha_ni_syscall
+       .quad alpha_ni_syscall                  /* 240 */
+-      .quad sys_osf_sysinfo
++      .quad osf_sysinfo
+       .quad alpha_ni_syscall
+       .quad alpha_ni_syscall
+-      .quad sys_osf_proplist_syscall
++      .quad osf_proplist_syscall
+       .quad alpha_ni_syscall                  /* 245 */
+       .quad alpha_ni_syscall
+       .quad alpha_ni_syscall
+       .quad alpha_ni_syscall
+       .quad alpha_ni_syscall
+       .quad alpha_ni_syscall                  /* 250 */
+-      .quad sys_osf_usleep_thread
++      .quad osf_usleep_thread
+       .quad alpha_ni_syscall
+       .quad alpha_ni_syscall
+       .quad sys_sysfs
+       .quad alpha_ni_syscall                  /* 255 */
+-      .quad sys_osf_getsysinfo
+-      .quad sys_osf_setsysinfo
++      .quad osf_getsysinfo
++      .quad osf_setsysinfo
+       .quad alpha_ni_syscall
+       .quad alpha_ni_syscall
+       .quad alpha_ni_syscall                  /* 260 */
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/configs/at91sam9260ek_defconfig linux-2.6.29-rc3.owrt/arch/arm/configs/at91sam9260ek_defconfig
+--- linux-2.6.29.owrt/arch/arm/configs/at91sam9260ek_defconfig 2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/configs/at91sam9260ek_defconfig     2009-05-10 23:48:27.000000000 +0200
+@@ -608,7 +608,7 @@
+ # Watchdog Device Drivers
+ #
+ # CONFIG_SOFT_WATCHDOG is not set
+-CONFIG_AT91SAM9X_WATCHDOG=y
++CONFIG_AT91SAM9_WATCHDOG=y
+ #
+ # USB-based Watchdog Cards
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/configs/at91sam9261ek_defconfig linux-2.6.29-rc3.owrt/arch/arm/configs/at91sam9261ek_defconfig
+--- linux-2.6.29.owrt/arch/arm/configs/at91sam9261ek_defconfig 2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/configs/at91sam9261ek_defconfig     2009-05-10 23:48:27.000000000 +0200
+@@ -700,7 +700,7 @@
+ # Watchdog Device Drivers
+ #
+ # CONFIG_SOFT_WATCHDOG is not set
+-CONFIG_AT91SAM9X_WATCHDOG=y
++CONFIG_AT91SAM9_WATCHDOG=y
+ #
+ # USB-based Watchdog Cards
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/configs/at91sam9263ek_defconfig linux-2.6.29-rc3.owrt/arch/arm/configs/at91sam9263ek_defconfig
+--- linux-2.6.29.owrt/arch/arm/configs/at91sam9263ek_defconfig 2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/configs/at91sam9263ek_defconfig     2009-05-10 23:48:27.000000000 +0200
+@@ -710,7 +710,7 @@
+ # Watchdog Device Drivers
+ #
+ # CONFIG_SOFT_WATCHDOG is not set
+-CONFIG_AT91SAM9X_WATCHDOG=y
++CONFIG_AT91SAM9_WATCHDOG=y
+ #
+ # USB-based Watchdog Cards
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/configs/at91sam9rlek_defconfig linux-2.6.29-rc3.owrt/arch/arm/configs/at91sam9rlek_defconfig
+--- linux-2.6.29.owrt/arch/arm/configs/at91sam9rlek_defconfig  2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/configs/at91sam9rlek_defconfig      2009-05-10 23:48:27.000000000 +0200
+@@ -606,7 +606,7 @@
+ # Watchdog Device Drivers
+ #
+ # CONFIG_SOFT_WATCHDOG is not set
+-CONFIG_AT91SAM9X_WATCHDOG=y
++CONFIG_AT91SAM9_WATCHDOG=y
+ #
+ # Sonics Silicon Backplane
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/configs/qil-a9260_defconfig linux-2.6.29-rc3.owrt/arch/arm/configs/qil-a9260_defconfig
+--- linux-2.6.29.owrt/arch/arm/configs/qil-a9260_defconfig     2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/configs/qil-a9260_defconfig 2009-05-10 23:48:27.000000000 +0200
+@@ -727,7 +727,7 @@
+ # Watchdog Device Drivers
+ #
+ # CONFIG_SOFT_WATCHDOG is not set
+-# CONFIG_AT91SAM9X_WATCHDOG is not set
++# CONFIG_AT91SAM9_WATCHDOG is not set
+ #
+ # USB-based Watchdog Cards
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/kernel/elf.c linux-2.6.29-rc3.owrt/arch/arm/kernel/elf.c
+--- linux-2.6.29.owrt/arch/arm/kernel/elf.c    2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/kernel/elf.c        2009-05-10 23:48:27.000000000 +0200
+@@ -74,9 +74,9 @@
+  */
+ int arm_elf_read_implies_exec(const struct elf32_hdr *x, int executable_stack)
+ {
+-      if (executable_stack != EXSTACK_DISABLE_X)
++      if (executable_stack != EXSTACK_ENABLE_X)
+               return 1;
+-      if (cpu_architecture() < CPU_ARCH_ARMv6)
++      if (cpu_architecture() <= CPU_ARCH_ARMv6)
+               return 1;
+       return 0;
+ }
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/kernel/entry-armv.S linux-2.6.29-rc3.owrt/arch/arm/kernel/entry-armv.S
+--- linux-2.6.29.owrt/arch/arm/kernel/entry-armv.S     2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/kernel/entry-armv.S 2009-05-10 23:48:27.000000000 +0200
+@@ -650,7 +650,6 @@
+ no_fp:        mov     pc, lr
+ __und_usr_unknown:
+-      enable_irq
+       mov     r0, sp
+       adr     lr, ret_from_exception
+       b       do_undefinstr
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/kernel/entry-common.S linux-2.6.29-rc3.owrt/arch/arm/kernel/entry-common.S
+--- linux-2.6.29.owrt/arch/arm/kernel/entry-common.S   2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/kernel/entry-common.S       2009-05-10 23:48:27.000000000 +0200
+@@ -111,7 +111,6 @@
+       .globl mcount_call
+ mcount_call:
+       bl ftrace_stub
+-      ldr lr, [fp, #-4]                       @ restore lr
+       ldmia sp!, {r0-r3, pc}
+ ENTRY(ftrace_caller)
+@@ -123,7 +122,6 @@
+       .globl ftrace_call
+ ftrace_call:
+       bl ftrace_stub
+-      ldr lr, [fp, #-4]                       @ restore lr
+       ldmia sp!, {r0-r3, pc}
+ #else
+@@ -135,16 +133,14 @@
+       adr r0, ftrace_stub
+       cmp r0, r2
+       bne trace
+-      ldr lr, [fp, #-4]                       @ restore lr
+       ldmia sp!, {r0-r3, pc}
+ trace:
+-      ldr r1, [fp, #-4]                       @ lr of instrumented routine
++      ldr r1, [fp, #-4]
+       mov r0, lr
+       sub r0, r0, #MCOUNT_INSN_SIZE
+       mov lr, pc
+       mov pc, r2
+-      mov lr, r1                              @ restore lr
+       ldmia sp!, {r0-r3, pc}
+ #endif /* CONFIG_DYNAMIC_FTRACE */
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/kernel/fiq.c linux-2.6.29-rc3.owrt/arch/arm/kernel/fiq.c
+--- linux-2.6.29.owrt/arch/arm/kernel/fiq.c    2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/kernel/fiq.c        2009-05-10 23:48:27.000000000 +0200
+@@ -88,7 +88,7 @@
+  * disable irqs for the duration.  Note - these functions are almost
+  * entirely coded in assembly.
+  */
+-void __naked set_fiq_regs(struct pt_regs *regs)
++void __attribute__((naked)) set_fiq_regs(struct pt_regs *regs)
+ {
+       register unsigned long tmp;
+       asm volatile (
+@@ -106,7 +106,7 @@
+       : "r" (&regs->ARM_r8), "I" (PSR_I_BIT | PSR_F_BIT | FIQ_MODE));
+ }
+-void __naked get_fiq_regs(struct pt_regs *regs)
++void __attribute__((naked)) get_fiq_regs(struct pt_regs *regs)
+ {
+       register unsigned long tmp;
+       asm volatile (
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/kernel/irq.c linux-2.6.29-rc3.owrt/arch/arm/kernel/irq.c
+--- linux-2.6.29.owrt/arch/arm/kernel/irq.c    2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/kernel/irq.c        2009-05-10 23:48:27.000000000 +0200
+@@ -101,7 +101,7 @@
+ /* Handle bad interrupts */
+ static struct irq_desc bad_irq_desc = {
+       .handle_irq = handle_bad_irq,
+-      .lock = __SPIN_LOCK_UNLOCKED(bad_irq_desc.lock),
++      .lock = SPIN_LOCK_UNLOCKED
+ };
+ /*
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/kernel/machine_kexec.c linux-2.6.29-rc3.owrt/arch/arm/kernel/machine_kexec.c
+--- linux-2.6.29.owrt/arch/arm/kernel/machine_kexec.c  2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/kernel/machine_kexec.c      2009-05-10 23:48:27.000000000 +0200
+@@ -13,8 +13,8 @@
+ #include <asm/cacheflush.h>
+ #include <asm/mach-types.h>
+-extern const unsigned char relocate_new_kernel[];
+-extern const unsigned int relocate_new_kernel_size;
++const extern unsigned char relocate_new_kernel[];
++const extern unsigned int relocate_new_kernel_size;
+ extern void setup_mm_for_reboot(char mode);
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/kernel/setup.c linux-2.6.29-rc3.owrt/arch/arm/kernel/setup.c
+--- linux-2.6.29.owrt/arch/arm/kernel/setup.c  2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/kernel/setup.c      2009-05-10 23:48:27.000000000 +0200
+@@ -233,13 +233,12 @@
+       unsigned int cachetype = read_cpuid_cachetype();
+       unsigned int arch = cpu_architecture();
+-      if (arch >= CPU_ARCH_ARMv6) {
+-              if ((cachetype & (7 << 29)) == 4 << 29) {
+-                      /* ARMv7 register format */
+-                      cacheid = CACHEID_VIPT_NONALIASING;
+-                      if ((cachetype & (3 << 14)) == 1 << 14)
+-                              cacheid |= CACHEID_ASID_TAGGED;
+-              } else if (cachetype & (1 << 23))
++      if (arch >= CPU_ARCH_ARMv7) {
++              cacheid = CACHEID_VIPT_NONALIASING;
++              if ((cachetype & (3 << 14)) == 1 << 14)
++                      cacheid |= CACHEID_ASID_TAGGED;
++      } else if (arch >= CPU_ARCH_ARMv6) {
++              if (cachetype & (1 << 23))
+                       cacheid = CACHEID_VIPT_ALIASING;
+               else
+                       cacheid = CACHEID_VIPT_NONALIASING;
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mach-at91/at91cap9_devices.c linux-2.6.29-rc3.owrt/arch/arm/mach-at91/at91cap9_devices.c
+--- linux-2.6.29.owrt/arch/arm/mach-at91/at91cap9_devices.c    2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mach-at91/at91cap9_devices.c        2009-05-10 23:48:27.000000000 +0200
+@@ -697,7 +697,7 @@
+  *  Watchdog
+  * -------------------------------------------------------------------- */
+-#if defined(CONFIG_AT91SAM9X_WATCHDOG) || defined(CONFIG_AT91SAM9X_WATCHDOG_MODULE)
++#if defined(CONFIG_AT91SAM9_WATCHDOG) || defined(CONFIG_AT91SAM9_WATCHDOG_MODULE)
+ static struct platform_device at91cap9_wdt_device = {
+       .name           = "at91_wdt",
+       .id             = -1,
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mach-at91/at91sam9260_devices.c linux-2.6.29-rc3.owrt/arch/arm/mach-at91/at91sam9260_devices.c
+--- linux-2.6.29.owrt/arch/arm/mach-at91/at91sam9260_devices.c 2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mach-at91/at91sam9260_devices.c     2009-05-10 23:48:27.000000000 +0200
+@@ -643,7 +643,7 @@
+  *  Watchdog
+  * -------------------------------------------------------------------- */
+-#if defined(CONFIG_AT91SAM9X_WATCHDOG) || defined(CONFIG_AT91SAM9X_WATCHDOG_MODULE)
++#if defined(CONFIG_AT91SAM9_WATCHDOG) || defined(CONFIG_AT91SAM9_WATCHDOG_MODULE)
+ static struct platform_device at91sam9260_wdt_device = {
+       .name           = "at91_wdt",
+       .id             = -1,
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mach-at91/at91sam9261_devices.c linux-2.6.29-rc3.owrt/arch/arm/mach-at91/at91sam9261_devices.c
+--- linux-2.6.29.owrt/arch/arm/mach-at91/at91sam9261_devices.c 2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mach-at91/at91sam9261_devices.c     2009-05-10 23:48:27.000000000 +0200
+@@ -621,7 +621,7 @@
+  *  Watchdog
+  * -------------------------------------------------------------------- */
+-#if defined(CONFIG_AT91SAM9X_WATCHDOG) || defined(CONFIG_AT91SAM9X_WATCHDOG_MODULE)
++#if defined(CONFIG_AT91SAM9_WATCHDOG) || defined(CONFIG_AT91SAM9_WATCHDOG_MODULE)
+ static struct platform_device at91sam9261_wdt_device = {
+       .name           = "at91_wdt",
+       .id             = -1,
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mach-at91/at91sam9263_devices.c linux-2.6.29-rc3.owrt/arch/arm/mach-at91/at91sam9263_devices.c
+--- linux-2.6.29.owrt/arch/arm/mach-at91/at91sam9263_devices.c 2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mach-at91/at91sam9263_devices.c     2009-05-10 23:48:27.000000000 +0200
+@@ -347,111 +347,6 @@
+ void __init at91_add_device_mmc(short mmc_id, struct at91_mmc_data *data) {}
+ #endif
+-/* --------------------------------------------------------------------
+- *  Compact Flash (PCMCIA or IDE)
+- * -------------------------------------------------------------------- */
+-
+-#if defined(CONFIG_AT91_CF) || defined(CONFIG_AT91_CF_MODULE) || \
+-    defined(CONFIG_BLK_DEV_IDE_AT91) || defined(CONFIG_BLK_DEV_IDE_AT91_MODULE)
+-
+-static struct at91_cf_data cf0_data;
+-
+-static struct resource cf0_resources[] = {
+-      [0] = {
+-              .start  = AT91_CHIPSELECT_4,
+-              .end    = AT91_CHIPSELECT_4 + SZ_256M - 1,
+-              .flags  = IORESOURCE_MEM | IORESOURCE_MEM_8AND16BIT,
+-      }
+-};
+-
+-static struct platform_device cf0_device = {
+-      .id             = 0,
+-      .dev            = {
+-                              .platform_data  = &cf0_data,
+-      },
+-      .resource       = cf0_resources,
+-      .num_resources  = ARRAY_SIZE(cf0_resources),
+-};
+-
+-static struct at91_cf_data cf1_data;
+-
+-static struct resource cf1_resources[] = {
+-      [0] = {
+-              .start  = AT91_CHIPSELECT_5,
+-              .end    = AT91_CHIPSELECT_5 + SZ_256M - 1,
+-              .flags  = IORESOURCE_MEM | IORESOURCE_MEM_8AND16BIT,
+-      }
+-};
+-
+-static struct platform_device cf1_device = {
+-      .id             = 1,
+-      .dev            = {
+-                              .platform_data  = &cf1_data,
+-      },
+-      .resource       = cf1_resources,
+-      .num_resources  = ARRAY_SIZE(cf1_resources),
+-};
+-
+-void __init at91_add_device_cf(struct at91_cf_data *data)
+-{
+-      unsigned long ebi0_csa;
+-      struct platform_device *pdev;
+-
+-      if (!data)
+-              return;
+-
+-      /*
+-       * assign CS4 or CS5 to SMC with Compact Flash logic support,
+-       * we assume SMC timings are configured by board code,
+-       * except True IDE where timings are controlled by driver
+-       */
+-      ebi0_csa = at91_sys_read(AT91_MATRIX_EBI0CSA);
+-      switch (data->chipselect) {
+-      case 4:
+-              at91_set_A_periph(AT91_PIN_PD6, 0);  /* EBI0_NCS4/CFCS0 */
+-              ebi0_csa |= AT91_MATRIX_EBI0_CS4A_SMC_CF1;
+-              cf0_data = *data;
+-              pdev = &cf0_device;
+-              break;
+-      case 5:
+-              at91_set_A_periph(AT91_PIN_PD7, 0);  /* EBI0_NCS5/CFCS1 */
+-              ebi0_csa |= AT91_MATRIX_EBI0_CS5A_SMC_CF2;
+-              cf1_data = *data;
+-              pdev = &cf1_device;
+-              break;
+-      default:
+-              printk(KERN_ERR "AT91 CF: bad chip-select requested (%u)\n",
+-                     data->chipselect);
+-              return;
+-      }
+-      at91_sys_write(AT91_MATRIX_EBI0CSA, ebi0_csa);
+-
+-      if (data->det_pin) {
+-              at91_set_gpio_input(data->det_pin, 1);
+-              at91_set_deglitch(data->det_pin, 1);
+-      }
+-
+-      if (data->irq_pin) {
+-              at91_set_gpio_input(data->irq_pin, 1);
+-              at91_set_deglitch(data->irq_pin, 1);
+-      }
+-
+-      if (data->vcc_pin)
+-              /* initially off */
+-              at91_set_gpio_output(data->vcc_pin, 0);
+-
+-      /* enable EBI controlled pins */
+-      at91_set_A_periph(AT91_PIN_PD5, 1);  /* NWAIT */
+-      at91_set_A_periph(AT91_PIN_PD8, 0);  /* CFCE1 */
+-      at91_set_A_periph(AT91_PIN_PD9, 0);  /* CFCE2 */
+-      at91_set_A_periph(AT91_PIN_PD14, 0); /* CFNRW */
+-
+-      pdev->name = (data->flags & AT91_CF_TRUE_IDE) ? "at91_ide" : "at91_cf";
+-      platform_device_register(pdev);
+-}
+-#else
+-void __init at91_add_device_cf(struct at91_cf_data *data) {}
+-#endif
+ /* --------------------------------------------------------------------
+  *  NAND / SmartMedia
+@@ -959,7 +854,7 @@
+  *  Watchdog
+  * -------------------------------------------------------------------- */
+-#if defined(CONFIG_AT91SAM9X_WATCHDOG) || defined(CONFIG_AT91SAM9X_WATCHDOG_MODULE)
++#if defined(CONFIG_AT91SAM9_WATCHDOG) || defined(CONFIG_AT91SAM9_WATCHDOG_MODULE)
+ static struct platform_device at91sam9263_wdt_device = {
+       .name           = "at91_wdt",
+       .id             = -1,
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mach-at91/at91sam9rl_devices.c linux-2.6.29-rc3.owrt/arch/arm/mach-at91/at91sam9rl_devices.c
+--- linux-2.6.29.owrt/arch/arm/mach-at91/at91sam9rl_devices.c  2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mach-at91/at91sam9rl_devices.c      2009-05-10 23:48:27.000000000 +0200
+@@ -609,7 +609,7 @@
+  *  Watchdog
+  * -------------------------------------------------------------------- */
+-#if defined(CONFIG_AT91SAM9X_WATCHDOG) || defined(CONFIG_AT91SAM9X_WATCHDOG_MODULE)
++#if defined(CONFIG_AT91SAM9_WATCHDOG) || defined(CONFIG_AT91SAM9_WATCHDOG_MODULE)
+ static struct platform_device at91sam9rl_wdt_device = {
+       .name           = "at91_wdt",
+       .id             = -1,
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mach-at91/gpio.c linux-2.6.29-rc3.owrt/arch/arm/mach-at91/gpio.c
+--- linux-2.6.29.owrt/arch/arm/mach-at91/gpio.c        2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mach-at91/gpio.c    2009-05-10 23:48:27.000000000 +0200
+@@ -490,8 +490,7 @@
+ /*--------------------------------------------------------------------------*/
+-/*
+- * This lock class tells lockdep that GPIO irqs are in a different
++/* This lock class tells lockdep that GPIO irqs are in a different
+  * category than their parents, so it won't report false recursion.
+  */
+ static struct lock_class_key gpio_lock_class;
+@@ -510,6 +509,9 @@
+               unsigned        id = this->id;
+               unsigned        i;
++              /* enable PIO controller's clock */
++              clk_enable(this->clock);
++
+               __raw_writel(~0, this->regbase + PIO_IDR);
+               for (i = 0, pin = this->chipbase; i < 32; i++, pin++) {
+@@ -554,14 +556,7 @@
+               data->chipbase = PIN_BASE + i * 32;
+               data->regbase = data->offset + (void __iomem *)AT91_VA_BASE_SYS;
+-              /* enable PIO controller's clock */
+-              clk_enable(data->clock);
+-
+-              /*
+-               * Some processors share peripheral ID between multiple GPIO banks.
+-               *  SAM9263 (PIOC, PIOD, PIOE)
+-               *  CAP9 (PIOA, PIOB, PIOC, PIOD)
+-               */
++              /* AT91SAM9263_ID_PIOCDE groups PIOC, PIOD, PIOE */
+               if (last && last->id == data->id)
+                       last->next = data;
+       }
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mach-at91/include/mach/board.h linux-2.6.29-rc3.owrt/arch/arm/mach-at91/include/mach/board.h
+--- linux-2.6.29.owrt/arch/arm/mach-at91/include/mach/board.h  2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mach-at91/include/mach/board.h      2009-05-10 23:48:27.000000000 +0200
+@@ -56,9 +56,6 @@
+       u8      vcc_pin;                /* power switching */
+       u8      rst_pin;                /* card reset */
+       u8      chipselect;             /* EBI Chip Select number */
+-      u8      flags;
+-#define AT91_CF_TRUE_IDE      0x01
+-#define AT91_IDE_SWAP_A0_A2   0x02
+ };
+ extern void __init at91_add_device_cf(struct at91_cf_data *data);
+@@ -96,7 +93,6 @@
+       u8              enable_pin;     /* chip enable */
+       u8              det_pin;        /* card detect */
+       u8              rdy_pin;        /* ready/busy */
+-      u8              rdy_pin_active_low;     /* rdy_pin value is inverted */
+       u8              ale;            /* address line number connected to ALE */
+       u8              cle;            /* address line number connected to CLE */
+       u8              bus_width_16;   /* buswidth is 16 bit */
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mach-at91/pm.c linux-2.6.29-rc3.owrt/arch/arm/mach-at91/pm.c
+--- linux-2.6.29.owrt/arch/arm/mach-at91/pm.c  2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mach-at91/pm.c      2009-05-10 23:48:27.000000000 +0200
+@@ -332,6 +332,7 @@
+                       at91_sys_read(AT91_AIC_IPR) & at91_sys_read(AT91_AIC_IMR));
+ error:
++      sdram_selfrefresh_disable();
+       target_state = PM_SUSPEND_ON;
+       at91_irq_resume();
+       at91_gpio_resume();
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mach-davinci/board-evm.c linux-2.6.29-rc3.owrt/arch/arm/mach-davinci/board-evm.c
+--- linux-2.6.29.owrt/arch/arm/mach-davinci/board-evm.c        2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mach-davinci/board-evm.c    2009-05-10 23:48:27.000000000 +0200
+@@ -311,9 +311,6 @@
+       gpio_request(gpio + 7, "nCF_SEL");
+       gpio_direction_output(gpio + 7, 1);
+-      /* irlml6401 sustains over 3A, switches 5V in under 8 msec */
+-      setup_usb(500, 8);
+-
+       return 0;
+ }
+@@ -420,6 +417,9 @@
+       platform_add_devices(davinci_evm_devices,
+                            ARRAY_SIZE(davinci_evm_devices));
+       evm_init_i2c();
++
++      /* irlml6401 sustains over 3A, switches 5V in under 8 msec */
++      setup_usb(500, 8);
+ }
+ static __init void davinci_evm_irq_init(void)
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mach-davinci/clock.c linux-2.6.29-rc3.owrt/arch/arm/mach-davinci/clock.c
+--- linux-2.6.29.owrt/arch/arm/mach-davinci/clock.c    2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mach-davinci/clock.c        2009-05-10 23:48:27.000000000 +0200
+@@ -231,11 +231,6 @@
+               .lpsc = DAVINCI_LPSC_GPIO,
+       },
+       {
+-              .name = "usb",
+-              .rate = &commonrate,
+-              .lpsc = DAVINCI_LPSC_USB,
+-      },
+-      {
+               .name = "AEMIFCLK",
+               .rate = &commonrate,
+               .lpsc = DAVINCI_LPSC_AEMIF,
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mach-davinci/usb.c linux-2.6.29-rc3.owrt/arch/arm/mach-davinci/usb.c
+--- linux-2.6.29.owrt/arch/arm/mach-davinci/usb.c      2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mach-davinci/usb.c  2009-05-10 23:48:27.000000000 +0200
+@@ -47,7 +47,6 @@
+ #elif defined(CONFIG_USB_MUSB_HOST)
+       .mode           = MUSB_HOST,
+ #endif
+-      .clock          = "usb",
+       .config         = &musb_config,
+ };
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mach-ep93xx/include/mach/gesbc9312.h linux-2.6.29-rc3.owrt/arch/arm/mach-ep93xx/include/mach/gesbc9312.h
+--- linux-2.6.29.owrt/arch/arm/mach-ep93xx/include/mach/gesbc9312.h    1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.29-rc3.owrt/arch/arm/mach-ep93xx/include/mach/gesbc9312.h        2009-05-10 23:48:27.000000000 +0200
+@@ -0,0 +1,3 @@
++/*
++ * arch/arm/mach-ep93xx/include/mach/gesbc9312.h
++ */
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mach-ep93xx/include/mach/hardware.h linux-2.6.29-rc3.owrt/arch/arm/mach-ep93xx/include/mach/hardware.h
+--- linux-2.6.29.owrt/arch/arm/mach-ep93xx/include/mach/hardware.h     2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mach-ep93xx/include/mach/hardware.h 2009-05-10 23:48:27.000000000 +0200
+@@ -10,6 +10,7 @@
+ #include "platform.h"
++#include "gesbc9312.h"
+ #include "ts72xx.h"
+ #endif
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mach-ep93xx/include/mach/platform.h linux-2.6.29-rc3.owrt/arch/arm/mach-ep93xx/include/mach/platform.h
+--- linux-2.6.29.owrt/arch/arm/mach-ep93xx/include/mach/platform.h     2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mach-ep93xx/include/mach/platform.h 2009-05-10 23:48:27.000000000 +0200
+@@ -4,8 +4,6 @@
+ #ifndef __ASSEMBLY__
+-struct i2c_board_info;
+-
+ struct ep93xx_eth_data
+ {
+       unsigned char   dev_addr[6];
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mach-kirkwood/irq.c linux-2.6.29-rc3.owrt/arch/arm/mach-kirkwood/irq.c
+--- linux-2.6.29.owrt/arch/arm/mach-kirkwood/irq.c     2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mach-kirkwood/irq.c 2009-05-10 23:48:27.000000000 +0200
+@@ -42,7 +42,7 @@
+       writel(0, GPIO_EDGE_CAUSE(32));
+       for (i = IRQ_KIRKWOOD_GPIO_START; i < NR_IRQS; i++) {
+-              set_irq_chip(i, &orion_gpio_irq_chip);
++              set_irq_chip(i, &orion_gpio_irq_level_chip);
+               set_irq_handler(i, handle_level_irq);
+               irq_desc[i].status |= IRQ_LEVEL;
+               set_irq_flags(i, IRQF_VALID);
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mach-msm/board-halibut.c linux-2.6.29-rc3.owrt/arch/arm/mach-msm/board-halibut.c
+--- linux-2.6.29.owrt/arch/arm/mach-msm/board-halibut.c        2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mach-msm/board-halibut.c    2009-05-10 23:48:27.000000000 +0200
+@@ -27,7 +27,6 @@
+ #include <asm/mach/map.h>
+ #include <asm/mach/flash.h>
+-#include <mach/irqs.h>
+ #include <mach/board.h>
+ #include <mach/msm_iomap.h>
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mach-mv78xx0/irq.c linux-2.6.29-rc3.owrt/arch/arm/mach-mv78xx0/irq.c
+--- linux-2.6.29.owrt/arch/arm/mach-mv78xx0/irq.c      2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mach-mv78xx0/irq.c  2009-05-10 23:48:27.000000000 +0200
+@@ -40,7 +40,7 @@
+       writel(0, GPIO_EDGE_CAUSE(0));
+       for (i = IRQ_MV78XX0_GPIO_START; i < NR_IRQS; i++) {
+-              set_irq_chip(i, &orion_gpio_irq_chip);
++              set_irq_chip(i, &orion_gpio_irq_level_chip);
+               set_irq_handler(i, handle_level_irq);
+               irq_desc[i].status |= IRQ_LEVEL;
+               set_irq_flags(i, IRQF_VALID);
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mach-mx1/devices.c linux-2.6.29-rc3.owrt/arch/arm/mach-mx1/devices.c
+--- linux-2.6.29.owrt/arch/arm/mach-mx1/devices.c      2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mach-mx1/devices.c  2009-05-10 23:48:27.000000000 +0200
+@@ -23,8 +23,6 @@
+ #include <linux/init.h>
+ #include <linux/platform_device.h>
+ #include <linux/gpio.h>
+-
+-#include <mach/irqs.h>
+ #include <mach/hardware.h>
+ static struct resource imx_csi_resources[] = {
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mach-mx1/mx1ads.c linux-2.6.29-rc3.owrt/arch/arm/mach-mx1/mx1ads.c
+--- linux-2.6.29.owrt/arch/arm/mach-mx1/mx1ads.c       2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mach-mx1/mx1ads.c   2009-05-10 23:48:27.000000000 +0200
+@@ -21,7 +21,6 @@
+ #include <asm/mach/arch.h>
+ #include <asm/mach/time.h>
+-#include <mach/irqs.h>
+ #include <mach/hardware.h>
+ #include <mach/common.h>
+ #include <mach/imx-uart.h>
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mach-omap1/devices.c linux-2.6.29-rc3.owrt/arch/arm/mach-omap1/devices.c
+--- linux-2.6.29.owrt/arch/arm/mach-omap1/devices.c    2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mach-omap1/devices.c        2009-05-10 23:48:27.000000000 +0200
+@@ -181,7 +181,7 @@
+               }
+               size = OMAP1_MMC_SIZE;
+-              omap_mmc_add("mmci-omap", i, base, size, irq, mmc_data[i]);
++              omap_mmc_add(i, base, size, irq, mmc_data[i]);
+       };
+ }
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mach-omap1/mcbsp.c linux-2.6.29-rc3.owrt/arch/arm/mach-omap1/mcbsp.c
+--- linux-2.6.29.owrt/arch/arm/mach-omap1/mcbsp.c      2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mach-omap1/mcbsp.c  2009-05-10 23:48:27.000000000 +0200
+@@ -28,8 +28,81 @@
+ #define DPS_RSTCT2_PER_EN     (1 << 0)
+ #define DSP_RSTCT2_WD_PER_EN  (1 << 1)
++struct mcbsp_internal_clk {
++      struct clk clk;
++      struct clk **childs;
++      int n_childs;
++};
++
+ #if defined(CONFIG_ARCH_OMAP15XX) || defined(CONFIG_ARCH_OMAP16XX)
+-const char *clk_names[] = { "dsp_ck", "api_ck", "dspxor_ck" };
++static void omap_mcbsp_clk_init(struct mcbsp_internal_clk *mclk)
++{
++      const char *clk_names[] = { "dsp_ck", "api_ck", "dspxor_ck" };
++      int i;
++
++      mclk->n_childs = ARRAY_SIZE(clk_names);
++      mclk->childs = kzalloc(mclk->n_childs * sizeof(struct clk *),
++                              GFP_KERNEL);
++
++      for (i = 0; i < mclk->n_childs; i++) {
++              /* We fake a platform device to get correct device id */
++              struct platform_device pdev;
++
++              pdev.dev.bus = &platform_bus_type;
++              pdev.id = mclk->clk.id;
++              mclk->childs[i] = clk_get(&pdev.dev, clk_names[i]);
++              if (IS_ERR(mclk->childs[i]))
++                      printk(KERN_ERR "Could not get clock %s (%d).\n",
++                              clk_names[i], mclk->clk.id);
++      }
++}
++
++static int omap_mcbsp_clk_enable(struct clk *clk)
++{
++      struct mcbsp_internal_clk *mclk = container_of(clk,
++                                      struct mcbsp_internal_clk, clk);
++      int i;
++
++      for (i = 0; i < mclk->n_childs; i++)
++              clk_enable(mclk->childs[i]);
++      return 0;
++}
++
++static void omap_mcbsp_clk_disable(struct clk *clk)
++{
++      struct mcbsp_internal_clk *mclk = container_of(clk,
++                                      struct mcbsp_internal_clk, clk);
++      int i;
++
++      for (i = 0; i < mclk->n_childs; i++)
++              clk_disable(mclk->childs[i]);
++}
++
++static struct mcbsp_internal_clk omap_mcbsp_clks[] = {
++      {
++              .clk = {
++                      .name           = "mcbsp_clk",
++                      .id             = 1,
++                      .enable         = omap_mcbsp_clk_enable,
++                      .disable        = omap_mcbsp_clk_disable,
++              },
++      },
++      {
++              .clk = {
++                      .name           = "mcbsp_clk",
++                      .id             = 3,
++                      .enable         = omap_mcbsp_clk_enable,
++                      .disable        = omap_mcbsp_clk_disable,
++              },
++      },
++};
++
++#define omap_mcbsp_clks_size  ARRAY_SIZE(omap_mcbsp_clks)
++#else
++#define omap_mcbsp_clks_size  0
++static struct mcbsp_internal_clk __initdata *omap_mcbsp_clks;
++static inline void omap_mcbsp_clk_init(struct mcbsp_internal_clk *mclk)
++{ }
+ #endif
+ static void omap1_mcbsp_request(unsigned int id)
+@@ -94,9 +167,8 @@
+               .rx_irq         = INT_McBSP1RX,
+               .tx_irq         = INT_McBSP1TX,
+               .ops            = &omap1_mcbsp_ops,
+-              .clk_names      = clk_names,
+-              .num_clks       = 3,
+-      },
++              .clk_name       = "mcbsp_clk",
++              },
+       {
+               .phys_base      = OMAP1510_MCBSP2_BASE,
+               .dma_rx_sync    = OMAP_DMA_MCBSP2_RX,
+@@ -112,8 +184,7 @@
+               .rx_irq         = INT_McBSP3RX,
+               .tx_irq         = INT_McBSP3TX,
+               .ops            = &omap1_mcbsp_ops,
+-              .clk_names      = clk_names,
+-              .num_clks       = 3,
++              .clk_name       = "mcbsp_clk",
+       },
+ };
+ #define OMAP15XX_MCBSP_PDATA_SZ               ARRAY_SIZE(omap15xx_mcbsp_pdata)
+@@ -131,8 +202,7 @@
+               .rx_irq         = INT_McBSP1RX,
+               .tx_irq         = INT_McBSP1TX,
+               .ops            = &omap1_mcbsp_ops,
+-              .clk_names      = clk_names,
+-              .num_clks       = 3,
++              .clk_name       = "mcbsp_clk",
+       },
+       {
+               .phys_base      = OMAP1610_MCBSP2_BASE,
+@@ -149,8 +219,7 @@
+               .rx_irq         = INT_McBSP3RX,
+               .tx_irq         = INT_McBSP3TX,
+               .ops            = &omap1_mcbsp_ops,
+-              .clk_names      = clk_names,
+-              .num_clks       = 3,
++              .clk_name       = "mcbsp_clk",
+       },
+ };
+ #define OMAP16XX_MCBSP_PDATA_SZ               ARRAY_SIZE(omap16xx_mcbsp_pdata)
+@@ -161,6 +230,15 @@
+ int __init omap1_mcbsp_init(void)
+ {
++      int i;
++
++      for (i = 0; i < omap_mcbsp_clks_size; i++) {
++              if (cpu_is_omap15xx() || cpu_is_omap16xx()) {
++                      omap_mcbsp_clk_init(&omap_mcbsp_clks[i]);
++                      clk_register(&omap_mcbsp_clks[i].clk);
++              }
++      }
++
+       if (cpu_is_omap730())
+               omap_mcbsp_count = OMAP730_MCBSP_PDATA_SZ;
+       if (cpu_is_omap15xx())
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mach-omap2/board-ldp.c linux-2.6.29-rc3.owrt/arch/arm/mach-omap2/board-ldp.c
+--- linux-2.6.29.owrt/arch/arm/mach-omap2/board-ldp.c  2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mach-omap2/board-ldp.c      2009-05-10 23:48:27.000000000 +0200
+@@ -81,7 +81,7 @@
+       }
+       ldp_smc911x_resources[0].start = cs_mem_base + 0x0;
+-      ldp_smc911x_resources[0].end   = cs_mem_base + 0xff;
++      ldp_smc911x_resources[0].end   = cs_mem_base + 0xf;
+       udelay(100);
+       eth_gpio = LDP_SMC911X_GPIO;
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mach-omap2/board-omap3beagle.c linux-2.6.29-rc3.owrt/arch/arm/mach-omap2/board-omap3beagle.c
+--- linux-2.6.29.owrt/arch/arm/mach-omap2/board-omap3beagle.c  2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mach-omap2/board-omap3beagle.c      2009-05-10 23:48:27.000000000 +0200
+@@ -178,9 +178,7 @@
+ #ifdef CONFIG_I2C2_OMAP_BEAGLE
+       omap_register_i2c_bus(2, 400, NULL, 0);
+ #endif
+-      /* Bus 3 is attached to the DVI port where devices like the pico DLP
+-       * projector don't work reliably with 400kHz */
+-      omap_register_i2c_bus(3, 100, NULL, 0);
++      omap_register_i2c_bus(3, 400, NULL, 0);
+       return 0;
+ }
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mach-omap2/clock.c linux-2.6.29-rc3.owrt/arch/arm/mach-omap2/clock.c
+--- linux-2.6.29.owrt/arch/arm/mach-omap2/clock.c      2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mach-omap2/clock.c  2009-05-10 23:48:27.000000000 +0200
+@@ -565,7 +565,7 @@
+  *
+  * Given a struct clk of a rate-selectable clksel clock, and a clock divisor,
+  * find the corresponding register field value.  The return register value is
+- * the value before left-shifting.  Returns ~0 on error
++ * the value before left-shifting.  Returns 0xffffffff on error
+  */
+ u32 omap2_divisor_to_clksel(struct clk *clk, u32 div)
+ {
+@@ -577,7 +577,7 @@
+       clks = omap2_get_clksel_by_parent(clk, clk->parent);
+       if (clks == NULL)
+-              return ~0;
++              return 0;
+       for (clkr = clks->rates; clkr->div; clkr++) {
+               if ((clkr->flags & cpu_mask) && (clkr->div == div))
+@@ -588,7 +588,7 @@
+               printk(KERN_ERR "clock: Could not find divisor %d for "
+                      "clock %s parent %s\n", div, clk->name,
+                      clk->parent->name);
+-              return ~0;
++              return 0;
+       }
+       return clkr->val;
+@@ -708,7 +708,7 @@
+               return 0;
+       for (clkr = clks->rates; clkr->div; clkr++) {
+-              if (clkr->flags & cpu_mask && clkr->flags & DEFAULT_RATE)
++              if (clkr->flags & (cpu_mask | DEFAULT_RATE))
+                       break; /* Found the default rate for this platform */
+       }
+@@ -746,7 +746,7 @@
+               return -EINVAL;
+       if (clk->usecount > 0)
+-              omap2_clk_disable(clk);
++              _omap2_clk_disable(clk);
+       /* Set new source value (previous dividers if any in effect) */
+       reg_val = __raw_readl(src_addr) & ~field_mask;
+@@ -759,10 +759,10 @@
+               wmb();
+       }
+-      clk->parent = new_parent;
+-
+       if (clk->usecount > 0)
+-              omap2_clk_enable(clk);
++              _omap2_clk_enable(clk);
++
++      clk->parent = new_parent;
+       /* CLKSEL clocks follow their parents' rates, divided by a divisor */
+       clk->rate = new_parent->rate;
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mach-omap2/devices.c linux-2.6.29-rc3.owrt/arch/arm/mach-omap2/devices.c
+--- linux-2.6.29.owrt/arch/arm/mach-omap2/devices.c    2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mach-omap2/devices.c        2009-05-10 23:48:27.000000000 +0200
+@@ -421,7 +421,6 @@
+                       int nr_controllers)
+ {
+       int i;
+-      char *name;
+       for (i = 0; i < nr_controllers; i++) {
+               unsigned long base, size;
+@@ -451,14 +450,12 @@
+                       continue;
+               }
+-              if (cpu_is_omap2420()) {
++              if (cpu_is_omap2420())
+                       size = OMAP2420_MMC_SIZE;
+-                      name = "mmci-omap";
+-              } else {
++              else
+                       size = HSMMC_SIZE;
+-                      name = "mmci-omap-hs";
+-              }
+-              omap_mmc_add(name, i, base, size, irq, mmc_data[i]);
++
++              omap_mmc_add(i, base, size, irq, mmc_data[i]);
+       };
+ }
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mach-omap2/id.c linux-2.6.29-rc3.owrt/arch/arm/mach-omap2/id.c
+--- linux-2.6.29.owrt/arch/arm/mach-omap2/id.c 2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mach-omap2/id.c     2009-05-10 23:48:27.000000000 +0200
+@@ -172,13 +172,9 @@
+                       omap_revision = OMAP3430_REV_ES3_0;
+                       rev_name = "ES3.0";
+                       break;
+-              case 4:
+-                      omap_revision = OMAP3430_REV_ES3_1;
+-                      rev_name = "ES3.1";
+-                      break;
+               default:
+                       /* Use the latest known revision as default */
+-                      omap_revision = OMAP3430_REV_ES3_1;
++                      omap_revision = OMAP3430_REV_ES3_0;
+                       rev_name = "Unknown revision\n";
+               }
+       }
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mach-omap2/irq.c linux-2.6.29-rc3.owrt/arch/arm/mach-omap2/irq.c
+--- linux-2.6.29.owrt/arch/arm/mach-omap2/irq.c        2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mach-omap2/irq.c    2009-05-10 23:48:27.000000000 +0200
+@@ -134,7 +134,6 @@
+       .ack    = omap_mask_ack_irq,
+       .mask   = omap_mask_irq,
+       .unmask = omap_unmask_irq,
+-      .disable = omap_mask_irq,
+ };
+ static void __init omap_irq_bank_init_one(struct omap_irq_bank *bank)
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mach-omap2/mcbsp.c linux-2.6.29-rc3.owrt/arch/arm/mach-omap2/mcbsp.c
+--- linux-2.6.29.owrt/arch/arm/mach-omap2/mcbsp.c      2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mach-omap2/mcbsp.c  2009-05-10 23:48:27.000000000 +0200
+@@ -24,7 +24,106 @@
+ #include <mach/cpu.h>
+ #include <mach/mcbsp.h>
+-const char *clk_names[] = { "mcbsp_ick", "mcbsp_fck" };
++struct mcbsp_internal_clk {
++      struct clk clk;
++      struct clk **childs;
++      int n_childs;
++};
++
++#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
++static void omap_mcbsp_clk_init(struct mcbsp_internal_clk *mclk)
++{
++      const char *clk_names[] = { "mcbsp_ick", "mcbsp_fck" };
++      int i;
++
++      mclk->n_childs = ARRAY_SIZE(clk_names);
++      mclk->childs = kzalloc(mclk->n_childs * sizeof(struct clk *),
++                              GFP_KERNEL);
++
++      for (i = 0; i < mclk->n_childs; i++) {
++              /* We fake a platform device to get correct device id */
++              struct platform_device pdev;
++
++              pdev.dev.bus = &platform_bus_type;
++              pdev.id = mclk->clk.id;
++              mclk->childs[i] = clk_get(&pdev.dev, clk_names[i]);
++              if (IS_ERR(mclk->childs[i]))
++                      printk(KERN_ERR "Could not get clock %s (%d).\n",
++                              clk_names[i], mclk->clk.id);
++      }
++}
++
++static int omap_mcbsp_clk_enable(struct clk *clk)
++{
++      struct mcbsp_internal_clk *mclk = container_of(clk,
++                                      struct mcbsp_internal_clk, clk);
++      int i;
++
++      for (i = 0; i < mclk->n_childs; i++)
++              clk_enable(mclk->childs[i]);
++      return 0;
++}
++
++static void omap_mcbsp_clk_disable(struct clk *clk)
++{
++      struct mcbsp_internal_clk *mclk = container_of(clk,
++                                      struct mcbsp_internal_clk, clk);
++      int i;
++
++      for (i = 0; i < mclk->n_childs; i++)
++              clk_disable(mclk->childs[i]);
++}
++
++static struct mcbsp_internal_clk omap_mcbsp_clks[] = {
++      {
++              .clk = {
++                      .name           = "mcbsp_clk",
++                      .id             = 1,
++                      .enable         = omap_mcbsp_clk_enable,
++                      .disable        = omap_mcbsp_clk_disable,
++              },
++      },
++      {
++              .clk = {
++                      .name           = "mcbsp_clk",
++                      .id             = 2,
++                      .enable         = omap_mcbsp_clk_enable,
++                      .disable        = omap_mcbsp_clk_disable,
++              },
++      },
++      {
++              .clk = {
++                      .name           = "mcbsp_clk",
++                      .id             = 3,
++                      .enable         = omap_mcbsp_clk_enable,
++                      .disable        = omap_mcbsp_clk_disable,
++              },
++      },
++      {
++              .clk = {
++                      .name           = "mcbsp_clk",
++                      .id             = 4,
++                      .enable         = omap_mcbsp_clk_enable,
++                      .disable        = omap_mcbsp_clk_disable,
++              },
++      },
++      {
++              .clk = {
++                      .name           = "mcbsp_clk",
++                      .id             = 5,
++                      .enable         = omap_mcbsp_clk_enable,
++                      .disable        = omap_mcbsp_clk_disable,
++              },
++      },
++};
++
++#define omap_mcbsp_clks_size  ARRAY_SIZE(omap_mcbsp_clks)
++#else
++#define omap_mcbsp_clks_size  0
++static struct mcbsp_internal_clk __initdata *omap_mcbsp_clks;
++static inline void omap_mcbsp_clk_init(struct clk *clk)
++{ }
++#endif
+ static void omap2_mcbsp2_mux_setup(void)
+ {
+@@ -57,8 +156,7 @@
+               .rx_irq         = INT_24XX_MCBSP1_IRQ_RX,
+               .tx_irq         = INT_24XX_MCBSP1_IRQ_TX,
+               .ops            = &omap2_mcbsp_ops,
+-              .clk_names      = clk_names,
+-              .num_clks       = 2,
++              .clk_name       = "mcbsp_clk",
+       },
+       {
+               .phys_base      = OMAP24XX_MCBSP2_BASE,
+@@ -67,8 +165,7 @@
+               .rx_irq         = INT_24XX_MCBSP2_IRQ_RX,
+               .tx_irq         = INT_24XX_MCBSP2_IRQ_TX,
+               .ops            = &omap2_mcbsp_ops,
+-              .clk_names      = clk_names,
+-              .num_clks       = 2,
++              .clk_name       = "mcbsp_clk",
+       },
+ };
+ #define OMAP2420_MCBSP_PDATA_SZ               ARRAY_SIZE(omap2420_mcbsp_pdata)
+@@ -86,8 +183,7 @@
+               .rx_irq         = INT_24XX_MCBSP1_IRQ_RX,
+               .tx_irq         = INT_24XX_MCBSP1_IRQ_TX,
+               .ops            = &omap2_mcbsp_ops,
+-              .clk_names      = clk_names,
+-              .num_clks       = 2,
++              .clk_name       = "mcbsp_clk",
+       },
+       {
+               .phys_base      = OMAP24XX_MCBSP2_BASE,
+@@ -96,8 +192,7 @@
+               .rx_irq         = INT_24XX_MCBSP2_IRQ_RX,
+               .tx_irq         = INT_24XX_MCBSP2_IRQ_TX,
+               .ops            = &omap2_mcbsp_ops,
+-              .clk_names      = clk_names,
+-              .num_clks       = 2,
++              .clk_name       = "mcbsp_clk",
+       },
+       {
+               .phys_base      = OMAP2430_MCBSP3_BASE,
+@@ -106,8 +201,7 @@
+               .rx_irq         = INT_24XX_MCBSP3_IRQ_RX,
+               .tx_irq         = INT_24XX_MCBSP3_IRQ_TX,
+               .ops            = &omap2_mcbsp_ops,
+-              .clk_names      = clk_names,
+-              .num_clks       = 2,
++              .clk_name       = "mcbsp_clk",
+       },
+       {
+               .phys_base      = OMAP2430_MCBSP4_BASE,
+@@ -116,8 +210,7 @@
+               .rx_irq         = INT_24XX_MCBSP4_IRQ_RX,
+               .tx_irq         = INT_24XX_MCBSP4_IRQ_TX,
+               .ops            = &omap2_mcbsp_ops,
+-              .clk_names      = clk_names,
+-              .num_clks       = 2,
++              .clk_name       = "mcbsp_clk",
+       },
+       {
+               .phys_base      = OMAP2430_MCBSP5_BASE,
+@@ -126,8 +219,7 @@
+               .rx_irq         = INT_24XX_MCBSP5_IRQ_RX,
+               .tx_irq         = INT_24XX_MCBSP5_IRQ_TX,
+               .ops            = &omap2_mcbsp_ops,
+-              .clk_names      = clk_names,
+-              .num_clks       = 2,
++              .clk_name       = "mcbsp_clk",
+       },
+ };
+ #define OMAP2430_MCBSP_PDATA_SZ               ARRAY_SIZE(omap2430_mcbsp_pdata)
+@@ -145,8 +237,7 @@
+               .rx_irq         = INT_24XX_MCBSP1_IRQ_RX,
+               .tx_irq         = INT_24XX_MCBSP1_IRQ_TX,
+               .ops            = &omap2_mcbsp_ops,
+-              .clk_names      = clk_names,
+-              .num_clks       = 2,
++              .clk_name       = "mcbsp_clk",
+       },
+       {
+               .phys_base      = OMAP34XX_MCBSP2_BASE,
+@@ -155,8 +246,7 @@
+               .rx_irq         = INT_24XX_MCBSP2_IRQ_RX,
+               .tx_irq         = INT_24XX_MCBSP2_IRQ_TX,
+               .ops            = &omap2_mcbsp_ops,
+-              .clk_names      = clk_names,
+-              .num_clks       = 2,
++              .clk_name       = "mcbsp_clk",
+       },
+       {
+               .phys_base      = OMAP34XX_MCBSP3_BASE,
+@@ -165,8 +255,7 @@
+               .rx_irq         = INT_24XX_MCBSP3_IRQ_RX,
+               .tx_irq         = INT_24XX_MCBSP3_IRQ_TX,
+               .ops            = &omap2_mcbsp_ops,
+-              .clk_names      = clk_names,
+-              .num_clks       = 2,
++              .clk_name       = "mcbsp_clk",
+       },
+       {
+               .phys_base      = OMAP34XX_MCBSP4_BASE,
+@@ -175,8 +264,7 @@
+               .rx_irq         = INT_24XX_MCBSP4_IRQ_RX,
+               .tx_irq         = INT_24XX_MCBSP4_IRQ_TX,
+               .ops            = &omap2_mcbsp_ops,
+-              .clk_names      = clk_names,
+-              .num_clks       = 2,
++              .clk_name       = "mcbsp_clk",
+       },
+       {
+               .phys_base      = OMAP34XX_MCBSP5_BASE,
+@@ -185,8 +273,7 @@
+               .rx_irq         = INT_24XX_MCBSP5_IRQ_RX,
+               .tx_irq         = INT_24XX_MCBSP5_IRQ_TX,
+               .ops            = &omap2_mcbsp_ops,
+-              .clk_names      = clk_names,
+-              .num_clks       = 2,
++              .clk_name       = "mcbsp_clk",
+       },
+ };
+ #define OMAP34XX_MCBSP_PDATA_SZ               ARRAY_SIZE(omap34xx_mcbsp_pdata)
+@@ -197,6 +284,14 @@
+ static int __init omap2_mcbsp_init(void)
+ {
++      int i;
++
++      for (i = 0; i < omap_mcbsp_clks_size; i++) {
++              /* Once we call clk_get inside init, we do not register it */
++              omap_mcbsp_clk_init(&omap_mcbsp_clks[i]);
++              clk_register(&omap_mcbsp_clks[i].clk);
++      }
++
+       if (cpu_is_omap2420())
+               omap_mcbsp_count = OMAP2420_MCBSP_PDATA_SZ;
+       if (cpu_is_omap2430())
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mach-omap2/sleep24xx.S linux-2.6.29-rc3.owrt/arch/arm/mach-omap2/sleep24xx.S
+--- linux-2.6.29.owrt/arch/arm/mach-omap2/sleep24xx.S  2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mach-omap2/sleep24xx.S      2009-05-10 23:48:28.000000000 +0200
+@@ -93,8 +93,9 @@
+       orr     r4, r4, #0x40           @ enable self refresh on idle req
+       mov     r5, #0x2000             @ set delay (DPLL relock + DLL relock)
+       str     r4, [r2]                @ make it so
++      mov     r2, #0
+       nop
+-      mcr     p15, 0, r3, c7, c0, 4   @ wait for interrupt
++      mcr     p15, 0, r2, c7, c0, 4   @ wait for interrupt
+       nop
+ loop:
+       subs    r5, r5, #0x1            @ awake, wait just a bit
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mach-omap2/timer-gp.c linux-2.6.29-rc3.owrt/arch/arm/mach-omap2/timer-gp.c
+--- linux-2.6.29.owrt/arch/arm/mach-omap2/timer-gp.c   2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mach-omap2/timer-gp.c       2009-05-10 23:48:28.000000000 +0200
+@@ -118,8 +118,7 @@
+       clockevent_gpt.max_delta_ns =
+               clockevent_delta2ns(0xffffffff, &clockevent_gpt);
+       clockevent_gpt.min_delta_ns =
+-              clockevent_delta2ns(3, &clockevent_gpt);
+-              /* Timer internal resynch latency. */
++              clockevent_delta2ns(1, &clockevent_gpt);
+       clockevent_gpt.cpumask = cpumask_of(0);
+       clockevents_register_device(&clockevent_gpt);
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mach-orion5x/common.c linux-2.6.29-rc3.owrt/arch/arm/mach-orion5x/common.c
+--- linux-2.6.29.owrt/arch/arm/mach-orion5x/common.c   2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mach-orion5x/common.c       2009-05-10 23:48:28.000000000 +0200
+@@ -431,10 +431,6 @@
+ /*****************************************************************************
+  * XOR engine
+  ****************************************************************************/
+-struct mv_xor_platform_shared_data orion5x_xor_shared_data = {
+-      .dram           = &orion5x_mbus_dram_info,
+-};
+-
+ static struct resource orion5x_xor_shared_resources[] = {
+       {
+               .name   = "xor low",
+@@ -452,9 +448,6 @@
+ static struct platform_device orion5x_xor_shared = {
+       .name           = MV_XOR_SHARED_NAME,
+       .id             = 0,
+-      .dev            = {
+-              .platform_data  = &orion5x_xor_shared_data,
+-      },
+       .num_resources  = ARRAY_SIZE(orion5x_xor_shared_resources),
+       .resource       = orion5x_xor_shared_resources,
+ };
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mach-orion5x/irq.c linux-2.6.29-rc3.owrt/arch/arm/mach-orion5x/irq.c
+--- linux-2.6.29.owrt/arch/arm/mach-orion5x/irq.c      2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mach-orion5x/irq.c  2009-05-10 23:48:28.000000000 +0200
+@@ -44,7 +44,7 @@
+        * User can use set_type() if he wants to use edge types handlers.
+        */
+       for (i = IRQ_ORION5X_GPIO_START; i < NR_IRQS; i++) {
+-              set_irq_chip(i, &orion_gpio_irq_chip);
++              set_irq_chip(i, &orion_gpio_irq_level_chip);
+               set_irq_handler(i, handle_level_irq);
+               irq_desc[i].status |= IRQ_LEVEL;
+               set_irq_flags(i, IRQF_VALID);
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mach-pxa/dma.c linux-2.6.29-rc3.owrt/arch/arm/mach-pxa/dma.c
+--- linux-2.6.29.owrt/arch/arm/mach-pxa/dma.c  2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mach-pxa/dma.c      2009-05-10 23:48:28.000000000 +0200
+@@ -121,16 +121,6 @@
+       if (dma_channels == NULL)
+               return -ENOMEM;
+-      /* dma channel priorities on pxa2xx processors:
+-       * ch 0 - 3,  16 - 19  <--> (0) DMA_PRIO_HIGH
+-       * ch 4 - 7,  20 - 23  <--> (1) DMA_PRIO_MEDIUM
+-       * ch 8 - 15, 24 - 31  <--> (2) DMA_PRIO_LOW
+-       */
+-      for (i = 0; i < num_ch; i++) {
+-              DCSR(i) = 0;
+-              dma_channels[i].prio = min((i & 0xf) >> 2, DMA_PRIO_LOW);
+-      }
+-
+       ret = request_irq(IRQ_DMA, dma_irq_handler, IRQF_DISABLED, "DMA", NULL);
+       if (ret) {
+               printk (KERN_CRIT "Wow!  Can't register IRQ for DMA\n");
+@@ -138,6 +128,14 @@
+               return ret;
+       }
++      /* dma channel priorities on pxa2xx processors:
++       * ch 0 - 3,  16 - 19  <--> (0) DMA_PRIO_HIGH
++       * ch 4 - 7,  20 - 23  <--> (1) DMA_PRIO_MEDIUM
++       * ch 8 - 15, 24 - 31  <--> (2) DMA_PRIO_LOW
++       */
++      for (i = 0; i < num_ch; i++)
++              dma_channels[i].prio = min((i & 0xf) >> 2, DMA_PRIO_LOW);
++
+       num_dma_channels = num_ch;
+       return 0;
+ }
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mach-pxa/include/mach/regs-ac97.h linux-2.6.29-rc3.owrt/arch/arm/mach-pxa/include/mach/regs-ac97.h
+--- linux-2.6.29.owrt/arch/arm/mach-pxa/include/mach/regs-ac97.h       2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mach-pxa/include/mach/regs-ac97.h   2009-05-10 23:48:28.000000000 +0200
+@@ -1,8 +1,6 @@
+ #ifndef __ASM_ARCH_REGS_AC97_H
+ #define __ASM_ARCH_REGS_AC97_H
+-#include <mach/hardware.h>
+-
+ /*
+  * AC97 Controller registers
+  */
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mach-pxa/include/mach/regs-ssp.h linux-2.6.29-rc3.owrt/arch/arm/mach-pxa/include/mach/regs-ssp.h
+--- linux-2.6.29.owrt/arch/arm/mach-pxa/include/mach/regs-ssp.h        2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mach-pxa/include/mach/regs-ssp.h    2009-05-10 23:48:28.000000000 +0200
+@@ -41,9 +41,6 @@
+ #elif defined(CONFIG_PXA27x) || defined(CONFIG_PXA3xx)
+ #define SSCR0_SCR     (0x000fff00)    /* Serial Clock Rate (mask) */
+ #define SSCR0_SerClkDiv(x) (((x) - 1) << 8) /* Divisor [1..4096] */
+-#endif
+-
+-#if defined(CONFIG_PXA27x) || defined(CONFIG_PXA3xx)
+ #define SSCR0_EDSS    (1 << 20)       /* Extended data size select */
+ #define SSCR0_NCS     (1 << 21)       /* Network clock select */
+ #define SSCR0_RIM     (1 << 22)       /* Receive FIFO overrrun interrupt mask */
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mach-pxa/pxa300.c linux-2.6.29-rc3.owrt/arch/arm/mach-pxa/pxa300.c
+--- linux-2.6.29.owrt/arch/arm/mach-pxa/pxa300.c       2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mach-pxa/pxa300.c   2009-05-10 23:48:28.000000000 +0200
+@@ -88,13 +88,13 @@
+ static DEFINE_PXA3_CKEN(common_nand, NAND, 156000000, 0);
+ static struct clk_lookup common_clkregs[] = {
+-      INIT_CLKREG(&clk_common_nand, "pxa3xx-nand", NULL),
++      INIT_CLKREG(&clk_common_nand, "pxa3xx-nand", "NANDCLK"),
+ };
+ static DEFINE_PXA3_CKEN(pxa310_mmc3, MMC3, 19500000, 0);
+ static struct clk_lookup pxa310_clkregs[] = {
+-      INIT_CLKREG(&clk_pxa310_mmc3, "pxa2xx-mci.2", NULL),
++      INIT_CLKREG(&clk_pxa310_mmc3, "pxa2xx-mci.2", "MMCCLK"),
+ };
+ static int __init pxa300_init(void)
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mach-pxa/pxa320.c linux-2.6.29-rc3.owrt/arch/arm/mach-pxa/pxa320.c
+--- linux-2.6.29.owrt/arch/arm/mach-pxa/pxa320.c       2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mach-pxa/pxa320.c   2009-05-10 23:48:28.000000000 +0200
+@@ -83,7 +83,7 @@
+ static DEFINE_PXA3_CKEN(pxa320_nand, NAND, 104000000, 0);
+ static struct clk_lookup pxa320_clkregs[] = {
+-      INIT_CLKREG(&clk_pxa320_nand, "pxa3xx-nand", NULL),
++      INIT_CLKREG(&clk_pxa320_nand, "pxa3xx-nand", "NANDCLK"),
+ };
+ static int __init pxa320_init(void)
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mach-rpc/riscpc.c linux-2.6.29-rc3.owrt/arch/arm/mach-rpc/riscpc.c
+--- linux-2.6.29.owrt/arch/arm/mach-rpc/riscpc.c       2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mach-rpc/riscpc.c   2009-05-10 23:48:28.000000000 +0200
+@@ -19,7 +19,6 @@
+ #include <linux/serial_8250.h>
+ #include <linux/ata_platform.h>
+ #include <linux/io.h>
+-#include <linux/i2c.h>
+ #include <asm/elf.h>
+ #include <asm/mach-types.h>
+@@ -202,13 +201,8 @@
+       &pata_device,
+ };
+-static struct i2c_board_info i2c_rtc = {
+-      I2C_BOARD_INFO("pcf8583", 0x50)
+-};
+-
+ static int __init rpc_init(void)
+ {
+-      i2c_register_board_info(0, &i2c_rtc, 1);
+       return platform_add_devices(devs, ARRAY_SIZE(devs));
+ }
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mach-s3c6410/mach-smdk6410.c linux-2.6.29-rc3.owrt/arch/arm/mach-s3c6410/mach-smdk6410.c
+--- linux-2.6.29.owrt/arch/arm/mach-s3c6410/mach-smdk6410.c    2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mach-s3c6410/mach-smdk6410.c        2009-05-10 23:48:28.000000000 +0200
+@@ -129,7 +129,7 @@
+       .vidcon1        = VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
+ };
+-static struct map_desc smdk6410_iodesc[] = {};
++struct map_desc smdk6410_iodesc[] = {};
+ static struct platform_device *smdk6410_devices[] __initdata = {
+ #ifdef CONFIG_SMDK6410_SD_CH0
+@@ -146,7 +146,7 @@
+ static struct i2c_board_info i2c_devs0[] __initdata = {
+       { I2C_BOARD_INFO("24c08", 0x50), },
+-      { I2C_BOARD_INFO("wm8580", 0x1b), },
++      { I2C_BOARD_INFO("WM8580", 0X1b), },
+ };
+ static struct i2c_board_info i2c_devs1[] __initdata = {
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mach-sa1100/generic.c linux-2.6.29-rc3.owrt/arch/arm/mach-sa1100/generic.c
+--- linux-2.6.29.owrt/arch/arm/mach-sa1100/generic.c   2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mach-sa1100/generic.c       2009-05-10 23:48:28.000000000 +0200
+@@ -289,7 +289,7 @@
+ };
+ static struct platform_device sa11x0mtd_device = {
+-      .name           = "sa1100-mtd",
++      .name           = "flash",
+       .id             = -1,
+ };
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mm/abort-ev6.S linux-2.6.29-rc3.owrt/arch/arm/mm/abort-ev6.S
+--- linux-2.6.29.owrt/arch/arm/mm/abort-ev6.S  2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mm/abort-ev6.S      2009-05-10 23:48:28.000000000 +0200
+@@ -23,8 +23,7 @@
+ #ifdef CONFIG_CPU_32v6K
+       clrex
+ #else
+-      sub     r1, sp, #4                      @ Get unused stack location
+-      strex   r0, r1, [r1]                    @ Clear the exclusive monitor
++      strex   r0, r1, [sp]                    @ Clear the exclusive monitor
+ #endif
+       mrc     p15, 0, r1, c5, c0, 0           @ get FSR
+       mrc     p15, 0, r0, c6, c0, 0           @ get FAR
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mm/copypage-feroceon.c linux-2.6.29-rc3.owrt/arch/arm/mm/copypage-feroceon.c
+--- linux-2.6.29.owrt/arch/arm/mm/copypage-feroceon.c  2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mm/copypage-feroceon.c      2009-05-10 23:48:28.000000000 +0200
+@@ -13,7 +13,7 @@
+ #include <linux/init.h>
+ #include <linux/highmem.h>
+-static void __naked
++static void __attribute__((naked))
+ feroceon_copy_user_page(void *kto, const void *kfrom)
+ {
+       asm("\
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mm/copypage-v3.c linux-2.6.29-rc3.owrt/arch/arm/mm/copypage-v3.c
+--- linux-2.6.29.owrt/arch/arm/mm/copypage-v3.c        2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mm/copypage-v3.c    2009-05-10 23:48:28.000000000 +0200
+@@ -15,7 +15,7 @@
+  *
+  * FIXME: do we need to handle cache stuff...
+  */
+-static void __naked
++static void __attribute__((naked))
+ v3_copy_user_page(void *kto, const void *kfrom)
+ {
+       asm("\n\
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mm/copypage-v4mc.c linux-2.6.29-rc3.owrt/arch/arm/mm/copypage-v4mc.c
+--- linux-2.6.29.owrt/arch/arm/mm/copypage-v4mc.c      2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mm/copypage-v4mc.c  2009-05-10 23:48:28.000000000 +0200
+@@ -44,7 +44,7 @@
+  * instruction.  If your processor does not supply this, you have to write your
+  * own copy_user_highpage that does the right thing.
+  */
+-static void __naked
++static void __attribute__((naked))
+ mc_copy_user_page(void *from, void *to)
+ {
+       asm volatile(
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mm/copypage-v4wb.c linux-2.6.29-rc3.owrt/arch/arm/mm/copypage-v4wb.c
+--- linux-2.6.29.owrt/arch/arm/mm/copypage-v4wb.c      2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mm/copypage-v4wb.c  2009-05-10 23:48:28.000000000 +0200
+@@ -22,7 +22,7 @@
+  * instruction.  If your processor does not supply this, you have to write your
+  * own copy_user_highpage that does the right thing.
+  */
+-static void __naked
++static void __attribute__((naked))
+ v4wb_copy_user_page(void *kto, const void *kfrom)
+ {
+       asm("\
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mm/copypage-v4wt.c linux-2.6.29-rc3.owrt/arch/arm/mm/copypage-v4wt.c
+--- linux-2.6.29.owrt/arch/arm/mm/copypage-v4wt.c      2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mm/copypage-v4wt.c  2009-05-10 23:48:28.000000000 +0200
+@@ -20,7 +20,7 @@
+  * dirty data in the cache.  However, we do have to ensure that
+  * subsequent reads are up to date.
+  */
+-static void __naked
++static void __attribute__((naked))
+ v4wt_copy_user_page(void *kto, const void *kfrom)
+ {
+       asm("\
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mm/copypage-xsc3.c linux-2.6.29-rc3.owrt/arch/arm/mm/copypage-xsc3.c
+--- linux-2.6.29.owrt/arch/arm/mm/copypage-xsc3.c      2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mm/copypage-xsc3.c  2009-05-10 23:48:28.000000000 +0200
+@@ -29,7 +29,7 @@
+  * if we eventually end up using our copied page.
+  *
+  */
+-static void __naked
++static void __attribute__((naked))
+ xsc3_mc_copy_user_page(void *kto, const void *kfrom)
+ {
+       asm("\
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mm/copypage-xscale.c linux-2.6.29-rc3.owrt/arch/arm/mm/copypage-xscale.c
+--- linux-2.6.29.owrt/arch/arm/mm/copypage-xscale.c    2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mm/copypage-xscale.c        2009-05-10 23:48:28.000000000 +0200
+@@ -42,7 +42,7 @@
+  * Dcache aliasing issue.  The writes will be forwarded to the write buffer,
+  * and merged as appropriate.
+  */
+-static void __naked
++static void __attribute__((naked))
+ mc_copy_user_page(void *from, void *to)
+ {
+       /*
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mm/dma-mapping.c linux-2.6.29-rc3.owrt/arch/arm/mm/dma-mapping.c
+--- linux-2.6.29.owrt/arch/arm/mm/dma-mapping.c        2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mm/dma-mapping.c    2009-05-10 23:48:28.000000000 +0200
+@@ -490,30 +490,26 @@
+  */
+ void dma_cache_maint(const void *start, size_t size, int direction)
+ {
+-      void (*inner_op)(const void *, const void *);
+-      void (*outer_op)(unsigned long, unsigned long);
++      const void *end = start + size;
+-      BUG_ON(!virt_addr_valid(start) || !virt_addr_valid(start + size - 1));
++      BUG_ON(!virt_addr_valid(start) || !virt_addr_valid(end - 1));
+       switch (direction) {
+       case DMA_FROM_DEVICE:           /* invalidate only */
+-              inner_op = dmac_inv_range;
+-              outer_op = outer_inv_range;
++              dmac_inv_range(start, end);
++              outer_inv_range(__pa(start), __pa(end));
+               break;
+       case DMA_TO_DEVICE:             /* writeback only */
+-              inner_op = dmac_clean_range;
+-              outer_op = outer_clean_range;
++              dmac_clean_range(start, end);
++              outer_clean_range(__pa(start), __pa(end));
+               break;
+       case DMA_BIDIRECTIONAL:         /* writeback and invalidate */
+-              inner_op = dmac_flush_range;
+-              outer_op = outer_flush_range;
++              dmac_flush_range(start, end);
++              outer_flush_range(__pa(start), __pa(end));
+               break;
+       default:
+               BUG();
+       }
+-
+-      inner_op(start, start + size);
+-      outer_op(__pa(start), __pa(start) + size);
+ }
+ EXPORT_SYMBOL(dma_cache_maint);
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mm/fault-armv.c linux-2.6.29-rc3.owrt/arch/arm/mm/fault-armv.c
+--- linux-2.6.29.owrt/arch/arm/mm/fault-armv.c 2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mm/fault-armv.c     2009-05-10 23:48:28.000000000 +0200
+@@ -66,10 +66,7 @@
+        * fault (ie, is old), we can safely ignore any issues.
+        */
+       if (ret && (pte_val(entry) & L_PTE_MT_MASK) != shared_pte_mask) {
+-              unsigned long pfn = pte_pfn(entry);
+-              flush_cache_page(vma, address, pfn);
+-              outer_flush_range((pfn << PAGE_SHIFT),
+-                                (pfn << PAGE_SHIFT) + PAGE_SIZE);
++              flush_cache_page(vma, address, pte_pfn(entry));
+               pte_val(entry) &= ~L_PTE_MT_MASK;
+               pte_val(entry) |= shared_pte_mask;
+               set_pte_at(vma->vm_mm, address, pte, entry);
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mm/init.c linux-2.6.29-rc3.owrt/arch/arm/mm/init.c
+--- linux-2.6.29.owrt/arch/arm/mm/init.c       2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mm/init.c   2009-05-10 23:48:28.000000000 +0200
+@@ -382,7 +382,7 @@
+       for_each_node(node)
+               bootmem_free_node(node, mi);
+-      high_memory = __va((memend_pfn << PAGE_SHIFT) - 1) + 1;
++      high_memory = __va(memend_pfn << PAGE_SHIFT);
+       /*
+        * This doesn't seem to be used by the Linux memory manager any
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mm/mmap.c linux-2.6.29-rc3.owrt/arch/arm/mm/mmap.c
+--- linux-2.6.29.owrt/arch/arm/mm/mmap.c       2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mm/mmap.c   2009-05-10 23:48:28.000000000 +0200
+@@ -124,7 +124,7 @@
+ {
+       if (addr < PHYS_OFFSET)
+               return 0;
+-      if (addr + size >= __pa(high_memory - 1))
++      if (addr + size > __pa(high_memory))
+               return 0;
+       return 1;
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/mm/mmu.c linux-2.6.29-rc3.owrt/arch/arm/mm/mmu.c
+--- linux-2.6.29.owrt/arch/arm/mm/mmu.c        2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/mm/mmu.c    2009-05-10 23:48:28.000000000 +0200
+@@ -693,8 +693,7 @@
+                * Check whether this memory bank would entirely overlap
+                * the vmalloc area.
+                */
+-              if (__va(bank->start) >= VMALLOC_MIN ||
+-                  __va(bank->start) < PAGE_OFFSET) {
++              if (__va(bank->start) >= VMALLOC_MIN) {
+                       printk(KERN_NOTICE "Ignoring RAM at %.8lx-%.8lx "
+                              "(vmalloc region overlap).\n",
+                              bank->start, bank->start + bank->size - 1);
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/plat-mxc/include/mach/mmc.h linux-2.6.29-rc3.owrt/arch/arm/plat-mxc/include/mach/mmc.h
+--- linux-2.6.29.owrt/arch/arm/plat-mxc/include/mach/mmc.h     2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/plat-mxc/include/mach/mmc.h 1970-01-01 01:00:00.000000000 +0100
+@@ -1,36 +0,0 @@
+-#ifndef ASMARM_ARCH_MMC_H
+-#define ASMARM_ARCH_MMC_H
+-
+-#include <linux/mmc/host.h>
+-
+-struct device;
+-
+-/* board specific SDHC data, optional.
+- * If not present, a writable card with 3,3V is assumed.
+- */
+-struct imxmmc_platform_data {
+-      /* Return values for the get_ro callback should be:
+-       *   0 for a read/write card
+-       *   1 for a read-only card
+-       *   -ENOSYS when not supported (equal to NULL callback)
+-       *   or a negative errno value when something bad happened
+-       */
+-      int (*get_ro)(struct device *);
+-
+-      /* board specific hook to (de)initialize the SD slot.
+-       * The board code can call 'handler' on a card detection
+-       * change giving data as argument.
+-       */
+-      int (*init)(struct device *dev, irq_handler_t handler, void *data);
+-      void (*exit)(struct device *dev, void *data);
+-
+-      /* available voltages. If not given, assume
+-       * MMC_VDD_32_33 | MMC_VDD_33_34
+-       */
+-      unsigned int ocr_avail;
+-
+-      /* adjust slot voltage */
+-      void (*setpower)(struct device *, unsigned int vdd);
+-};
+-
+-#endif
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/plat-omap/common.c linux-2.6.29-rc3.owrt/arch/arm/plat-omap/common.c
+--- linux-2.6.29.owrt/arch/arm/plat-omap/common.c      2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/plat-omap/common.c  2009-05-10 23:48:28.000000000 +0200
+@@ -200,16 +200,20 @@
+ };
+ /*
++ * Rounds down to nearest nsec.
++ */
++unsigned long long omap_32k_ticks_to_nsecs(unsigned long ticks_32k)
++{
++      return cyc2ns(&clocksource_32k, ticks_32k);
++}
++
++/*
+  * Returns current time from boot in nsecs. It's OK for this to wrap
+  * around for now, as it's just a relative time stamp.
+  */
+ unsigned long long sched_clock(void)
+ {
+-      unsigned long long ret;
+-
+-      ret = (unsigned long long)omap_32k_read();
+-      ret = (ret * clocksource_32k.mult_orig) >> clocksource_32k.shift;
+-      return ret;
++      return omap_32k_ticks_to_nsecs(omap_32k_read());
+ }
+ static int __init omap_init_clocksource_32k(void)
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/plat-omap/devices.c linux-2.6.29-rc3.owrt/arch/arm/plat-omap/devices.c
+--- linux-2.6.29.owrt/arch/arm/plat-omap/devices.c     2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/plat-omap/devices.c 2009-05-10 23:48:28.000000000 +0200
+@@ -200,15 +200,14 @@
+ /*
+  * Register MMC devices. Called from mach-omap1 and mach-omap2 device init.
+  */
+-int __init omap_mmc_add(const char *name, int id, unsigned long base,
+-                              unsigned long size, unsigned int irq,
+-                              struct omap_mmc_platform_data *data)
++int __init omap_mmc_add(int id, unsigned long base, unsigned long size,
++              unsigned int irq, struct omap_mmc_platform_data *data)
+ {
+       struct platform_device *pdev;
+       struct resource res[OMAP_MMC_NR_RES];
+       int ret;
+-      pdev = platform_device_alloc(name, id);
++      pdev = platform_device_alloc("mmci-omap", id);
+       if (!pdev)
+               return -ENOMEM;
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/plat-omap/dma.c linux-2.6.29-rc3.owrt/arch/arm/plat-omap/dma.c
+--- linux-2.6.29.owrt/arch/arm/plat-omap/dma.c 2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/plat-omap/dma.c     2009-05-10 23:48:28.000000000 +0200
+@@ -709,7 +709,6 @@
+       chan->dev_name = dev_name;
+       chan->callback = callback;
+       chan->data = data;
+-      chan->flags = 0;
+ #ifndef CONFIG_ARCH_OMAP1
+       if (cpu_class_is_omap2()) {
+@@ -1889,11 +1888,11 @@
+               status = dma_read(CSR(ch));
+       }
+-      dma_write(status, CSR(ch));
+-
+       if (likely(dma_chan[ch].callback != NULL))
+               dma_chan[ch].callback(ch, status, dma_chan[ch].data);
++      dma_write(status, CSR(ch));
++
+       return 0;
+ }
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/plat-omap/include/mach/common.h linux-2.6.29-rc3.owrt/arch/arm/plat-omap/include/mach/common.h
+--- linux-2.6.29.owrt/arch/arm/plat-omap/include/mach/common.h 2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/plat-omap/include/mach/common.h     2009-05-10 23:48:28.000000000 +0200
+@@ -35,7 +35,7 @@
+ extern struct sys_timer omap_timer;
+ extern void omap_serial_init(void);
+ extern void omap_serial_enable_clocks(int enable);
+-#if defined(CONFIG_I2C_OMAP) || defined(CONFIG_I2C_OMAP_MODULE)
++#ifdef CONFIG_I2C_OMAP
+ extern int omap_register_i2c_bus(int bus_id, u32 clkrate,
+                                struct i2c_board_info const *info,
+                                unsigned len);
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/plat-omap/include/mach/cpu.h linux-2.6.29-rc3.owrt/arch/arm/plat-omap/include/mach/cpu.h
+--- linux-2.6.29.owrt/arch/arm/plat-omap/include/mach/cpu.h    2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/plat-omap/include/mach/cpu.h        2009-05-10 23:48:28.000000000 +0200
+@@ -339,7 +339,6 @@
+ #define OMAP3430_REV_ES2_0    0x34301034
+ #define OMAP3430_REV_ES2_1    0x34302034
+ #define OMAP3430_REV_ES3_0    0x34303034
+-#define OMAP3430_REV_ES3_1    0x34304034
+ /*
+  * omap_chip bits
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/plat-omap/include/mach/mcbsp.h linux-2.6.29-rc3.owrt/arch/arm/plat-omap/include/mach/mcbsp.h
+--- linux-2.6.29.owrt/arch/arm/plat-omap/include/mach/mcbsp.h  2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/plat-omap/include/mach/mcbsp.h      2009-05-10 23:48:28.000000000 +0200
+@@ -344,8 +344,7 @@
+       u8 dma_rx_sync, dma_tx_sync;
+       u16 rx_irq, tx_irq;
+       struct omap_mcbsp_ops *ops;
+-      char const **clk_names;
+-      int num_clks;
++      char const *clk_name;
+ };
+ struct omap_mcbsp {
+@@ -377,8 +376,7 @@
+       /* Protect the field .free, while checking if the mcbsp is in use */
+       spinlock_t lock;
+       struct omap_mcbsp_platform_data *pdata;
+-      struct clk **clks;
+-      int num_clks;
++      struct clk *clk;
+ };
+ extern struct omap_mcbsp **mcbsp_ptr;
+ extern int omap_mcbsp_count;
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/plat-omap/include/mach/mmc.h linux-2.6.29-rc3.owrt/arch/arm/plat-omap/include/mach/mmc.h
+--- linux-2.6.29.owrt/arch/arm/plat-omap/include/mach/mmc.h    2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/plat-omap/include/mach/mmc.h        2009-05-10 23:48:28.000000000 +0200
+@@ -115,9 +115,8 @@
+                               int nr_controllers);
+ void omap2_init_mmc(struct omap_mmc_platform_data **mmc_data,
+                               int nr_controllers);
+-int omap_mmc_add(const char *name, int id, unsigned long base,
+-                              unsigned long size, unsigned int irq,
+-                              struct omap_mmc_platform_data *data);
++int omap_mmc_add(int id, unsigned long base, unsigned long size,
++                      unsigned int irq, struct omap_mmc_platform_data *data);
+ #else
+ static inline void omap1_init_mmc(struct omap_mmc_platform_data **mmc_data,
+                               int nr_controllers)
+@@ -127,9 +126,8 @@
+                               int nr_controllers)
+ {
+ }
+-static inline int omap_mmc_add(const char *name, int id, unsigned long base,
+-                              unsigned long size, unsigned int irq,
+-                              struct omap_mmc_platform_data *data)
++static inline int omap_mmc_add(int id, unsigned long base, unsigned long size,
++              unsigned int irq, struct omap_mmc_platform_data *data)
+ {
+       return 0;
+ }
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/plat-omap/include/mach/pm.h linux-2.6.29-rc3.owrt/arch/arm/plat-omap/include/mach/pm.h
+--- linux-2.6.29.owrt/arch/arm/plat-omap/include/mach/pm.h     2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/plat-omap/include/mach/pm.h 2009-05-10 23:48:28.000000000 +0200
+@@ -108,7 +108,7 @@
+       !defined(CONFIG_ARCH_OMAP15XX) && \
+       !defined(CONFIG_ARCH_OMAP16XX) && \
+       !defined(CONFIG_ARCH_OMAP24XX)
+-#warning "Power management for this processor not implemented yet"
++#error "Power management for this processor not implemented yet"
+ #endif
+ #ifndef __ASSEMBLER__
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/plat-omap/Makefile linux-2.6.29-rc3.owrt/arch/arm/plat-omap/Makefile
+--- linux-2.6.29.owrt/arch/arm/plat-omap/Makefile      2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/plat-omap/Makefile  2009-05-10 23:48:28.000000000 +0200
+@@ -18,8 +18,7 @@
+ obj-$(CONFIG_OMAP_DM_TIMER) += dmtimer.o
+ obj-$(CONFIG_OMAP_DEBUG_DEVICES) += debug-devices.o
+ obj-$(CONFIG_OMAP_DEBUG_LEDS) += debug-leds.o
+-i2c-omap-$(CONFIG_I2C_OMAP) := i2c.o
+-obj-y += $(i2c-omap-m) $(i2c-omap-y)
++obj-$(CONFIG_I2C_OMAP) += i2c.o
+ # OMAP mailbox framework
+ obj-$(CONFIG_OMAP_MBOX_FWK) += mailbox.o
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/plat-omap/mcbsp.c linux-2.6.29-rc3.owrt/arch/arm/plat-omap/mcbsp.c
+--- linux-2.6.29.owrt/arch/arm/plat-omap/mcbsp.c       2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/plat-omap/mcbsp.c   2009-05-10 23:48:28.000000000 +0200
+@@ -214,7 +214,6 @@
+ int omap_mcbsp_request(unsigned int id)
+ {
+       struct omap_mcbsp *mcbsp;
+-      int i;
+       int err;
+       if (!omap_mcbsp_check_valid_id(id)) {
+@@ -226,8 +225,7 @@
+       if (mcbsp->pdata && mcbsp->pdata->ops && mcbsp->pdata->ops->request)
+               mcbsp->pdata->ops->request(id);
+-      for (i = 0; i < mcbsp->num_clks; i++)
+-              clk_enable(mcbsp->clks[i]);
++      clk_enable(mcbsp->clk);
+       spin_lock(&mcbsp->lock);
+       if (!mcbsp->free) {
+@@ -278,7 +276,6 @@
+ void omap_mcbsp_free(unsigned int id)
+ {
+       struct omap_mcbsp *mcbsp;
+-      int i;
+       if (!omap_mcbsp_check_valid_id(id)) {
+               printk(KERN_ERR "%s: Invalid id (%d)\n", __func__, id + 1);
+@@ -289,8 +286,7 @@
+       if (mcbsp->pdata && mcbsp->pdata->ops && mcbsp->pdata->ops->free)
+               mcbsp->pdata->ops->free(id);
+-      for (i = mcbsp->num_clks - 1; i >= 0; i--)
+-              clk_disable(mcbsp->clks[i]);
++      clk_disable(mcbsp->clk);
+       spin_lock(&mcbsp->lock);
+       if (mcbsp->free) {
+@@ -876,7 +872,6 @@
+       struct omap_mcbsp_platform_data *pdata = pdev->dev.platform_data;
+       struct omap_mcbsp *mcbsp;
+       int id = pdev->id - 1;
+-      int i;
+       int ret = 0;
+       if (!pdata) {
+@@ -921,25 +916,14 @@
+       mcbsp->dma_rx_sync = pdata->dma_rx_sync;
+       mcbsp->dma_tx_sync = pdata->dma_tx_sync;
+-      if (pdata->num_clks) {
+-              mcbsp->num_clks = pdata->num_clks;
+-              mcbsp->clks = kzalloc(mcbsp->num_clks * sizeof(struct clk *),
+-                                      GFP_KERNEL);
+-              if (!mcbsp->clks) {
+-                      ret = -ENOMEM;
+-                      goto exit;
+-              }
+-              for (i = 0; i < mcbsp->num_clks; i++) {
+-                      mcbsp->clks[i] = clk_get(&pdev->dev, pdata->clk_names[i]);
+-                      if (IS_ERR(mcbsp->clks[i])) {
+-                              dev_err(&pdev->dev,
+-                                      "Invalid %s configuration for McBSP%d.\n",
+-                                      pdata->clk_names[i], mcbsp->id);
+-                              ret = PTR_ERR(mcbsp->clks[i]);
+-                              goto err_clk;
+-                      }
+-              }
+-
++      if (pdata->clk_name)
++              mcbsp->clk = clk_get(&pdev->dev, pdata->clk_name);
++      if (IS_ERR(mcbsp->clk)) {
++              dev_err(&pdev->dev,
++                      "Invalid clock configuration for McBSP%d.\n",
++                      mcbsp->id);
++              ret = PTR_ERR(mcbsp->clk);
++              goto err_clk;
+       }
+       mcbsp->pdata = pdata;
+@@ -948,9 +932,6 @@
+       return 0;
+ err_clk:
+-      while (i--)
+-              clk_put(mcbsp->clks[i]);
+-      kfree(mcbsp->clks);
+       iounmap(mcbsp->io_base);
+ err_ioremap:
+       mcbsp->free = 0;
+@@ -961,7 +942,6 @@
+ static int __devexit omap_mcbsp_remove(struct platform_device *pdev)
+ {
+       struct omap_mcbsp *mcbsp = platform_get_drvdata(pdev);
+-      int i;
+       platform_set_drvdata(pdev, NULL);
+       if (mcbsp) {
+@@ -970,18 +950,12 @@
+                               mcbsp->pdata->ops->free)
+                       mcbsp->pdata->ops->free(mcbsp->id);
+-              for (i = mcbsp->num_clks - 1; i >= 0; i--) {
+-                      clk_disable(mcbsp->clks[i]);
+-                      clk_put(mcbsp->clks[i]);
+-              }
++              clk_disable(mcbsp->clk);
++              clk_put(mcbsp->clk);
+               iounmap(mcbsp->io_base);
+-              if (mcbsp->num_clks) {
+-                      kfree(mcbsp->clks);
+-                      mcbsp->clks = NULL;
+-                      mcbsp->num_clks = 0;
+-              }
++              mcbsp->clk = NULL;
+               mcbsp->free = 0;
+               mcbsp->dev = NULL;
+       }
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/plat-orion/gpio.c linux-2.6.29-rc3.owrt/arch/arm/plat-orion/gpio.c
+--- linux-2.6.29.owrt/arch/arm/plat-orion/gpio.c       2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/plat-orion/gpio.c   2009-05-10 23:48:28.000000000 +0200
+@@ -265,36 +265,51 @@
+  *        polarity    LEVEL          mask
+  *
+  ****************************************************************************/
++static void gpio_irq_edge_ack(u32 irq)
++{
++      int pin = irq_to_gpio(irq);
++
++      writel(~(1 << (pin & 31)), GPIO_EDGE_CAUSE(pin));
++}
+-static void gpio_irq_ack(u32 irq)
++static void gpio_irq_edge_mask(u32 irq)
+ {
+-      int type = irq_desc[irq].status & IRQ_TYPE_SENSE_MASK;
+-      if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) {
+-              int pin = irq_to_gpio(irq);
+-              writel(~(1 << (pin & 31)), GPIO_EDGE_CAUSE(pin));
+-      }
++      int pin = irq_to_gpio(irq);
++      u32 u;
++
++      u = readl(GPIO_EDGE_MASK(pin));
++      u &= ~(1 << (pin & 31));
++      writel(u, GPIO_EDGE_MASK(pin));
++}
++
++static void gpio_irq_edge_unmask(u32 irq)
++{
++      int pin = irq_to_gpio(irq);
++      u32 u;
++
++      u = readl(GPIO_EDGE_MASK(pin));
++      u |= 1 << (pin & 31);
++      writel(u, GPIO_EDGE_MASK(pin));
+ }
+-static void gpio_irq_mask(u32 irq)
++static void gpio_irq_level_mask(u32 irq)
+ {
+       int pin = irq_to_gpio(irq);
+-      int type = irq_desc[irq].status & IRQ_TYPE_SENSE_MASK;
+-      u32 reg = (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) ?
+-              GPIO_EDGE_MASK(pin) : GPIO_LEVEL_MASK(pin);
+-      u32 u = readl(reg);
++      u32 u;
++
++      u = readl(GPIO_LEVEL_MASK(pin));
+       u &= ~(1 << (pin & 31));
+-      writel(u, reg);
++      writel(u, GPIO_LEVEL_MASK(pin));
+ }
+-static void gpio_irq_unmask(u32 irq)
++static void gpio_irq_level_unmask(u32 irq)
+ {
+       int pin = irq_to_gpio(irq);
+-      int type = irq_desc[irq].status & IRQ_TYPE_SENSE_MASK;
+-      u32 reg = (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) ?
+-              GPIO_EDGE_MASK(pin) : GPIO_LEVEL_MASK(pin);
+-      u32 u = readl(reg);
++      u32 u;
++
++      u = readl(GPIO_LEVEL_MASK(pin));
+       u |= 1 << (pin & 31);
+-      writel(u, reg);
++      writel(u, GPIO_LEVEL_MASK(pin));
+ }
+ static int gpio_irq_set_type(u32 irq, u32 type)
+@@ -316,9 +331,9 @@
+        * Set edge/level type.
+        */
+       if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) {
+-              desc->handle_irq = handle_edge_irq;
++              desc->chip = &orion_gpio_irq_edge_chip;
+       } else if (type & (IRQ_TYPE_LEVEL_HIGH | IRQ_TYPE_LEVEL_LOW)) {
+-              desc->handle_irq = handle_level_irq;
++              desc->chip = &orion_gpio_irq_level_chip;
+       } else {
+               printk(KERN_ERR "failed to set irq=%d (type=%d)\n", irq, type);
+               return -EINVAL;
+@@ -356,11 +371,19 @@
+       return 0;
+ }
+-struct irq_chip orion_gpio_irq_chip = {
+-      .name           = "orion_gpio",
+-      .ack            = gpio_irq_ack,
+-      .mask           = gpio_irq_mask,
+-      .unmask         = gpio_irq_unmask,
++struct irq_chip orion_gpio_irq_edge_chip = {
++      .name           = "orion_gpio_irq_edge",
++      .ack            = gpio_irq_edge_ack,
++      .mask           = gpio_irq_edge_mask,
++      .unmask         = gpio_irq_edge_unmask,
++      .set_type       = gpio_irq_set_type,
++};
++
++struct irq_chip orion_gpio_irq_level_chip = {
++      .name           = "orion_gpio_irq_level",
++      .mask           = gpio_irq_level_mask,
++      .mask_ack       = gpio_irq_level_mask,
++      .unmask         = gpio_irq_level_unmask,
+       .set_type       = gpio_irq_set_type,
+ };
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/plat-orion/include/plat/gpio.h linux-2.6.29-rc3.owrt/arch/arm/plat-orion/include/plat/gpio.h
+--- linux-2.6.29.owrt/arch/arm/plat-orion/include/plat/gpio.h  2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/plat-orion/include/plat/gpio.h      2009-05-10 23:48:28.000000000 +0200
+@@ -31,7 +31,8 @@
+ /*
+  * GPIO interrupt handling.
+  */
+-extern struct irq_chip orion_gpio_irq_chip;
++extern struct irq_chip orion_gpio_irq_edge_chip;
++extern struct irq_chip orion_gpio_irq_level_chip;
+ void orion_gpio_irq_handler(int irqoff);
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/plat-s3c64xx/clock.c linux-2.6.29-rc3.owrt/arch/arm/plat-s3c64xx/clock.c
+--- linux-2.6.29.owrt/arch/arm/plat-s3c64xx/clock.c    2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/plat-s3c64xx/clock.c        2009-05-10 23:48:28.000000000 +0200
+@@ -248,7 +248,7 @@
+       &clk_48m,
+ };
+-void __init s3c64xx_register_clocks(void)
++void s3c64xx_register_clocks(void)
+ {
+       struct clk *clkp;
+       int ret;
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/plat-s3c64xx/gpiolib.c linux-2.6.29-rc3.owrt/arch/arm/plat-s3c64xx/gpiolib.c
+--- linux-2.6.29.owrt/arch/arm/plat-s3c64xx/gpiolib.c  2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/plat-s3c64xx/gpiolib.c      2009-05-10 23:48:28.000000000 +0200
+@@ -417,4 +417,4 @@
+       return 0;
+ }
+-core_initcall(s3c64xx_gpiolib_init);
++arch_initcall(s3c64xx_gpiolib_init);
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/plat-s3c64xx/include/plat/irqs.h linux-2.6.29-rc3.owrt/arch/arm/plat-s3c64xx/include/plat/irqs.h
+--- linux-2.6.29.owrt/arch/arm/plat-s3c64xx/include/plat/irqs.h        2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/plat-s3c64xx/include/plat/irqs.h    2009-05-10 23:48:28.000000000 +0200
+@@ -117,7 +117,7 @@
+ #define IRQ_ONENAND1          S3C64XX_IRQ_VIC1(12)
+ #define IRQ_NFC                       S3C64XX_IRQ_VIC1(13)
+ #define IRQ_CFCON             S3C64XX_IRQ_VIC1(14)
+-#define IRQ_USBH              S3C64XX_IRQ_VIC1(15)
++#define IRQ_UHOST             S3C64XX_IRQ_VIC1(15)
+ #define IRQ_SPI0              S3C64XX_IRQ_VIC1(16)
+ #define IRQ_SPI1              S3C64XX_IRQ_VIC1(17)
+ #define IRQ_IIC                       S3C64XX_IRQ_VIC1(18)
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/plat-s3c64xx/irq.c linux-2.6.29-rc3.owrt/arch/arm/plat-s3c64xx/irq.c
+--- linux-2.6.29.owrt/arch/arm/plat-s3c64xx/irq.c      2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/plat-s3c64xx/irq.c  2009-05-10 23:48:28.000000000 +0200
+@@ -207,7 +207,7 @@
+ static void __init s3c64xx_uart_irq(struct uart_irq *uirq)
+ {
+-      void __iomem *reg_base = uirq->regs;
++      void *reg_base = uirq->regs;
+       unsigned int irq;
+       int offs;
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/plat-s3c64xx/irq-eint.c linux-2.6.29-rc3.owrt/arch/arm/plat-s3c64xx/irq-eint.c
+--- linux-2.6.29.owrt/arch/arm/plat-s3c64xx/irq-eint.c 2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/plat-s3c64xx/irq-eint.c     2009-05-10 23:48:28.000000000 +0200
+@@ -14,15 +14,12 @@
+ #include <linux/kernel.h>
+ #include <linux/interrupt.h>
+-#include <linux/gpio.h>
+ #include <linux/irq.h>
+ #include <linux/io.h>
+ #include <asm/hardware/vic.h>
+ #include <plat/regs-irqtype.h>
+-#include <plat/regs-gpio.h>
+-#include <plat/gpio-cfg.h>
+ #include <mach/map.h>
+ #include <plat/cpu.h>
+@@ -58,7 +55,7 @@
+       u32 mask;
+       mask = __raw_readl(S3C64XX_EINT0MASK);
+-      mask &= ~eint_irq_to_bit(irq);
++      mask |= eint_irq_to_bit(irq);
+       __raw_writel(mask, S3C64XX_EINT0MASK);
+ }
+@@ -77,7 +74,6 @@
+ static int s3c_irq_eint_set_type(unsigned int irq, unsigned int type)
+ {
+       int offs = eint_offset(irq);
+-      int pin;
+       int shift;
+       u32 ctrl, mask;
+       u32 newvalue = 0;
+@@ -129,15 +125,6 @@
+       ctrl |= newvalue << shift;
+       __raw_writel(ctrl, reg);
+-      /* set the GPIO pin appropriately */
+-
+-      if (offs < 23)
+-              pin = S3C64XX_GPN(offs);
+-      else
+-              pin = S3C64XX_GPM(offs - 23);
+-
+-      s3c_gpio_cfgpin(pin, S3C_GPIO_SFN(2));
+-
+       return 0;
+ }
+@@ -194,7 +181,7 @@
+       s3c_irq_demux_eint(20, 27);
+ }
+-static int __init s3c64xx_init_irq_eint(void)
++int __init s3c64xx_init_irq_eint(void)
+ {
+       int irq;
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/plat-s3c64xx/s3c6400-clock.c linux-2.6.29-rc3.owrt/arch/arm/plat-s3c64xx/s3c6400-clock.c
+--- linux-2.6.29.owrt/arch/arm/plat-s3c64xx/s3c6400-clock.c    2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/plat-s3c64xx/s3c6400-clock.c        2009-05-10 23:48:28.000000000 +0200
+@@ -36,7 +36,7 @@
+  * ext_xtal_mux for want of an actual name from the manual.
+ */
+-static struct clk clk_ext_xtal_mux = {
++struct clk clk_ext_xtal_mux = {
+       .name           = "ext_xtal",
+       .id             = -1,
+ };
+@@ -63,7 +63,7 @@
+       void __iomem            *reg_divider;
+ };
+-static struct clk clk_fout_apll = {
++struct clk clk_fout_apll = {
+       .name           = "fout_apll",
+       .id             = -1,
+ };
+@@ -78,7 +78,7 @@
+       .nr_sources     = ARRAY_SIZE(clk_src_apll_list),
+ };
+-static struct clksrc_clk clk_mout_apll = {
++struct clksrc_clk clk_mout_apll = {
+       .clk    = {
+               .name           = "mout_apll",
+               .id             = -1,
+@@ -88,7 +88,7 @@
+       .sources        = &clk_src_apll,
+ };
+-static struct clk clk_fout_epll = {
++struct clk clk_fout_epll = {
+       .name           = "fout_epll",
+       .id             = -1,
+ };
+@@ -103,7 +103,7 @@
+       .nr_sources     = ARRAY_SIZE(clk_src_epll_list),
+ };
+-static struct clksrc_clk clk_mout_epll = {
++struct clksrc_clk clk_mout_epll = {
+       .clk    = {
+               .name           = "mout_epll",
+               .id             = -1,
+@@ -123,7 +123,7 @@
+       .nr_sources     = ARRAY_SIZE(clk_src_mpll_list),
+ };
+-static struct clksrc_clk clk_mout_mpll = {
++struct clksrc_clk clk_mout_mpll = {
+       .clk = {
+               .name           = "mout_mpll",
+               .id             = -1,
+@@ -145,7 +145,7 @@
+       return rate;
+ }
+-static struct clk clk_dout_mpll = {
++struct clk clk_dout_mpll = {
+       .name           = "dout_mpll",
+       .id             = -1,
+       .parent         = &clk_mout_mpll.clk,
+@@ -189,10 +189,10 @@
+ };
+ static struct clk *clkset_uhost_list[] = {
+-      &clk_48m,
+       &clk_mout_epll.clk,
+       &clk_dout_mpll,
+       &clk_fin_epll,
++      &clk_48m,
+ };
+ static struct clk_sources clkset_uhost = {
+@@ -239,12 +239,10 @@
+       rate = clk_round_rate(clk, rate);
+       div = clk_get_rate(clk->parent) / rate;
+-      if (div > 16)
+-              return -EINVAL;
+       val = __raw_readl(reg);
+-      val &= ~(0xf << sclk->shift);
+-      val |= (div - 1) << sclk->shift;
++      val &= ~sclk->mask;
++      val |= (rate - 1) << sclk->shift;
+       __raw_writel(val, reg);
+       return 0;
+@@ -353,7 +351,7 @@
+ static struct clksrc_clk clk_usbhost = {
+       .clk    = {
+-              .name           = "usb-bus-host",
++              .name           = "usb-host-bus",
+               .id             = -1,
+               .ctrlbit        = S3C_CLKCON_SCLK_UHOST,
+               .enable         = s3c64xx_sclk_ctrl,
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/arm/tools/mach-types linux-2.6.29-rc3.owrt/arch/arm/tools/mach-types
+--- linux-2.6.29.owrt/arch/arm/tools/mach-types        2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/arm/tools/mach-types    2009-05-10 23:48:28.000000000 +0200
+@@ -12,7 +12,7 @@
+ #
+ #   http://www.arm.linux.org.uk/developer/machines/?action=new
+ #
+-# Last update: Thu Mar 12 18:01:45 2009
++# Last update: Sun Nov 30 16:39:36 2008
+ #
+ # machine_is_xxx      CONFIG_xxxx             MACH_TYPE_xxx           number
+ #
+@@ -1811,7 +1811,7 @@
+ jade                  MACH_JADE               JADE                    1821
+ ks8695_softplc                MACH_KS8695_SOFTPLC     KS8695_SOFTPLC          1822
+ gprisc3                       MACH_GPRISC3            GPRISC3                 1823
+-stamp9g20             MACH_STAMP9G20          STAMP9G20               1824
++stamp9260             MACH_STAMP9260          STAMP9260               1824
+ smdk6430              MACH_SMDK6430           SMDK6430                1825
+ smdkc100              MACH_SMDKC100           SMDKC100                1826
+ tavorevb              MACH_TAVOREVB           TAVOREVB                1827
+@@ -1993,134 +1993,4 @@
+ benzina                       MACH_BENZINA            BENZINA                 2003
+ blaze                 MACH_BLAZE              BLAZE                   2004
+ linkstation_ls_hgl    MACH_LINKSTATION_LS_HGL LINKSTATION_LS_HGL      2005
+-htckovsky             MACH_HTCVENUS           HTCVENUS                2006
+-sony_prs505           MACH_SONY_PRS505        SONY_PRS505             2007
+-hanlin_v3             MACH_HANLIN_V3          HANLIN_V3               2008
+-sapphira              MACH_SAPPHIRA           SAPPHIRA                2009
+-dack_sda_01           MACH_DACK_SDA_01        DACK_SDA_01             2010
+-armbox                        MACH_ARMBOX             ARMBOX                  2011
+-harris_rvp            MACH_HARRIS_RVP         HARRIS_RVP              2012
+-ribaldo                       MACH_RIBALDO            RIBALDO                 2013
+-agora                 MACH_AGORA              AGORA                   2014
+-omap3_mini            MACH_OMAP3_MINI         OMAP3_MINI              2015
+-a9sam6432_b           MACH_A9SAM6432_B        A9SAM6432_B             2016
+-usg2410                       MACH_USG2410            USG2410                 2017
+-pc72052_i10_revb      MACH_PC72052_I10_REVB   PC72052_I10_REVB        2018
+-mx35_exm32            MACH_MX35_EXM32         MX35_EXM32              2019
+-topas910              MACH_TOPAS910           TOPAS910                2020
+-hyena                 MACH_HYENA              HYENA                   2021
+-pospax                        MACH_POSPAX             POSPAX                  2022
+-hdl_gx                        MACH_HDL_GX             HDL_GX                  2023
+-ctera_4bay            MACH_CTERA_4BAY         CTERA_4BAY              2024
+-ctera_plug_c          MACH_CTERA_PLUG_C       CTERA_PLUG_C            2025
+-crwea_plug_i          MACH_CRWEA_PLUG_I       CRWEA_PLUG_I            2026
+-egauge2                       MACH_EGAUGE2            EGAUGE2                 2027
+-didj                  MACH_DIDJ               DIDJ                    2028
+-m_s3c2443             MACH_MEISTER            MEISTER                 2029
+-htcblackstone         MACH_HTCBLACKSTONE      HTCBLACKSTONE           2030
+-cpuat9g20             MACH_CPUAT9G20          CPUAT9G20               2031
+-smdk6440              MACH_SMDK6440           SMDK6440                2032
+-omap_35xx_mvp         MACH_OMAP_35XX_MVP      OMAP_35XX_MVP           2033
+-ctera_plug_i          MACH_CTERA_PLUG_I       CTERA_PLUG_I            2034
+-pvg610_100            MACH_PVG610             PVG610                  2035
+-hprw6815              MACH_HPRW6815           HPRW6815                2036
+-omap3_oswald          MACH_OMAP3_OSWALD       OMAP3_OSWALD            2037
+-nas4220b              MACH_NAS4220B           NAS4220B                2038
+-htcraphael_cdma               MACH_HTCRAPHAEL_CDMA    HTCRAPHAEL_CDMA         2039
+-htcdiamond_cdma               MACH_HTCDIAMOND_CDMA    HTCDIAMOND_CDMA         2040
+-scaler                        MACH_SCALER             SCALER                  2041
+-zylonite2             MACH_ZYLONITE2          ZYLONITE2               2042
+-aspenite              MACH_ASPENITE           ASPENITE                2043
+-teton                 MACH_TETON              TETON                   2044
+-ttc_dkb                       MACH_TTC_DKB            TTC_DKB                 2045
+-bishop2                       MACH_BISHOP2            BISHOP2                 2046
+-ippv5                 MACH_IPPV5              IPPV5                   2047
+-farm926                       MACH_FARM926            FARM926                 2048
+-mmccpu                        MACH_MMCCPU             MMCCPU                  2049
+-sgmsfl                        MACH_SGMSFL             SGMSFL                  2050
+-tt8000                        MACH_TT8000             TT8000                  2051
+-zrn4300lp             MACH_ZRN4300LP          ZRN4300LP               2052
+-mptc                  MACH_MPTC               MPTC                    2053
+-h6051                 MACH_H6051              H6051                   2054
+-pvg610_101            MACH_PVG610_101         PVG610_101              2055
+-stamp9261_pc_evb      MACH_STAMP9261_PC_EVB   STAMP9261_PC_EVB        2056
+-pelco_odysseus                MACH_PELCO_ODYSSEUS     PELCO_ODYSSEUS          2057
+-tny_a9260             MACH_TNY_A9260          TNY_A9260               2058
+-tny_a9g20             MACH_TNY_A9G20          TNY_A9G20               2059
+-aesop_mp2530f         MACH_AESOP_MP2530F      AESOP_MP2530F           2060
+-dx900                 MACH_DX900              DX900                   2061
+-cpodc2                        MACH_CPODC2             CPODC2                  2062
+-tilt_8925             MACH_TILT_8925          TILT_8925               2063
+-davinci_dm357_evm     MACH_DAVINCI_DM357_EVM  DAVINCI_DM357_EVM       2064
+-swordfish             MACH_SWORDFISH          SWORDFISH               2065
+-corvus                        MACH_CORVUS             CORVUS                  2066
+-taurus                        MACH_TAURUS             TAURUS                  2067
+-axm                   MACH_AXM                AXM                     2068
+-axc                   MACH_AXC                AXC                     2069
+-baby                  MACH_BABY               BABY                    2070
+-mp200                 MACH_MP200              MP200                   2071
+-pcm043                        MACH_PCM043             PCM043                  2072
+-hanlin_v3c            MACH_HANLIN_V3C         HANLIN_V3C              2073
+-kbk9g20                       MACH_KBK9G20            KBK9G20                 2074
+-adsturbog5            MACH_ADSTURBOG5         ADSTURBOG5              2075
+-avenger_lite1         MACH_AVENGER_LITE1      AVENGER_LITE1           2076
+-suc82x                        MACH_SUC                SUC                     2077
+-at91sam7s256          MACH_AT91SAM7S256       AT91SAM7S256            2078
+-mendoza                       MACH_MENDOZA            MENDOZA                 2079
+-kira                  MACH_KIRA               KIRA                    2080
+-mx1hbm                        MACH_MX1HBM             MX1HBM                  2081
+-quatro43xx            MACH_QUATRO43XX         QUATRO43XX              2082
+-quatro4230            MACH_QUATRO4230         QUATRO4230              2083
+-nsb400                        MACH_NSB400             NSB400                  2084
+-drp255                        MACH_DRP255             DRP255                  2085
+-thoth                 MACH_THOTH              THOTH                   2086
+-firestone             MACH_FIRESTONE          FIRESTONE               2087
+-asusp750              MACH_ASUSP750           ASUSP750                2088
+-ctera_dl              MACH_CTERA_DL           CTERA_DL                2089
+-socr                  MACH_SOCR               SOCR                    2090
+-htcoxygen             MACH_HTCOXYGEN          HTCOXYGEN               2091
+-heroc                 MACH_HEROC              HEROC                   2092
+-zeno6800              MACH_ZENO6800           ZENO6800                2093
+-sc2mcs                        MACH_SC2MCS             SC2MCS                  2094
+-gene100                       MACH_GENE100            GENE100                 2095
+-as353x                        MACH_AS353X             AS353X                  2096
+-sheevaplug            MACH_SHEEVAPLUG         SHEEVAPLUG              2097
+-at91sam9g20           MACH_AT91SAM9G20        AT91SAM9G20             2098
+-mv88f6192gtw_fe               MACH_MV88F6192GTW_FE    MV88F6192GTW_FE         2099
+-cc9200                        MACH_CC9200             CC9200                  2100
+-sm9200                        MACH_SM9200             SM9200                  2101
+-tp9200                        MACH_TP9200             TP9200                  2102
+-snapperdv             MACH_SNAPPERDV          SNAPPERDV               2103
+-avengers_lite         MACH_AVENGERS_LITE      AVENGERS_LITE           2104
+-avengers_lite1                MACH_AVENGERS_LITE1     AVENGERS_LITE1          2105
+-omap3axon             MACH_OMAP3AXON          OMAP3AXON               2106
+-ma8xx                 MACH_MA8XX              MA8XX                   2107
+-mp201ek                       MACH_MP201EK            MP201EK                 2108
+-davinci_tux           MACH_DAVINCI_TUX        DAVINCI_TUX             2109
+-mpa1600                       MACH_MPA1600            MPA1600                 2110
+-pelco_troy            MACH_PELCO_TROY         PELCO_TROY              2111
+-nsb667                        MACH_NSB667             NSB667                  2112
+-rovers5_4mpix         MACH_ROVERS5_4MPIX      ROVERS5_4MPIX           2113
+-twocom                        MACH_TWOCOM             TWOCOM                  2114
+-ubisys_p9_rcu3r2      MACH_UBISYS_P9_RCU3R2   UBISYS_P9_RCU3R2        2115
+-hero_espresso         MACH_HERO_ESPRESSO      HERO_ESPRESSO           2116
+-afeusb                        MACH_AFEUSB             AFEUSB                  2117
+-t830                  MACH_T830               T830                    2118
+-spd8020_cc            MACH_SPD8020_CC         SPD8020_CC              2119
+-om_3d7k                       MACH_OM_3D7K            OM_3D7K                 2120
+-picocom2              MACH_PICOCOM2           PICOCOM2                2121
+-uwg4mx27              MACH_UWG4MX27           UWG4MX27                2122
+-uwg4mx31              MACH_UWG4MX31           UWG4MX31                2123
+-cherry                        MACH_CHERRY             CHERRY                  2124
+-mx51_babbage          MACH_MX51_BABBAGE       MX51_BABBAGE            2125
+-s3c2440turkiye                MACH_S3C2440TURKIYE     S3C2440TURKIYE          2126
+-tx37                  MACH_TX37               TX37                    2127
+-sbc2800_9g20          MACH_SBC2800_9G20       SBC2800_9G20            2128
+-benzglb                       MACH_BENZGLB            BENZGLB                 2129
+-benztd                        MACH_BENZTD             BENZTD                  2130
+-cartesio_plus         MACH_CARTESIO_PLUS      CARTESIO_PLUS           2131
+-solrad_g20            MACH_SOLRAD_G20         SOLRAD_G20              2132
+-mx27wallace           MACH_MX27WALLACE        MX27WALLACE             2133
+-fmzwebmodul           MACH_FMZWEBMODUL        FMZWEBMODUL             2134
+-rd78x00_masa          MACH_RD78X00_MASA       RD78X00_MASA            2135
+-smallogger            MACH_SMALLOGGER         SMALLOGGER              2136
++htcvenus              MACH_HTCVENUS           HTCVENUS                2006
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/avr32/mach-at32ap/include/mach/board.h linux-2.6.29-rc3.owrt/arch/avr32/mach-at32ap/include/mach/board.h
+--- linux-2.6.29.owrt/arch/avr32/mach-at32ap/include/mach/board.h      2009-05-10 22:04:40.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/avr32/mach-at32ap/include/mach/board.h  2009-05-10 23:48:28.000000000 +0200
+@@ -116,7 +116,6 @@
+       int     enable_pin;     /* chip enable */
+       int     det_pin;        /* card detect */
+       int     rdy_pin;        /* ready/busy */
+-      u8      rdy_pin_active_low;     /* rdy_pin value is inverted */
+       u8      ale;            /* address line number connected to ALE */
+       u8      cle;            /* address line number connected to CLE */
+       u8      bus_width_16;   /* buswidth is 16 bit */
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/configs/BF518F-EZBRD_defconfig linux-2.6.29-rc3.owrt/arch/blackfin/configs/BF518F-EZBRD_defconfig
+--- linux-2.6.29.owrt/arch/blackfin/configs/BF518F-EZBRD_defconfig     2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/configs/BF518F-EZBRD_defconfig 2009-05-10 23:48:28.000000000 +0200
+@@ -1,7 +1,6 @@
+ #
+ # Automatically generated make config: don't edit
+-# Linux kernel version: 2.6.28
+-# Fri Feb 20 10:01:44 2009
++# Linux kernel version: 2.6.28-rc2
+ #
+ # CONFIG_MMU is not set
+ # CONFIG_FPU is not set
+@@ -133,15 +132,10 @@
+ # CONFIG_BF538 is not set
+ # CONFIG_BF539 is not set
+ # CONFIG_BF542 is not set
+-# CONFIG_BF542M is not set
+ # CONFIG_BF544 is not set
+-# CONFIG_BF544M is not set
+ # CONFIG_BF547 is not set
+-# CONFIG_BF547M is not set
+ # CONFIG_BF548 is not set
+-# CONFIG_BF548M is not set
+ # CONFIG_BF549 is not set
+-# CONFIG_BF549M is not set
+ # CONFIG_BF561 is not set
+ CONFIG_BF_REV_MIN=0
+ CONFIG_BF_REV_MAX=2
+@@ -155,7 +149,6 @@
+ # CONFIG_BF_REV_ANY is not set
+ # CONFIG_BF_REV_NONE is not set
+ CONFIG_BF51x=y
+-CONFIG_MEM_MT48LC32M8A2_75=y
+ CONFIG_BFIN518F_EZBRD=y
+ #
+@@ -431,17 +424,7 @@
+ # CONFIG_TIPC is not set
+ # CONFIG_ATM is not set
+ # CONFIG_BRIDGE is not set
+-CONFIG_NET_DSA=y
+-# CONFIG_NET_DSA_TAG_DSA is not set
+-# CONFIG_NET_DSA_TAG_EDSA is not set
+-# CONFIG_NET_DSA_TAG_TRAILER is not set
+-CONFIG_NET_DSA_TAG_STPID=y
+-# CONFIG_NET_DSA_MV88E6XXX is not set
+-# CONFIG_NET_DSA_MV88E6060 is not set
+-# CONFIG_NET_DSA_MV88E6XXX_NEED_PPU is not set
+-# CONFIG_NET_DSA_MV88E6131 is not set
+-# CONFIG_NET_DSA_MV88E6123_61_65 is not set
+-CONFIG_NET_DSA_KSZ8893M=y
++# CONFIG_NET_DSA is not set
+ # CONFIG_VLAN_8021Q is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_LLC2 is not set
+@@ -544,8 +527,6 @@
+ #
+ # Self-contained MTD device drivers
+ #
+-# CONFIG_MTD_DATAFLASH is not set
+-# CONFIG_MTD_M25P80 is not set
+ # CONFIG_MTD_SLRAM is not set
+ # CONFIG_MTD_PHRAM is not set
+ # CONFIG_MTD_MTDRAM is not set
+@@ -578,9 +559,7 @@
+ # CONFIG_BLK_DEV_HD is not set
+ CONFIG_MISC_DEVICES=y
+ # CONFIG_EEPROM_93CX6 is not set
+-# CONFIG_ICS932S401 is not set
+ # CONFIG_ENCLOSURE_SERVICES is not set
+-# CONFIG_C2PORT is not set
+ CONFIG_HAVE_IDE=y
+ # CONFIG_IDE is not set
+@@ -619,14 +598,10 @@
+ # CONFIG_MDIO_BITBANG is not set
+ CONFIG_NET_ETHERNET=y
+ CONFIG_MII=y
+-CONFIG_BFIN_MAC=y
+-CONFIG_BFIN_TX_DESC_NUM=10
+-CONFIG_BFIN_RX_DESC_NUM=20
+-# CONFIG_BFIN_MAC_RMII is not set
++# CONFIG_BFIN_MAC is not set
+ # CONFIG_SMC91X is not set
+ # CONFIG_SMSC911X is not set
+ # CONFIG_DM9000 is not set
+-# CONFIG_ENC28J60 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
+@@ -704,7 +679,7 @@
+ CONFIG_HW_CONSOLE=y
+ # CONFIG_VT_HW_CONSOLE_BINDING is not set
+ # CONFIG_DEVKMEM is not set
+-CONFIG_BFIN_JTAG_COMM=m
++# CONFIG_BFIN_JTAG_COMM is not set
+ # CONFIG_SERIAL_NONSTANDARD is not set
+ #
+@@ -784,23 +759,7 @@
+ # CONFIG_I2C_DEBUG_ALGO is not set
+ # CONFIG_I2C_DEBUG_BUS is not set
+ # CONFIG_I2C_DEBUG_CHIP is not set
+-CONFIG_SPI=y
+-# CONFIG_SPI_DEBUG is not set
+-CONFIG_SPI_MASTER=y
+-
+-#
+-# SPI Master Controller Drivers
+-#
+-CONFIG_SPI_BFIN=y
+-# CONFIG_SPI_BFIN_LOCK is not set
+-# CONFIG_SPI_BITBANG is not set
+-
+-#
+-# SPI Protocol Masters
+-#
+-# CONFIG_SPI_AT25 is not set
+-# CONFIG_SPI_SPIDEV is not set
+-# CONFIG_SPI_TLE62X0 is not set
++# CONFIG_SPI is not set
+ CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
+ # CONFIG_GPIOLIB is not set
+ # CONFIG_W1 is not set
+@@ -824,10 +783,8 @@
+ # CONFIG_MFD_SM501 is not set
+ # CONFIG_HTC_PASIC3 is not set
+ # CONFIG_MFD_TMIO is not set
+-# CONFIG_PMIC_DA903X is not set
+ # CONFIG_MFD_WM8400 is not set
+ # CONFIG_MFD_WM8350_I2C is not set
+-# CONFIG_REGULATOR is not set
+ #
+ # Multimedia devices
+@@ -899,18 +856,10 @@
+ # CONFIG_RTC_DRV_M41T80 is not set
+ # CONFIG_RTC_DRV_S35390A is not set
+ # CONFIG_RTC_DRV_FM3130 is not set
+-# CONFIG_RTC_DRV_RX8581 is not set
+ #
+ # 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
+ #
+ # Platform RTC drivers
+@@ -1108,20 +1057,12 @@
+ # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
+ # CONFIG_FAULT_INJECTION is not set
+ CONFIG_SYSCTL_SYSCALL_CHECK=y
+-
+-#
+-# Tracers
+-#
+-# CONFIG_SCHED_TRACER is not set
+-# CONFIG_CONTEXT_SWITCH_TRACER is not set
+-# CONFIG_BOOT_TRACER is not set
+ # CONFIG_DYNAMIC_PRINTK_DEBUG is not set
+ # CONFIG_SAMPLES is not set
+ CONFIG_HAVE_ARCH_KGDB=y
+ # CONFIG_KGDB is not set
+ # CONFIG_DEBUG_STACKOVERFLOW is not set
+ # CONFIG_DEBUG_STACK_USAGE is not set
+-# CONFIG_KGDB_TESTCASE is not set
+ CONFIG_DEBUG_VERBOSE=y
+ CONFIG_DEBUG_MMRS=y
+ # CONFIG_DEBUG_HWERR is not set
+@@ -1154,7 +1095,6 @@
+ #
+ # CONFIG_CRYPTO_FIPS is not set
+ # CONFIG_CRYPTO_MANAGER is not set
+-# CONFIG_CRYPTO_MANAGER2 is not set
+ # CONFIG_CRYPTO_GF128MUL is not set
+ # CONFIG_CRYPTO_NULL is not set
+ # CONFIG_CRYPTO_CRYPTD is not set
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/configs/BF526-EZBRD_defconfig linux-2.6.29-rc3.owrt/arch/blackfin/configs/BF526-EZBRD_defconfig
+--- linux-2.6.29.owrt/arch/blackfin/configs/BF526-EZBRD_defconfig      2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/configs/BF526-EZBRD_defconfig  2009-05-10 23:48:28.000000000 +0200
+@@ -723,7 +723,7 @@
+ CONFIG_HW_CONSOLE=y
+ # CONFIG_VT_HW_CONSOLE_BINDING is not set
+ # CONFIG_DEVKMEM is not set
+-CONFIG_BFIN_JTAG_COMM=m
++# CONFIG_BFIN_JTAG_COMM is not set
+ # CONFIG_SERIAL_NONSTANDARD is not set
+ #
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/configs/BF527-EZKIT_defconfig linux-2.6.29-rc3.owrt/arch/blackfin/configs/BF527-EZKIT_defconfig
+--- linux-2.6.29.owrt/arch/blackfin/configs/BF527-EZKIT_defconfig      2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/configs/BF527-EZKIT_defconfig  2009-05-10 23:48:28.000000000 +0200
+@@ -327,8 +327,8 @@
+ CONFIG_BFIN_DCACHE=y
+ # CONFIG_BFIN_DCACHE_BANKA is not set
+ # CONFIG_BFIN_ICACHE_LOCK is not set
+-CONFIG_BFIN_WB=y
+-# CONFIG_BFIN_WT is not set
++# CONFIG_BFIN_WB is not set
++CONFIG_BFIN_WT=y
+ # CONFIG_MPU is not set
+ #
+@@ -767,7 +767,7 @@
+ CONFIG_HW_CONSOLE=y
+ # CONFIG_VT_HW_CONSOLE_BINDING is not set
+ # CONFIG_DEVKMEM is not set
+-CONFIG_BFIN_JTAG_COMM=m
++# CONFIG_BFIN_JTAG_COMM is not set
+ # CONFIG_SERIAL_NONSTANDARD is not set
+ #
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/configs/BF533-EZKIT_defconfig linux-2.6.29-rc3.owrt/arch/blackfin/configs/BF533-EZKIT_defconfig
+--- linux-2.6.29.owrt/arch/blackfin/configs/BF533-EZKIT_defconfig      2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/configs/BF533-EZKIT_defconfig  2009-05-10 23:48:28.000000000 +0200
+@@ -290,8 +290,8 @@
+ CONFIG_BFIN_DCACHE=y
+ # CONFIG_BFIN_DCACHE_BANKA is not set
+ # CONFIG_BFIN_ICACHE_LOCK is not set
+-CONFIG_BFIN_WB=y
+-# CONFIG_BFIN_WT is not set
++# CONFIG_BFIN_WB is not set
++CONFIG_BFIN_WT=y
+ # CONFIG_MPU is not set
+ #
+@@ -672,7 +672,7 @@
+ CONFIG_SIMPLE_GPIO=m
+ # CONFIG_VT is not set
+ # CONFIG_DEVKMEM is not set
+-CONFIG_BFIN_JTAG_COMM=m
++# CONFIG_BFIN_JTAG_COMM is not set
+ # CONFIG_SERIAL_NONSTANDARD is not set
+ #
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/configs/BF533-STAMP_defconfig linux-2.6.29-rc3.owrt/arch/blackfin/configs/BF533-STAMP_defconfig
+--- linux-2.6.29.owrt/arch/blackfin/configs/BF533-STAMP_defconfig      2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/configs/BF533-STAMP_defconfig  2009-05-10 23:48:28.000000000 +0200
+@@ -290,8 +290,8 @@
+ CONFIG_BFIN_DCACHE=y
+ # CONFIG_BFIN_DCACHE_BANKA is not set
+ # CONFIG_BFIN_ICACHE_LOCK is not set
+-CONFIG_BFIN_WB=y
+-# CONFIG_BFIN_WT is not set
++# CONFIG_BFIN_WB is not set
++CONFIG_BFIN_WT=y
+ # CONFIG_MPU is not set
+ #
+@@ -679,7 +679,7 @@
+ CONFIG_SIMPLE_GPIO=m
+ # CONFIG_VT is not set
+ # CONFIG_DEVKMEM is not set
+-CONFIG_BFIN_JTAG_COMM=m
++# CONFIG_BFIN_JTAG_COMM is not set
+ # CONFIG_SERIAL_NONSTANDARD is not set
+ #
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/configs/BF537-STAMP_defconfig linux-2.6.29-rc3.owrt/arch/blackfin/configs/BF537-STAMP_defconfig
+--- linux-2.6.29.owrt/arch/blackfin/configs/BF537-STAMP_defconfig      2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/configs/BF537-STAMP_defconfig  2009-05-10 23:48:28.000000000 +0200
+@@ -298,8 +298,8 @@
+ CONFIG_BFIN_DCACHE=y
+ # CONFIG_BFIN_DCACHE_BANKA is not set
+ # CONFIG_BFIN_ICACHE_LOCK is not set
+-CONFIG_BFIN_WB=y
+-# CONFIG_BFIN_WT is not set
++# CONFIG_BFIN_WB is not set
++CONFIG_BFIN_WT=y
+ # CONFIG_MPU is not set
+ #
+@@ -568,7 +568,15 @@
+ # CONFIG_MTD_DOC2000 is not set
+ # CONFIG_MTD_DOC2001 is not set
+ # CONFIG_MTD_DOC2001PLUS is not set
+-# CONFIG_MTD_NAND is not set
++CONFIG_MTD_NAND=m
++# CONFIG_MTD_NAND_VERIFY_WRITE is not set
++# CONFIG_MTD_NAND_ECC_SMC is not set
++# CONFIG_MTD_NAND_MUSEUM_IDS is not set
++# CONFIG_MTD_NAND_BFIN is not set
++CONFIG_MTD_NAND_IDS=m
++# CONFIG_MTD_NAND_DISKONCHIP is not set
++# CONFIG_MTD_NAND_NANDSIM is not set
++CONFIG_MTD_NAND_PLATFORM=m
+ # CONFIG_MTD_ONENAND is not set
+ #
+@@ -714,7 +722,7 @@
+ CONFIG_SIMPLE_GPIO=m
+ # CONFIG_VT is not set
+ # CONFIG_DEVKMEM is not set
+-CONFIG_BFIN_JTAG_COMM=m
++# CONFIG_BFIN_JTAG_COMM is not set
+ # CONFIG_SERIAL_NONSTANDARD is not set
+ #
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/configs/BF538-EZKIT_defconfig linux-2.6.29-rc3.owrt/arch/blackfin/configs/BF538-EZKIT_defconfig
+--- linux-2.6.29.owrt/arch/blackfin/configs/BF538-EZKIT_defconfig      2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/configs/BF538-EZKIT_defconfig  2009-05-10 23:48:28.000000000 +0200
+@@ -306,8 +306,8 @@
+ CONFIG_BFIN_DCACHE=y
+ # CONFIG_BFIN_DCACHE_BANKA is not set
+ # CONFIG_BFIN_ICACHE_LOCK is not set
+-CONFIG_BFIN_WB=y
+-# CONFIG_BFIN_WT is not set
++# CONFIG_BFIN_WB is not set
++CONFIG_BFIN_WT=y
+ # CONFIG_MPU is not set
+ #
+@@ -726,7 +726,7 @@
+ CONFIG_SIMPLE_GPIO=m
+ # CONFIG_VT is not set
+ # CONFIG_DEVKMEM is not set
+-CONFIG_BFIN_JTAG_COMM=m
++# CONFIG_BFIN_JTAG_COMM is not set
+ # CONFIG_SERIAL_NONSTANDARD is not set
+ #
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/configs/BF548-EZKIT_defconfig linux-2.6.29-rc3.owrt/arch/blackfin/configs/BF548-EZKIT_defconfig
+--- linux-2.6.29.owrt/arch/blackfin/configs/BF548-EZKIT_defconfig      2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/configs/BF548-EZKIT_defconfig  2009-05-10 23:48:28.000000000 +0200
+@@ -361,8 +361,8 @@
+ CONFIG_BFIN_DCACHE=y
+ # CONFIG_BFIN_DCACHE_BANKA is not set
+ # CONFIG_BFIN_ICACHE_LOCK is not set
+-CONFIG_BFIN_WB=y
+-# CONFIG_BFIN_WT is not set
++# CONFIG_BFIN_WB is not set
++CONFIG_BFIN_WT=y
+ # CONFIG_BFIN_L2_CACHEABLE is not set
+ # CONFIG_MPU is not set
+@@ -680,7 +680,7 @@
+ CONFIG_SCSI_DMA=y
+ # CONFIG_SCSI_TGT is not set
+ # CONFIG_SCSI_NETLINK is not set
+-# CONFIG_SCSI_PROC_FS is not set
++CONFIG_SCSI_PROC_FS=y
+ #
+ # SCSI support type (disk, tape, CD-ROM)
+@@ -856,7 +856,7 @@
+ CONFIG_HW_CONSOLE=y
+ # CONFIG_VT_HW_CONSOLE_BINDING is not set
+ # CONFIG_DEVKMEM is not set
+-CONFIG_BFIN_JTAG_COMM=m
++# CONFIG_BFIN_JTAG_COMM is not set
+ # CONFIG_SERIAL_NONSTANDARD is not set
+ #
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/configs/BF561-EZKIT_defconfig linux-2.6.29-rc3.owrt/arch/blackfin/configs/BF561-EZKIT_defconfig
+--- linux-2.6.29.owrt/arch/blackfin/configs/BF561-EZKIT_defconfig      2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/configs/BF561-EZKIT_defconfig  2009-05-10 23:48:28.000000000 +0200
+@@ -329,8 +329,8 @@
+ CONFIG_BFIN_DCACHE=y
+ # CONFIG_BFIN_DCACHE_BANKA is not set
+ # CONFIG_BFIN_ICACHE_LOCK is not set
+-CONFIG_BFIN_WB=y
+-# CONFIG_BFIN_WT is not set
++# CONFIG_BFIN_WB is not set
++CONFIG_BFIN_WT=y
+ # CONFIG_BFIN_L2_CACHEABLE is not set
+ # CONFIG_MPU is not set
+@@ -709,7 +709,7 @@
+ CONFIG_SIMPLE_GPIO=m
+ # CONFIG_VT is not set
+ # CONFIG_DEVKMEM is not set
+-CONFIG_BFIN_JTAG_COMM=m
++# CONFIG_BFIN_JTAG_COMM is not set
+ # CONFIG_SERIAL_NONSTANDARD is not set
+ #
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/configs/BlackStamp_defconfig linux-2.6.29-rc3.owrt/arch/blackfin/configs/BlackStamp_defconfig
+--- linux-2.6.29.owrt/arch/blackfin/configs/BlackStamp_defconfig       2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/configs/BlackStamp_defconfig   2009-05-10 23:48:28.000000000 +0200
+@@ -288,8 +288,8 @@
+ CONFIG_BFIN_DCACHE=y
+ # CONFIG_BFIN_DCACHE_BANKA is not set
+ # CONFIG_BFIN_ICACHE_LOCK is not set
+-CONFIG_BFIN_WB=y
+-# CONFIG_BFIN_WT is not set
++# CONFIG_BFIN_WB is not set
++CONFIG_BFIN_WT=y
+ # CONFIG_MPU is not set
+ #
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/configs/CM-BF527_defconfig linux-2.6.29-rc3.owrt/arch/blackfin/configs/CM-BF527_defconfig
+--- linux-2.6.29.owrt/arch/blackfin/configs/CM-BF527_defconfig 2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/configs/CM-BF527_defconfig     2009-05-10 23:48:28.000000000 +0200
+@@ -1,6 +1,7 @@
+ #
+ # Automatically generated make config: don't edit
+-# Linux kernel version: 2.6.28
++# Linux kernel version: 2.6.24.7
++# Fri Jul 18 18:00:41 2008
+ #
+ # CONFIG_MMU is not set
+ # CONFIG_FPU is not set
+@@ -8,6 +9,7 @@
+ # CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
+ CONFIG_BLACKFIN=y
+ CONFIG_ZONE_DMA=y
++CONFIG_SEMAPHORE_SLEEPERS=y
+ CONFIG_GENERIC_FIND_NEXT_BIT=y
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_HARDIRQS=y
+@@ -30,16 +32,18 @@
+ # CONFIG_POSIX_MQUEUE is not set
+ # CONFIG_BSD_PROCESS_ACCT is not set
+ # CONFIG_TASKSTATS is not set
++# CONFIG_USER_NS is not set
++# CONFIG_PID_NS is not set
+ # CONFIG_AUDIT is not set
+ CONFIG_IKCONFIG=y
+ CONFIG_IKCONFIG_PROC=y
+ CONFIG_LOG_BUF_SHIFT=14
+ # CONFIG_CGROUPS is not set
+-# CONFIG_GROUP_SCHED is not set
+-CONFIG_SYSFS_DEPRECATED=y
+-CONFIG_SYSFS_DEPRECATED_V2=y
++CONFIG_FAIR_GROUP_SCHED=y
++CONFIG_FAIR_USER_SCHED=y
++# CONFIG_FAIR_CGROUP_SCHED is not set
++# CONFIG_SYSFS_DEPRECATED is not set
+ # CONFIG_RELAY is not set
+-# CONFIG_NAMESPACES is not set
+ CONFIG_BLK_DEV_INITRD=y
+ CONFIG_INITRAMFS_SOURCE=""
+ # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+@@ -48,35 +52,26 @@
+ CONFIG_UID16=y
+ CONFIG_SYSCTL_SYSCALL=y
+ CONFIG_KALLSYMS=y
+-# CONFIG_KALLSYMS_ALL is not set
+ # CONFIG_KALLSYMS_EXTRA_PASS is not set
+ CONFIG_HOTPLUG=y
+ CONFIG_PRINTK=y
+ CONFIG_BUG=y
+ # CONFIG_ELF_CORE is not set
+-CONFIG_COMPAT_BRK=y
+ CONFIG_BASE_FULL=y
+ CONFIG_FUTEX=y
+ CONFIG_ANON_INODES=y
+ CONFIG_EPOLL=y
+ CONFIG_SIGNALFD=y
+-CONFIG_TIMERFD=y
+ CONFIG_EVENTFD=y
+-CONFIG_AIO=y
+ CONFIG_VM_EVENT_COUNTERS=y
+ CONFIG_SLAB=y
+ # CONFIG_SLUB is not set
+ # CONFIG_SLOB is not set
+-# CONFIG_PROFILING is not set
+-# CONFIG_MARKERS is not set
+-CONFIG_HAVE_OPROFILE=y
+-# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
+ CONFIG_SLABINFO=y
+ CONFIG_RT_MUTEXES=y
+ CONFIG_TINY_SHMEM=y
+ CONFIG_BASE_SMALL=0
+ CONFIG_MODULES=y
+-# CONFIG_MODULE_FORCE_LOAD is not set
+ CONFIG_MODULE_UNLOAD=y
+ # CONFIG_MODULE_FORCE_UNLOAD is not set
+ # CONFIG_MODVERSIONS is not set
+@@ -87,7 +82,6 @@
+ # CONFIG_BLK_DEV_IO_TRACE is not set
+ # CONFIG_LSF is not set
+ # CONFIG_BLK_DEV_BSG is not set
+-# CONFIG_BLK_DEV_INTEGRITY is not set
+ #
+ # IO Schedulers
+@@ -101,11 +95,9 @@
+ CONFIG_DEFAULT_CFQ=y
+ # CONFIG_DEFAULT_NOOP is not set
+ CONFIG_DEFAULT_IOSCHED="cfq"
+-CONFIG_CLASSIC_RCU=y
+ # CONFIG_PREEMPT_NONE is not set
+ CONFIG_PREEMPT_VOLUNTARY=y
+ # CONFIG_PREEMPT is not set
+-# CONFIG_FREEZER is not set
+ #
+ # Blackfin Processor Options
+@@ -114,10 +106,6 @@
+ #
+ # Processor and Board Settings
+ #
+-# CONFIG_BF512 is not set
+-# CONFIG_BF514 is not set
+-# CONFIG_BF516 is not set
+-# CONFIG_BF518 is not set
+ # CONFIG_BF522 is not set
+ # CONFIG_BF523 is not set
+ # CONFIG_BF524 is not set
+@@ -130,32 +118,48 @@
+ # CONFIG_BF534 is not set
+ # CONFIG_BF536 is not set
+ # CONFIG_BF537 is not set
+-# CONFIG_BF538 is not set
+-# CONFIG_BF539 is not set
+ # CONFIG_BF542 is not set
+-# CONFIG_BF542M is not set
+ # CONFIG_BF544 is not set
+-# CONFIG_BF544M is not set
+ # CONFIG_BF547 is not set
+-# CONFIG_BF547M is not set
+ # CONFIG_BF548 is not set
+-# CONFIG_BF548M is not set
+ # CONFIG_BF549 is not set
+-# CONFIG_BF549M is not set
+ # CONFIG_BF561 is not set
+-CONFIG_BF_REV_MIN=0
+-CONFIG_BF_REV_MAX=2
+ # CONFIG_BF_REV_0_0 is not set
+ CONFIG_BF_REV_0_1=y
+ # CONFIG_BF_REV_0_2 is not set
+ # CONFIG_BF_REV_0_3 is not set
+ # CONFIG_BF_REV_0_4 is not set
+ # CONFIG_BF_REV_0_5 is not set
+-# CONFIG_BF_REV_0_6 is not set
+ # CONFIG_BF_REV_ANY is not set
+ # CONFIG_BF_REV_NONE is not set
+ CONFIG_BF52x=y
+ CONFIG_MEM_MT48LC16M16A2TG_75=y
++# CONFIG_BFIN527_EZKIT is not set
++CONFIG_BFIN527_BLUETECHNIX_CM=y
++
++#
++# BF527 Specific Configuration
++#
++
++#
++# Alternative Multiplexing Scheme
++#
++# CONFIG_BF527_SPORT0_PORTF is not set
++CONFIG_BF527_SPORT0_PORTG=y
++CONFIG_BF527_SPORT0_TSCLK_PG10=y
++# CONFIG_BF527_SPORT0_TSCLK_PG14 is not set
++CONFIG_BF527_UART1_PORTF=y
++# CONFIG_BF527_UART1_PORTG is not set
++# CONFIG_BF527_NAND_D_PORTF is not set
++CONFIG_BF527_NAND_D_PORTH=y
++
++#
++# Interrupt Priority Assignment
++#
++
++#
++# Priority
++#
+ CONFIG_IRQ_PLL_WAKEUP=7
+ CONFIG_IRQ_DMA0_ERROR=7
+ CONFIG_IRQ_DMAR0_BLK=7
+@@ -175,6 +179,7 @@
+ CONFIG_IRQ_SPORT1_RX=9
+ CONFIG_IRQ_SPORT1_TX=9
+ CONFIG_IRQ_TWI=10
++CONFIG_IRQ_SPI=10
+ CONFIG_IRQ_UART0_RX=10
+ CONFIG_IRQ_UART0_TX=10
+ CONFIG_IRQ_UART1_RX=10
+@@ -200,34 +205,6 @@
+ CONFIG_IRQ_WATCH=13
+ CONFIG_IRQ_PORTF_INTA=13
+ CONFIG_IRQ_PORTF_INTB=13
+-# CONFIG_BFIN527_EZKIT is not set
+-CONFIG_BFIN527_BLUETECHNIX_CM=y
+-# CONFIG_BFIN526_EZBRD is not set
+-
+-#
+-# BF527 Specific Configuration
+-#
+-
+-#
+-# Alternative Multiplexing Scheme
+-#
+-# CONFIG_BF527_SPORT0_PORTF is not set
+-CONFIG_BF527_SPORT0_PORTG=y
+-CONFIG_BF527_SPORT0_TSCLK_PG10=y
+-# CONFIG_BF527_SPORT0_TSCLK_PG14 is not set
+-CONFIG_BF527_UART1_PORTF=y
+-# CONFIG_BF527_UART1_PORTG is not set
+-# CONFIG_BF527_NAND_D_PORTF is not set
+-CONFIG_BF527_NAND_D_PORTH=y
+-
+-#
+-# Interrupt Priority Assignment
+-#
+-
+-#
+-# Priority
+-#
+-CONFIG_IRQ_SPI=10
+ CONFIG_IRQ_SPI_ERROR=7
+ CONFIG_IRQ_NFC_ERROR=7
+ CONFIG_IRQ_HDMA_ERROR=7
+@@ -249,6 +226,7 @@
+ #
+ CONFIG_CLKIN_HZ=25000000
+ # CONFIG_BFIN_KERNEL_CLOCK is not set
++CONFIG_MAX_MEM_SIZE=512
+ CONFIG_MAX_VCO_HZ=600000000
+ CONFIG_MIN_VCO_HZ=50000000
+ CONFIG_MAX_SCLK_HZ=133333333
+@@ -262,10 +240,10 @@
+ # CONFIG_HZ_300 is not set
+ # CONFIG_HZ_1000 is not set
+ CONFIG_HZ=250
+-# CONFIG_SCHED_HRTICK is not set
+ CONFIG_GENERIC_TIME=y
+ CONFIG_GENERIC_CLOCKEVENTS=y
+ # CONFIG_CYCLES_CLOCKSOURCE is not set
++# CONFIG_TICK_ONESHOT is not set
+ # CONFIG_NO_HZ is not set
+ # CONFIG_HIGH_RES_TIMERS is not set
+ CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+@@ -299,12 +277,6 @@
+ CONFIG_CACHELINE_ALIGNED_L1=y
+ # CONFIG_SYSCALL_TAB_L1 is not set
+ # CONFIG_CPLB_SWITCH_TAB_L1 is not set
+-CONFIG_APP_STACK_L1=y
+-
+-#
+-# Speed Optimizations
+-#
+-CONFIG_BFIN_INS_LOWOVERHEAD=y
+ CONFIG_RAMKERNEL=y
+ # CONFIG_ROMKERNEL is not set
+ CONFIG_SELECT_MEMORY_MODEL=y
+@@ -313,10 +285,10 @@
+ # CONFIG_SPARSEMEM_MANUAL is not set
+ CONFIG_FLATMEM=y
+ CONFIG_FLAT_NODE_MEM_MAP=y
+-CONFIG_PAGEFLAGS_EXTENDED=y
++# CONFIG_SPARSEMEM_STATIC is not set
++# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
+ CONFIG_SPLIT_PTLOCK_CPUS=4
+ # CONFIG_RESOURCES_64BIT is not set
+-# CONFIG_PHYS_ADDR_T_64BIT is not set
+ CONFIG_ZONE_DMA_FLAG=1
+ CONFIG_VIRT_TO_BUS=y
+ CONFIG_BFIN_GPTIMERS=y
+@@ -332,8 +304,8 @@
+ CONFIG_BFIN_DCACHE=y
+ # CONFIG_BFIN_DCACHE_BANKA is not set
+ # CONFIG_BFIN_ICACHE_LOCK is not set
+-CONFIG_BFIN_WB=y
+-# CONFIG_BFIN_WT is not set
++# CONFIG_BFIN_WB is not set
++CONFIG_BFIN_WT=y
+ # CONFIG_MPU is not set
+ #
+@@ -362,6 +334,7 @@
+ #
+ # Bus options (PCI, PCMCIA, EISA, MCA, ISA)
+ #
++# CONFIG_PCI is not set
+ # CONFIG_ARCH_SUPPORTS_MSI is not set
+ # CONFIG_PCCARD is not set
+@@ -372,20 +345,25 @@
+ CONFIG_BINFMT_FLAT=y
+ CONFIG_BINFMT_ZFLAT=y
+ # CONFIG_BINFMT_SHARED_FLAT is not set
+-# CONFIG_HAVE_AOUT is not set
+ # CONFIG_BINFMT_MISC is not set
+ #
+ # Power management options
+ #
+ # CONFIG_PM is not set
+-CONFIG_ARCH_SUSPEND_POSSIBLE=y
++CONFIG_SUSPEND_UP_POSSIBLE=y
++# CONFIG_PM_BFIN_SLEEP_DEEPER is not set
++# CONFIG_PM_BFIN_SLEEP is not set
+ # CONFIG_PM_WAKEUP_BY_GPIO is not set
+ #
+ # CPU Frequency scaling
+ #
+ # CONFIG_CPU_FREQ is not set
++
++#
++# Networking
++#
+ CONFIG_NET=y
+ #
+@@ -398,7 +376,6 @@
+ # CONFIG_XFRM_USER is not set
+ # CONFIG_XFRM_SUB_POLICY is not set
+ # CONFIG_XFRM_MIGRATE is not set
+-# CONFIG_XFRM_STATISTICS is not set
+ # CONFIG_NET_KEY is not set
+ CONFIG_INET=y
+ # CONFIG_IP_MULTICAST is not set
+@@ -428,6 +405,8 @@
+ CONFIG_DEFAULT_TCP_CONG="cubic"
+ # CONFIG_TCP_MD5SIG is not set
+ # CONFIG_IPV6 is not set
++# CONFIG_INET6_XFRM_TUNNEL is not set
++# CONFIG_INET6_TUNNEL is not set
+ # CONFIG_NETLABEL is not set
+ # CONFIG_NETWORK_SECMARK is not set
+ # CONFIG_NETFILTER is not set
+@@ -436,7 +415,6 @@
+ # CONFIG_TIPC is not set
+ # CONFIG_ATM is not set
+ # CONFIG_BRIDGE is not set
+-# CONFIG_NET_DSA is not set
+ # CONFIG_VLAN_8021Q is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_LLC2 is not set
+@@ -453,14 +431,14 @@
+ #
+ # CONFIG_NET_PKTGEN is not set
+ # CONFIG_HAMRADIO is not set
+-# CONFIG_CAN is not set
+ # CONFIG_IRDA is not set
+ # CONFIG_BT is not set
+ # CONFIG_AF_RXRPC is not set
+-# CONFIG_PHONET is not set
+-CONFIG_WIRELESS=y
++
++#
++# Wireless
++#
+ # CONFIG_CFG80211 is not set
+-CONFIG_WIRELESS_OLD_REGULATORY=y
+ # CONFIG_WIRELESS_EXT is not set
+ # CONFIG_MAC80211 is not set
+ # CONFIG_IEEE80211 is not set
+@@ -478,8 +456,6 @@
+ CONFIG_STANDALONE=y
+ CONFIG_PREVENT_FIRMWARE_BUILD=y
+ # CONFIG_FW_LOADER is not set
+-# CONFIG_DEBUG_DRIVER is not set
+-# CONFIG_DEBUG_DEVRES is not set
+ # CONFIG_SYS_HYPERVISOR is not set
+ # CONFIG_CONNECTOR is not set
+ CONFIG_MTD=y
+@@ -488,7 +464,6 @@
+ CONFIG_MTD_PARTITIONS=y
+ # CONFIG_MTD_REDBOOT_PARTS is not set
+ # CONFIG_MTD_CMDLINE_PARTS is not set
+-# CONFIG_MTD_AR7_PARTS is not set
+ #
+ # User Modules And Translation Layers
+@@ -532,7 +507,6 @@
+ #
+ CONFIG_MTD_COMPLEX_MAPPINGS=y
+ # CONFIG_MTD_PHYSMAP is not set
+-# CONFIG_MTD_GPIO_ADDR is not set
+ # CONFIG_MTD_UCLINUX is not set
+ # CONFIG_MTD_PLATRAM is not set
+@@ -568,12 +542,10 @@
+ CONFIG_BLK_DEV_RAM=y
+ CONFIG_BLK_DEV_RAM_COUNT=16
+ CONFIG_BLK_DEV_RAM_SIZE=4096
+-# CONFIG_BLK_DEV_XIP is not set
++CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+ # CONFIG_CDROM_PKTCDVD is not set
+ # CONFIG_ATA_OVER_ETH is not set
+-# CONFIG_BLK_DEV_HD is not set
+ # CONFIG_MISC_DEVICES is not set
+-CONFIG_HAVE_IDE=y
+ # CONFIG_IDE is not set
+ #
+@@ -586,6 +558,7 @@
+ # CONFIG_ATA is not set
+ # CONFIG_MD is not set
+ CONFIG_NETDEVICES=y
++# CONFIG_NETDEVICES_MULTIQUEUE is not set
+ # CONFIG_DUMMY is not set
+ # CONFIG_BONDING is not set
+ # CONFIG_MACVLAN is not set
+@@ -606,7 +579,6 @@
+ # CONFIG_SMSC_PHY is not set
+ # CONFIG_BROADCOM_PHY is not set
+ # CONFIG_ICPLUS_PHY is not set
+-# CONFIG_REALTEK_PHY is not set
+ # CONFIG_FIXED_PHY is not set
+ # CONFIG_MDIO_BITBANG is not set
+ CONFIG_NET_ETHERNET=y
+@@ -619,14 +591,11 @@
+ # CONFIG_SMC91X is not set
+ # CONFIG_SMSC911X is not set
+ # CONFIG_DM9000 is not set
+-# CONFIG_ENC28J60 is not set
+ # CONFIG_IBM_NEW_EMAC_ZMII is not set
+ # CONFIG_IBM_NEW_EMAC_RGMII is not set
+ # CONFIG_IBM_NEW_EMAC_TAH is not set
+ # CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+-# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
+-# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
+-# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
++# CONFIG_B44 is not set
+ # CONFIG_NETDEV_1000 is not set
+ # CONFIG_NETDEV_10000 is not set
+@@ -635,7 +604,6 @@
+ #
+ # CONFIG_WLAN_PRE80211 is not set
+ # CONFIG_WLAN_80211 is not set
+-# CONFIG_IWLWIFI_LEDS is not set
+ #
+ # USB Network Adapters
+@@ -648,6 +616,7 @@
+ # CONFIG_WAN is not set
+ # CONFIG_PPP is not set
+ # CONFIG_SLIP is not set
++# CONFIG_SHAPER is not set
+ # CONFIG_NETCONSOLE is not set
+ # CONFIG_NETPOLL is not set
+ # CONFIG_NET_POLL_CONTROLLER is not set
+@@ -673,15 +642,14 @@
+ # CONFIG_BF5xx_PPIFCD is not set
+ # CONFIG_BFIN_SIMPLE_TIMER is not set
+ # CONFIG_BF5xx_PPI is not set
+-# CONFIG_BF5xx_EPPI is not set
++CONFIG_BFIN_OTP=y
++# CONFIG_BFIN_OTP_WRITE_ENABLE is not set
+ # CONFIG_BFIN_SPORT is not set
+ # CONFIG_BFIN_TIMER_LATENCY is not set
+ # CONFIG_TWI_LCD is not set
+-CONFIG_BFIN_DMA_INTERFACE=m
+ CONFIG_SIMPLE_GPIO=m
+ # CONFIG_VT is not set
+ # CONFIG_DEVKMEM is not set
+-# CONFIG_BFIN_JTAG_COMM is not set
+ # CONFIG_SERIAL_NONSTANDARD is not set
+ #
+@@ -705,8 +673,6 @@
+ # CONFIG_SERIAL_BFIN_SPORT is not set
+ CONFIG_UNIX98_PTYS=y
+ # CONFIG_LEGACY_PTYS is not set
+-CONFIG_BFIN_OTP=y
+-# CONFIG_BFIN_OTP_WRITE_ENABLE is not set
+ #
+ # CAN, the car bus and industrial fieldbus
+@@ -714,49 +680,44 @@
+ # CONFIG_CAN4LINUX is not set
+ # CONFIG_IPMI_HANDLER is not set
+ # CONFIG_HW_RANDOM is not set
++# CONFIG_GEN_RTC is not set
+ # CONFIG_R3964 is not set
+ # CONFIG_RAW_DRIVER is not set
+ # CONFIG_TCG_TPM is not set
+ CONFIG_I2C=y
+ CONFIG_I2C_BOARDINFO=y
+ CONFIG_I2C_CHARDEV=m
+-CONFIG_I2C_HELPER_AUTO=y
+ #
+-# I2C Hardware Bus support
++# I2C Algorithms
+ #
++# CONFIG_I2C_ALGOBIT is not set
++# CONFIG_I2C_ALGOPCF is not set
++# CONFIG_I2C_ALGOPCA is not set
+ #
+-# I2C system bus drivers (mostly embedded / system-on-chip)
++# I2C Hardware Bus support
+ #
+ CONFIG_I2C_BLACKFIN_TWI=m
+ CONFIG_I2C_BLACKFIN_TWI_CLK_KHZ=100
+ # CONFIG_I2C_GPIO is not set
+ # CONFIG_I2C_OCORES is not set
+-# CONFIG_I2C_SIMTEC is not set
+-
+-#
+-# External I2C/SMBus adapter drivers
+-#
+ # CONFIG_I2C_PARPORT_LIGHT is not set
++# CONFIG_I2C_SIMTEC is not set
+ # CONFIG_I2C_TAOS_EVM is not set
+-# CONFIG_I2C_TINY_USB is not set
+-
+-#
+-# Other I2C/SMBus bus drivers
+-#
+-# CONFIG_I2C_PCA_PLATFORM is not set
+ # CONFIG_I2C_STUB is not set
++# CONFIG_I2C_TINY_USB is not set
+ #
+ # Miscellaneous I2C Chip support
+ #
++# CONFIG_SENSORS_DS1337 is not set
++# CONFIG_SENSORS_DS1374 is not set
+ # CONFIG_DS1682 is not set
+-# CONFIG_AT24 is not set
+ # CONFIG_SENSORS_AD5252 is not set
+-# CONFIG_SENSORS_EEPROM is not set
++# CONFIG_EEPROM_LEGACY is not set
+ # CONFIG_SENSORS_PCF8574 is not set
+-# CONFIG_PCF8575 is not set
++# CONFIG_SENSORS_PCF8575 is not set
+ # CONFIG_SENSORS_PCA9539 is not set
+ # CONFIG_SENSORS_PCF8591 is not set
+ # CONFIG_SENSORS_MAX6875 is not set
+@@ -765,41 +726,37 @@
+ # CONFIG_I2C_DEBUG_ALGO is not set
+ # CONFIG_I2C_DEBUG_BUS is not set
+ # CONFIG_I2C_DEBUG_CHIP is not set
++
++#
++# SPI support
++#
+ CONFIG_SPI=y
+-# CONFIG_SPI_DEBUG is not set
+ CONFIG_SPI_MASTER=y
+ #
+ # SPI Master Controller Drivers
+ #
+ CONFIG_SPI_BFIN=y
+-# CONFIG_SPI_BFIN_LOCK is not set
+ # CONFIG_SPI_BITBANG is not set
+ #
+ # SPI Protocol Masters
+ #
+-# CONFIG_SPI_AT25 is not set
++# CONFIG_EEPROM_AT25 is not set
+ # CONFIG_SPI_SPIDEV is not set
+ # CONFIG_SPI_TLE62X0 is not set
+-CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
+-# CONFIG_GPIOLIB is not set
+ # CONFIG_W1 is not set
+ # CONFIG_POWER_SUPPLY is not set
+ CONFIG_HWMON=y
+ # CONFIG_HWMON_VID is not set
+-# CONFIG_SENSORS_AD7414 is not set
+ # CONFIG_SENSORS_AD7418 is not set
+-# CONFIG_SENSORS_ADCXX is not set
+ # CONFIG_SENSORS_ADM1021 is not set
+ # CONFIG_SENSORS_ADM1025 is not set
+ # CONFIG_SENSORS_ADM1026 is not set
+ # CONFIG_SENSORS_ADM1029 is not set
+ # CONFIG_SENSORS_ADM1031 is not set
+ # CONFIG_SENSORS_ADM9240 is not set
+-# CONFIG_SENSORS_ADT7462 is not set
+ # CONFIG_SENSORS_ADT7470 is not set
+-# CONFIG_SENSORS_ADT7473 is not set
+ # CONFIG_SENSORS_ATXP1 is not set
+ # CONFIG_SENSORS_DS1621 is not set
+ # CONFIG_SENSORS_F71805F is not set
+@@ -820,7 +777,6 @@
+ # CONFIG_SENSORS_LM90 is not set
+ # CONFIG_SENSORS_LM92 is not set
+ # CONFIG_SENSORS_LM93 is not set
+-# CONFIG_SENSORS_MAX1111 is not set
+ # CONFIG_SENSORS_MAX1619 is not set
+ # CONFIG_SENSORS_MAX6650 is not set
+ # CONFIG_SENSORS_PC87360 is not set
+@@ -829,7 +785,6 @@
+ # CONFIG_SENSORS_SMSC47M1 is not set
+ # CONFIG_SENSORS_SMSC47M192 is not set
+ # CONFIG_SENSORS_SMSC47B397 is not set
+-# CONFIG_SENSORS_ADS7828 is not set
+ # CONFIG_SENSORS_THMC50 is not set
+ # CONFIG_SENSORS_VT1211 is not set
+ # CONFIG_SENSORS_W83781D is not set
+@@ -837,12 +792,9 @@
+ # CONFIG_SENSORS_W83792D is not set
+ # CONFIG_SENSORS_W83793 is not set
+ # CONFIG_SENSORS_W83L785TS is not set
+-# CONFIG_SENSORS_W83L786NG is not set
+ # CONFIG_SENSORS_W83627HF is not set
+ # CONFIG_SENSORS_W83627EHF is not set
+ # CONFIG_HWMON_DEBUG_CHIP is not set
+-# CONFIG_THERMAL is not set
+-# CONFIG_THERMAL_HWMON is not set
+ CONFIG_WATCHDOG=y
+ # CONFIG_WATCHDOG_NOWAYOUT is not set
+@@ -858,31 +810,21 @@
+ # CONFIG_USBPCWATCHDOG is not set
+ #
+-# Multifunction device drivers
++# Sonics Silicon Backplane
+ #
+-# CONFIG_MFD_CORE is not set
+-# CONFIG_MFD_SM501 is not set
+-# CONFIG_HTC_PASIC3 is not set
+-# CONFIG_MFD_TMIO is not set
+-# CONFIG_PMIC_DA903X is not set
+-# CONFIG_MFD_WM8400 is not set
+-# CONFIG_MFD_WM8350_I2C is not set
+-# CONFIG_REGULATOR is not set
++CONFIG_SSB_POSSIBLE=y
++# CONFIG_SSB is not set
+ #
+-# Multimedia devices
++# Multifunction device drivers
+ #
++# CONFIG_MFD_SM501 is not set
+ #
+-# Multimedia core support
++# Multimedia devices
+ #
+ # CONFIG_VIDEO_DEV is not set
+ # CONFIG_DVB_CORE is not set
+-# CONFIG_VIDEO_MEDIA is not set
+-
+-#
+-# Multimedia drivers
+-#
+ # CONFIG_DAB is not set
+ #
+@@ -897,6 +839,10 @@
+ # Display device support
+ #
+ # CONFIG_DISPLAY_SUPPORT is not set
++
++#
++# Sound
++#
+ # CONFIG_SOUND is not set
+ CONFIG_USB_SUPPORT=y
+ CONFIG_USB_ARCH_HAS_HCD=y
+@@ -904,7 +850,6 @@
+ # CONFIG_USB_ARCH_HAS_EHCI is not set
+ CONFIG_USB=y
+ # CONFIG_USB_DEBUG is not set
+-# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
+ #
+ # Miscellaneous USB options
+@@ -915,48 +860,40 @@
+ # CONFIG_USB_OTG is not set
+ # CONFIG_USB_OTG_WHITELIST is not set
+ CONFIG_USB_OTG_BLACKLIST_HUB=y
+-CONFIG_USB_MON=y
+-# CONFIG_USB_WUSB is not set
+-# CONFIG_USB_WUSB_CBAF is not set
+ #
+ # USB Host Controller Drivers
+ #
+-# CONFIG_USB_C67X00_HCD is not set
+ # CONFIG_USB_ISP116X_HCD is not set
+-# CONFIG_USB_ISP1760_HCD is not set
+ # CONFIG_USB_ISP1362_HCD is not set
++# CONFIG_USB_ISP1760_HCD is not set
+ # CONFIG_USB_SL811_HCD is not set
+ # CONFIG_USB_R8A66597_HCD is not set
+-# CONFIG_USB_HWA_HCD is not set
+ CONFIG_USB_MUSB_HDRC=y
+ CONFIG_USB_MUSB_SOC=y
+ #
+-# Blackfin high speed USB Support
++# Blackfin high speed USB support
+ #
+ CONFIG_USB_MUSB_HOST=y
+ # CONFIG_USB_MUSB_PERIPHERAL is not set
+ # CONFIG_USB_MUSB_OTG is not set
+ CONFIG_USB_MUSB_HDRC_HCD=y
+ CONFIG_MUSB_PIO_ONLY=y
+-CONFIG_MUSB_DMA_POLL=y
+-# CONFIG_USB_MUSB_DEBUG is not set
++CONFIG_USB_MUSB_LOGLEVEL=0
+ #
+ # USB Device Class drivers
+ #
+ # CONFIG_USB_ACM is not set
+ # CONFIG_USB_PRINTER is not set
+-# CONFIG_USB_WDM is not set
+-# CONFIG_USB_TMC is not set
+ #
+-# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed;
++# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+ #
+ #
+-# see USB_STORAGE Help for more information
++# may also be needed; see USB_STORAGE Help for more information
+ #
+ # CONFIG_USB_LIBUSUAL is not set
+@@ -964,10 +901,15 @@
+ # USB Imaging devices
+ #
+ # CONFIG_USB_MDC800 is not set
++CONFIG_USB_MON=y
+ #
+ # USB port drivers
+ #
++
++#
++# USB Serial Converter support
++#
+ # CONFIG_USB_SERIAL is not set
+ #
+@@ -976,7 +918,7 @@
+ # CONFIG_USB_EMI62 is not set
+ # CONFIG_USB_EMI26 is not set
+ # CONFIG_USB_ADUTUX is not set
+-# CONFIG_USB_SEVSEG is not set
++# CONFIG_USB_AUERSWALD is not set
+ # CONFIG_USB_RIO500 is not set
+ # CONFIG_USB_LEGOTOWER is not set
+ # CONFIG_USB_LCD is not set
+@@ -992,13 +934,17 @@
+ # CONFIG_USB_LD is not set
+ # CONFIG_USB_TRANCEVIBRATOR is not set
+ # CONFIG_USB_IOWARRIOR is not set
+-# CONFIG_USB_ISIGHTFW is not set
+-# CONFIG_USB_VST is not set
++
++#
++# USB DSL modem support
++#
++
++#
++# USB Gadget Support
++#
+ # CONFIG_USB_GADGET is not set
+ # CONFIG_MMC is not set
+-# CONFIG_MEMSTICK is not set
+ # CONFIG_NEW_LEDS is not set
+-# CONFIG_ACCESSIBILITY is not set
+ CONFIG_RTC_LIB=y
+ CONFIG_RTC_CLASS=y
+ CONFIG_RTC_HCTOSYS=y
+@@ -1027,59 +973,51 @@
+ # CONFIG_RTC_DRV_PCF8563 is not set
+ # CONFIG_RTC_DRV_PCF8583 is not set
+ # CONFIG_RTC_DRV_M41T80 is not set
+-# CONFIG_RTC_DRV_S35390A is not set
+-# CONFIG_RTC_DRV_FM3130 is not set
+-# CONFIG_RTC_DRV_RX8581 is not set
+ #
+ # 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_MAX6902 is not set
+ #
+ # Platform RTC drivers
+ #
+-# CONFIG_RTC_DRV_DS1286 is not set
+-# CONFIG_RTC_DRV_DS1511 is not set
+ # CONFIG_RTC_DRV_DS1553 is not set
+-# CONFIG_RTC_DRV_DS1742 is not set
+ # CONFIG_RTC_DRV_STK17TA8 is not set
++# CONFIG_RTC_DRV_DS1742 is not set
+ # CONFIG_RTC_DRV_M48T86 is not set
+-# CONFIG_RTC_DRV_M48T35 is not set
+ # CONFIG_RTC_DRV_M48T59 is not set
+-# CONFIG_RTC_DRV_BQ4802 is not set
+ # CONFIG_RTC_DRV_V3020 is not set
+ #
+ # on-CPU RTC drivers
+ #
+ CONFIG_RTC_DRV_BFIN=y
+-# CONFIG_DMADEVICES is not set
++
++#
++# Userspace I/O
++#
+ # CONFIG_UIO is not set
+-# CONFIG_STAGING is not set
+ #
+ # File systems
+ #
+ # CONFIG_EXT2_FS is not set
+ # CONFIG_EXT3_FS is not set
+-# CONFIG_EXT4_FS is not set
++# CONFIG_EXT4DEV_FS is not set
+ # CONFIG_REISERFS_FS is not set
+ # CONFIG_JFS_FS is not set
+ # CONFIG_FS_POSIX_ACL is not set
+-CONFIG_FILE_LOCKING=y
+ # CONFIG_XFS_FS is not set
++# CONFIG_GFS2_FS is not set
+ # CONFIG_OCFS2_FS is not set
+-# CONFIG_DNOTIFY is not set
++# CONFIG_MINIX_FS is not set
++# CONFIG_ROMFS_FS is not set
+ CONFIG_INOTIFY=y
+ CONFIG_INOTIFY_USER=y
+ # CONFIG_QUOTA is not set
++# CONFIG_DNOTIFY is not set
+ # CONFIG_AUTOFS_FS is not set
+ # CONFIG_AUTOFS4_FS is not set
+ # CONFIG_FUSE_FS is not set
+@@ -1121,11 +1059,8 @@
+ # CONFIG_JFFS2_FS is not set
+ # CONFIG_CRAMFS is not set
+ # CONFIG_VXFS_FS is not set
+-# CONFIG_MINIX_FS is not set
+-# CONFIG_OMFS_FS is not set
+ # CONFIG_HPFS_FS is not set
+ # CONFIG_QNX4FS_FS is not set
+-# CONFIG_ROMFS_FS is not set
+ # CONFIG_SYSV_FS is not set
+ # CONFIG_UFS_FS is not set
+ CONFIG_NETWORK_FILESYSTEMS=y
+@@ -1133,12 +1068,13 @@
+ CONFIG_NFS_V3=y
+ # CONFIG_NFS_V3_ACL is not set
+ # CONFIG_NFS_V4 is not set
++# CONFIG_NFS_DIRECTIO is not set
+ # CONFIG_NFSD is not set
+ CONFIG_LOCKD=m
+ CONFIG_LOCKD_V4=y
+ CONFIG_NFS_COMMON=y
+ CONFIG_SUNRPC=m
+-# CONFIG_SUNRPC_REGISTER_V4 is not set
++# CONFIG_SUNRPC_BIND34 is not set
+ # CONFIG_RPCSEC_GSS_KRB5 is not set
+ # CONFIG_RPCSEC_GSS_SPKM3 is not set
+ CONFIG_SMB_FS=m
+@@ -1194,6 +1130,7 @@
+ # CONFIG_NLS_KOI8_U is not set
+ # CONFIG_NLS_UTF8 is not set
+ # CONFIG_DLM is not set
++# CONFIG_INSTRUMENTATION is not set
+ #
+ # Kernel hacking
+@@ -1201,61 +1138,14 @@
+ # CONFIG_PRINTK_TIME is not set
+ CONFIG_ENABLE_WARN_DEPRECATED=y
+ CONFIG_ENABLE_MUST_CHECK=y
+-CONFIG_FRAME_WARN=1024
+ # CONFIG_MAGIC_SYSRQ is not set
+ # CONFIG_UNUSED_SYMBOLS is not set
+ CONFIG_DEBUG_FS=y
+ # CONFIG_HEADERS_CHECK is not set
+-CONFIG_DEBUG_KERNEL=y
+-# CONFIG_DEBUG_SHIRQ is not set
+-CONFIG_DETECT_SOFTLOCKUP=y
+-# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
+-CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
+-# CONFIG_SCHED_DEBUG is not set
+-# CONFIG_SCHEDSTATS is not set
+-# CONFIG_TIMER_STATS is not set
+-# CONFIG_DEBUG_OBJECTS is not set
+-# CONFIG_DEBUG_SLAB is not set
+-# CONFIG_DEBUG_RT_MUTEXES is not set
+-# CONFIG_RT_MUTEX_TESTER is not set
+-# CONFIG_DEBUG_SPINLOCK is not set
+-# CONFIG_DEBUG_MUTEXES is not set
+-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+-# CONFIG_DEBUG_KOBJECT is not set
++# CONFIG_DEBUG_KERNEL is not set
+ # CONFIG_DEBUG_BUGVERBOSE is not set
+-# CONFIG_DEBUG_INFO is not set
+-# CONFIG_DEBUG_VM is not set
+-# CONFIG_DEBUG_WRITECOUNT is not set
+-# CONFIG_DEBUG_MEMORY_INIT is not set
+-# CONFIG_DEBUG_LIST is not set
+-# CONFIG_DEBUG_SG is not set
+-# CONFIG_FRAME_POINTER is not set
+-# CONFIG_BOOT_PRINTK_DELAY is not set
+-# CONFIG_RCU_TORTURE_TEST is not set
+-# CONFIG_RCU_CPU_STALL_DETECTOR is not set
+-# CONFIG_BACKTRACE_SELF_TEST is not set
+-# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
+-# CONFIG_FAULT_INJECTION is not set
+-# CONFIG_SYSCTL_SYSCALL_CHECK is not set
+-
+-#
+-# Tracers
+-#
+-# CONFIG_SCHED_TRACER is not set
+-# CONFIG_CONTEXT_SWITCH_TRACER is not set
+-# CONFIG_BOOT_TRACER is not set
+-# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
+ # CONFIG_SAMPLES is not set
+-CONFIG_HAVE_ARCH_KGDB=y
+-# CONFIG_KGDB is not set
+-# CONFIG_DEBUG_STACKOVERFLOW is not set
+-# CONFIG_DEBUG_STACK_USAGE is not set
+-# CONFIG_KGDB_TESTCASE is not set
+-CONFIG_DEBUG_VERBOSE=y
+ CONFIG_DEBUG_MMRS=y
+-# CONFIG_DEBUG_HWERR is not set
+-# CONFIG_DEBUG_DOUBLEFAULT is not set
+ CONFIG_DEBUG_HUNT_FOR_ZERO=y
+ CONFIG_DEBUG_BFIN_HWTRACE_ON=y
+ CONFIG_DEBUG_BFIN_HWTRACE_COMPRESSION_OFF=y
+@@ -1264,7 +1154,7 @@
+ CONFIG_DEBUG_BFIN_HWTRACE_COMPRESSION=0
+ # CONFIG_DEBUG_BFIN_HWTRACE_EXPAND is not set
+ # CONFIG_DEBUG_BFIN_NO_KERN_HWTRACE is not set
+-# CONFIG_EARLY_PRINTK is not set
++CONFIG_EARLY_PRINTK=y
+ # CONFIG_CPLB_INFO is not set
+ CONFIG_ACCESS_CHECK=y
+@@ -1273,96 +1163,10 @@
+ #
+ # CONFIG_KEYS is not set
+ CONFIG_SECURITY=y
+-# CONFIG_SECURITYFS is not set
+ # CONFIG_SECURITY_NETWORK is not set
+-# CONFIG_SECURITY_FILE_CAPABILITIES is not set
++# CONFIG_SECURITY_CAPABILITIES is not set
+ # CONFIG_SECURITY_ROOTPLUG is not set
+-CONFIG_SECURITY_DEFAULT_MMAP_MIN_ADDR=0
+-CONFIG_CRYPTO=y
+-
+-#
+-# Crypto core or helper
+-#
+-# CONFIG_CRYPTO_FIPS is not set
+-# CONFIG_CRYPTO_MANAGER is not set
+-# CONFIG_CRYPTO_MANAGER2 is not set
+-# CONFIG_CRYPTO_GF128MUL is not set
+-# CONFIG_CRYPTO_NULL is not set
+-# CONFIG_CRYPTO_CRYPTD is not set
+-# CONFIG_CRYPTO_AUTHENC is not set
+-# CONFIG_CRYPTO_TEST is not set
+-
+-#
+-# Authenticated Encryption with Associated Data
+-#
+-# CONFIG_CRYPTO_CCM is not set
+-# CONFIG_CRYPTO_GCM is not set
+-# CONFIG_CRYPTO_SEQIV is not set
+-
+-#
+-# Block modes
+-#
+-# CONFIG_CRYPTO_CBC is not set
+-# CONFIG_CRYPTO_CTR is not set
+-# CONFIG_CRYPTO_CTS is not set
+-# CONFIG_CRYPTO_ECB is not set
+-# CONFIG_CRYPTO_LRW is not set
+-# CONFIG_CRYPTO_PCBC is not set
+-# CONFIG_CRYPTO_XTS is not set
+-
+-#
+-# Hash modes
+-#
+-# CONFIG_CRYPTO_HMAC is not set
+-# CONFIG_CRYPTO_XCBC is not set
+-
+-#
+-# Digest
+-#
+-# CONFIG_CRYPTO_CRC32C is not set
+-# CONFIG_CRYPTO_MD4 is not set
+-# CONFIG_CRYPTO_MD5 is not set
+-# CONFIG_CRYPTO_MICHAEL_MIC is not set
+-# CONFIG_CRYPTO_RMD128 is not set
+-# CONFIG_CRYPTO_RMD160 is not set
+-# CONFIG_CRYPTO_RMD256 is not set
+-# CONFIG_CRYPTO_RMD320 is not set
+-# CONFIG_CRYPTO_SHA1 is not set
+-# CONFIG_CRYPTO_SHA256 is not set
+-# CONFIG_CRYPTO_SHA512 is not set
+-# CONFIG_CRYPTO_TGR192 is not set
+-# CONFIG_CRYPTO_WP512 is not set
+-
+-#
+-# Ciphers
+-#
+-# CONFIG_CRYPTO_AES is not set
+-# CONFIG_CRYPTO_ANUBIS is not set
+-# CONFIG_CRYPTO_ARC4 is not set
+-# CONFIG_CRYPTO_BLOWFISH is not set
+-# CONFIG_CRYPTO_CAMELLIA is not set
+-# CONFIG_CRYPTO_CAST5 is not set
+-# CONFIG_CRYPTO_CAST6 is not set
+-# CONFIG_CRYPTO_DES is not set
+-# CONFIG_CRYPTO_FCRYPT is not set
+-# CONFIG_CRYPTO_KHAZAD is not set
+-# CONFIG_CRYPTO_SALSA20 is not set
+-# CONFIG_CRYPTO_SEED is not set
+-# CONFIG_CRYPTO_SERPENT is not set
+-# CONFIG_CRYPTO_TEA is not set
+-# CONFIG_CRYPTO_TWOFISH is not set
+-
+-#
+-# Compression
+-#
+-# CONFIG_CRYPTO_DEFLATE is not set
+-# CONFIG_CRYPTO_LZO is not set
+-
+-#
+-# Random Number Generation
+-#
+-# CONFIG_CRYPTO_ANSI_CPRNG is not set
+-CONFIG_CRYPTO_HW=y
++# CONFIG_CRYPTO is not set
+ #
+ # Library routines
+@@ -1370,7 +1174,6 @@
+ CONFIG_BITREVERSE=y
+ CONFIG_CRC_CCITT=m
+ # CONFIG_CRC16 is not set
+-# CONFIG_CRC_T10DIF is not set
+ # CONFIG_CRC_ITU_T is not set
+ CONFIG_CRC32=y
+ # CONFIG_CRC7 is not set
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/configs/CM-BF548_defconfig linux-2.6.29-rc3.owrt/arch/blackfin/configs/CM-BF548_defconfig
+--- linux-2.6.29.owrt/arch/blackfin/configs/CM-BF548_defconfig 2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/configs/CM-BF548_defconfig     2009-05-10 23:48:28.000000000 +0200
+@@ -336,8 +336,8 @@
+ CONFIG_BFIN_DCACHE=y
+ # CONFIG_BFIN_DCACHE_BANKA is not set
+ # CONFIG_BFIN_ICACHE_LOCK is not set
+-CONFIG_BFIN_WB=y
+-# CONFIG_BFIN_WT is not set
++# CONFIG_BFIN_WB is not set
++CONFIG_BFIN_WT=y
+ CONFIG_L1_MAX_PIECE=16
+ # CONFIG_MPU is not set
+@@ -595,7 +595,7 @@
+ CONFIG_SCSI_DMA=y
+ # CONFIG_SCSI_TGT is not set
+ # CONFIG_SCSI_NETLINK is not set
+-# CONFIG_SCSI_PROC_FS is not set
++CONFIG_SCSI_PROC_FS=y
+ #
+ # SCSI support type (disk, tape, CD-ROM)
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/configs/IP0X_defconfig linux-2.6.29-rc3.owrt/arch/blackfin/configs/IP0X_defconfig
+--- linux-2.6.29.owrt/arch/blackfin/configs/IP0X_defconfig     2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/configs/IP0X_defconfig 2009-05-10 23:48:28.000000000 +0200
+@@ -612,7 +612,7 @@
+ CONFIG_SCSI=y
+ # CONFIG_SCSI_TGT is not set
+ # CONFIG_SCSI_NETLINK is not set
+-# CONFIG_SCSI_PROC_FS is not set
++CONFIG_SCSI_PROC_FS=y
+ #
+ # SCSI support type (disk, tape, CD-ROM)
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/configs/SRV1_defconfig linux-2.6.29-rc3.owrt/arch/blackfin/configs/SRV1_defconfig
+--- linux-2.6.29.owrt/arch/blackfin/configs/SRV1_defconfig     2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/configs/SRV1_defconfig 2009-05-10 23:48:28.000000000 +0200
+@@ -282,8 +282,8 @@
+ CONFIG_BFIN_DCACHE=y
+ # CONFIG_BFIN_DCACHE_BANKA is not set
+ # CONFIG_BFIN_ICACHE_LOCK is not set
+-CONFIG_BFIN_WB=y
+-# CONFIG_BFIN_WT is not set
++# CONFIG_BFIN_WB is not set
++CONFIG_BFIN_WT=y
+ CONFIG_L1_MAX_PIECE=16
+ #
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/include/asm/bfin_sport.h linux-2.6.29-rc3.owrt/arch/blackfin/include/asm/bfin_sport.h
+--- linux-2.6.29.owrt/arch/blackfin/include/asm/bfin_sport.h   2009-05-10 22:04:40.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/include/asm/bfin_sport.h       2009-05-10 23:48:28.000000000 +0200
+@@ -1,9 +1,30 @@
+ /*
+- * bfin_sport.h - userspace header for bfin sport driver
++ * File:         include/asm-blackfin/bfin_sport.h
++ * Based on:
++ * Author:       Roy Huang (roy.huang@analog.com)
+  *
+- * Copyright 2004-2008 Analog Devices Inc.
++ * Created:      Thu Aug. 24 2006
++ * Description:
+  *
+- * Licensed under the GPL-2 or later.
++ * Modified:
++ *               Copyright 2004-2006 Analog Devices Inc.
++ *
++ * Bugs:         Enter bugs at http://blackfin.uclinux.org/
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, see the file COPYING, or write
++ * to the Free Software Foundation, Inc.,
++ * 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+  */
+ #ifndef __BFIN_SPORT_H__
+@@ -21,10 +42,11 @@
+ #define NORM_FORMAT   0x0
+ #define ALAW_FORMAT   0x2
+ #define ULAW_FORMAT   0x3
++struct sport_register;
+ /* Function driver which use sport must initialize the structure */
+ struct sport_config {
+-      /* TDM (multichannels), I2S or other mode */
++      /*TDM (multichannels), I2S or other mode */
+       unsigned int mode:3;
+       /* if TDM mode is selected, channels must be set */
+@@ -50,18 +72,12 @@
+       int serial_clk;
+       int fsync_clk;
+-      unsigned int data_format:2;     /* Normal, u-law or a-law */
++      unsigned int data_format:2;     /*Normal, u-law or a-law */
+       int word_len;           /* How length of the word in bits, 3-32 bits */
+       int dma_enabled;
+ };
+-/* Userspace interface */
+-#define SPORT_IOC_MAGIC               'P'
+-#define SPORT_IOC_CONFIG      _IOWR('P', 0x01, struct sport_config)
+-
+-#ifdef __KERNEL__
+-
+ struct sport_register {
+       unsigned short tcr1;
+       unsigned short reserved0;
+@@ -101,6 +117,9 @@
+       unsigned long mrcs3;
+ };
++#define SPORT_IOC_MAGIC               'P'
++#define SPORT_IOC_CONFIG      _IOWR('P', 0x01, struct sport_config)
++
+ struct sport_dev {
+       struct cdev cdev;       /* Char device structure */
+@@ -130,8 +149,6 @@
+       struct sport_config config;
+ };
+-#endif
+-
+ #define SPORT_TCR1    0
+ #define       SPORT_TCR2      1
+ #define       SPORT_TCLKDIV   2
+@@ -152,4 +169,4 @@
+ #define SPORT_MRCS2   22
+ #define SPORT_MRCS3   23
+-#endif
++#endif                                /*__BFIN_SPORT_H__*/
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/include/asm/checksum.h linux-2.6.29-rc3.owrt/arch/blackfin/include/asm/checksum.h
+--- linux-2.6.29.owrt/arch/blackfin/include/asm/checksum.h     2009-05-10 22:04:40.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/include/asm/checksum.h 2009-05-10 23:48:28.000000000 +0200
+@@ -63,23 +63,23 @@
+ csum_tcpudp_nofold(__be32 saddr, __be32 daddr, unsigned short len,
+                  unsigned short proto, __wsum sum)
+ {
+-      unsigned int carry;
+-      __asm__ ("%0 = %0 + %2;\n\t"
+-              "CC = AC0;\n\t"
+-              "%1 = CC;\n\t"
+-              "%0 = %0 + %1;\n\t"
+-              "%0 = %0 + %3;\n\t"
+-              "CC = AC0;\n\t"
+-              "%1 = CC;\n\t"
+-              "%0 = %0 + %1;\n\t"
+-              "%0 = %0 + %4;\n\t"
+-              "CC = AC0;\n\t"
+-              "%1 = CC;\n\t"
+-              "%0 = %0 + %1;\n\t"
+-              : "=d" (sum), "=&d" (carry)
+-              : "d" (daddr), "d" (saddr), "d" ((len + proto) << 8), "0"(sum)
+-              : "CC");
++      __asm__ ("%0 = %0 + %1;\n\t"
++               "CC = AC0;\n\t"
++               "if !CC jump 4;\n\t"
++               "%0 = %0 + %4;\n\t"
++               "%0 = %0 + %2;\n\t"
++               "CC = AC0;\n\t"
++                 "if !CC jump 4;\n\t"
++                 "%0 = %0 + %4;\n\t"
++               "%0 = %0 + %3;\n\t"
++               "CC = AC0;\n\t"
++                 "if !CC jump 4;\n\t"
++                 "%0 = %0 + %4;\n\t"
++                 "NOP;\n\t"
++               : "=d" (sum)
++               : "d" (daddr), "d" (saddr), "d" ((ntohs(len)<<16)+proto*256), "d" (1), "0"(sum)
++               : "CC");
+       return (sum);
+ }
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/include/asm/delay.h linux-2.6.29-rc3.owrt/arch/blackfin/include/asm/delay.h
+--- linux-2.6.29.owrt/arch/blackfin/include/asm/delay.h        2009-05-10 22:04:40.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/include/asm/delay.h    2009-05-10 23:48:28.000000000 +0200
+@@ -13,7 +13,29 @@
+ static inline void __delay(unsigned long loops)
+ {
+-__asm__ __volatile__ (
++      if (ANOMALY_05000312) {
++              /* Interrupted loads to loop registers -> bad */
++              unsigned long tmp;
++              __asm__ __volatile__(
++                      "[--SP] = LC0;"
++                      "[--SP] = LT0;"
++                      "[--SP] = LB0;"
++                      "LSETUP (1f,1f) LC0 = %1;"
++                      "1: NOP;"
++                      /* We take advantage of the fact that LC0 is 0 at
++                       * the end of the loop.  Otherwise we'd need some
++                       * NOPs after the CLI here.
++                       */
++                      "CLI %0;"
++                      "LB0 = [SP++];"
++                      "LT0 = [SP++];"
++                      "LC0 = [SP++];"
++                      "STI %0;"
++                      : "=d" (tmp)
++                      : "a" (loops)
++              );
++      } else
++              __asm__ __volatile__ (
+                       "LSETUP(1f, 1f) LC0 = %0;"
+                       "1: NOP;"
+                       :
+@@ -25,15 +47,16 @@
+ #include <linux/param.h>      /* needed for HZ */
+ /*
+- * close approximation borrowed from m68knommu to avoid 64-bit math
++ * Use only for very small delays ( < 1 msec).  Should probably use a
++ * lookup table, really, as the multiplications take much too long with
++ * short delays.  This is a "reasonable" implementation, though (and the
++ * first constant multiplications gets optimized away if the delay is
++ * a constant)
+  */
+-
+-#define       HZSCALE         (268435456 / (1000000/HZ))
+-
+ static inline void udelay(unsigned long usecs)
+ {
+       extern unsigned long loops_per_jiffy;
+-      __delay((((usecs * HZSCALE) >> 11) * (loops_per_jiffy >> 11)) >> 6);
++      __delay(usecs * loops_per_jiffy / (1000000 / HZ));
+ }
+ #endif
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/include/asm/gpio.h linux-2.6.29-rc3.owrt/arch/blackfin/include/asm/gpio.h
+--- linux-2.6.29.owrt/arch/blackfin/include/asm/gpio.h 2009-05-10 22:04:40.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/include/asm/gpio.h     2009-05-10 23:48:28.000000000 +0200
+@@ -27,6 +27,60 @@
+  * 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+  */
++/*
++*  Number     BF537/6/4    BF561    BF533/2/1
++*             BF527/5/2
++*
++*  GPIO_0       PF0         PF0        PF0
++*  GPIO_1       PF1         PF1        PF1
++*  GPIO_2       PF2         PF2        PF2
++*  GPIO_3       PF3         PF3        PF3
++*  GPIO_4       PF4         PF4        PF4
++*  GPIO_5       PF5         PF5        PF5
++*  GPIO_6       PF6         PF6        PF6
++*  GPIO_7       PF7         PF7        PF7
++*  GPIO_8       PF8         PF8        PF8
++*  GPIO_9       PF9         PF9        PF9
++*  GPIO_10      PF10        PF10       PF10
++*  GPIO_11      PF11        PF11       PF11
++*  GPIO_12      PF12        PF12       PF12
++*  GPIO_13      PF13        PF13       PF13
++*  GPIO_14      PF14        PF14       PF14
++*  GPIO_15      PF15        PF15       PF15
++*  GPIO_16      PG0         PF16
++*  GPIO_17      PG1         PF17
++*  GPIO_18      PG2         PF18
++*  GPIO_19      PG3         PF19
++*  GPIO_20      PG4         PF20
++*  GPIO_21      PG5         PF21
++*  GPIO_22      PG6         PF22
++*  GPIO_23      PG7         PF23
++*  GPIO_24      PG8         PF24
++*  GPIO_25      PG9         PF25
++*  GPIO_26      PG10        PF26
++*  GPIO_27      PG11        PF27
++*  GPIO_28      PG12        PF28
++*  GPIO_29      PG13        PF29
++*  GPIO_30      PG14        PF30
++*  GPIO_31      PG15        PF31
++*  GPIO_32      PH0         PF32
++*  GPIO_33      PH1         PF33
++*  GPIO_34      PH2         PF34
++*  GPIO_35      PH3         PF35
++*  GPIO_36      PH4         PF36
++*  GPIO_37      PH5         PF37
++*  GPIO_38      PH6         PF38
++*  GPIO_39      PH7         PF39
++*  GPIO_40      PH8         PF40
++*  GPIO_41      PH9         PF41
++*  GPIO_42      PH10        PF42
++*  GPIO_43      PH11        PF43
++*  GPIO_44      PH12        PF44
++*  GPIO_45      PH13        PF45
++*  GPIO_46      PH14        PF46
++*  GPIO_47      PH15        PF47
++*/
++
+ #ifndef __ARCH_BLACKFIN_GPIO_H__
+ #define __ARCH_BLACKFIN_GPIO_H__
+@@ -241,6 +295,10 @@
+ int bfin_gpio_get_value(unsigned gpio);
+ void bfin_gpio_set_value(unsigned gpio, int value);
++#ifndef BF548_FAMILY
++#define bfin_gpio_set_value(gpio, value)    set_gpio_data(gpio, value)
++#endif
++
+ #ifdef CONFIG_GPIOLIB
+ #include <asm-generic/gpio.h>         /* cansleep wrappers */
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/include/asm/ipipe_base.h linux-2.6.29-rc3.owrt/arch/blackfin/include/asm/ipipe_base.h
+--- linux-2.6.29.owrt/arch/blackfin/include/asm/ipipe_base.h   2009-05-10 22:04:40.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/include/asm/ipipe_base.h       2009-05-10 23:48:28.000000000 +0200
+@@ -1,5 +1,5 @@
+ /*   -*- linux-c -*-
+- *   include/asm-blackfin/ipipe_base.h
++ *   include/asm-blackfin/_baseipipe.h
+  *
+  *   Copyright (C) 2007 Philippe Gerum.
+  *
+@@ -27,9 +27,8 @@
+ #define IPIPE_NR_XIRQS                NR_IRQS
+ #define IPIPE_IRQ_ISHIFT      5       /* 2^5 for 32bits arch. */
+-/* Blackfin-specific, per-cpu pipeline status */
+-#define IPIPE_SYNCDEFER_FLAG  15
+-#define IPIPE_SYNCDEFER_MASK  (1L << IPIPE_SYNCDEFER_MASK)
++/* Blackfin-specific, global domain flags */
++#define IPIPE_ROOTLOCK_FLAG   1       /* Lock pipeline for root */
+  /* Blackfin traps -- i.e. exception vector numbers */
+ #define IPIPE_NR_FAULTS               52 /* We leave a gap after VEC_ILL_RES. */
+@@ -49,6 +48,11 @@
+ #ifndef __ASSEMBLY__
++#include <linux/bitops.h>
++
++extern int test_bit(int nr, const void *addr);
++
++
+ extern unsigned long __ipipe_root_status; /* Alias to ipipe_root_cpudom_var(status) */
+ static inline void __ipipe_stall_root(void)
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/include/asm/ipipe.h linux-2.6.29-rc3.owrt/arch/blackfin/include/asm/ipipe.h
+--- linux-2.6.29.owrt/arch/blackfin/include/asm/ipipe.h        2009-05-10 22:04:40.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/include/asm/ipipe.h    2009-05-10 23:48:28.000000000 +0200
+@@ -35,9 +35,9 @@
+ #include <asm/atomic.h>
+ #include <asm/traps.h>
+-#define IPIPE_ARCH_STRING     "1.9-00"
++#define IPIPE_ARCH_STRING     "1.8-00"
+ #define IPIPE_MAJOR_NUMBER    1
+-#define IPIPE_MINOR_NUMBER    9
++#define IPIPE_MINOR_NUMBER    8
+ #define IPIPE_PATCH_NUMBER    0
+ #ifdef CONFIG_SMP
+@@ -83,9 +83,9 @@
+                               "%2 = CYCLES2\n"                \
+                               "CC = %2 == %0\n"               \
+                               "if ! CC jump 1b\n"             \
+-                              : "=d,a" (((unsigned long *)&t)[1]),    \
+-                                "=d,a" (((unsigned long *)&t)[0]),    \
+-                                "=d,a" (__cy2)                                \
++                              : "=r" (((unsigned long *)&t)[1]),      \
++                                "=r" (((unsigned long *)&t)[0]),      \
++                                "=r" (__cy2)                          \
+                               : /*no input*/ : "CC");                 \
+       t;                                                              \
+       })
+@@ -118,40 +118,35 @@
+ #define __ipipe_disable_irq(irq)      (irq_desc[irq].chip->mask(irq))
+-static inline int __ipipe_check_tickdev(const char *devname)
+-{
+-      return 1;
+-}
++#define __ipipe_lock_root()                                   \
++      set_bit(IPIPE_ROOTLOCK_FLAG, &ipipe_root_domain->flags)
+-static inline void __ipipe_lock_root(void)
+-{
+-      set_bit(IPIPE_SYNCDEFER_FLAG, &ipipe_root_cpudom_var(status));
+-}
+-
+-static inline void __ipipe_unlock_root(void)
+-{
+-      clear_bit(IPIPE_SYNCDEFER_FLAG, &ipipe_root_cpudom_var(status));
+-}
++#define __ipipe_unlock_root()                                 \
++      clear_bit(IPIPE_ROOTLOCK_FLAG, &ipipe_root_domain->flags)
+ void __ipipe_enable_pipeline(void);
+ #define __ipipe_hook_critical_ipi(ipd) do { } while (0)
+-#define __ipipe_sync_pipeline  ___ipipe_sync_pipeline
+-void ___ipipe_sync_pipeline(unsigned long syncmask);
++#define __ipipe_sync_pipeline(syncmask)                                       \
++      do {                                                            \
++              struct ipipe_domain *ipd = ipipe_current_domain;        \
++              if (likely(ipd != ipipe_root_domain || !test_bit(IPIPE_ROOTLOCK_FLAG, &ipd->flags))) \
++                      __ipipe_sync_stage(syncmask);                   \
++      } while (0)
+ void __ipipe_handle_irq(unsigned irq, struct pt_regs *regs);
+ int __ipipe_get_irq_priority(unsigned irq);
++int __ipipe_get_irqthread_priority(unsigned irq);
++
+ void __ipipe_stall_root_raw(void);
+ void __ipipe_unstall_root_raw(void);
+ void __ipipe_serial_debug(const char *fmt, ...);
+-asmlinkage void __ipipe_call_irqtail(unsigned long addr);
+-
+ DECLARE_PER_CPU(struct pt_regs, __ipipe_tick_regs);
+ extern unsigned long __ipipe_core_clock;
+@@ -167,25 +162,42 @@
+ #define __ipipe_run_irqtail()  /* Must be a macro */                  \
+       do {                                                            \
++              asmlinkage void __ipipe_call_irqtail(void);             \
+               unsigned long __pending;                                \
+-              CSYNC();                                                \
++              CSYNC();                                        \
+               __pending = bfin_read_IPEND();                          \
+               if (__pending & 0x8000) {                               \
+                       __pending &= ~0x8010;                           \
+                       if (__pending && (__pending & (__pending - 1)) == 0) \
+-                              __ipipe_call_irqtail(__ipipe_irq_tail_hook); \
++                              __ipipe_call_irqtail();                 \
+               }                                                       \
+       } while (0)
+ #define __ipipe_run_isr(ipd, irq)                                     \
+       do {                                                            \
+               if (ipd == ipipe_root_domain) {                         \
+-                      local_irq_enable_hw();                          \
+-                      if (ipipe_virtual_irq_p(irq))                   \
++                      /*                                              \
++                       * Note: the I-pipe implements a threaded interrupt model on \
++                       * this arch for Linux external IRQs. The interrupt handler we \
++                       * call here only wakes up the associated IRQ thread. \
++                       */                                             \
++                      if (ipipe_virtual_irq_p(irq)) {                 \
++                              /* No irqtail here; virtual interrupts have no effect \
++                                 on IPEND so there is no need for processing \
++                                 deferral. */                         \
++                              local_irq_enable_nohead(ipd);           \
+                               ipd->irqs[irq].handler(irq, ipd->irqs[irq].cookie); \
+-                      else                                            \
++                              local_irq_disable_nohead(ipd);          \
++                      } else                                          \
++                              /*                                      \
++                               * No need to run the irqtail here either; \
++                               * we can't be preempted by hw IRQs, so \
++                               * non-Linux IRQs cannot stack over the short \
++                               * thread wakeup code. Which in turn means \
++                               * that no irqtail condition could be pending \
++                               * for domains above Linux in the pipeline. \
++                               */                                     \
+                               ipd->irqs[irq].handler(irq, &__raw_get_cpu_var(__ipipe_tick_regs)); \
+-                      local_irq_disable_hw();                         \
+               } else {                                                \
+                       __clear_bit(IPIPE_SYNC_FLAG, &ipipe_cpudom_var(ipd, status)); \
+                       local_irq_enable_nohead(ipd);                   \
+@@ -205,24 +217,42 @@
+ int ipipe_start_irq_thread(unsigned irq, struct irq_desc *desc);
+-#ifdef CONFIG_GENERIC_CLOCKEVENTS
+-#define IRQ_SYSTMR            IRQ_CORETMR
+-#define IRQ_PRIOTMR           IRQ_CORETMR
+-#else
++#define IS_SYSIRQ(irq)                ((irq) > IRQ_CORETMR && (irq) <= SYS_IRQS)
++#define IS_GPIOIRQ(irq)               ((irq) >= GPIO_IRQ_BASE && (irq) < NR_IRQS)
++
+ #define IRQ_SYSTMR            IRQ_TIMER0
+ #define IRQ_PRIOTMR           CONFIG_IRQ_TIMER0
+-#endif
+-#ifdef CONFIG_BF561
++#if defined(CONFIG_BF531) || defined(CONFIG_BF532) || defined(CONFIG_BF533)
++#define PRIO_GPIODEMUX(irq)   CONFIG_PFA
++#elif defined(CONFIG_BF534) || defined(CONFIG_BF536) || defined(CONFIG_BF537)
++#define PRIO_GPIODEMUX(irq)   CONFIG_IRQ_PROG_INTA
++#elif defined(CONFIG_BF52x)
++#define PRIO_GPIODEMUX(irq)   ((irq) == IRQ_PORTF_INTA ? CONFIG_IRQ_PORTF_INTA : \
++                               (irq) == IRQ_PORTG_INTA ? CONFIG_IRQ_PORTG_INTA : \
++                               (irq) == IRQ_PORTH_INTA ? CONFIG_IRQ_PORTH_INTA : \
++                               -1)
++#elif defined(CONFIG_BF561)
++#define PRIO_GPIODEMUX(irq)   ((irq) == IRQ_PROG0_INTA ? CONFIG_IRQ_PROG0_INTA : \
++                               (irq) == IRQ_PROG1_INTA ? CONFIG_IRQ_PROG1_INTA : \
++                               (irq) == IRQ_PROG2_INTA ? CONFIG_IRQ_PROG2_INTA : \
++                               -1)
+ #define bfin_write_TIMER_DISABLE(val) bfin_write_TMRS8_DISABLE(val)
+ #define bfin_write_TIMER_ENABLE(val)  bfin_write_TMRS8_ENABLE(val)
+ #define bfin_write_TIMER_STATUS(val)  bfin_write_TMRS8_STATUS(val)
+ #define bfin_read_TIMER_STATUS()      bfin_read_TMRS8_STATUS()
+ #elif defined(CONFIG_BF54x)
++#define PRIO_GPIODEMUX(irq)   ((irq) == IRQ_PINT0 ? CONFIG_IRQ_PINT0 : \
++                               (irq) == IRQ_PINT1 ? CONFIG_IRQ_PINT1 : \
++                               (irq) == IRQ_PINT2 ? CONFIG_IRQ_PINT2 : \
++                               (irq) == IRQ_PINT3 ? CONFIG_IRQ_PINT3 : \
++                               -1)
+ #define bfin_write_TIMER_DISABLE(val) bfin_write_TIMER_DISABLE0(val)
+ #define bfin_write_TIMER_ENABLE(val)  bfin_write_TIMER_ENABLE0(val)
+ #define bfin_write_TIMER_STATUS(val)  bfin_write_TIMER_STATUS0(val)
+ #define bfin_read_TIMER_STATUS(val)   bfin_read_TIMER_STATUS0(val)
++#else
++# error "no PRIO_GPIODEMUX() for this part"
+ #endif
+ #define __ipipe_root_tick_p(regs)     ((regs->ipend & 0x10) != 0)
+@@ -245,6 +275,4 @@
+ #endif /* !CONFIG_IPIPE */
+-#define ipipe_update_tick_evtdev(evtdev)      do { } while (0)
+-
+ #endif        /* !__ASM_BLACKFIN_IPIPE_H */
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/include/asm/irq.h linux-2.6.29-rc3.owrt/arch/blackfin/include/asm/irq.h
+--- linux-2.6.29.owrt/arch/blackfin/include/asm/irq.h  2009-05-10 22:04:40.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/include/asm/irq.h      2009-05-10 23:48:28.000000000 +0200
+@@ -61,38 +61,20 @@
+ #define raw_irqs_disabled_flags(flags)        (!irqs_enabled_from_flags_hw(flags))
+ #define local_test_iflag_hw(x)                irqs_enabled_from_flags_hw(x)
+-#define local_save_flags(x)                                    \
+-      do {                                                     \
+-              (x) = __ipipe_test_root() ?                      \
+-                      __all_masked_irq_flags : bfin_irq_flags; \
+-              barrier();                                       \
+-      } while (0)
+-
+-#define local_irq_save(x)                                      \
+-      do {                                                     \
+-              (x) = __ipipe_test_and_stall_root() ?            \
++#define local_save_flags(x)                                           \
++      do {                                                            \
++              (x) = __ipipe_test_root() ? \
+                       __all_masked_irq_flags : bfin_irq_flags; \
+-              barrier();                                       \
+       } while (0)
+-static inline void local_irq_restore(unsigned long x)
+-{
+-      barrier();
+-      __ipipe_restore_root(x == __all_masked_irq_flags);
+-}
+-
+-#define local_irq_disable()                   \
+-      do {                                    \
+-              __ipipe_stall_root();           \
+-              barrier();                      \
++#define local_irq_save(x)                             \
++      do {                                            \
++              (x) = __ipipe_test_and_stall_root();    \
+       } while (0)
+-static inline void local_irq_enable(void)
+-{
+-      barrier();
+-      __ipipe_unstall_root();
+-}
+-
++#define local_irq_restore(x)  __ipipe_restore_root(x)
++#define local_irq_disable()   __ipipe_stall_root()
++#define local_irq_enable()    __ipipe_unstall_root()
+ #define irqs_disabled()               __ipipe_test_root()
+ #define local_save_flags_hw(x) \
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/include/asm/Kbuild linux-2.6.29-rc3.owrt/arch/blackfin/include/asm/Kbuild
+--- linux-2.6.29.owrt/arch/blackfin/include/asm/Kbuild 2009-05-10 22:04:40.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/include/asm/Kbuild     2009-05-10 23:48:28.000000000 +0200
+@@ -1,4 +1,3 @@
+ include include/asm-generic/Kbuild.asm
+-unifdef-y += bfin_sport.h
+ unifdef-y += fixed_code.h
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/include/asm/kgdb.h linux-2.6.29-rc3.owrt/arch/blackfin/include/asm/kgdb.h
+--- linux-2.6.29.owrt/arch/blackfin/include/asm/kgdb.h 2009-05-10 22:04:40.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/include/asm/kgdb.h     2009-05-10 23:48:28.000000000 +0200
+@@ -1,8 +1,32 @@
+-/* Blackfin KGDB header
++/*
++ * File:         include/asm-blackfin/kgdb.h
++ * Based on:
++ * Author:       Sonic Zhang
++ *
++ * Created:
++ * Description:
++ *
++ * Rev:          $Id: kgdb_bfin_linux-2.6.x.patch 4934 2007-02-13 09:32:11Z sonicz $
++ *
++ * Modified:
++ *               Copyright 2005-2006 Analog Devices Inc.
++ *
++ * Bugs:         Enter bugs at http://blackfin.uclinux.org/
+  *
+- * Copyright 2005-2009 Analog Devices Inc.
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
+  *
+- * Licensed under the GPL-2 or later.
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, see the file COPYING, or write
++ * to the Free Software Foundation, Inc.,
++ * 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+  */
+ #ifndef __ASM_BLACKFIN_KGDB_H__
+@@ -13,18 +37,17 @@
+ /* gdb locks */
+ #define KGDB_MAX_NO_CPUS 8
+-/*
+- * BUFMAX defines the maximum number of characters in inbound/outbound buffers.
+- * At least NUMREGBYTES*2 are needed for register packets.
+- * Longer buffer is needed to list all threads.
+- */
++/************************************************************************/
++/* BUFMAX defines the maximum number of characters in inbound/outbound buffers*/
++/* at least NUMREGBYTES*2 are needed for register packets */
++/* Longer buffer is needed to list all threads */
+ #define BUFMAX 2048
+ /*
+- * Note that this register image is different from
+- * the register image that Linux produces at interrupt time.
+- *
+- * Linux's register image is defined by struct pt_regs in ptrace.h.
++ *  Note that this register image is different from
++ *  the register image that Linux produces at interrupt time.
++ *  
++ *  Linux's register image is defined by struct pt_regs in ptrace.h.
+  */
+ enum regnames {
+   /* Core Registers */
+@@ -81,14 +104,14 @@
+   BFIN_RETX,
+   BFIN_RETN,
+   BFIN_RETE,
+-
++  
+   /* Pseudo Registers */
+   BFIN_PC,
+   BFIN_CC,
+   BFIN_EXTRA1,                /* Address of .text section.  */
+   BFIN_EXTRA2,                /* Address of .data section.  */
+   BFIN_EXTRA3,                /* Address of .bss section.  */
+-  BFIN_FDPIC_EXEC,
++  BFIN_FDPIC_EXEC, 
+   BFIN_FDPIC_INTERP,
+   /* MMRs */
+@@ -103,7 +126,7 @@
+ static inline void arch_kgdb_breakpoint(void)
+ {
+-      asm("EXCPT 2;");
++      asm("   EXCPT 2;");
+ }
+ #define BREAK_INSTR_SIZE      2
+ #define CACHE_FLUSH_IS_SAFE   1
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/include/asm/mem_init.h linux-2.6.29-rc3.owrt/arch/blackfin/include/asm/mem_init.h
+--- linux-2.6.29.owrt/arch/blackfin/include/asm/mem_init.h     2009-05-10 22:04:40.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/include/asm/mem_init.h 2009-05-10 23:48:28.000000000 +0200
+@@ -115,7 +115,7 @@
+ #define mem_SDRRC       (((CONFIG_SCLK_HZ / 1000) * SDRAM_Tref) / SDRAM_NRA) - (SDRAM_tRAS_num + SDRAM_tRP_num)
+ /* Enable SCLK Out */
+-#define mem_SDGCTL        (SCTLE | SDRAM_CL | SDRAM_tRAS | SDRAM_tRP | SDRAM_tRCD | SDRAM_tWR | PSS)
++#define mem_SDGCTL        (0x80000000 | SCTLE | SDRAM_CL | SDRAM_tRAS | SDRAM_tRP | SDRAM_tRCD | SDRAM_tWR | PSS)
+ #else
+ #define mem_SDRRC     CONFIG_MEM_SDRRC
+ #define mem_SDGCTL    CONFIG_MEM_SDGCTL
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/include/asm/pda.h linux-2.6.29-rc3.owrt/arch/blackfin/include/asm/pda.h
+--- linux-2.6.29.owrt/arch/blackfin/include/asm/pda.h  2009-05-10 22:04:40.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/include/asm/pda.h      2009-05-10 23:48:28.000000000 +0200
+@@ -59,7 +59,6 @@
+       unsigned long icplb_fault_addr;
+       unsigned long retx;
+       unsigned long seqstat;
+-      unsigned int __nmi_count;       /* number of times NMI asserted on this CPU */
+ };
+ extern struct blackfin_pda cpu_pda[];
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/include/asm/reboot.h linux-2.6.29-rc3.owrt/arch/blackfin/include/asm/reboot.h
+--- linux-2.6.29.owrt/arch/blackfin/include/asm/reboot.h       2009-05-10 22:04:40.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/include/asm/reboot.h   2009-05-10 23:48:28.000000000 +0200
+@@ -15,6 +15,6 @@
+ extern void native_machine_power_off(void);
+ /* common reboot workarounds */
+-extern void bfin_reset_boot_spi_cs(unsigned short pin);
++extern void bfin_gpio_reset_spi0_ssel1(void);
+ #endif
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/include/asm/thread_info.h linux-2.6.29-rc3.owrt/arch/blackfin/include/asm/thread_info.h
+--- linux-2.6.29.owrt/arch/blackfin/include/asm/thread_info.h  2009-05-10 22:04:40.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/include/asm/thread_info.h      2009-05-10 23:48:28.000000000 +0200
+@@ -122,7 +122,6 @@
+ #define TIF_MEMDIE              4
+ #define TIF_RESTORE_SIGMASK   5       /* restore signal mask in do_signal() */
+ #define TIF_FREEZE              6       /* is freezing for suspend */
+-#define TIF_IRQ_SYNC            7       /* sync pipeline stage */
+ /* as above, but as bit values */
+ #define _TIF_SYSCALL_TRACE    (1<<TIF_SYSCALL_TRACE)
+@@ -131,7 +130,6 @@
+ #define _TIF_POLLING_NRFLAG   (1<<TIF_POLLING_NRFLAG)
+ #define _TIF_RESTORE_SIGMASK  (1<<TIF_RESTORE_SIGMASK)
+ #define _TIF_FREEZE             (1<<TIF_FREEZE)
+-#define _TIF_IRQ_SYNC           (1<<TIF_IRQ_SYNC)
+ #define _TIF_WORK_MASK                0x0000FFFE      /* work to do on interrupt/exception return */
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/Kconfig linux-2.6.29-rc3.owrt/arch/blackfin/Kconfig
+--- linux-2.6.29.owrt/arch/blackfin/Kconfig    2009-05-10 22:04:40.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/Kconfig        2009-05-10 23:48:28.000000000 +0200
+@@ -169,51 +169,26 @@
+       help
+         BF542 Processor Support.
+-config BF542M
+-      bool "BF542m"
+-      help
+-        BF542 Processor Support.
+-
+ config BF544
+       bool "BF544"
+       help
+         BF544 Processor Support.
+-config BF544M
+-      bool "BF544m"
+-      help
+-        BF544 Processor Support.
+-
+ config BF547
+       bool "BF547"
+       help
+         BF547 Processor Support.
+-config BF547M
+-      bool "BF547m"
+-      help
+-        BF547 Processor Support.
+-
+ config BF548
+       bool "BF548"
+       help
+         BF548 Processor Support.
+-config BF548M
+-      bool "BF548m"
+-      help
+-        BF548 Processor Support.
+-
+ config BF549
+       bool "BF549"
+       help
+         BF549 Processor Support.
+-config BF549M
+-      bool "BF549m"
+-      help
+-        BF549 Processor Support.
+-
+ config BF561
+       bool "BF561"
+       help
+@@ -249,39 +224,39 @@
+ config BF_REV_MIN
+       int
+-      default 0 if (BF51x || BF52x || (BF54x && !BF54xM))
++      default 0 if (BF51x || BF52x || BF54x)
+       default 2 if (BF537 || BF536 || BF534)
+-      default 3 if (BF561 || BF533 || BF532 || BF531 || BF54xM)
++      default 3 if (BF561 ||BF533 || BF532 || BF531)
+       default 4 if (BF538 || BF539)
+ config BF_REV_MAX
+       int
+-      default 2 if (BF51x || BF52x || (BF54x && !BF54xM))
+-      default 3 if (BF537 || BF536 || BF534 || BF54xM)
++      default 2 if (BF51x || BF52x || BF54x)
++      default 3 if (BF537 || BF536 || BF534)
+       default 5 if (BF561 || BF538 || BF539)
+       default 6 if (BF533 || BF532 || BF531)
+ choice
+       prompt "Silicon Rev"
+-      default BF_REV_0_1 if (BF51x || BF52x || (BF54x && !BF54xM))
++      default BF_REV_0_1 if (BF51x || BF52x || BF54x)
+       default BF_REV_0_2 if (BF534 || BF536 || BF537)
+-      default BF_REV_0_3 if (BF531 || BF532 || BF533 || BF54xM || BF561)
++      default BF_REV_0_3 if (BF531 || BF532 || BF533 || BF561)
+ config BF_REV_0_0
+       bool "0.0"
+-      depends on (BF51x || BF52x || (BF54x && !BF54xM))
++      depends on (BF51x || BF52x || BF54x)
+ config BF_REV_0_1
+       bool "0.1"
+-      depends on (BF52x || (BF54x && !BF54xM))
++      depends on (BF52x || BF54x)
+ config BF_REV_0_2
+       bool "0.2"
+-      depends on (BF52x || BF537 || BF536 || BF534 || (BF54x && !BF54xM))
++      depends on (BF52x || BF537 || BF536 || BF534 || BF54x)
+ config BF_REV_0_3
+       bool "0.3"
+-      depends on (BF54xM || BF561 || BF537 || BF536 || BF534 || BF533 || BF532 || BF531)
++      depends on (BF561 || BF537 || BF536 || BF534 || BF533 || BF532 || BF531)
+ config BF_REV_0_4
+       bool "0.4"
+@@ -318,14 +293,9 @@
+       depends on (BF531 || BF532 || BF533 || BF534 || BF536 || BF537)
+       default y
+-config BF54xM
+-      bool
+-      depends on (BF542M || BF544M || BF547M || BF548M || BF549M)
+-      default y
+-
+ config BF54x
+       bool
+-      depends on (BF542 || BF544 || BF547 || BF548 || BF549 || BF54xM)
++      depends on (BF542 || BF544 || BF547 || BF548 || BF549)
+       default y
+ config MEM_GENERIC_BOARD
+@@ -1129,7 +1099,6 @@
+ config PM_WAKEUP_BY_GPIO
+       bool "Allow Wakeup from Standby by GPIO"
+-      depends on PM && !BF54x
+ config PM_WAKEUP_GPIO_NUMBER
+       int "GPIO number"
+@@ -1169,12 +1138,6 @@
+       default n
+       help
+         Enable General-Purpose Wake-Up (Voltage Regulator Power-Up)
+-        (all processors, except ADSP-BF549). This option sets
+-        the general-purpose wake-up enable (GPWE) control bit to enable
+-        wake-up upon detection of an active low signal on the /GPW (PH7) pin.
+-        On ADSP-BF549 this option enables the the same functionality on the
+-        /MRXON pin also PH7.
+-
+ endmenu
+ menu "CPU Frequency scaling"
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/Kconfig.debug linux-2.6.29-rc3.owrt/arch/blackfin/Kconfig.debug
+--- linux-2.6.29.owrt/arch/blackfin/Kconfig.debug      2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/Kconfig.debug  2009-05-10 23:48:28.000000000 +0200
+@@ -21,6 +21,12 @@
+ config HAVE_ARCH_KGDB
+       def_bool y
++config KGDB_TESTCASE
++      tristate "KGDB: for test case in expect"
++      default n
++      help
++        This is a kgdb test case for automated testing.
++
+ config DEBUG_VERBOSE
+       bool "Verbose fault messages"
+       default y
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/kernel/bfin_dma_5xx.c linux-2.6.29-rc3.owrt/arch/blackfin/kernel/bfin_dma_5xx.c
+--- linux-2.6.29.owrt/arch/blackfin/kernel/bfin_dma_5xx.c      2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/kernel/bfin_dma_5xx.c  2009-05-10 23:48:28.000000000 +0200
+@@ -249,13 +249,6 @@
+       spin_lock_irqsave(&mdma_lock, flags);
+-      /* Force a sync in case a previous config reset on this channel
+-       * occurred.  This is needed so subsequent writes to DMA registers
+-       * are not spuriously lost/corrupted.  Do it under irq lock and
+-       * without the anomaly version (because we are atomic already).
+-       */
+-      __builtin_bfin_ssync();
+-
+       if (bfin_read_MDMA_S0_CONFIG())
+               while (!(bfin_read_MDMA_D0_IRQ_STATUS() & DMA_DONE))
+                       continue;
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/kernel/bfin_gpio.c linux-2.6.29-rc3.owrt/arch/blackfin/kernel/bfin_gpio.c
+--- linux-2.6.29.owrt/arch/blackfin/kernel/bfin_gpio.c 2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/kernel/bfin_gpio.c     2009-05-10 23:48:28.000000000 +0200
+@@ -27,6 +27,59 @@
+  * 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+  */
++/*
++*  Number     BF537/6/4    BF561    BF533/2/1    BF549/8/4/2
++*
++*  GPIO_0       PF0         PF0        PF0       PA0...PJ13
++*  GPIO_1       PF1         PF1        PF1
++*  GPIO_2       PF2         PF2        PF2
++*  GPIO_3       PF3         PF3        PF3
++*  GPIO_4       PF4         PF4        PF4
++*  GPIO_5       PF5         PF5        PF5
++*  GPIO_6       PF6         PF6        PF6
++*  GPIO_7       PF7         PF7        PF7
++*  GPIO_8       PF8         PF8        PF8
++*  GPIO_9       PF9         PF9        PF9
++*  GPIO_10      PF10        PF10       PF10
++*  GPIO_11      PF11        PF11       PF11
++*  GPIO_12      PF12        PF12       PF12
++*  GPIO_13      PF13        PF13       PF13
++*  GPIO_14      PF14        PF14       PF14
++*  GPIO_15      PF15        PF15       PF15
++*  GPIO_16      PG0         PF16
++*  GPIO_17      PG1         PF17
++*  GPIO_18      PG2         PF18
++*  GPIO_19      PG3         PF19
++*  GPIO_20      PG4         PF20
++*  GPIO_21      PG5         PF21
++*  GPIO_22      PG6         PF22
++*  GPIO_23      PG7         PF23
++*  GPIO_24      PG8         PF24
++*  GPIO_25      PG9         PF25
++*  GPIO_26      PG10        PF26
++*  GPIO_27      PG11        PF27
++*  GPIO_28      PG12        PF28
++*  GPIO_29      PG13        PF29
++*  GPIO_30      PG14        PF30
++*  GPIO_31      PG15        PF31
++*  GPIO_32      PH0         PF32
++*  GPIO_33      PH1         PF33
++*  GPIO_34      PH2         PF34
++*  GPIO_35      PH3         PF35
++*  GPIO_36      PH4         PF36
++*  GPIO_37      PH5         PF37
++*  GPIO_38      PH6         PF38
++*  GPIO_39      PH7         PF39
++*  GPIO_40      PH8         PF40
++*  GPIO_41      PH9         PF41
++*  GPIO_42      PH10        PF42
++*  GPIO_43      PH11        PF43
++*  GPIO_44      PH12        PF44
++*  GPIO_45      PH13        PF45
++*  GPIO_46      PH14        PF46
++*  GPIO_47      PH15        PF47
++*/
++
+ #include <linux/delay.h>
+ #include <linux/module.h>
+ #include <linux/err.h>
+@@ -66,61 +119,62 @@
+ #define AWA_DUMMY_READ(...)  do { } while (0)
+ #endif
+-static struct gpio_port_t * const gpio_array[] = {
+ #if defined(BF533_FAMILY) || defined(BF538_FAMILY)
++static struct gpio_port_t *gpio_bankb[] = {
+       (struct gpio_port_t *) FIO_FLAG_D,
+-#elif defined(BF527_FAMILY) || defined(BF537_FAMILY) || defined(BF518_FAMILY)
++};
++#endif
++
++#if defined(BF527_FAMILY) || defined(BF537_FAMILY) || defined(BF518_FAMILY)
++static struct gpio_port_t *gpio_bankb[] = {
+       (struct gpio_port_t *) PORTFIO,
+       (struct gpio_port_t *) PORTGIO,
+       (struct gpio_port_t *) PORTHIO,
+-#elif defined(BF561_FAMILY)
+-      (struct gpio_port_t *) FIO0_FLAG_D,
+-      (struct gpio_port_t *) FIO1_FLAG_D,
+-      (struct gpio_port_t *) FIO2_FLAG_D,
+-#elif defined(BF548_FAMILY)
+-      (struct gpio_port_t *)PORTA_FER,
+-      (struct gpio_port_t *)PORTB_FER,
+-      (struct gpio_port_t *)PORTC_FER,
+-      (struct gpio_port_t *)PORTD_FER,
+-      (struct gpio_port_t *)PORTE_FER,
+-      (struct gpio_port_t *)PORTF_FER,
+-      (struct gpio_port_t *)PORTG_FER,
+-      (struct gpio_port_t *)PORTH_FER,
+-      (struct gpio_port_t *)PORTI_FER,
+-      (struct gpio_port_t *)PORTJ_FER,
+-#else
+-# error no gpio arrays defined
+-#endif
+ };
+-#if defined(BF527_FAMILY) || defined(BF537_FAMILY) || defined(BF518_FAMILY)
+-static unsigned short * const port_fer[] = {
++static unsigned short *port_fer[] = {
+       (unsigned short *) PORTF_FER,
+       (unsigned short *) PORTG_FER,
+       (unsigned short *) PORTH_FER,
+ };
++#endif
+-# if !defined(BF537_FAMILY)
+-static unsigned short * const port_mux[] = {
++#if defined(BF527_FAMILY) || defined(BF518_FAMILY)
++static unsigned short *port_mux[] = {
+       (unsigned short *) PORTF_MUX,
+       (unsigned short *) PORTG_MUX,
+       (unsigned short *) PORTH_MUX,
+ };
+ static const
+-u8 pmux_offset[][16] = {
+-#  if defined(BF527_FAMILY)
+-      { 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 4, 6, 8, 8, 10, 10 }, /* PORTF */
+-      { 0, 0, 0, 0, 0, 2, 2, 4, 4, 6, 8, 10, 10, 10, 12, 12 }, /* PORTG */
+-      { 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 4, 4, 4, 4, 4, 4 }, /* PORTH */
+-#  elif defined(BF518_FAMILY)
+-      { 0, 2, 2, 2, 2, 2, 2, 4, 6, 6, 6, 8, 8, 8, 8, 10 }, /* PORTF */
+-      { 0, 0, 0, 2, 4, 6, 6, 6, 8, 10, 10, 12, 14, 14, 14, 14 }, /* PORTG */
+-      { 0, 0, 0, 0, 2, 2, 4, 6, 10, 10, 10, 10, 10, 10, 10, 10 }, /* PORTH */
+-#  endif
++u8 pmux_offset[][16] =
++      {{ 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 4, 6, 8, 8, 10, 10 }, /* PORTF */
++       { 0, 0, 0, 0, 0, 2, 2, 4, 4, 6, 8, 10, 10, 10, 12, 12 }, /* PORTG */
++       { 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 4, 4, 4, 4, 4, 4 }, /* PORTH */
++      };
++#endif
++
++#ifdef BF561_FAMILY
++static struct gpio_port_t *gpio_bankb[] = {
++      (struct gpio_port_t *) FIO0_FLAG_D,
++      (struct gpio_port_t *) FIO1_FLAG_D,
++      (struct gpio_port_t *) FIO2_FLAG_D,
+ };
+-# endif
++#endif
++#ifdef BF548_FAMILY
++static struct gpio_port_t *gpio_array[] = {
++      (struct gpio_port_t *)PORTA_FER,
++      (struct gpio_port_t *)PORTB_FER,
++      (struct gpio_port_t *)PORTC_FER,
++      (struct gpio_port_t *)PORTD_FER,
++      (struct gpio_port_t *)PORTE_FER,
++      (struct gpio_port_t *)PORTF_FER,
++      (struct gpio_port_t *)PORTG_FER,
++      (struct gpio_port_t *)PORTH_FER,
++      (struct gpio_port_t *)PORTI_FER,
++      (struct gpio_port_t *)PORTJ_FER,
++};
+ #endif
+ static unsigned short reserved_gpio_map[GPIO_BANK_NUM];
+@@ -134,9 +188,35 @@
+ } str_ident[MAX_RESOURCES];
+ #if defined(CONFIG_PM)
++#if defined(CONFIG_BF54x)
++static struct gpio_port_s gpio_bank_saved[GPIO_BANK_NUM];
++#else
++static unsigned short wakeup_map[GPIO_BANK_NUM];
++static unsigned char wakeup_flags_map[MAX_BLACKFIN_GPIOS];
+ static struct gpio_port_s gpio_bank_saved[GPIO_BANK_NUM];
++
++#ifdef BF533_FAMILY
++static unsigned int sic_iwr_irqs[] = {IRQ_PROG_INTB};
++#endif
++
++#ifdef BF537_FAMILY
++static unsigned int sic_iwr_irqs[] = {IRQ_PROG_INTB, IRQ_PORTG_INTB, IRQ_MAC_TX};
++#endif
++
++#ifdef BF538_FAMILY
++static unsigned int sic_iwr_irqs[] = {IRQ_PORTF_INTB};
+ #endif
++#if defined(BF527_FAMILY) || defined(BF518_FAMILY)
++static unsigned int sic_iwr_irqs[] = {IRQ_PORTF_INTB, IRQ_PORTG_INTB, IRQ_PORTH_INTB};
++#endif
++
++#ifdef BF561_FAMILY
++static unsigned int sic_iwr_irqs[] = {IRQ_PROG0_INTB, IRQ_PROG1_INTB, IRQ_PROG2_INTB};
++#endif
++#endif
++#endif /* CONFIG_PM */
++
+ inline int check_gpio(unsigned gpio)
+ {
+ #if defined(BF548_FAMILY)
+@@ -250,10 +330,9 @@
+       {.res = P_SPI0_SSEL3, .offset = 0},
+ };
+-static void portmux_setup(unsigned short per)
++static void portmux_setup(unsigned short per, unsigned short function)
+ {
+       u16 y, offset, muxreg;
+-      u16 function = P_FUNCT2MUX(per);
+       for (y = 0; y < ARRAY_SIZE(port_mux_lut); y++) {
+               if (port_mux_lut[y].res == per) {
+@@ -274,33 +353,30 @@
+       }
+ }
+ #elif defined(BF548_FAMILY)
+-inline void portmux_setup(unsigned short per)
++inline void portmux_setup(unsigned short portno, unsigned short function)
+ {
+       u32 pmux;
+-      u16 ident = P_IDENT(per);
+-      u16 function = P_FUNCT2MUX(per);
+-      pmux = gpio_array[gpio_bank(ident)]->port_mux;
++      pmux = gpio_array[gpio_bank(portno)]->port_mux;
+-      pmux &= ~(0x3 << (2 * gpio_sub_n(ident)));
+-      pmux |= (function & 0x3) << (2 * gpio_sub_n(ident));
++      pmux &= ~(0x3 << (2 * gpio_sub_n(portno)));
++      pmux |= (function & 0x3) << (2 * gpio_sub_n(portno));
+-      gpio_array[gpio_bank(ident)]->port_mux = pmux;
++      gpio_array[gpio_bank(portno)]->port_mux = pmux;
+ }
+-inline u16 get_portmux(unsigned short per)
++inline u16 get_portmux(unsigned short portno)
+ {
+       u32 pmux;
+-      u16 ident = P_IDENT(per);
+-      pmux = gpio_array[gpio_bank(ident)]->port_mux;
++      pmux = gpio_array[gpio_bank(portno)]->port_mux;
+-      return (pmux >> (2 * gpio_sub_n(ident)) & 0x3);
++      return (pmux >> (2 * gpio_sub_n(portno)) & 0x3);
+ }
+ #elif defined(BF527_FAMILY) || defined(BF518_FAMILY)
+-inline void portmux_setup(unsigned short per)
++inline void portmux_setup(unsigned short portno, unsigned short function)
+ {
+-      u16 pmux, ident = P_IDENT(per), function = P_FUNCT2MUX(per);
++      u16 pmux, ident = P_IDENT(portno);
+       u8 offset = pmux_offset[gpio_bank(ident)][gpio_sub_n(ident)];
+       pmux = *port_mux[gpio_bank(ident)];
+@@ -348,71 +424,90 @@
+       unsigned long flags; \
+       local_irq_save_hw(flags); \
+       if (arg) \
+-              gpio_array[gpio_bank(gpio)]->name |= gpio_bit(gpio); \
++              gpio_bankb[gpio_bank(gpio)]->name |= gpio_bit(gpio); \
+       else \
+-              gpio_array[gpio_bank(gpio)]->name &= ~gpio_bit(gpio); \
++              gpio_bankb[gpio_bank(gpio)]->name &= ~gpio_bit(gpio); \
+       AWA_DUMMY_READ(name); \
+       local_irq_restore_hw(flags); \
+ } \
+ EXPORT_SYMBOL(set_gpio_ ## name);
+-SET_GPIO(dir)   /* set_gpio_dir() */
+-SET_GPIO(inen)  /* set_gpio_inen() */
+-SET_GPIO(polar) /* set_gpio_polar() */
+-SET_GPIO(edge)  /* set_gpio_edge() */
+-SET_GPIO(both)  /* set_gpio_both() */
++SET_GPIO(dir)
++SET_GPIO(inen)
++SET_GPIO(polar)
++SET_GPIO(edge)
++SET_GPIO(both)
++#if ANOMALY_05000311 || ANOMALY_05000323
+ #define SET_GPIO_SC(name) \
+ void set_gpio_ ## name(unsigned gpio, unsigned short arg) \
+ { \
+       unsigned long flags; \
+-      if (ANOMALY_05000311 || ANOMALY_05000323) \
+-              local_irq_save_hw(flags); \
++      local_irq_save_hw(flags); \
+       if (arg) \
+-              gpio_array[gpio_bank(gpio)]->name ## _set = gpio_bit(gpio); \
++              gpio_bankb[gpio_bank(gpio)]->name ## _set = gpio_bit(gpio); \
+       else \
+-              gpio_array[gpio_bank(gpio)]->name ## _clear = gpio_bit(gpio); \
+-      if (ANOMALY_05000311 || ANOMALY_05000323) { \
+-              AWA_DUMMY_READ(name); \
+-              local_irq_restore_hw(flags); \
+-      } \
++              gpio_bankb[gpio_bank(gpio)]->name ## _clear = gpio_bit(gpio); \
++      AWA_DUMMY_READ(name); \
++      local_irq_restore_hw(flags); \
+ } \
+ EXPORT_SYMBOL(set_gpio_ ## name);
++#else
++#define SET_GPIO_SC(name) \
++void set_gpio_ ## name(unsigned gpio, unsigned short arg) \
++{ \
++      if (arg) \
++              gpio_bankb[gpio_bank(gpio)]->name ## _set = gpio_bit(gpio); \
++      else \
++              gpio_bankb[gpio_bank(gpio)]->name ## _clear = gpio_bit(gpio); \
++} \
++EXPORT_SYMBOL(set_gpio_ ## name);
++#endif
+ SET_GPIO_SC(maska)
+ SET_GPIO_SC(maskb)
+ SET_GPIO_SC(data)
++#if ANOMALY_05000311 || ANOMALY_05000323
+ void set_gpio_toggle(unsigned gpio)
+ {
+       unsigned long flags;
+-      if (ANOMALY_05000311 || ANOMALY_05000323)
+-              local_irq_save_hw(flags);
+-      gpio_array[gpio_bank(gpio)]->toggle = gpio_bit(gpio);
+-      if (ANOMALY_05000311 || ANOMALY_05000323) {
+-              AWA_DUMMY_READ(toggle);
+-              local_irq_restore_hw(flags);
+-      }
++      local_irq_save_hw(flags);
++      gpio_bankb[gpio_bank(gpio)]->toggle = gpio_bit(gpio);
++      AWA_DUMMY_READ(toggle);
++      local_irq_restore_hw(flags);
++}
++#else
++void set_gpio_toggle(unsigned gpio)
++{
++      gpio_bankb[gpio_bank(gpio)]->toggle = gpio_bit(gpio);
+ }
++#endif
+ EXPORT_SYMBOL(set_gpio_toggle);
+ /*Set current PORT date (16-bit word)*/
++#if ANOMALY_05000311 || ANOMALY_05000323
+ #define SET_GPIO_P(name) \
+ void set_gpiop_ ## name(unsigned gpio, unsigned short arg) \
+ { \
+       unsigned long flags; \
+-      if (ANOMALY_05000311 || ANOMALY_05000323) \
+-              local_irq_save_hw(flags); \
+-      gpio_array[gpio_bank(gpio)]->name = arg; \
+-      if (ANOMALY_05000311 || ANOMALY_05000323) { \
+-              AWA_DUMMY_READ(name); \
+-              local_irq_restore_hw(flags); \
+-      } \
++      local_irq_save_hw(flags); \
++      gpio_bankb[gpio_bank(gpio)]->name = arg; \
++      AWA_DUMMY_READ(name); \
++      local_irq_restore_hw(flags); \
++} \
++EXPORT_SYMBOL(set_gpiop_ ## name);
++#else
++#define SET_GPIO_P(name) \
++void set_gpiop_ ## name(unsigned gpio, unsigned short arg) \
++{ \
++      gpio_bankb[gpio_bank(gpio)]->name = arg; \
+ } \
+ EXPORT_SYMBOL(set_gpiop_ ## name);
++#endif
+ SET_GPIO_P(data)
+ SET_GPIO_P(dir)
+@@ -424,21 +519,27 @@
+ SET_GPIO_P(maskb)
+ /* Get a specific bit */
++#if ANOMALY_05000311 || ANOMALY_05000323
+ #define GET_GPIO(name) \
+ unsigned short get_gpio_ ## name(unsigned gpio) \
+ { \
+       unsigned long flags; \
+       unsigned short ret; \
+-      if (ANOMALY_05000311 || ANOMALY_05000323) \
+-              local_irq_save_hw(flags); \
+-      ret = 0x01 & (gpio_array[gpio_bank(gpio)]->name >> gpio_sub_n(gpio)); \
+-      if (ANOMALY_05000311 || ANOMALY_05000323) { \
+-              AWA_DUMMY_READ(name); \
+-              local_irq_restore_hw(flags); \
+-      } \
++      local_irq_save_hw(flags); \
++      ret = 0x01 & (gpio_bankb[gpio_bank(gpio)]->name >> gpio_sub_n(gpio)); \
++      AWA_DUMMY_READ(name); \
++      local_irq_restore_hw(flags); \
+       return ret; \
+ } \
+ EXPORT_SYMBOL(get_gpio_ ## name);
++#else
++#define GET_GPIO(name) \
++unsigned short get_gpio_ ## name(unsigned gpio) \
++{ \
++      return (0x01 & (gpio_bankb[gpio_bank(gpio)]->name >> gpio_sub_n(gpio))); \
++} \
++EXPORT_SYMBOL(get_gpio_ ## name);
++#endif
+ GET_GPIO(data)
+ GET_GPIO(dir)
+@@ -451,21 +552,27 @@
+ /*Get current PORT date (16-bit word)*/
++#if ANOMALY_05000311 || ANOMALY_05000323
+ #define GET_GPIO_P(name) \
+ unsigned short get_gpiop_ ## name(unsigned gpio) \
+ { \
+       unsigned long flags; \
+       unsigned short ret; \
+-      if (ANOMALY_05000311 || ANOMALY_05000323) \
+-              local_irq_save_hw(flags); \
+-      ret = (gpio_array[gpio_bank(gpio)]->name); \
+-      if (ANOMALY_05000311 || ANOMALY_05000323) { \
+-              AWA_DUMMY_READ(name); \
+-              local_irq_restore_hw(flags); \
+-      } \
++      local_irq_save_hw(flags); \
++      ret = (gpio_bankb[gpio_bank(gpio)]->name); \
++      AWA_DUMMY_READ(name); \
++      local_irq_restore_hw(flags); \
+       return ret; \
+ } \
+ EXPORT_SYMBOL(get_gpiop_ ## name);
++#else
++#define GET_GPIO_P(name) \
++unsigned short get_gpiop_ ## name(unsigned gpio) \
++{ \
++      return (gpio_bankb[gpio_bank(gpio)]->name);\
++} \
++EXPORT_SYMBOL(get_gpiop_ ## name);
++#endif
+ GET_GPIO_P(data)
+ GET_GPIO_P(dir)
+@@ -478,26 +585,6 @@
+ #ifdef CONFIG_PM
+-
+-static unsigned short wakeup_map[GPIO_BANK_NUM];
+-static unsigned char wakeup_flags_map[MAX_BLACKFIN_GPIOS];
+-
+-static const unsigned int sic_iwr_irqs[] = {
+-#if defined(BF533_FAMILY)
+-      IRQ_PROG_INTB
+-#elif defined(BF537_FAMILY)
+-      IRQ_PROG_INTB, IRQ_PORTG_INTB, IRQ_MAC_TX
+-#elif defined(BF538_FAMILY)
+-      IRQ_PORTF_INTB
+-#elif defined(BF527_FAMILY) || defined(BF518_FAMILY)
+-      IRQ_PORTF_INTB, IRQ_PORTG_INTB, IRQ_PORTH_INTB
+-#elif defined(BF561_FAMILY)
+-      IRQ_PROG0_INTB, IRQ_PROG1_INTB, IRQ_PROG2_INTB
+-#else
+-# error no SIC_IWR defined
+-#endif
+-};
+-
+ /***********************************************************
+ *
+ * FUNCTIONS: Blackfin PM Setup API
+@@ -582,18 +669,18 @@
+               mask = wakeup_map[gpio_bank(i)];
+               bank = gpio_bank(i);
+-              gpio_bank_saved[bank].maskb = gpio_array[bank]->maskb;
+-              gpio_array[bank]->maskb = 0;
++              gpio_bank_saved[bank].maskb = gpio_bankb[bank]->maskb;
++              gpio_bankb[bank]->maskb = 0;
+               if (mask) {
+ #if defined(BF527_FAMILY) || defined(BF537_FAMILY) || defined(BF518_FAMILY)
+                       gpio_bank_saved[bank].fer   = *port_fer[bank];
+ #endif
+-                      gpio_bank_saved[bank].inen  = gpio_array[bank]->inen;
+-                      gpio_bank_saved[bank].polar = gpio_array[bank]->polar;
+-                      gpio_bank_saved[bank].dir   = gpio_array[bank]->dir;
+-                      gpio_bank_saved[bank].edge  = gpio_array[bank]->edge;
+-                      gpio_bank_saved[bank].both  = gpio_array[bank]->both;
++                      gpio_bank_saved[bank].inen  = gpio_bankb[bank]->inen;
++                      gpio_bank_saved[bank].polar = gpio_bankb[bank]->polar;
++                      gpio_bank_saved[bank].dir   = gpio_bankb[bank]->dir;
++                      gpio_bank_saved[bank].edge  = gpio_bankb[bank]->edge;
++                      gpio_bank_saved[bank].both  = gpio_bankb[bank]->both;
+                       gpio_bank_saved[bank].reserved =
+                                               reserved_gpio_map[bank];
+@@ -613,7 +700,7 @@
+                       }
+                       bfin_internal_set_wake(sic_iwr_irqs[bank], 1);
+-                      gpio_array[bank]->maskb_set = wakeup_map[gpio_bank(i)];
++                      gpio_bankb[bank]->maskb_set = wakeup_map[gpio_bank(i)];
+               }
+       }
+@@ -634,18 +721,18 @@
+ #if defined(BF527_FAMILY) || defined(BF537_FAMILY) || defined(BF518_FAMILY)
+                       *port_fer[bank]         = gpio_bank_saved[bank].fer;
+ #endif
+-                      gpio_array[bank]->inen  = gpio_bank_saved[bank].inen;
+-                      gpio_array[bank]->dir   = gpio_bank_saved[bank].dir;
+-                      gpio_array[bank]->polar = gpio_bank_saved[bank].polar;
+-                      gpio_array[bank]->edge  = gpio_bank_saved[bank].edge;
+-                      gpio_array[bank]->both  = gpio_bank_saved[bank].both;
++                      gpio_bankb[bank]->inen  = gpio_bank_saved[bank].inen;
++                      gpio_bankb[bank]->dir   = gpio_bank_saved[bank].dir;
++                      gpio_bankb[bank]->polar = gpio_bank_saved[bank].polar;
++                      gpio_bankb[bank]->edge  = gpio_bank_saved[bank].edge;
++                      gpio_bankb[bank]->both  = gpio_bank_saved[bank].both;
+                       reserved_gpio_map[bank] =
+                                       gpio_bank_saved[bank].reserved;
+                       bfin_internal_set_wake(sic_iwr_irqs[bank], 0);
+               }
+-              gpio_array[bank]->maskb = gpio_bank_saved[bank].maskb;
++              gpio_bankb[bank]->maskb = gpio_bank_saved[bank].maskb;
+       }
+       AWA_DUMMY_READ(maskb);
+ }
+@@ -658,21 +745,21 @@
+               bank = gpio_bank(i);
+ #if defined(BF527_FAMILY) || defined(BF537_FAMILY) || defined(BF518_FAMILY)
+-              gpio_bank_saved[bank].fer = *port_fer[bank];
++                      gpio_bank_saved[bank].fer   = *port_fer[bank];
+ #if defined(BF527_FAMILY) || defined(BF518_FAMILY)
+-              gpio_bank_saved[bank].mux = *port_mux[bank];
++                      gpio_bank_saved[bank].mux   = *port_mux[bank];
+ #else
+-              if (bank == 0)
+-                      gpio_bank_saved[bank].mux = bfin_read_PORT_MUX();
++                      if (bank == 0)
++                              gpio_bank_saved[bank].mux   = bfin_read_PORT_MUX();
+ #endif
+ #endif
+-              gpio_bank_saved[bank].data  = gpio_array[bank]->data;
+-              gpio_bank_saved[bank].inen  = gpio_array[bank]->inen;
+-              gpio_bank_saved[bank].polar = gpio_array[bank]->polar;
+-              gpio_bank_saved[bank].dir   = gpio_array[bank]->dir;
+-              gpio_bank_saved[bank].edge  = gpio_array[bank]->edge;
+-              gpio_bank_saved[bank].both  = gpio_array[bank]->both;
+-              gpio_bank_saved[bank].maska = gpio_array[bank]->maska;
++                      gpio_bank_saved[bank].data  = gpio_bankb[bank]->data;
++                      gpio_bank_saved[bank].inen  = gpio_bankb[bank]->inen;
++                      gpio_bank_saved[bank].polar = gpio_bankb[bank]->polar;
++                      gpio_bank_saved[bank].dir   = gpio_bankb[bank]->dir;
++                      gpio_bank_saved[bank].edge  = gpio_bankb[bank]->edge;
++                      gpio_bank_saved[bank].both  = gpio_bankb[bank]->both;
++                      gpio_bank_saved[bank].maska  = gpio_bankb[bank]->maska;
+       }
+       AWA_DUMMY_READ(maska);
+@@ -683,27 +770,27 @@
+       int i, bank;
+       for (i = 0; i < MAX_BLACKFIN_GPIOS; i += GPIO_BANKSIZE) {
+-              bank = gpio_bank(i);
++                      bank = gpio_bank(i);
+ #if defined(BF527_FAMILY) || defined(BF537_FAMILY) || defined(BF518_FAMILY)
+ #if defined(BF527_FAMILY) || defined(BF518_FAMILY)
+-              *port_mux[bank] = gpio_bank_saved[bank].mux;
++                      *port_mux[bank] = gpio_bank_saved[bank].mux;
+ #else
+-              if (bank == 0)
+-                      bfin_write_PORT_MUX(gpio_bank_saved[bank].mux);
++                      if (bank == 0)
++                              bfin_write_PORT_MUX(gpio_bank_saved[bank].mux);
+ #endif
+-              *port_fer[bank] = gpio_bank_saved[bank].fer;
++                      *port_fer[bank]         = gpio_bank_saved[bank].fer;
+ #endif
+-              gpio_array[bank]->inen  = gpio_bank_saved[bank].inen;
+-              gpio_array[bank]->dir   = gpio_bank_saved[bank].dir;
+-              gpio_array[bank]->polar = gpio_bank_saved[bank].polar;
+-              gpio_array[bank]->edge  = gpio_bank_saved[bank].edge;
+-              gpio_array[bank]->both  = gpio_bank_saved[bank].both;
++                      gpio_bankb[bank]->inen  = gpio_bank_saved[bank].inen;
++                      gpio_bankb[bank]->dir   = gpio_bank_saved[bank].dir;
++                      gpio_bankb[bank]->polar = gpio_bank_saved[bank].polar;
++                      gpio_bankb[bank]->edge  = gpio_bank_saved[bank].edge;
++                      gpio_bankb[bank]->both  = gpio_bank_saved[bank].both;
+-              gpio_array[bank]->data_set = gpio_bank_saved[bank].data
+-                                              | gpio_bank_saved[bank].dir;
++                      gpio_bankb[bank]->data_set = gpio_bank_saved[bank].data
++                                                      | gpio_bank_saved[bank].dir;
+-              gpio_array[bank]->maska = gpio_bank_saved[bank].maska;
++                      gpio_bankb[bank]->maska = gpio_bank_saved[bank].maska;
+       }
+       AWA_DUMMY_READ(maska);
+ }
+@@ -730,12 +817,12 @@
+       for (i = 0; i < MAX_BLACKFIN_GPIOS; i += GPIO_BANKSIZE) {
+               bank = gpio_bank(i);
+-              gpio_bank_saved[bank].fer = gpio_array[bank]->port_fer;
+-              gpio_bank_saved[bank].mux = gpio_array[bank]->port_mux;
+-              gpio_bank_saved[bank].data = gpio_array[bank]->data;
+-              gpio_bank_saved[bank].data = gpio_array[bank]->data;
+-              gpio_bank_saved[bank].inen = gpio_array[bank]->inen;
+-              gpio_bank_saved[bank].dir = gpio_array[bank]->dir_set;
++                      gpio_bank_saved[bank].fer  = gpio_array[bank]->port_fer;
++                      gpio_bank_saved[bank].mux  = gpio_array[bank]->port_mux;
++                      gpio_bank_saved[bank].data  = gpio_array[bank]->port_data;
++                      gpio_bank_saved[bank].data  = gpio_array[bank]->port_data;
++                      gpio_bank_saved[bank].inen  = gpio_array[bank]->port_inen;
++                      gpio_bank_saved[bank].dir   = gpio_array[bank]->port_dir_set;
+       }
+ }
+@@ -744,21 +831,21 @@
+       int i, bank;
+       for (i = 0; i < MAX_BLACKFIN_GPIOS; i += GPIO_BANKSIZE) {
+-              bank = gpio_bank(i);
++                      bank = gpio_bank(i);
+-              gpio_array[bank]->port_mux = gpio_bank_saved[bank].mux;
+-              gpio_array[bank]->port_fer = gpio_bank_saved[bank].fer;
+-              gpio_array[bank]->inen = gpio_bank_saved[bank].inen;
+-              gpio_array[bank]->dir_set = gpio_bank_saved[bank].dir;
+-              gpio_array[bank]->data_set = gpio_bank_saved[bank].data
+-                                              | gpio_bank_saved[bank].dir;
++                      gpio_array[bank]->port_mux  = gpio_bank_saved[bank].mux;
++                      gpio_array[bank]->port_fer  = gpio_bank_saved[bank].fer;
++                      gpio_array[bank]->port_inen  = gpio_bank_saved[bank].inen;
++                      gpio_array[bank]->port_dir_set   = gpio_bank_saved[bank].dir;
++                      gpio_array[bank]->port_set = gpio_bank_saved[bank].data
++                                                      | gpio_bank_saved[bank].dir;
+       }
+ }
+ #endif
+ unsigned short get_gpio_dir(unsigned gpio)
+ {
+-      return (0x01 & (gpio_array[gpio_bank(gpio)]->dir_clear >> gpio_sub_n(gpio)));
++      return (0x01 & (gpio_array[gpio_bank(gpio)]->port_dir_clear >> gpio_sub_n(gpio)));
+ }
+ EXPORT_SYMBOL(get_gpio_dir);
+@@ -818,7 +905,9 @@
+                */
+ #ifdef BF548_FAMILY
+-              if (!((per & P_MAYSHARE) && get_portmux(per) == P_FUNCT2MUX(per))) {
++              u16 funct = get_portmux(ident);
++
++              if (!((per & P_MAYSHARE) && (funct == P_FUNCT2MUX(per)))) {
+ #else
+               if (!(per & P_MAYSHARE)) {
+ #endif
+@@ -842,7 +931,11 @@
+  anyway:
+       reserved_peri_map[gpio_bank(ident)] |= gpio_bit(ident);
+-      portmux_setup(per);
++#ifdef BF548_FAMILY
++      portmux_setup(ident, P_FUNCT2MUX(per));
++#else
++      portmux_setup(per, P_FUNCT2MUX(per));
++#endif
+       port_setup(ident, PERIPHERAL_USAGE);
+       local_irq_restore_hw(flags);
+@@ -884,6 +977,9 @@
+       if (!(per & P_DEFINED))
+               return;
++      if (check_gpio(ident) < 0)
++              return;
++
+       local_irq_save_hw(flags);
+       if (unlikely(!(reserved_peri_map[gpio_bank(ident)] & gpio_bit(ident)))) {
+@@ -960,15 +1056,9 @@
+               local_irq_restore_hw(flags);
+               return -EBUSY;
+       }
+-      if (unlikely(reserved_gpio_irq_map[gpio_bank(gpio)] & gpio_bit(gpio))) {
++      if (unlikely(reserved_gpio_irq_map[gpio_bank(gpio)] & gpio_bit(gpio)))
+               printk(KERN_NOTICE "bfin-gpio: GPIO %d is already reserved as gpio-irq!"
+                      " (Documentation/blackfin/bfin-gpio-notes.txt)\n", gpio);
+-      }
+-#ifndef BF548_FAMILY
+-      else {  /* Reset POLAR setting when acquiring a gpio for the first time */
+-              set_gpio_polar(gpio, 0);
+-      }
+-#endif
+       reserved_gpio_map[gpio_bank(gpio)] |= gpio_bit(gpio);
+       set_label(gpio, label);
+@@ -988,8 +1078,6 @@
+       if (check_gpio(gpio) < 0)
+               return;
+-      might_sleep();
+-
+       local_irq_save_hw(flags);
+       if (unlikely(!(reserved_gpio_map[gpio_bank(gpio)] & gpio_bit(gpio)))) {
+@@ -1070,16 +1158,8 @@
+       local_irq_restore_hw(flags);
+ }
+-static inline void __bfin_gpio_direction_input(unsigned gpio)
+-{
+-#ifdef BF548_FAMILY
+-      gpio_array[gpio_bank(gpio)]->dir_clear = gpio_bit(gpio);
+-#else
+-      gpio_array[gpio_bank(gpio)]->dir &= ~gpio_bit(gpio);
+-#endif
+-      gpio_array[gpio_bank(gpio)]->inen |= gpio_bit(gpio);
+-}
++#ifdef BF548_FAMILY
+ int bfin_gpio_direction_input(unsigned gpio)
+ {
+       unsigned long flags;
+@@ -1090,85 +1170,125 @@
+       }
+       local_irq_save_hw(flags);
+-      __bfin_gpio_direction_input(gpio);
+-      AWA_DUMMY_READ(inen);
++      gpio_array[gpio_bank(gpio)]->port_dir_clear = gpio_bit(gpio);
++      gpio_array[gpio_bank(gpio)]->port_inen |= gpio_bit(gpio);
+       local_irq_restore_hw(flags);
+       return 0;
+ }
+ EXPORT_SYMBOL(bfin_gpio_direction_input);
+-void bfin_gpio_irq_prepare(unsigned gpio)
++int bfin_gpio_direction_output(unsigned gpio, int value)
+ {
+-#ifdef BF548_FAMILY
+       unsigned long flags;
+-#endif
+-      port_setup(gpio, GPIO_USAGE);
++      if (!(reserved_gpio_map[gpio_bank(gpio)] & gpio_bit(gpio))) {
++              gpio_error(gpio);
++              return -EINVAL;
++      }
+-#ifdef BF548_FAMILY
+       local_irq_save_hw(flags);
+-      __bfin_gpio_direction_input(gpio);
++      gpio_array[gpio_bank(gpio)]->port_inen &= ~gpio_bit(gpio);
++      gpio_set_value(gpio, value);
++      gpio_array[gpio_bank(gpio)]->port_dir_set = gpio_bit(gpio);
+       local_irq_restore_hw(flags);
+-#endif
++
++      return 0;
+ }
++EXPORT_SYMBOL(bfin_gpio_direction_output);
+ void bfin_gpio_set_value(unsigned gpio, int arg)
+ {
+       if (arg)
+-              gpio_array[gpio_bank(gpio)]->data_set = gpio_bit(gpio);
++              gpio_array[gpio_bank(gpio)]->port_set = gpio_bit(gpio);
+       else
+-              gpio_array[gpio_bank(gpio)]->data_clear = gpio_bit(gpio);
++              gpio_array[gpio_bank(gpio)]->port_clear = gpio_bit(gpio);
+ }
+ EXPORT_SYMBOL(bfin_gpio_set_value);
+-int bfin_gpio_direction_output(unsigned gpio, int value)
++int bfin_gpio_get_value(unsigned gpio)
++{
++      return (1 & (gpio_array[gpio_bank(gpio)]->port_data >> gpio_sub_n(gpio)));
++}
++EXPORT_SYMBOL(bfin_gpio_get_value);
++
++void bfin_gpio_irq_prepare(unsigned gpio)
+ {
+       unsigned long flags;
+-      if (!(reserved_gpio_map[gpio_bank(gpio)] & gpio_bit(gpio))) {
+-              gpio_error(gpio);
+-              return -EINVAL;
+-      }
++      port_setup(gpio, GPIO_USAGE);
+       local_irq_save_hw(flags);
+-
+-      gpio_array[gpio_bank(gpio)]->inen &= ~gpio_bit(gpio);
+-      gpio_set_value(gpio, value);
+-#ifdef BF548_FAMILY
+-      gpio_array[gpio_bank(gpio)]->dir_set = gpio_bit(gpio);
+-#else
+-      gpio_array[gpio_bank(gpio)]->dir |= gpio_bit(gpio);
+-#endif
+-
+-      AWA_DUMMY_READ(dir);
++      gpio_array[gpio_bank(gpio)]->port_dir_clear = gpio_bit(gpio);
++      gpio_array[gpio_bank(gpio)]->port_inen |= gpio_bit(gpio);
+       local_irq_restore_hw(flags);
+-
+-      return 0;
+ }
+-EXPORT_SYMBOL(bfin_gpio_direction_output);
++
++#else
+ int bfin_gpio_get_value(unsigned gpio)
+ {
+-#ifdef BF548_FAMILY
+-      return (1 & (gpio_array[gpio_bank(gpio)]->data >> gpio_sub_n(gpio)));
+-#else
+       unsigned long flags;
++      int ret;
+       if (unlikely(get_gpio_edge(gpio))) {
+-              int ret;
+               local_irq_save_hw(flags);
+               set_gpio_edge(gpio, 0);
+               ret = get_gpio_data(gpio);
+               set_gpio_edge(gpio, 1);
+               local_irq_restore_hw(flags);
++
+               return ret;
+       } else
+               return get_gpio_data(gpio);
+-#endif
+ }
+ EXPORT_SYMBOL(bfin_gpio_get_value);
++
++int bfin_gpio_direction_input(unsigned gpio)
++{
++      unsigned long flags;
++
++      if (!(reserved_gpio_map[gpio_bank(gpio)] & gpio_bit(gpio))) {
++              gpio_error(gpio);
++              return -EINVAL;
++      }
++
++      local_irq_save_hw(flags);
++      gpio_bankb[gpio_bank(gpio)]->dir &= ~gpio_bit(gpio);
++      gpio_bankb[gpio_bank(gpio)]->inen |= gpio_bit(gpio);
++      AWA_DUMMY_READ(inen);
++      local_irq_restore_hw(flags);
++
++      return 0;
++}
++EXPORT_SYMBOL(bfin_gpio_direction_input);
++
++int bfin_gpio_direction_output(unsigned gpio, int value)
++{
++      unsigned long flags;
++
++      if (!(reserved_gpio_map[gpio_bank(gpio)] & gpio_bit(gpio))) {
++              gpio_error(gpio);
++              return -EINVAL;
++      }
++
++      local_irq_save_hw(flags);
++      gpio_bankb[gpio_bank(gpio)]->inen &= ~gpio_bit(gpio);
++
++      if (value)
++              gpio_bankb[gpio_bank(gpio)]->data_set = gpio_bit(gpio);
++      else
++              gpio_bankb[gpio_bank(gpio)]->data_clear = gpio_bit(gpio);
++
++      gpio_bankb[gpio_bank(gpio)]->dir |= gpio_bit(gpio);
++      AWA_DUMMY_READ(dir);
++      local_irq_restore_hw(flags);
++
++      return 0;
++}
++EXPORT_SYMBOL(bfin_gpio_direction_output);
++
+ /* If we are booting from SPI and our board lacks a strong enough pull up,
+  * the core can reset and execute the bootrom faster than the resistor can
+  * pull the signal logically high.  To work around this (common) error in
+@@ -1179,15 +1299,23 @@
+  * lives here as we need to force all the GPIO states w/out going through
+  * BUG() checks and such.
+  */
+-void bfin_reset_boot_spi_cs(unsigned short pin)
++void bfin_gpio_reset_spi0_ssel1(void)
+ {
+-      unsigned short gpio = P_IDENT(pin);
++      u16 gpio = P_IDENT(P_SPI0_SSEL1);
++
+       port_setup(gpio, GPIO_USAGE);
+-      gpio_array[gpio_bank(gpio)]->data_set = gpio_bit(gpio);
++      gpio_bankb[gpio_bank(gpio)]->data_set = gpio_bit(gpio);
+       AWA_DUMMY_READ(data_set);
+       udelay(1);
+ }
++void bfin_gpio_irq_prepare(unsigned gpio)
++{
++      port_setup(gpio, GPIO_USAGE);
++}
++
++#endif /*BF548_FAMILY */
++
+ #if defined(CONFIG_PROC_FS)
+ static int gpio_proc_read(char *buf, char **start, off_t offset,
+                         int len, int *unused_i, void *unused_v)
+@@ -1241,7 +1369,11 @@
+ void bfin_gpiolib_set_value(struct gpio_chip *chip, unsigned gpio, int value)
+ {
++#ifdef BF548_FAMILY
+       return bfin_gpio_set_value(gpio, value);
++#else
++      return set_gpio_data(gpio, value);
++#endif
+ }
+ int bfin_gpiolib_gpio_request(struct gpio_chip *chip, unsigned gpio)
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/kernel/cplb-mpu/cplbinit.c linux-2.6.29-rc3.owrt/arch/blackfin/kernel/cplb-mpu/cplbinit.c
+--- linux-2.6.29.owrt/arch/blackfin/kernel/cplb-mpu/cplbinit.c 2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/kernel/cplb-mpu/cplbinit.c     2009-05-10 23:48:28.000000000 +0200
+@@ -63,8 +63,10 @@
+       dcplb_tbl[cpu][i_d].addr = 0;
+       dcplb_tbl[cpu][i_d++].data = SDRAM_OOPS | PAGE_SIZE_1KB;
++#if 0
+       icplb_tbl[cpu][i_i].addr = 0;
+-      icplb_tbl[cpu][i_i++].data = i_cache | CPLB_USER_RD | PAGE_SIZE_1KB;
++      icplb_tbl[cpu][i_i++].data = i_cache | CPLB_USER_RD | PAGE_SIZE_4KB;
++#endif
+       /* Cover kernel memory with 4M pages.  */
+       addr = 0;
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/kernel/cplb-nompu/cplbinit.c linux-2.6.29-rc3.owrt/arch/blackfin/kernel/cplb-nompu/cplbinit.c
+--- linux-2.6.29.owrt/arch/blackfin/kernel/cplb-nompu/cplbinit.c       2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/kernel/cplb-nompu/cplbinit.c   2009-05-10 23:48:28.000000000 +0200
+@@ -53,13 +53,9 @@
+       i_d = i_i = 0;
+-#ifdef CONFIG_DEBUG_HUNT_FOR_ZERO
+       /* Set up the zero page.  */
+       d_tbl[i_d].addr = 0;
+       d_tbl[i_d++].data = SDRAM_OOPS | PAGE_SIZE_1KB;
+-      i_tbl[i_i].addr = 0;
+-      i_tbl[i_i++].data = SDRAM_OOPS | PAGE_SIZE_1KB;
+-#endif
+       /* Cover kernel memory with 4M pages.  */
+       addr = 0;
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/kernel/cplb-nompu/cplbmgr.c linux-2.6.29-rc3.owrt/arch/blackfin/kernel/cplb-nompu/cplbmgr.c
+--- linux-2.6.29.owrt/arch/blackfin/kernel/cplb-nompu/cplbmgr.c        2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/kernel/cplb-nompu/cplbmgr.c    2009-05-10 23:48:28.000000000 +0200
+@@ -163,14 +163,12 @@
+               nr_icplb_supv_miss[cpu]++;
+       base = 0;
+-      idx = 0;
+-      do {
++      for (idx = 0; idx < icplb_nr_bounds; idx++) {
+               eaddr = icplb_bounds[idx].eaddr;
+               if (addr < eaddr)
+                       break;
+               base = eaddr;
+-      } while (++idx < icplb_nr_bounds);
+-
++      }
+       if (unlikely(idx == icplb_nr_bounds))
+               return CPLB_NO_ADDR_MATCH;
+@@ -210,14 +208,12 @@
+               nr_dcplb_supv_miss[cpu]++;
+       base = 0;
+-      idx = 0;
+-      do {
++      for (idx = 0; idx < dcplb_nr_bounds; idx++) {
+               eaddr = dcplb_bounds[idx].eaddr;
+               if (addr < eaddr)
+                       break;
+               base = eaddr;
+-      } while (++idx < dcplb_nr_bounds);
+-
++      }
+       if (unlikely(idx == dcplb_nr_bounds))
+               return CPLB_NO_ADDR_MATCH;
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/kernel/ipipe.c linux-2.6.29-rc3.owrt/arch/blackfin/kernel/ipipe.c
+--- linux-2.6.29.owrt/arch/blackfin/kernel/ipipe.c     2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/kernel/ipipe.c 2009-05-10 23:48:28.000000000 +0200
+@@ -35,8 +35,14 @@
+ #include <asm/atomic.h>
+ #include <asm/io.h>
++static int create_irq_threads;
++
+ DEFINE_PER_CPU(struct pt_regs, __ipipe_tick_regs);
++static DEFINE_PER_CPU(unsigned long, pending_irqthread_mask);
++
++static DEFINE_PER_CPU(int [IVG13 + 1], pending_irq_count);
++
+ asmlinkage void asm_do_IRQ(unsigned int irq, struct pt_regs *regs);
+ static void __ipipe_no_irqtail(void);
+@@ -87,7 +93,6 @@
+  */
+ void __ipipe_handle_irq(unsigned irq, struct pt_regs *regs)
+ {
+-      struct ipipe_percpu_domain_data *p = ipipe_root_cpudom_ptr();
+       struct ipipe_domain *this_domain, *next_domain;
+       struct list_head *head, *pos;
+       int m_ack, s = -1;
+@@ -99,6 +104,7 @@
+        * interrupt.
+        */
+       m_ack = (regs == NULL || irq == IRQ_SYSTMR || irq == IRQ_CORETMR);
++
+       this_domain = ipipe_current_domain;
+       if (unlikely(test_bit(IPIPE_STICKY_FLAG, &this_domain->irqs[irq].control)))
+@@ -108,28 +114,49 @@
+               next_domain = list_entry(head, struct ipipe_domain, p_link);
+               if (likely(test_bit(IPIPE_WIRED_FLAG, &next_domain->irqs[irq].control))) {
+                       if (!m_ack && next_domain->irqs[irq].acknowledge != NULL)
+-                              next_domain->irqs[irq].acknowledge(irq, irq_to_desc(irq));
+-                      if (test_bit(IPIPE_SYNCDEFER_FLAG, &p->status))
+-                              s = __test_and_set_bit(IPIPE_STALL_FLAG, &p->status);
++                              next_domain->irqs[irq].acknowledge(irq, irq_desc + irq);
++                      if (test_bit(IPIPE_ROOTLOCK_FLAG, &ipipe_root_domain->flags))
++                              s = __test_and_set_bit(IPIPE_STALL_FLAG,
++                                                     &ipipe_root_cpudom_var(status));
+                       __ipipe_dispatch_wired(next_domain, irq);
+-                      goto out;
++                              goto finalize;
++                      return;
+               }
+       }
+       /* Ack the interrupt. */
+       pos = head;
++
+       while (pos != &__ipipe_pipeline) {
+               next_domain = list_entry(pos, struct ipipe_domain, p_link);
++              /*
++               * For each domain handling the incoming IRQ, mark it
++               * as pending in its log.
++               */
+               if (test_bit(IPIPE_HANDLE_FLAG, &next_domain->irqs[irq].control)) {
++                      /*
++                       * Domains that handle this IRQ are polled for
++                       * acknowledging it by decreasing priority
++                       * order. The interrupt must be made pending
++                       * _first_ in the domain's status flags before
++                       * the PIC is unlocked.
++                       */
+                       __ipipe_set_irq_pending(next_domain, irq);
++
+                       if (!m_ack && next_domain->irqs[irq].acknowledge != NULL) {
+-                              next_domain->irqs[irq].acknowledge(irq, irq_to_desc(irq));
++                              next_domain->irqs[irq].acknowledge(irq, irq_desc + irq);
+                               m_ack = 1;
+                       }
+               }
++
++              /*
++               * If the domain does not want the IRQ to be passed
++               * down the interrupt pipe, exit the loop now.
++               */
+               if (!test_bit(IPIPE_PASS_FLAG, &next_domain->irqs[irq].control))
+                       break;
++
+               pos = next_domain->p_link.next;
+       }
+@@ -139,24 +166,18 @@
+        * immediately to the current domain if the interrupt has been
+        * marked as 'sticky'. This search does not go beyond the
+        * current domain in the pipeline. We also enforce the
+-       * additional root stage lock (blackfin-specific).
+-       */
+-      if (test_bit(IPIPE_SYNCDEFER_FLAG, &p->status))
+-              s = __test_and_set_bit(IPIPE_STALL_FLAG, &p->status);
++       * additional root stage lock (blackfin-specific). */
+-      /*
+-       * If the interrupt preempted the head domain, then do not
+-       * even try to walk the pipeline, unless an interrupt is
+-       * pending for it.
+-       */
+-      if (test_bit(IPIPE_AHEAD_FLAG, &this_domain->flags) &&
+-          ipipe_head_cpudom_var(irqpend_himask) == 0)
+-              goto out;
++      if (test_bit(IPIPE_ROOTLOCK_FLAG, &ipipe_root_domain->flags))
++              s = __test_and_set_bit(IPIPE_STALL_FLAG,
++                                     &ipipe_root_cpudom_var(status));
++finalize:
+       __ipipe_walk_pipeline(head);
+-out:
++
+       if (!s)
+-              __clear_bit(IPIPE_STALL_FLAG, &p->status);
++              __clear_bit(IPIPE_STALL_FLAG,
++                          &ipipe_root_cpudom_var(status));
+ }
+ int __ipipe_check_root(void)
+@@ -166,7 +187,7 @@
+ void __ipipe_enable_irqdesc(struct ipipe_domain *ipd, unsigned irq)
+ {
+-      struct irq_desc *desc = irq_to_desc(irq);
++      struct irq_desc *desc = irq_desc + irq;
+       int prio = desc->ic_prio;
+       desc->depth = 0;
+@@ -178,7 +199,7 @@
+ void __ipipe_disable_irqdesc(struct ipipe_domain *ipd, unsigned irq)
+ {
+-      struct irq_desc *desc = irq_to_desc(irq);
++      struct irq_desc *desc = irq_desc + irq;
+       int prio = desc->ic_prio;
+       if (ipd != &ipipe_root &&
+@@ -215,18 +236,15 @@
+ {
+       unsigned long flags;
+-      /*
+-       * We need to run the IRQ tail hook whenever we don't
++      /* We need to run the IRQ tail hook whenever we don't
+        * propagate a syscall to higher domains, because we know that
+        * important operations might be pending there (e.g. Xenomai
+-       * deferred rescheduling).
+-       */
++       * deferred rescheduling). */
+-      if (regs->orig_p0 < NR_syscalls) {
++      if (!__ipipe_syscall_watched_p(current, regs->orig_p0)) {
+               void (*hook)(void) = (void (*)(void))__ipipe_irq_tail_hook;
+               hook();
+-              if ((current->flags & PF_EVNOTIFY) == 0)
+-                      return 0;
++              return 0;
+       }
+       /*
+@@ -294,46 +312,112 @@
+ {
+       unsigned long flags;
+-#ifdef CONFIG_IPIPE_DEBUG
+       if (irq >= IPIPE_NR_IRQS ||
+           (ipipe_virtual_irq_p(irq)
+            && !test_bit(irq - IPIPE_VIRQ_BASE, &__ipipe_virtual_irq_map)))
+               return -EINVAL;
+-#endif
+       local_irq_save_hw(flags);
++
+       __ipipe_handle_irq(irq, NULL);
++
+       local_irq_restore_hw(flags);
+       return 1;
+ }
+-asmlinkage void __ipipe_sync_root(void)
++/* Move Linux IRQ to threads. */
++
++static int do_irqd(void *__desc)
+ {
+-      unsigned long flags;
++      struct irq_desc *desc = __desc;
++      unsigned irq = desc - irq_desc;
++      int thrprio = desc->thr_prio;
++      int thrmask = 1 << thrprio;
++      int cpu = smp_processor_id();
++      cpumask_t cpumask;
++
++      sigfillset(&current->blocked);
++      current->flags |= PF_NOFREEZE;
++      cpumask = cpumask_of_cpu(cpu);
++      set_cpus_allowed(current, cpumask);
++      ipipe_setscheduler_root(current, SCHED_FIFO, 50 + thrprio);
++
++      while (!kthread_should_stop()) {
++              local_irq_disable();
++              if (!(desc->status & IRQ_SCHEDULED)) {
++                      set_current_state(TASK_INTERRUPTIBLE);
++resched:
++                      local_irq_enable();
++                      schedule();
++                      local_irq_disable();
++              }
++              __set_current_state(TASK_RUNNING);
++              /*
++               * If higher priority interrupt servers are ready to
++               * run, reschedule immediately. We need this for the
++               * GPIO demux IRQ handler to unmask the interrupt line
++               * _last_, after all GPIO IRQs have run.
++               */
++              if (per_cpu(pending_irqthread_mask, cpu) & ~(thrmask|(thrmask-1)))
++                      goto resched;
++              if (--per_cpu(pending_irq_count[thrprio], cpu) == 0)
++                      per_cpu(pending_irqthread_mask, cpu) &= ~thrmask;
++              desc->status &= ~IRQ_SCHEDULED;
++              desc->thr_handler(irq, &__raw_get_cpu_var(__ipipe_tick_regs));
++              local_irq_enable();
++      }
++      __set_current_state(TASK_RUNNING);
++      return 0;
++}
+-      BUG_ON(irqs_disabled());
++static void kick_irqd(unsigned irq, void *cookie)
++{
++      struct irq_desc *desc = irq_desc + irq;
++      int thrprio = desc->thr_prio;
++      int thrmask = 1 << thrprio;
++      int cpu = smp_processor_id();
++
++      if (!(desc->status & IRQ_SCHEDULED)) {
++              desc->status |= IRQ_SCHEDULED;
++              per_cpu(pending_irqthread_mask, cpu) |= thrmask;
++              ++per_cpu(pending_irq_count[thrprio], cpu);
++              wake_up_process(desc->thread);
++      }
++}
+-      local_irq_save_hw(flags);
++int ipipe_start_irq_thread(unsigned irq, struct irq_desc *desc)
++{
++      if (desc->thread || !create_irq_threads)
++              return 0;
+-      clear_thread_flag(TIF_IRQ_SYNC);
++      desc->thread = kthread_create(do_irqd, desc, "IRQ %d", irq);
++      if (desc->thread == NULL) {
++              printk(KERN_ERR "irqd: could not create IRQ thread %d!\n", irq);
++              return -ENOMEM;
++      }
+-      if (ipipe_root_cpudom_var(irqpend_himask) != 0)
+-              __ipipe_sync_pipeline(IPIPE_IRQMASK_ANY);
++      wake_up_process(desc->thread);
+-      local_irq_restore_hw(flags);
++      desc->thr_handler = ipipe_root_domain->irqs[irq].handler;
++      ipipe_root_domain->irqs[irq].handler = &kick_irqd;
++
++      return 0;
+ }
+-void ___ipipe_sync_pipeline(unsigned long syncmask)
++void __init ipipe_init_irq_threads(void)
+ {
+-      struct ipipe_domain *ipd = ipipe_current_domain;
++      unsigned irq;
++      struct irq_desc *desc;
+-      if (ipd == ipipe_root_domain) {
+-              if (test_bit(IPIPE_SYNCDEFER_FLAG, &ipipe_root_cpudom_var(status)))
+-                      return;
+-      }
++      create_irq_threads = 1;
+-      __ipipe_sync_stage(syncmask);
++      for (irq = 0; irq < NR_IRQS; irq++) {
++              desc = irq_desc + irq;
++              if (desc->action != NULL ||
++                      (desc->status & IRQ_NOREQUEST) != 0)
++                      ipipe_start_irq_thread(irq, desc);
++      }
+ }
+ EXPORT_SYMBOL(show_stack);
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/kernel/irqchip.c linux-2.6.29-rc3.owrt/arch/blackfin/kernel/irqchip.c
+--- linux-2.6.29.owrt/arch/blackfin/kernel/irqchip.c   2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/kernel/irqchip.c       2009-05-10 23:48:28.000000000 +0200
+@@ -35,7 +35,6 @@
+ #include <linux/interrupt.h>
+ #include <linux/irq.h>
+ #include <asm/trace.h>
+-#include <asm/pda.h>
+ static atomic_t irq_err_count;
+ static spinlock_t irq_controller_lock;
+@@ -92,13 +91,8 @@
+               seq_putc(p, '\n');
+  skip:
+               spin_unlock_irqrestore(&irq_desc[i].lock, flags);
+-      } else if (i == NR_IRQS) {
+-              seq_printf(p, "NMI: ");
+-              for_each_online_cpu(j)
+-                      seq_printf(p, "%10u ", cpu_pda[j].__nmi_count);
+-              seq_printf(p, "     CORE  Non Maskable Interrupt\n");
++      } else if (i == NR_IRQS)
+               seq_printf(p, "Err: %10u\n",  atomic_read(&irq_err_count));
+-      }
+       return 0;
+ }
+@@ -144,15 +138,11 @@
+ #endif
+       generic_handle_irq(irq);
+-#ifndef CONFIG_IPIPE
+-      /*
+-       * If we're the only interrupt running (ignoring IRQ15 which
+-       * is for syscalls), lower our priority to IRQ14 so that
+-       * softirqs run at that level.  If there's another,
+-       * lower-level interrupt, irq_exit will defer softirqs to
+-       * that. If the interrupt pipeline is enabled, we are already
+-       * running at IRQ14 priority, so we don't need this code.
+-       */
++#ifndef CONFIG_IPIPE  /* Useless and bugous over the I-pipe: IRQs are threaded. */
++      /* If we're the only interrupt running (ignoring IRQ15 which is for
++         syscalls), lower our priority to IRQ14 so that softirqs run at
++         that level.  If there's another, lower-level interrupt, irq_exit
++         will defer softirqs to that.  */
+       CSYNC();
+       pending = bfin_read_IPEND() & ~0x8000;
+       other_ints = pending & (pending - 1);
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/kernel/kgdb_test.c linux-2.6.29-rc3.owrt/arch/blackfin/kernel/kgdb_test.c
+--- linux-2.6.29.owrt/arch/blackfin/kernel/kgdb_test.c 2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/kernel/kgdb_test.c     2009-05-10 23:48:28.000000000 +0200
+@@ -20,7 +20,6 @@
+ static char cmdline[256];
+ static unsigned long len;
+-#ifndef CONFIG_SMP
+ static int num1 __attribute__((l1_data));
+ void kgdb_l1_test(void) __attribute__((l1_text));
+@@ -33,8 +32,6 @@
+       printk(KERN_ALERT "L1(after change) : data variable addr = 0x%p, data value is %d\n", &num1, num1);
+       return ;
+ }
+-#endif
+-
+ #if L2_LENGTH
+ static int num2 __attribute__((l2));
+@@ -62,12 +59,10 @@
+ static int test_proc_output(char *buf)
+ {
+       kgdb_test("hello world!", 12, 0x55, 0x10);
+-#ifndef CONFIG_SMP
+       kgdb_l1_test();
+-#endif
+-#if L2_LENGTH
++      #if L2_LENGTH
+       kgdb_l2_test();
+-#endif
++      #endif
+       return 0;
+ }
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/kernel/Makefile linux-2.6.29-rc3.owrt/arch/blackfin/kernel/Makefile
+--- linux-2.6.29.owrt/arch/blackfin/kernel/Makefile    2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/kernel/Makefile        2009-05-10 23:48:28.000000000 +0200
+@@ -21,9 +21,5 @@
+ obj-$(CONFIG_CPLB_INFO)              += cplbinfo.o
+ obj-$(CONFIG_MODULES)                += module.o
+ obj-$(CONFIG_KGDB)                   += kgdb.o
+-obj-$(CONFIG_KGDB_TESTS)             += kgdb_test.o
++obj-$(CONFIG_KGDB_TESTCASE)          += kgdb_test.o
+ obj-$(CONFIG_EARLY_PRINTK)           += early_printk.o
+-
+-# the kgdb test puts code into L2 and without linker
+-# relaxation, we need to force long calls to/from it
+-CFLAGS_kgdb_test.o := -mlong-calls -O0
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/kernel/ptrace.c linux-2.6.29-rc3.owrt/arch/blackfin/kernel/ptrace.c
+--- linux-2.6.29.owrt/arch/blackfin/kernel/ptrace.c    2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/kernel/ptrace.c        2009-05-10 23:48:28.000000000 +0200
+@@ -45,7 +45,6 @@
+ #include <asm/asm-offsets.h>
+ #include <asm/dma.h>
+ #include <asm/fixed_code.h>
+-#include <asm/cacheflush.h>
+ #include <asm/mem_map.h>
+ #define TEXT_OFFSET 0
+@@ -241,7 +240,7 @@
+                       } else if (addr >= FIXED_CODE_START
+                           && addr + sizeof(tmp) <= FIXED_CODE_END) {
+-                              copy_from_user_page(0, 0, 0, &tmp, (const void *)(addr), sizeof(tmp));
++                              memcpy(&tmp, (const void *)(addr), sizeof(tmp));
+                               copied = sizeof(tmp);
+                       } else
+@@ -321,7 +320,7 @@
+                       } else if (addr >= FIXED_CODE_START
+                           && addr + sizeof(data) <= FIXED_CODE_END) {
+-                              copy_to_user_page(0, 0, 0, (void *)(addr), &data, sizeof(data));
++                              memcpy((void *)(addr), &data, sizeof(data));
+                               copied = sizeof(data);
+                       } else
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/kernel/reboot.c linux-2.6.29-rc3.owrt/arch/blackfin/kernel/reboot.c
+--- linux-2.6.29.owrt/arch/blackfin/kernel/reboot.c    2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/kernel/reboot.c        2009-05-10 23:48:28.000000000 +0200
+@@ -20,8 +20,8 @@
+  * reset while the Core B bit (on dual core parts) is cleared by
+  * the core reset.
+  */
+-__attribute__ ((__l1_text__, __noreturn__))
+-static void bfin_reset(void)
++__attribute__((l1_text))
++static void _bfin_reset(void)
+ {
+       /* Wait for completion of "system" events such as cache line
+        * line fills so that we avoid infinite stalls later on as
+@@ -30,11 +30,7 @@
+        */
+       __builtin_bfin_ssync();
+-      /* The bootrom checks to see how it was reset and will
+-       * automatically perform a software reset for us when
+-       * it starts executing after the core reset.
+-       */
+-      if (ANOMALY_05000353 || ANOMALY_05000386) {
++      while (1) {
+               /* Initiate System software reset. */
+               bfin_write_SWRST(0x7);
+@@ -54,11 +50,6 @@
+               /* Clear System software reset */
+               bfin_write_SWRST(0);
+-              /* The BF526 ROM will crash during reset */
+-#if defined(__ADSPBF522__) || defined(__ADSPBF524__) || defined(__ADSPBF526__)
+-              bfin_read_SWRST();
+-#endif
+-
+               /* Wait for the SWRST write to complete.  Cannot rely on SSYNC
+                * though as the System state is all reset now.
+                */
+@@ -69,11 +60,22 @@
+                       : "a" (15 * 1)
+                       : "LC1", "LB1", "LT1"
+               );
+-      }
+-      while (1)
+               /* Issue core reset */
+               asm("raise 1");
++      }
++}
++
++static void bfin_reset(void)
++{
++      if (ANOMALY_05000353 || ANOMALY_05000386)
++              _bfin_reset();
++      else
++              /* the bootrom checks to see how it was reset and will
++               * automatically perform a software reset for us when
++               * it starts executing boot
++               */
++              asm("raise 1;");
+ }
+ __attribute__((weak))
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/kernel/setup.c linux-2.6.29-rc3.owrt/arch/blackfin/kernel/setup.c
+--- linux-2.6.29.owrt/arch/blackfin/kernel/setup.c     2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/kernel/setup.c 2009-05-10 23:48:28.000000000 +0200
+@@ -60,7 +60,7 @@
+ #define BFIN_MEMMAP_MAX               128 /* number of entries in bfin_memmap */
+ #define BFIN_MEMMAP_RAM               1
+ #define BFIN_MEMMAP_RESERVED  2
+-static struct bfin_memmap {
++struct bfin_memmap {
+       int nr_map;
+       struct bfin_memmap_entry {
+               unsigned long long addr; /* start of memory segment */
+@@ -824,15 +824,7 @@
+       flash_probe();
+ #endif
+-      printk(KERN_INFO "Boot Mode: %i\n", bfin_read_SYSCR() & 0xF);
+-
+-      /* Newer parts mirror SWRST bits in SYSCR */
+-#if defined(CONFIG_BF53x) || defined(CONFIG_BF561) || \
+-    defined(CONFIG_BF538) || defined(CONFIG_BF539)
+       _bfin_swrst = bfin_read_SWRST();
+-#else
+-      _bfin_swrst = bfin_read_SYSCR();
+-#endif
+ #ifdef CONFIG_DEBUG_DOUBLEFAULT_PRINT
+       bfin_write_SWRST(_bfin_swrst & ~DOUBLE_FAULT);
+@@ -861,7 +853,7 @@
+       else if (_bfin_swrst & RESET_SOFTWARE)
+               printk(KERN_NOTICE "Reset caused by Software reset\n");
+-      printk(KERN_INFO "Blackfin support (C) 2004-2009 Analog Devices, Inc.\n");
++      printk(KERN_INFO "Blackfin support (C) 2004-2008 Analog Devices, Inc.\n");
+       if (bfin_compiled_revid() == 0xffff)
+               printk(KERN_INFO "Compiled for ADSP-%s Rev any\n", CPU);
+       else if (bfin_compiled_revid() == -1)
+@@ -889,10 +881,6 @@
+                              CPU, bfin_revid());
+       }
+-      /* We can't run on BF548-0.1 due to ANOMALY 05000448 */
+-      if (bfin_cpuid() == 0x27de && bfin_revid() == 1)
+-              panic("You can't run on this processor due to 05000448\n");
+-
+       printk(KERN_INFO "Blackfin Linux support by http://blackfin.uclinux.org/\n");
+       printk(KERN_INFO "Processor Speed: %lu MHz core clock and %lu MHz System Clock\n",
+@@ -1145,12 +1133,12 @@
+               icache_size = 0;
+       seq_printf(m, "cache size\t: %d KB(L1 icache) "
+-              "%d KB(L1 dcache%s) %d KB(L2 cache)\n",
++              "%d KB(L1 dcache-%s) %d KB(L2 cache)\n",
+               icache_size, dcache_size,
+ #if defined CONFIG_BFIN_WB
+-              "-wb"
++              "wb"
+ #elif defined CONFIG_BFIN_WT
+-              "-wt"
++              "wt"
+ #endif
+               "", 0);
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/kernel/time.c linux-2.6.29-rc3.owrt/arch/blackfin/kernel/time.c
+--- linux-2.6.29.owrt/arch/blackfin/kernel/time.c      2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/kernel/time.c  2009-05-10 23:48:28.000000000 +0200
+@@ -134,10 +134,7 @@
+       write_seqlock(&xtime_lock);
+ #if defined(CONFIG_TICK_SOURCE_SYSTMR0) && !defined(CONFIG_IPIPE)
+-      /*
+-       * TIMIL0 is latched in __ipipe_grab_irq() when the I-Pipe is
+-       * enabled.
+-       */
++/* FIXME: Here TIMIL0 is not set when IPIPE enabled, why? */
+       if (get_gptimer_status(0) & TIMER_STATUS_TIMIL0) {
+ #endif
+               do_timer(1);
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/kernel/traps.c linux-2.6.29-rc3.owrt/arch/blackfin/kernel/traps.c
+--- linux-2.6.29.owrt/arch/blackfin/kernel/traps.c     2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/kernel/traps.c 2009-05-10 23:48:28.000000000 +0200
+@@ -673,14 +673,6 @@
+                       verbose_printk("RTI");
+               else if (opcode == 0x0012)
+                       verbose_printk("RTX");
+-              else if (opcode == 0x0013)
+-                      verbose_printk("RTN");
+-              else if (opcode == 0x0014)
+-                      verbose_printk("RTE");
+-              else if (opcode == 0x0025)
+-                      verbose_printk("EMUEXCPT");
+-              else if (opcode == 0x0040 && opcode <= 0x0047)
+-                      verbose_printk("STI R%i", opcode & 7);
+               else if (opcode >= 0x0050 && opcode <= 0x0057)
+                       verbose_printk("JUMP (P%i)", opcode & 7);
+               else if (opcode >= 0x0060 && opcode <= 0x0067)
+@@ -689,10 +681,6 @@
+                       verbose_printk("CALL (PC+P%i)", opcode & 7);
+               else if (opcode >= 0x0080 && opcode <= 0x0087)
+                       verbose_printk("JUMP (PC+P%i)", opcode & 7);
+-              else if (opcode >= 0x0090 && opcode <= 0x009F)
+-                      verbose_printk("RAISE 0x%x", opcode & 0xF);
+-              else if (opcode >= 0x00A0 && opcode <= 0x00AF)
+-                      verbose_printk("EXCPT 0x%x", opcode & 0xF);
+               else if ((opcode >= 0x1000 && opcode <= 0x13FF) || (opcode >= 0x1800 && opcode <= 0x1BFF))
+                       verbose_printk("IF !CC JUMP");
+               else if ((opcode >= 0x1400 && opcode <= 0x17ff) || (opcode >= 0x1c00 && opcode <= 0x1fff))
+@@ -832,8 +820,11 @@
+       decode_address(buf, (unsigned int)stack);
+       printk(KERN_NOTICE " SP: [0x%p] %s\n", stack, buf);
++      addr = (unsigned int *)((unsigned int)stack & ~0x3F);
++
+       /* First thing is to look for a frame pointer */
+-      for (addr = (unsigned int *)((unsigned int)stack & ~0xF); addr < endstack; addr++) {
++      for (addr = (unsigned int *)((unsigned int)stack & ~0xF), i = 0;
++              addr < endstack; addr++, i++) {
+               if (*addr & 0x1)
+                       continue;
+               ins_addr = (unsigned short *)*addr;
+@@ -843,8 +834,7 @@
+               if (fp) {
+                       /* Let's check to see if it is a frame pointer */
+-                      while (fp >= (addr - 1) && fp < endstack
+-                             && fp && ((unsigned int) fp & 0x3) == 0)
++                      while (fp >= (addr - 1) && fp < endstack && fp)
+                               fp = (unsigned int *)*fp;
+                       if (fp == 0 || fp == endstack) {
+                               fp = addr - 1;
+@@ -1062,9 +1052,8 @@
+       char buf [150];
+       struct irqaction *action;
+       unsigned int i;
+-      unsigned long flags = 0;
++      unsigned long flags;
+       unsigned int cpu = smp_processor_id();
+-      unsigned char in_atomic = (bfin_read_IPEND() & 0x10) || in_atomic();
+       verbose_printk(KERN_NOTICE "\n" KERN_NOTICE "SEQUENCER STATUS:\t\t%s\n", print_tainted());
+       verbose_printk(KERN_NOTICE " SEQSTAT: %08lx  IPEND: %04lx  SYSCFG: %04lx\n",
+@@ -1084,22 +1073,17 @@
+       }
+       verbose_printk(KERN_NOTICE "  EXCAUSE   : 0x%lx\n",
+               fp->seqstat & SEQSTAT_EXCAUSE);
+-      for (i = 2; i <= 15 ; i++) {
++      for (i = 6; i <= 15 ; i++) {
+               if (fp->ipend & (1 << i)) {
+-                      if (i != 4) {
+-                              decode_address(buf, bfin_read32(EVT0 + 4*i));
+-                              verbose_printk(KERN_NOTICE "  physical IVG%i asserted : %s\n", i, buf);
+-                      } else
+-                              verbose_printk(KERN_NOTICE "  interrupts disabled\n");
++                      decode_address(buf, bfin_read32(EVT0 + 4*i));
++                      verbose_printk(KERN_NOTICE "  physical IVG%i asserted : %s\n", i, buf);
+               }
+       }
+       /* if no interrupts are going off, don't print this out */
+       if (fp->ipend & ~0x3F) {
+               for (i = 0; i < (NR_IRQS - 1); i++) {
+-                      if (!in_atomic)
+-                              spin_lock_irqsave(&irq_desc[i].lock, flags);
+-
++                      spin_lock_irqsave(&irq_desc[i].lock, flags);
+                       action = irq_desc[i].action;
+                       if (!action)
+                               goto unlock;
+@@ -1112,8 +1096,7 @@
+                       }
+                       verbose_printk("\n");
+ unlock:
+-                      if (!in_atomic)
+-                              spin_unlock_irqrestore(&irq_desc[i].lock, flags);
++                      spin_unlock_irqrestore(&irq_desc[i].lock, flags);
+               }
+       }
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/mach-bf518/boards/ezbrd.c linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf518/boards/ezbrd.c
+--- linux-2.6.29.owrt/arch/blackfin/mach-bf518/boards/ezbrd.c  2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf518/boards/ezbrd.c      2009-05-10 23:48:28.000000000 +0200
+@@ -46,7 +46,6 @@
+ #include <asm/dpmc.h>
+ #include <asm/bfin_sdh.h>
+ #include <linux/spi/ad7877.h>
+-#include <net/dsa.h>
+ /*
+  * Name the Board for the /proc/cpuinfo
+@@ -105,33 +104,10 @@
+ #endif
+ #if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE)
+-static struct platform_device bfin_mii_bus = {
+-      .name = "bfin_mii_bus",
+-};
+-
+ static struct platform_device bfin_mac_device = {
+       .name = "bfin_mac",
+-      .dev.platform_data = &bfin_mii_bus,
+-};
+-
+-#if defined(CONFIG_NET_DSA_KSZ8893M) || defined(CONFIG_NET_DSA_KSZ8893M_MODULE)
+-static struct dsa_platform_data ksz8893m_switch_data = {
+-      .mii_bus = &bfin_mii_bus.dev,
+-      .netdev = &bfin_mac_device.dev,
+-      .port_names[0]  = NULL,
+-      .port_names[1]  = "eth%d",
+-      .port_names[2]  = "eth%d",
+-      .port_names[3]  = "cpu",
+-};
+-
+-static struct platform_device ksz8893m_switch_device = {
+-      .name           = "dsa",
+-      .id             = 0,
+-      .num_resources  = 0,
+-      .dev.platform_data = &ksz8893m_switch_data,
+ };
+ #endif
+-#endif
+ #if defined(CONFIG_MTD_M25P80) \
+       || defined(CONFIG_MTD_M25P80_MODULE)
+@@ -171,20 +147,9 @@
+ };
+ #endif
+-#if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE)
+-#if defined(CONFIG_NET_DSA_KSZ8893M) \
+-      || defined(CONFIG_NET_DSA_KSZ8893M_MODULE)
+-/* SPI SWITCH CHIP */
+-static struct bfin5xx_spi_chip spi_switch_info = {
+-      .enable_dma = 0,
+-      .bits_per_word = 8,
+-};
+-#endif
+-#endif
+-
+-#if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE)
+-static struct bfin5xx_spi_chip mmc_spi_chip_info = {
+-      .enable_dma = 0,
++#if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE)
++static struct bfin5xx_spi_chip spi_mmc_chip_info = {
++      .enable_dma = 1,
+       .bits_per_word = 8,
+ };
+ #endif
+@@ -261,28 +226,23 @@
+       },
+ #endif
+-#if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE)
+-#if defined(CONFIG_NET_DSA_KSZ8893M) \
+-      || defined(CONFIG_NET_DSA_KSZ8893M_MODULE)
++#if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE)
+       {
+-              .modalias = "ksz8893m",
+-              .max_speed_hz = 5000000,
++              .modalias = "spi_mmc_dummy",
++              .max_speed_hz = 25000000,     /* max spi clock (SCK) speed in HZ */
+               .bus_num = 0,
+-              .chip_select = 1,
++              .chip_select = 0,
+               .platform_data = NULL,
+-              .controller_data = &spi_switch_info,
++              .controller_data = &spi_mmc_chip_info,
+               .mode = SPI_MODE_3,
+       },
+-#endif
+-#endif
+-
+-#if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE)
+       {
+-              .modalias = "mmc_spi",
++              .modalias = "spi_mmc",
+               .max_speed_hz = 25000000,     /* max spi clock (SCK) speed in HZ */
+               .bus_num = 0,
+-              .chip_select = 5,
+-              .controller_data = &mmc_spi_chip_info,
++              .chip_select = CONFIG_SPI_MMC_CS_CHAN,
++              .platform_data = NULL,
++              .controller_data = &spi_mmc_chip_info,
+               .mode = SPI_MODE_3,
+       },
+ #endif
+@@ -513,6 +473,7 @@
+ };
+ #endif
++#ifdef CONFIG_I2C_BOARDINFO
+ static struct i2c_board_info __initdata bfin_i2c_board_info[] = {
+ #if defined(CONFIG_TWI_LCD) || defined(CONFIG_TWI_LCD_MODULE)
+       {
+@@ -526,6 +487,7 @@
+       },
+ #endif
+ };
++#endif
+ #if defined(CONFIG_SERIAL_BFIN_SPORT) || defined(CONFIG_SERIAL_BFIN_SPORT_MODULE)
+ static struct platform_device bfin_sport0_uart_device = {
+@@ -622,11 +584,7 @@
+ #endif
+ #if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE)
+-      &bfin_mii_bus,
+       &bfin_mac_device,
+-#if defined(CONFIG_NET_DSA_KSZ8893M) || defined(CONFIG_NET_DSA_KSZ8893M_MODULE)
+-      &ksz8893m_switch_device,
+-#endif
+ #endif
+ #if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE)
+@@ -674,8 +632,12 @@
+ static int __init ezbrd_init(void)
+ {
+       printk(KERN_INFO "%s(): registering device resources\n", __func__);
++
++#ifdef CONFIG_I2C_BOARDINFO
+       i2c_register_board_info(0, bfin_i2c_board_info,
+                               ARRAY_SIZE(bfin_i2c_board_info));
++#endif
++
+       platform_add_devices(stamp_devices, ARRAY_SIZE(stamp_devices));
+       spi_register_board_info(bfin_spi_board_info, ARRAY_SIZE(bfin_spi_board_info));
+       return 0;
+@@ -687,7 +649,7 @@
+ {
+       /* workaround reboot hang when booting from SPI */
+       if ((bfin_read_SYSCR() & 0x7) == 0x3)
+-              bfin_reset_boot_spi_cs(P_DEFAULT_BOOT_SPI_CS);
++              bfin_gpio_reset_spi0_ssel1();
+ }
+ void bfin_get_ether_addr(char *addr)
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/mach-bf518/include/mach/anomaly.h linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf518/include/mach/anomaly.h
+--- linux-2.6.29.owrt/arch/blackfin/mach-bf518/include/mach/anomaly.h  2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf518/include/mach/anomaly.h      2009-05-10 23:48:28.000000000 +0200
+@@ -2,12 +2,12 @@
+  * File: include/asm-blackfin/mach-bf518/anomaly.h
+  * Bugs: Enter bugs at http://blackfin.uclinux.org/
+  *
+- * Copyright (C) 2004-2009 Analog Devices Inc.
++ * Copyright (C) 2004-2008 Analog Devices Inc.
+  * Licensed under the GPL-2 or later.
+  */
+ /* This file shoule be up to date with:
+- *  - Revision B, 02/03/2009; ADSP-BF512/BF514/BF516/BF518 Blackfin Processor Anomaly List
++ *  - ????
+  */
+ #ifndef _MACH_ANOMALY_H_
+@@ -19,8 +19,6 @@
+ #define ANOMALY_05000122 (1)
+ /* False Hardware Error from an Access in the Shadow of a Conditional Branch */
+ #define ANOMALY_05000245 (1)
+-/* Incorrect Timer Pulse Width in Single-Shot PWM_OUT Mode with External Clock */
+-#define ANOMALY_05000254 (1)
+ /* Sensitivity To Noise with Slow Input Edge Rates on External SPORT TX and RX Clocks */
+ #define ANOMALY_05000265 (1)
+ /* False Hardware Errors Caused by Fetches at the Boundary of Reserved Memory */
+@@ -55,12 +53,6 @@
+ #define ANOMALY_05000443 (1)
+ /* Incorrect L1 Instruction Bank B Memory Map Location */
+ #define ANOMALY_05000444 (1)
+-/* Incorrect Default Hysteresis Setting for RESET, NMI, and BMODE Signals */
+-#define ANOMALY_05000452 (1)
+-/* PWM_TRIPB Signal Not Available on PG10 */
+-#define ANOMALY_05000453 (1)
+-/* PPI_FS3 is Driven One Half Cycle Later Than PPI Data */
+-#define ANOMALY_05000455 (1)
+ /* Anomalies that don't exist on this proc */
+ #define ANOMALY_05000125 (0)
+@@ -73,20 +65,15 @@
+ #define ANOMALY_05000263 (0)
+ #define ANOMALY_05000266 (0)
+ #define ANOMALY_05000273 (0)
+-#define ANOMALY_05000278 (0)
+ #define ANOMALY_05000285 (0)
+-#define ANOMALY_05000305 (0)
+ #define ANOMALY_05000307 (0)
+ #define ANOMALY_05000311 (0)
+ #define ANOMALY_05000312 (0)
+ #define ANOMALY_05000323 (0)
+ #define ANOMALY_05000353 (0)
+ #define ANOMALY_05000363 (0)
+-#define ANOMALY_05000380 (0)
+ #define ANOMALY_05000386 (0)
+ #define ANOMALY_05000412 (0)
+ #define ANOMALY_05000432 (0)
+-#define ANOMALY_05000447 (0)
+-#define ANOMALY_05000448 (0)
+ #endif
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/mach-bf518/include/mach/bfin_serial_5xx.h linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf518/include/mach/bfin_serial_5xx.h
+--- linux-2.6.29.owrt/arch/blackfin/mach-bf518/include/mach/bfin_serial_5xx.h  2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf518/include/mach/bfin_serial_5xx.h      2009-05-10 23:48:28.000000000 +0200
+@@ -144,7 +144,7 @@
+        CH_UART0_TX,
+        CH_UART0_RX,
+ #endif
+-#ifdef CONFIG_SERIAL_BFIN_CTSRTS
++#ifdef CONFIG_BFIN_UART0_CTSRTS
+        CONFIG_UART0_CTS_PIN,
+        CONFIG_UART0_RTS_PIN,
+ #endif
+@@ -158,7 +158,7 @@
+        CH_UART1_TX,
+        CH_UART1_RX,
+ #endif
+-#ifdef CONFIG_SERIAL_BFIN_CTSRTS
++#ifdef CONFIG_BFIN_UART1_CTSRTS
+        CONFIG_UART1_CTS_PIN,
+        CONFIG_UART1_RTS_PIN,
+ #endif
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/mach-bf518/include/mach/portmux.h linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf518/include/mach/portmux.h
+--- linux-2.6.29.owrt/arch/blackfin/mach-bf518/include/mach/portmux.h  2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf518/include/mach/portmux.h      2009-05-10 23:48:28.000000000 +0200
+@@ -103,8 +103,6 @@
+ #define P_SPI1_SSEL4  (P_DEFINED | P_IDENT(GPIO_PF8) | P_FUNCT(2))
+ #define P_SPI1_SSEL5  (P_DEFINED | P_IDENT(GPIO_PG11) | P_FUNCT(2))
+-#define P_DEFAULT_BOOT_SPI_CS P_SPI0_SSEL2
+-
+ /* SPORT Port Mux */
+ #define P_SPORT0_DRPRI        (P_DEFINED | P_IDENT(GPIO_PG3) | P_FUNCT(0))
+ #define P_SPORT0_RSCLK        (P_DEFINED | P_IDENT(GPIO_PG4) | P_FUNCT(0))
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/mach-bf527/boards/cm_bf527.c linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf527/boards/cm_bf527.c
+--- linux-2.6.29.owrt/arch/blackfin/mach-bf527/boards/cm_bf527.c       2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf527/boards/cm_bf527.c   2009-05-10 23:48:28.000000000 +0200
+@@ -403,13 +403,8 @@
+ #endif
+ #if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE)
+-static struct platform_device bfin_mii_bus = {
+-      .name = "bfin_mii_bus",
+-};
+-
+ static struct platform_device bfin_mac_device = {
+       .name = "bfin_mac",
+-      .dev.platform_data = &bfin_mii_bus,
+ };
+ #endif
+@@ -487,9 +482,9 @@
+ };
+ #endif
+-#if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE)
+-static struct bfin5xx_spi_chip  mmc_spi_chip_info = {
+-      .enable_dma = 0,
++#if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE)
++static struct bfin5xx_spi_chip spi_mmc_chip_info = {
++      .enable_dma = 1,
+       .bits_per_word = 8,
+ };
+ #endif
+@@ -585,13 +580,23 @@
+               .controller_data = &ad9960_spi_chip_info,
+       },
+ #endif
+-#if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE)
++#if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE)
+       {
+-              .modalias = "mmc_spi",
+-              .max_speed_hz = 20000000,     /* max spi clock (SCK) speed in HZ */
++              .modalias = "spi_mmc_dummy",
++              .max_speed_hz = 25000000,     /* max spi clock (SCK) speed in HZ */
+               .bus_num = 0,
+-              .chip_select = 5,
+-              .controller_data = &mmc_spi_chip_info,
++              .chip_select = 0,
++              .platform_data = NULL,
++              .controller_data = &spi_mmc_chip_info,
++              .mode = SPI_MODE_3,
++      },
++      {
++              .modalias = "spi_mmc",
++              .max_speed_hz = 25000000,     /* max spi clock (SCK) speed in HZ */
++              .bus_num = 0,
++              .chip_select = CONFIG_SPI_MMC_CS_CHAN,
++              .platform_data = NULL,
++              .controller_data = &spi_mmc_chip_info,
+               .mode = SPI_MODE_3,
+       },
+ #endif
+@@ -788,6 +793,7 @@
+ };
+ #endif
++#ifdef CONFIG_I2C_BOARDINFO
+ static struct i2c_board_info __initdata bfin_i2c_board_info[] = {
+ #if defined(CONFIG_TWI_LCD) || defined(CONFIG_TWI_LCD_MODULE)
+       {
+@@ -803,6 +809,7 @@
+       },
+ #endif
+ };
++#endif
+ #if defined(CONFIG_SERIAL_BFIN_SPORT) || defined(CONFIG_SERIAL_BFIN_SPORT_MODULE)
+ static struct platform_device bfin_sport0_uart_device = {
+@@ -913,7 +920,6 @@
+ #endif
+ #if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE)
+-      &bfin_mii_bus,
+       &bfin_mac_device,
+ #endif
+@@ -962,23 +968,27 @@
+       &bfin_gpios_device,
+ };
+-static int __init cm_init(void)
++static int __init stamp_init(void)
+ {
+       printk(KERN_INFO "%s(): registering device resources\n", __func__);
++
++#ifdef CONFIG_I2C_BOARDINFO
+       i2c_register_board_info(0, bfin_i2c_board_info,
+                               ARRAY_SIZE(bfin_i2c_board_info));
++#endif
++
+       platform_add_devices(stamp_devices, ARRAY_SIZE(stamp_devices));
+       spi_register_board_info(bfin_spi_board_info, ARRAY_SIZE(bfin_spi_board_info));
+       return 0;
+ }
+-arch_initcall(cm_init);
++arch_initcall(stamp_init);
+ void native_machine_restart(char *cmd)
+ {
+       /* workaround reboot hang when booting from SPI */
+       if ((bfin_read_SYSCR() & 0x7) == 0x3)
+-              bfin_reset_boot_spi_cs(P_DEFAULT_BOOT_SPI_CS);
++              bfin_gpio_reset_spi0_ssel1();
+ }
+ void bfin_get_ether_addr(char *addr)
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/mach-bf527/boards/ezbrd.c linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf527/boards/ezbrd.c
+--- linux-2.6.29.owrt/arch/blackfin/mach-bf527/boards/ezbrd.c  2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf527/boards/ezbrd.c      2009-05-10 23:48:28.000000000 +0200
+@@ -208,13 +208,8 @@
+ #if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE)
+-static struct platform_device bfin_mii_bus = {
+-      .name = "bfin_mii_bus",
+-};
+-
+ static struct platform_device bfin_mac_device = {
+       .name = "bfin_mac",
+-      .dev.platform_data = &bfin_mii_bus,
+ };
+ #endif
+@@ -256,9 +251,9 @@
+ };
+ #endif
+-#if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE)
+-static struct bfin5xx_spi_chip mmc_spi_chip_info = {
+-      .enable_dma = 0,
++#if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE)
++static struct bfin5xx_spi_chip spi_mmc_chip_info = {
++      .enable_dma = 1,
+       .bits_per_word = 8,
+ };
+ #endif
+@@ -366,13 +361,23 @@
+       },
+ #endif
+-#if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE)
++#if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE)
+       {
+-              .modalias = "mmc_spi",
++              .modalias = "spi_mmc_dummy",
+               .max_speed_hz = 25000000,     /* max spi clock (SCK) speed in HZ */
+               .bus_num = 0,
+-              .chip_select = 5,
+-              .controller_data = &mmc_spi_chip_info,
++              .chip_select = 0,
++              .platform_data = NULL,
++              .controller_data = &spi_mmc_chip_info,
++              .mode = SPI_MODE_3,
++      },
++      {
++              .modalias = "spi_mmc",
++              .max_speed_hz = 25000000,     /* max spi clock (SCK) speed in HZ */
++              .bus_num = 0,
++              .chip_select = CONFIG_SPI_MMC_CS_CHAN,
++              .platform_data = NULL,
++              .controller_data = &spi_mmc_chip_info,
+               .mode = SPI_MODE_3,
+       },
+ #endif
+@@ -585,6 +590,7 @@
+ };
+ #endif
++#ifdef CONFIG_I2C_BOARDINFO
+ static struct i2c_board_info __initdata bfin_i2c_board_info[] = {
+ #if defined(CONFIG_TWI_LCD) || defined(CONFIG_TWI_LCD_MODULE)
+       {
+@@ -598,6 +604,7 @@
+       },
+ #endif
+ };
++#endif
+ #if defined(CONFIG_SERIAL_BFIN_SPORT) || defined(CONFIG_SERIAL_BFIN_SPORT_MODULE)
+ static struct platform_device bfin_sport0_uart_device = {
+@@ -713,7 +720,6 @@
+ #endif
+ #if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE)
+-      &bfin_mii_bus,
+       &bfin_mac_device,
+ #endif
+@@ -758,23 +764,27 @@
+       &bfin_gpios_device,
+ };
+-static int __init ezbrd_init(void)
++static int __init stamp_init(void)
+ {
+       printk(KERN_INFO "%s(): registering device resources\n", __func__);
++
++#ifdef CONFIG_I2C_BOARDINFO
+       i2c_register_board_info(0, bfin_i2c_board_info,
+                               ARRAY_SIZE(bfin_i2c_board_info));
++#endif
++
+       platform_add_devices(stamp_devices, ARRAY_SIZE(stamp_devices));
+       spi_register_board_info(bfin_spi_board_info, ARRAY_SIZE(bfin_spi_board_info));
+       return 0;
+ }
+-arch_initcall(ezbrd_init);
++arch_initcall(stamp_init);
+ void native_machine_restart(char *cmd)
+ {
+       /* workaround reboot hang when booting from SPI */
+       if ((bfin_read_SYSCR() & 0x7) == 0x3)
+-              bfin_reset_boot_spi_cs(P_DEFAULT_BOOT_SPI_CS);
++              bfin_gpio_reset_spi0_ssel1();
+ }
+ void bfin_get_ether_addr(char *addr)
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/mach-bf527/boards/ezkit.c linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf527/boards/ezkit.c
+--- linux-2.6.29.owrt/arch/blackfin/mach-bf527/boards/ezkit.c  2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf527/boards/ezkit.c      2009-05-10 23:48:28.000000000 +0200
+@@ -425,13 +425,8 @@
+ #endif
+ #if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE)
+-static struct platform_device bfin_mii_bus = {
+-      .name = "bfin_mii_bus",
+-};
+-
+ static struct platform_device bfin_mac_device = {
+       .name = "bfin_mac",
+-      .dev.platform_data = &bfin_mii_bus,
+ };
+ #endif
+@@ -835,6 +830,7 @@
+ };
+ #endif
++#ifdef CONFIG_I2C_BOARDINFO
+ static struct i2c_board_info __initdata bfin_i2c_board_info[] = {
+ #if defined(CONFIG_TWI_LCD) || defined(CONFIG_TWI_LCD_MODULE)
+       {
+@@ -848,6 +844,7 @@
+       },
+ #endif
+ };
++#endif
+ #if defined(CONFIG_SERIAL_BFIN_SPORT) || defined(CONFIG_SERIAL_BFIN_SPORT_MODULE)
+ static struct platform_device bfin_sport0_uart_device = {
+@@ -991,7 +988,6 @@
+ #endif
+ #if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE)
+-      &bfin_mii_bus,
+       &bfin_mac_device,
+ #endif
+@@ -1052,23 +1048,27 @@
+       &bfin_gpios_device,
+ };
+-static int __init ezkit_init(void)
++static int __init stamp_init(void)
+ {
+       printk(KERN_INFO "%s(): registering device resources\n", __func__);
++
++#ifdef CONFIG_I2C_BOARDINFO
+       i2c_register_board_info(0, bfin_i2c_board_info,
+                               ARRAY_SIZE(bfin_i2c_board_info));
++#endif
++
+       platform_add_devices(stamp_devices, ARRAY_SIZE(stamp_devices));
+       spi_register_board_info(bfin_spi_board_info, ARRAY_SIZE(bfin_spi_board_info));
+       return 0;
+ }
+-arch_initcall(ezkit_init);
++arch_initcall(stamp_init);
+ void native_machine_restart(char *cmd)
+ {
+       /* workaround reboot hang when booting from SPI */
+       if ((bfin_read_SYSCR() & 0x7) == 0x3)
+-              bfin_reset_boot_spi_cs(P_DEFAULT_BOOT_SPI_CS);
++              bfin_gpio_reset_spi0_ssel1();
+ }
+ void bfin_get_ether_addr(char *addr)
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/mach-bf527/include/mach/anomaly.h linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf527/include/mach/anomaly.h
+--- linux-2.6.29.owrt/arch/blackfin/mach-bf527/include/mach/anomaly.h  2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf527/include/mach/anomaly.h      2009-05-10 23:48:28.000000000 +0200
+@@ -2,7 +2,7 @@
+  * File: include/asm-blackfin/mach-bf527/anomaly.h
+  * Bugs: Enter bugs at http://blackfin.uclinux.org/
+  *
+- * Copyright (C) 2004-2009 Analog Devices Inc.
++ * Copyright (C) 2004-2008 Analog Devices Inc.
+  * Licensed under the GPL-2 or later.
+  */
+@@ -167,16 +167,12 @@
+ #define ANOMALY_05000263 (0)
+ #define ANOMALY_05000266 (0)
+ #define ANOMALY_05000273 (0)
+-#define ANOMALY_05000278 (0)
+ #define ANOMALY_05000285 (0)
+-#define ANOMALY_05000305 (0)
+ #define ANOMALY_05000307 (0)
+ #define ANOMALY_05000311 (0)
+ #define ANOMALY_05000312 (0)
+ #define ANOMALY_05000323 (0)
+ #define ANOMALY_05000363 (0)
+ #define ANOMALY_05000412 (0)
+-#define ANOMALY_05000447 (0)
+-#define ANOMALY_05000448 (0)
+ #endif
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/mach-bf527/include/mach/bfin_serial_5xx.h linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf527/include/mach/bfin_serial_5xx.h
+--- linux-2.6.29.owrt/arch/blackfin/mach-bf527/include/mach/bfin_serial_5xx.h  2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf527/include/mach/bfin_serial_5xx.h      2009-05-10 23:48:28.000000000 +0200
+@@ -144,7 +144,7 @@
+        CH_UART0_TX,
+        CH_UART0_RX,
+ #endif
+-#ifdef CONFIG_SERIAL_BFIN_CTSRTS
++#ifdef CONFIG_BFIN_UART0_CTSRTS
+        CONFIG_UART0_CTS_PIN,
+        CONFIG_UART0_RTS_PIN,
+ #endif
+@@ -158,7 +158,7 @@
+        CH_UART1_TX,
+        CH_UART1_RX,
+ #endif
+-#ifdef CONFIG_SERIAL_BFIN_CTSRTS
++#ifdef CONFIG_BFIN_UART1_CTSRTS
+        CONFIG_UART1_CTS_PIN,
+        CONFIG_UART1_RTS_PIN,
+ #endif
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/mach-bf527/include/mach/portmux.h linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf527/include/mach/portmux.h
+--- linux-2.6.29.owrt/arch/blackfin/mach-bf527/include/mach/portmux.h  2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf527/include/mach/portmux.h      2009-05-10 23:48:28.000000000 +0200
+@@ -73,8 +73,6 @@
+ #define P_HWAIT               (P_DONTCARE)
+-#define P_DEFAULT_BOOT_SPI_CS P_SPI0_SSEL1
+-
+ #define P_SPI0_SS     (P_DEFINED | P_IDENT(GPIO_PG1) | P_FUNCT(0))
+ #define P_SPI0_SSEL1  (P_DEFINED | P_IDENT(GPIO_PG1) | P_FUNCT(2))
+ #define P_SPI0_SCK    (P_DEFINED | P_IDENT(GPIO_PG2) | P_FUNCT(2))
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/mach-bf533/boards/blackstamp.c linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf533/boards/blackstamp.c
+--- linux-2.6.29.owrt/arch/blackfin/mach-bf533/boards/blackstamp.c     2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf533/boards/blackstamp.c 2009-05-10 23:48:28.000000000 +0200
+@@ -101,9 +101,9 @@
+ };
+ #endif
+-#if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE)
+-static struct bfin5xx_spi_chip mmc_spi_chip_info = {
+-      .enable_dma = 0,
++#if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE)
++static struct bfin5xx_spi_chip spi_mmc_chip_info = {
++      .enable_dma = 1,
+       .bits_per_word = 8,
+ };
+ #endif
+@@ -129,13 +129,23 @@
+       },
+ #endif
+-#if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE)
++#if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE)
++      {
++              .modalias = "spi_mmc_dummy",
++              .max_speed_hz = 20000000,     /* max spi clock (SCK) speed in HZ */
++              .bus_num = 0,
++              .chip_select = 0,
++              .platform_data = NULL,
++              .controller_data = &spi_mmc_chip_info,
++              .mode = SPI_MODE_3,
++      },
+       {
+-              .modalias = "mmc_spi",
++              .modalias = "spi_mmc",
+               .max_speed_hz = 20000000,     /* max spi clock (SCK) speed in HZ */
+               .bus_num = 0,
+-              .chip_select = 5,
+-              .controller_data = &mmc_spi_chip_info,
++              .chip_select = CONFIG_SPI_MMC_CS_CHAN,
++              .platform_data = NULL,
++              .controller_data = &spi_mmc_chip_info,
+               .mode = SPI_MODE_3,
+       },
+ #endif
+@@ -299,8 +309,10 @@
+ };
+ #endif
++#ifdef CONFIG_I2C_BOARDINFO
+ static struct i2c_board_info __initdata bfin_i2c_board_info[] = {
+ };
++#endif
+ static const unsigned int cclk_vlev_datasheet[] =
+ {
+@@ -378,8 +390,10 @@
+       printk(KERN_INFO "%s(): registering device resources\n", __func__);
++#ifdef CONFIG_I2C_BOARDINFO
+       i2c_register_board_info(0, bfin_i2c_board_info,
+                               ARRAY_SIZE(bfin_i2c_board_info));
++#endif
+       ret = platform_add_devices(stamp_devices, ARRAY_SIZE(stamp_devices));
+       if (ret < 0)
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/mach-bf533/boards/cm_bf533.c linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf533/boards/cm_bf533.c
+--- linux-2.6.29.owrt/arch/blackfin/mach-bf533/boards/cm_bf533.c       2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf533/boards/cm_bf533.c   2009-05-10 23:48:28.000000000 +0200
+@@ -96,9 +96,9 @@
+ };
+ #endif
+-#if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE)
+-static struct bfin5xx_spi_chip mmc_spi_chip_info = {
+-      .enable_dma = 0,
++#if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE)
++static struct bfin5xx_spi_chip spi_mmc_chip_info = {
++      .enable_dma = 1,
+       .bits_per_word = 8,
+ };
+ #endif
+@@ -138,13 +138,23 @@
+       },
+ #endif
+-#if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE)
++#if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE)
+       {
+-              .modalias = "mmc_spi",
++              .modalias = "spi_mmc_dummy",
+               .max_speed_hz = 25000000,     /* max spi clock (SCK) speed in HZ */
+               .bus_num = 0,
+-              .chip_select = 5,
+-              .controller_data = &mmc_spi_chip_info,
++              .chip_select = 0,
++              .platform_data = NULL,
++              .controller_data = &spi_mmc_chip_info,
++              .mode = SPI_MODE_3,
++      },
++      {
++              .modalias = "spi_mmc",
++              .max_speed_hz = 25000000,     /* max spi clock (SCK) speed in HZ */
++              .bus_num = 0,
++              .chip_select = CONFIG_SPI_MMC_CS_CHAN,
++              .platform_data = NULL,
++              .controller_data = &spi_mmc_chip_info,
+               .mode = SPI_MODE_3,
+       },
+ #endif
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/mach-bf533/boards/generic_board.c linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf533/boards/generic_board.c
+--- linux-2.6.29.owrt/arch/blackfin/mach-bf533/boards/generic_board.c  1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf533/boards/generic_board.c      2009-05-10 23:48:28.000000000 +0200
+@@ -0,0 +1,126 @@
++/*
++ * File:         arch/blackfin/mach-bf533/generic_board.c
++ * Based on:     arch/blackfin/mach-bf533/ezkit.c
++ * Author:       Aidan Williams <aidan@nicta.com.au>
++ *
++ * Created:      2005
++ * Description:
++ *
++ * Modified:
++ *               Copyright 2005 National ICT Australia (NICTA)
++ *               Copyright 2004-2006 Analog Devices Inc.
++ *
++ * Bugs:         Enter bugs at http://blackfin.uclinux.org/
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, see the file COPYING, or write
++ * to the Free Software Foundation, Inc.,
++ * 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
++ */
++
++#include <linux/device.h>
++#include <linux/platform_device.h>
++#include <linux/irq.h>
++
++/*
++ * Name the Board for the /proc/cpuinfo
++ */
++const char bfin_board_name[] = "UNKNOWN BOARD";
++
++#if defined(CONFIG_RTC_DRV_BFIN) || defined(CONFIG_RTC_DRV_BFIN_MODULE)
++static struct platform_device rtc_device = {
++      .name = "rtc-bfin",
++      .id   = -1,
++};
++#endif
++
++/*
++ *  Driver needs to know address, irq and flag pin.
++ */
++#if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE)
++static struct resource smc91x_resources[] = {
++      {
++              .start = 0x20300300,
++              .end = 0x20300300 + 16,
++              .flags = IORESOURCE_MEM,
++      }, {
++              .start = IRQ_PROG_INTB,
++              .end = IRQ_PROG_INTB,
++              .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
++      }, {
++              .start = IRQ_PF7,
++              .end = IRQ_PF7,
++              .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
++      },
++};
++
++static struct platform_device smc91x_device = {
++      .name = "smc91x",
++      .id = 0,
++      .num_resources = ARRAY_SIZE(smc91x_resources),
++      .resource = smc91x_resources,
++};
++#endif
++
++#if defined(CONFIG_BFIN_SIR) || defined(CONFIG_BFIN_SIR_MODULE)
++#ifdef CONFIG_BFIN_SIR0
++static struct resource bfin_sir0_resources[] = {
++      {
++              .start = 0xFFC00400,
++              .end = 0xFFC004FF,
++              .flags = IORESOURCE_MEM,
++      },
++      {
++              .start = IRQ_UART0_RX,
++              .end = IRQ_UART0_RX+1,
++              .flags = IORESOURCE_IRQ,
++      },
++      {
++              .start = CH_UART0_RX,
++              .end = CH_UART0_RX+1,
++              .flags = IORESOURCE_DMA,
++      },
++};
++
++static struct platform_device bfin_sir0_device = {
++      .name = "bfin_sir",
++      .id = 0,
++      .num_resources = ARRAY_SIZE(bfin_sir0_resources),
++      .resource = bfin_sir0_resources,
++};
++#endif
++#endif
++
++static struct platform_device *generic_board_devices[] __initdata = {
++#if defined(CONFIG_RTC_DRV_BFIN) || defined(CONFIG_RTC_DRV_BFIN_MODULE)
++      &rtc_device,
++#endif
++
++#if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE)
++      &smc91x_device,
++#endif
++
++#if defined(CONFIG_BFIN_SIR) || defined(CONFIG_BFIN_SIR_MODULE)
++#ifdef CONFIG_BFIN_SIR0
++      &bfin_sir0_device,
++#endif
++#endif
++};
++
++static int __init generic_board_init(void)
++{
++      printk(KERN_INFO "%s(): registering device resources\n", __func__);
++      return platform_add_devices(generic_board_devices, ARRAY_SIZE(generic_board_devices));
++}
++
++arch_initcall(generic_board_init);
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/mach-bf533/boards/ip0x.c linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf533/boards/ip0x.c
+--- linux-2.6.29.owrt/arch/blackfin/mach-bf533/boards/ip0x.c   2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf533/boards/ip0x.c       2009-05-10 23:48:28.000000000 +0200
+@@ -127,8 +127,8 @@
+ #if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE)
+ /* all SPI peripherals info goes here */
+-#if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE)
+-static struct bfin5xx_spi_chip mmc_spi_chip_info = {
++#if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE)
++static struct bfin5xx_spi_chip spi_mmc_chip_info = {
+ /*
+  * CPOL (Clock Polarity)
+  *  0 - Active high SCK
+@@ -152,13 +152,14 @@
+ /* Notice: for blackfin, the speed_hz is the value of register
+  * SPI_BAUD, not the real baudrate */
+ static struct spi_board_info bfin_spi_board_info[] __initdata = {
+-#if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE)
++#if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE)
+       {
+-              .modalias = "mmc_spi",
++              .modalias = "spi_mmc",
+               .max_speed_hz = 2,
+               .bus_num = 1,
+-              .chip_select = 5,
+-              .controller_data = &mmc_spi_chip_info,
++              .chip_select = CONFIG_SPI_MMC_CS_CHAN,
++              .platform_data = NULL,
++              .controller_data = &spi_mmc_chip_info,
+       },
+ #endif
+ };
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/mach-bf533/boards/Kconfig linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf533/boards/Kconfig
+--- linux-2.6.29.owrt/arch/blackfin/mach-bf533/boards/Kconfig  2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf533/boards/Kconfig      2009-05-10 23:48:28.000000000 +0200
+@@ -38,4 +38,9 @@
+       help
+         Core support for IP04/IP04 open hardware IP-PBX.
++config GENERIC_BF533_BOARD
++      bool "Generic"
++      help
++        Generic or Custom board support.
++
+ endchoice
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/mach-bf533/boards/Makefile linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf533/boards/Makefile
+--- linux-2.6.29.owrt/arch/blackfin/mach-bf533/boards/Makefile 2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf533/boards/Makefile     2009-05-10 23:48:28.000000000 +0200
+@@ -2,6 +2,7 @@
+ # arch/blackfin/mach-bf533/boards/Makefile
+ #
++obj-$(CONFIG_GENERIC_BF533_BOARD)      += generic_board.o
+ obj-$(CONFIG_BFIN533_STAMP)            += stamp.o
+ obj-$(CONFIG_BFIN532_IP0X)             += ip0x.o
+ obj-$(CONFIG_BFIN533_EZKIT)            += ezkit.o
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/mach-bf533/boards/stamp.c linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf533/boards/stamp.c
+--- linux-2.6.29.owrt/arch/blackfin/mach-bf533/boards/stamp.c  2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf533/boards/stamp.c      2009-05-10 23:48:28.000000000 +0200
+@@ -441,6 +441,7 @@
+ };
+ #endif
++#ifdef CONFIG_I2C_BOARDINFO
+ static struct i2c_board_info __initdata bfin_i2c_board_info[] = {
+ #if defined(CONFIG_JOYSTICK_AD7142) || defined(CONFIG_JOYSTICK_AD7142_MODULE)
+       {
+@@ -460,6 +461,7 @@
+       },
+ #endif
+ };
++#endif
+ static const unsigned int cclk_vlev_datasheet[] =
+ {
+@@ -548,8 +550,10 @@
+       printk(KERN_INFO "%s(): registering device resources\n", __func__);
++#ifdef CONFIG_I2C_BOARDINFO
+       i2c_register_board_info(0, bfin_i2c_board_info,
+                               ARRAY_SIZE(bfin_i2c_board_info));
++#endif
+       ret = platform_add_devices(stamp_devices, ARRAY_SIZE(stamp_devices));
+       if (ret < 0)
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/mach-bf533/include/mach/anomaly.h linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf533/include/mach/anomaly.h
+--- linux-2.6.29.owrt/arch/blackfin/mach-bf533/include/mach/anomaly.h  2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf533/include/mach/anomaly.h      2009-05-10 23:48:28.000000000 +0200
+@@ -2,7 +2,7 @@
+  * File: include/asm-blackfin/mach-bf533/anomaly.h
+  * Bugs: Enter bugs at http://blackfin.uclinux.org/
+  *
+- * Copyright (C) 2004-2009 Analog Devices Inc.
++ * Copyright (C) 2004-2008 Analog Devices Inc.
+  * Licensed under the GPL-2 or later.
+  */
+@@ -160,7 +160,7 @@
+ #define ANOMALY_05000301 (__SILICON_REVISION__ < 6)
+ /* SSYNCs After Writes To DMA MMR Registers May Not Be Handled Correctly */
+ #define ANOMALY_05000302 (__SILICON_REVISION__ < 5)
+-/* SPORT_HYS Bit in PLL_CTL Register Is Not Functional */
++/* New Feature: Additional Hysteresis on SPORT Input Pins (Not Available On Older Silicon) */
+ #define ANOMALY_05000305 (__SILICON_REVISION__ < 5)
+ /* New Feature: Additional PPI Frame Sync Sampling Options (Not Available On Older Silicon) */
+ #define ANOMALY_05000306 (__SILICON_REVISION__ < 5)
+@@ -278,12 +278,9 @@
+ #define ANOMALY_05000266 (0)
+ #define ANOMALY_05000323 (0)
+ #define ANOMALY_05000353 (1)
+-#define ANOMALY_05000380 (0)
+ #define ANOMALY_05000386 (1)
+ #define ANOMALY_05000412 (0)
+ #define ANOMALY_05000432 (0)
+ #define ANOMALY_05000435 (0)
+-#define ANOMALY_05000447 (0)
+-#define ANOMALY_05000448 (0)
+ #endif
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/mach-bf533/include/mach/bfin_serial_5xx.h linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf533/include/mach/bfin_serial_5xx.h
+--- linux-2.6.29.owrt/arch/blackfin/mach-bf533/include/mach/bfin_serial_5xx.h  2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf533/include/mach/bfin_serial_5xx.h      2009-05-10 23:48:28.000000000 +0200
+@@ -134,7 +134,7 @@
+       CH_UART_TX,
+       CH_UART_RX,
+ #endif
+-#ifdef CONFIG_SERIAL_BFIN_CTSRTS
++#ifdef CONFIG_BFIN_UART0_CTSRTS
+       CONFIG_UART0_CTS_PIN,
+       CONFIG_UART0_RTS_PIN,
+ #endif
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/mach-bf533/include/mach/portmux.h linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf533/include/mach/portmux.h
+--- linux-2.6.29.owrt/arch/blackfin/mach-bf533/include/mach/portmux.h  2009-05-10 22:04:41.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf533/include/mach/portmux.h      2009-05-10 23:48:28.000000000 +0200
+@@ -54,11 +54,14 @@
+ #define P_SPI0_SSEL2  (P_DEFINED | P_IDENT(GPIO_PF2))
+ #define P_SPI0_SSEL1  (P_DEFINED | P_IDENT(GPIO_PF1))
+ #define P_SPI0_SS     (P_DEFINED | P_IDENT(GPIO_PF0))
+-#define P_DEFAULT_BOOT_SPI_CS P_SPI0_SSEL2
+ #define P_TMR2                (P_DONTCARE)
+ #define P_TMR1                (P_DONTCARE)
+ #define P_TMR0                (P_DONTCARE)
+ #define P_TMRCLK      (P_DEFINED | P_IDENT(GPIO_PF1))
++
++
++
++
+ #endif /* _MACH_PORTMUX_H_ */
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/mach-bf537/boards/cm_bf537.c linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf537/boards/cm_bf537.c
+--- linux-2.6.29.owrt/arch/blackfin/mach-bf537/boards/cm_bf537.c       2009-05-10 22:04:40.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf537/boards/cm_bf537.c   2009-05-10 23:48:28.000000000 +0200
+@@ -108,9 +108,9 @@
+ };
+ #endif
+-#if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE)
+-static struct bfin5xx_spi_chip  mmc_spi_chip_info = {
+-      .enable_dma = 0,
++#if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE)
++static struct bfin5xx_spi_chip spi_mmc_chip_info = {
++      .enable_dma = 1,
+       .bits_per_word = 8,
+ };
+ #endif
+@@ -160,13 +160,23 @@
+       },
+ #endif
+-#if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE)
++#if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE)
+       {
+-              .modalias = "mmc_spi",
+-              .max_speed_hz = 20000000,     /* max spi clock (SCK) speed in HZ */
++              .modalias = "spi_mmc_dummy",
++              .max_speed_hz = 25000000,     /* max spi clock (SCK) speed in HZ */
+               .bus_num = 0,
+-              .chip_select = 1,
+-              .controller_data = &mmc_spi_chip_info,
++              .chip_select = 7,
++              .platform_data = NULL,
++              .controller_data = &spi_mmc_chip_info,
++              .mode = SPI_MODE_3,
++      },
++      {
++              .modalias = "spi_mmc",
++              .max_speed_hz = 25000000,     /* max spi clock (SCK) speed in HZ */
++              .bus_num = 0,
++              .chip_select = CONFIG_SPI_MMC_CS_CHAN,
++              .platform_data = NULL,
++              .controller_data = &spi_mmc_chip_info,
+               .mode = SPI_MODE_3,
+       },
+ #endif
+@@ -469,13 +479,8 @@
+ #endif
+ #if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE)
+-static struct platform_device bfin_mii_bus = {
+-      .name = "bfin_mii_bus",
+-};
+-
+ static struct platform_device bfin_mac_device = {
+       .name = "bfin_mac",
+-      .dev.platform_data = &bfin_mii_bus,
+ };
+ #endif
+@@ -586,7 +591,6 @@
+ #endif
+ #if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE)
+-      &bfin_mii_bus,
+       &bfin_mac_device,
+ #endif
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/mach-bf537/boards/generic_board.c linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf537/boards/generic_board.c
+--- linux-2.6.29.owrt/arch/blackfin/mach-bf537/boards/generic_board.c  1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf537/boards/generic_board.c      2009-05-10 23:48:28.000000000 +0200
+@@ -0,0 +1,739 @@
++/*
++ * File:         arch/blackfin/mach-bf537/boards/generic_board.c
++ * Based on:     arch/blackfin/mach-bf533/boards/ezkit.c
++ * Author:       Aidan Williams <aidan@nicta.com.au>
++ *
++ * Created:
++ * Description:
++ *
++ * Modified:
++ *               Copyright 2005 National ICT Australia (NICTA)
++ *               Copyright 2004-2008 Analog Devices Inc.
++ *
++ * Bugs:         Enter bugs at http://blackfin.uclinux.org/
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, see the file COPYING, or write
++ * to the Free Software Foundation, Inc.,
++ * 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
++ */
++
++#include <linux/device.h>
++#include <linux/etherdevice.h>
++#include <linux/platform_device.h>
++#include <linux/mtd/mtd.h>
++#include <linux/mtd/partitions.h>
++#include <linux/spi/spi.h>
++#include <linux/spi/flash.h>
++#if defined(CONFIG_USB_ISP1362_HCD) || defined(CONFIG_USB_ISP1362_HCD_MODULE)
++#include <linux/usb/isp1362.h>
++#endif
++#include <linux/irq.h>
++#include <linux/interrupt.h>
++#include <linux/usb/sl811.h>
++#include <asm/dma.h>
++#include <asm/bfin5xx_spi.h>
++#include <asm/reboot.h>
++#include <asm/portmux.h>
++#include <linux/spi/ad7877.h>
++
++/*
++ * Name the Board for the /proc/cpuinfo
++ */
++const char bfin_board_name[] = "UNKNOWN BOARD";
++
++/*
++ *  Driver needs to know address, irq and flag pin.
++ */
++
++#if defined(CONFIG_USB_ISP1760_HCD) || defined(CONFIG_USB_ISP1760_HCD_MODULE)
++#include <linux/usb/isp1760.h>
++static struct resource bfin_isp1760_resources[] = {
++      [0] = {
++              .start  = 0x203C0000,
++              .end    = 0x203C0000 + 0x000fffff,
++              .flags  = IORESOURCE_MEM,
++      },
++      [1] = {
++              .start  = IRQ_PF7,
++              .end    = IRQ_PF7,
++              .flags  = IORESOURCE_IRQ,
++      },
++};
++
++static struct isp1760_platform_data isp1760_priv = {
++      .is_isp1761 = 0,
++      .port1_disable = 0,
++      .bus_width_16 = 1,
++      .port1_otg = 0,
++      .analog_oc = 0,
++      .dack_polarity_high = 0,
++      .dreq_polarity_high = 0,
++};
++
++static struct platform_device bfin_isp1760_device = {
++      .name           = "isp1760-hcd",
++      .id             = 0,
++      .dev = {
++              .platform_data = &isp1760_priv,
++      },
++      .num_resources  = ARRAY_SIZE(bfin_isp1760_resources),
++      .resource       = bfin_isp1760_resources,
++};
++#endif
++
++#if defined(CONFIG_BFIN_CFPCMCIA) || defined(CONFIG_BFIN_CFPCMCIA_MODULE)
++static struct resource bfin_pcmcia_cf_resources[] = {
++      {
++              .start = 0x20310000, /* IO PORT */
++              .end = 0x20312000,
++              .flags = IORESOURCE_MEM,
++      }, {
++              .start = 0x20311000, /* Attribute Memory */
++              .end = 0x20311FFF,
++              .flags = IORESOURCE_MEM,
++      }, {
++              .start = IRQ_PF4,
++              .end = IRQ_PF4,
++              .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWLEVEL,
++      }, {
++              .start = 6, /* Card Detect PF6 */
++              .end = 6,
++              .flags = IORESOURCE_IRQ,
++      },
++};
++
++static struct platform_device bfin_pcmcia_cf_device = {
++      .name = "bfin_cf_pcmcia",
++      .id = -1,
++      .num_resources = ARRAY_SIZE(bfin_pcmcia_cf_resources),
++      .resource = bfin_pcmcia_cf_resources,
++};
++#endif
++
++#if defined(CONFIG_RTC_DRV_BFIN) || defined(CONFIG_RTC_DRV_BFIN_MODULE)
++static struct platform_device rtc_device = {
++      .name = "rtc-bfin",
++      .id   = -1,
++};
++#endif
++
++#if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE)
++static struct resource smc91x_resources[] = {
++      {
++              .name = "smc91x-regs",
++              .start = 0x20300300,
++              .end = 0x20300300 + 16,
++              .flags = IORESOURCE_MEM,
++      }, {
++
++              .start = IRQ_PF7,
++              .end = IRQ_PF7,
++              .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
++      },
++};
++static struct platform_device smc91x_device = {
++      .name = "smc91x",
++      .id = 0,
++      .num_resources = ARRAY_SIZE(smc91x_resources),
++      .resource = smc91x_resources,
++};
++#endif
++
++#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)
++static struct resource dm9000_resources[] = {
++      [0] = {
++              .start  = 0x203FB800,
++              .end    = 0x203FB800 + 1,
++              .flags  = IORESOURCE_MEM,
++      },
++      [1] = {
++              .start  = 0x203FB800 + 4,
++              .end    = 0x203FB800 + 5,
++              .flags  = IORESOURCE_MEM,
++      },
++      [2] = {
++              .start  = IRQ_PF9,
++              .end    = IRQ_PF9,
++              .flags  = (IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE),
++      },
++};
++
++static struct platform_device dm9000_device = {
++      .name           = "dm9000",
++      .id             = -1,
++      .num_resources  = ARRAY_SIZE(dm9000_resources),
++      .resource       = dm9000_resources,
++};
++#endif
++
++#if defined(CONFIG_USB_SL811_HCD) || defined(CONFIG_USB_SL811_HCD_MODULE)
++static struct resource sl811_hcd_resources[] = {
++      {
++              .start = 0x20340000,
++              .end = 0x20340000,
++              .flags = IORESOURCE_MEM,
++      }, {
++              .start = 0x20340004,
++              .end = 0x20340004,
++              .flags = IORESOURCE_MEM,
++      }, {
++              .start = CONFIG_USB_SL811_BFIN_IRQ,
++              .end = CONFIG_USB_SL811_BFIN_IRQ,
++              .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
++      },
++};
++
++#if defined(CONFIG_USB_SL811_BFIN_USE_VBUS)
++void sl811_port_power(struct device *dev, int is_on)
++{
++      gpio_request(CONFIG_USB_SL811_BFIN_GPIO_VBUS, "usb:SL811_VBUS");
++      gpio_direction_output(CONFIG_USB_SL811_BFIN_GPIO_VBUS, is_on);
++
++}
++#endif
++
++static struct sl811_platform_data sl811_priv = {
++      .potpg = 10,
++      .power = 250,       /* == 500mA */
++#if defined(CONFIG_USB_SL811_BFIN_USE_VBUS)
++      .port_power = &sl811_port_power,
++#endif
++};
++
++static struct platform_device sl811_hcd_device = {
++      .name = "sl811-hcd",
++      .id = 0,
++      .dev = {
++              .platform_data = &sl811_priv,
++      },
++      .num_resources = ARRAY_SIZE(sl811_hcd_resources),
++      .resource = sl811_hcd_resources,
++};
++#endif
++
++#if defined(CONFIG_USB_ISP1362_HCD) || defined(CONFIG_USB_ISP1362_HCD_MODULE)
++static struct resource isp1362_hcd_resources[] = {
++      {
++              .start = 0x20360000,
++              .end = 0x20360000,
++              .flags = IORESOURCE_MEM,
++      }, {
++              .start = 0x20360004,
++              .end = 0x20360004,
++              .flags = IORESOURCE_MEM,
++      }, {
++              .start = CONFIG_USB_ISP1362_BFIN_GPIO_IRQ,
++              .end = CONFIG_USB_ISP1362_BFIN_GPIO_IRQ,
++              .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
++      },
++};
++
++static struct isp1362_platform_data isp1362_priv = {
++      .sel15Kres = 1,
++      .clknotstop = 0,
++      .oc_enable = 0,
++      .int_act_high = 0,
++      .int_edge_triggered = 0,
++      .remote_wakeup_connected = 0,
++      .no_power_switching = 1,
++      .power_switching_mode = 0,
++};
++
++static struct platform_device isp1362_hcd_device = {
++      .name = "isp1362-hcd",
++      .id = 0,
++      .dev = {
++              .platform_data = &isp1362_priv,
++      },
++      .num_resources = ARRAY_SIZE(isp1362_hcd_resources),
++      .resource = isp1362_hcd_resources,
++};
++#endif
++
++#if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE)
++static struct platform_device bfin_mac_device = {
++      .name = "bfin_mac",
++};
++#endif
++
++#if defined(CONFIG_USB_NET2272) || defined(CONFIG_USB_NET2272_MODULE)
++static struct resource net2272_bfin_resources[] = {
++      {
++              .start = 0x20300000,
++              .end = 0x20300000 + 0x100,
++              .flags = IORESOURCE_MEM,
++      }, {
++              .start = IRQ_PF7,
++              .end = IRQ_PF7,
++              .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
++      },
++};
++
++static struct platform_device net2272_bfin_device = {
++      .name = "net2272",
++      .id = -1,
++      .num_resources = ARRAY_SIZE(net2272_bfin_resources),
++      .resource = net2272_bfin_resources,
++};
++#endif
++
++#if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE)
++/* all SPI peripherals info goes here */
++
++#if defined(CONFIG_MTD_M25P80) \
++      || defined(CONFIG_MTD_M25P80_MODULE)
++static struct mtd_partition bfin_spi_flash_partitions[] = {
++      {
++              .name = "bootloader(spi)",
++              .size = 0x00020000,
++              .offset = 0,
++              .mask_flags = MTD_CAP_ROM
++      }, {
++              .name = "linux kernel(spi)",
++              .size = 0xe0000,
++              .offset = 0x20000
++      }, {
++              .name = "file system(spi)",
++              .size = 0x700000,
++              .offset = 0x00100000,
++      }
++};
++
++static struct flash_platform_data bfin_spi_flash_data = {
++      .name = "m25p80",
++      .parts = bfin_spi_flash_partitions,
++      .nr_parts = ARRAY_SIZE(bfin_spi_flash_partitions),
++      .type = "m25p64",
++};
++
++/* SPI flash chip (m25p64) */
++static struct bfin5xx_spi_chip spi_flash_chip_info = {
++      .enable_dma = 0,         /* use dma transfer with this chip*/
++      .bits_per_word = 8,
++};
++#endif
++
++#if defined(CONFIG_SPI_ADC_BF533) \
++      || defined(CONFIG_SPI_ADC_BF533_MODULE)
++/* SPI ADC chip */
++static struct bfin5xx_spi_chip spi_adc_chip_info = {
++      .enable_dma = 1,         /* use dma transfer with this chip*/
++      .bits_per_word = 16,
++};
++#endif
++
++#if defined(CONFIG_SND_BLACKFIN_AD1836) \
++      || defined(CONFIG_SND_BLACKFIN_AD1836_MODULE)
++static struct bfin5xx_spi_chip ad1836_spi_chip_info = {
++      .enable_dma = 0,
++      .bits_per_word = 16,
++};
++#endif
++
++#if defined(CONFIG_AD9960) || defined(CONFIG_AD9960_MODULE)
++static struct bfin5xx_spi_chip ad9960_spi_chip_info = {
++      .enable_dma = 0,
++      .bits_per_word = 16,
++};
++#endif
++
++#if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE)
++static struct bfin5xx_spi_chip spi_mmc_chip_info = {
++      .enable_dma = 1,
++      .bits_per_word = 8,
++};
++#endif
++
++#if defined(CONFIG_PBX)
++static struct bfin5xx_spi_chip spi_si3xxx_chip_info = {
++      .ctl_reg        = 0x4, /* send zero */
++      .enable_dma     = 0,
++      .bits_per_word  = 8,
++      .cs_change_per_word = 1,
++};
++#endif
++
++#if defined(CONFIG_TOUCHSCREEN_AD7877) || defined(CONFIG_TOUCHSCREEN_AD7877_MODULE)
++static struct bfin5xx_spi_chip spi_ad7877_chip_info = {
++      .enable_dma = 0,
++      .bits_per_word = 16,
++};
++
++static const struct ad7877_platform_data bfin_ad7877_ts_info = {
++      .model                  = 7877,
++      .vref_delay_usecs       = 50,   /* internal, no capacitor */
++      .x_plate_ohms           = 419,
++      .y_plate_ohms           = 486,
++      .pressure_max           = 1000,
++      .pressure_min           = 0,
++      .stopacq_polarity       = 1,
++      .first_conversion_delay = 3,
++      .acquisition_time       = 1,
++      .averaging              = 1,
++      .pen_down_acc_interval  = 1,
++};
++#endif
++
++static struct spi_board_info bfin_spi_board_info[] __initdata = {
++#if defined(CONFIG_MTD_M25P80) \
++      || defined(CONFIG_MTD_M25P80_MODULE)
++      {
++              /* the modalias must be the same as spi device driver name */
++              .modalias = "m25p80", /* Name of spi_driver for this device */
++              .max_speed_hz = 25000000,     /* max spi clock (SCK) speed in HZ */
++              .bus_num = 0, /* Framework bus number */
++              .chip_select = 1, /* Framework chip select. On STAMP537 it is SPISSEL1*/
++              .platform_data = &bfin_spi_flash_data,
++              .controller_data = &spi_flash_chip_info,
++              .mode = SPI_MODE_3,
++      },
++#endif
++
++#if defined(CONFIG_SPI_ADC_BF533) \
++      || defined(CONFIG_SPI_ADC_BF533_MODULE)
++      {
++              .modalias = "bfin_spi_adc", /* Name of spi_driver for this device */
++              .max_speed_hz = 6250000,     /* max spi clock (SCK) speed in HZ */
++              .bus_num = 0, /* Framework bus number */
++              .chip_select = 1, /* Framework chip select. */
++              .platform_data = NULL, /* No spi_driver specific config */
++              .controller_data = &spi_adc_chip_info,
++      },
++#endif
++
++#if defined(CONFIG_SND_BLACKFIN_AD1836) \
++      || defined(CONFIG_SND_BLACKFIN_AD1836_MODULE)
++      {
++              .modalias = "ad1836-spi",
++              .max_speed_hz = 3125000,     /* max spi clock (SCK) speed in HZ */
++              .bus_num = 0,
++              .chip_select = CONFIG_SND_BLACKFIN_SPI_PFBIT,
++              .controller_data = &ad1836_spi_chip_info,
++      },
++#endif
++#if defined(CONFIG_AD9960) || defined(CONFIG_AD9960_MODULE)
++      {
++              .modalias = "ad9960-spi",
++              .max_speed_hz = 10000000,     /* max spi clock (SCK) speed in HZ */
++              .bus_num = 0,
++              .chip_select = 1,
++              .controller_data = &ad9960_spi_chip_info,
++      },
++#endif
++#if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE)
++      {
++              .modalias = "spi_mmc_dummy",
++              .max_speed_hz = 25000000,     /* max spi clock (SCK) speed in HZ */
++              .bus_num = 0,
++              .chip_select = 0,
++              .platform_data = NULL,
++              .controller_data = &spi_mmc_chip_info,
++              .mode = SPI_MODE_3,
++      },
++      {
++              .modalias = "spi_mmc",
++              .max_speed_hz = 25000000,     /* max spi clock (SCK) speed in HZ */
++              .bus_num = 0,
++              .chip_select = CONFIG_SPI_MMC_CS_CHAN,
++              .platform_data = NULL,
++              .controller_data = &spi_mmc_chip_info,
++              .mode = SPI_MODE_3,
++      },
++#endif
++#if defined(CONFIG_PBX)
++      {
++              .modalias = "fxs-spi",
++              .max_speed_hz = 12500000,     /* max spi clock (SCK) speed in HZ */
++              .bus_num = 0,
++              .chip_select = 8 - CONFIG_J11_JUMPER,
++              .controller_data = &spi_si3xxx_chip_info,
++              .mode = SPI_MODE_3,
++      },
++      {
++              .modalias = "fxo-spi",
++              .max_speed_hz = 12500000,     /* max spi clock (SCK) speed in HZ */
++              .bus_num = 0,
++              .chip_select = 8 - CONFIG_J19_JUMPER,
++              .controller_data = &spi_si3xxx_chip_info,
++              .mode = SPI_MODE_3,
++      },
++#endif
++#if defined(CONFIG_TOUCHSCREEN_AD7877) || defined(CONFIG_TOUCHSCREEN_AD7877_MODULE)
++      {
++              .modalias               = "ad7877",
++              .platform_data          = &bfin_ad7877_ts_info,
++              .irq                    = IRQ_PF6,
++              .max_speed_hz   = 12500000,     /* max spi clock (SCK) speed in HZ */
++              .bus_num        = 0,
++              .chip_select  = 1,
++              .controller_data = &spi_ad7877_chip_info,
++      },
++#endif
++};
++
++/* SPI controller data */
++static struct bfin5xx_spi_master bfin_spi0_info = {
++      .num_chipselect = 8,
++      .enable_dma = 1,  /* master has the ability to do dma transfer */
++      .pin_req = {P_SPI0_SCK, P_SPI0_MISO, P_SPI0_MOSI, 0},
++};
++
++/* SPI (0) */
++static struct resource bfin_spi0_resource[] = {
++      [0] = {
++              .start = SPI0_REGBASE,
++              .end   = SPI0_REGBASE + 0xFF,
++              .flags = IORESOURCE_MEM,
++              },
++      [1] = {
++              .start = CH_SPI,
++              .end   = CH_SPI,
++              .flags = IORESOURCE_IRQ,
++      },
++};
++
++static struct platform_device bfin_spi0_device = {
++      .name = "bfin-spi",
++      .id = 0, /* Bus number */
++      .num_resources = ARRAY_SIZE(bfin_spi0_resource),
++      .resource = bfin_spi0_resource,
++      .dev = {
++              .platform_data = &bfin_spi0_info, /* Passed to driver */
++      },
++};
++#endif  /* spi master and devices */
++
++#if defined(CONFIG_FB_BF537_LQ035) || defined(CONFIG_FB_BF537_LQ035_MODULE)
++static struct platform_device bfin_fb_device = {
++      .name = "bf537-lq035",
++};
++#endif
++
++#if defined(CONFIG_FB_BFIN_7393) || defined(CONFIG_FB_BFIN_7393_MODULE)
++static struct platform_device bfin_fb_adv7393_device = {
++      .name = "bfin-adv7393",
++};
++#endif
++
++#if defined(CONFIG_SERIAL_BFIN) || defined(CONFIG_SERIAL_BFIN_MODULE)
++static struct resource bfin_uart_resources[] = {
++      {
++              .start = 0xFFC00400,
++              .end = 0xFFC004FF,
++              .flags = IORESOURCE_MEM,
++      }, {
++              .start = 0xFFC02000,
++              .end = 0xFFC020FF,
++              .flags = IORESOURCE_MEM,
++      },
++};
++
++static struct platform_device bfin_uart_device = {
++      .name = "bfin-uart",
++      .id = 1,
++      .num_resources = ARRAY_SIZE(bfin_uart_resources),
++      .resource = bfin_uart_resources,
++};
++#endif
++
++#if defined(CONFIG_BFIN_SIR) || defined(CONFIG_BFIN_SIR_MODULE)
++#ifdef CONFIG_BFIN_SIR0
++static struct resource bfin_sir0_resources[] = {
++      {
++              .start = 0xFFC00400,
++              .end = 0xFFC004FF,
++              .flags = IORESOURCE_MEM,
++      },
++      {
++              .start = IRQ_UART0_RX,
++              .end = IRQ_UART0_RX+1,
++              .flags = IORESOURCE_IRQ,
++      },
++      {
++              .start = CH_UART0_RX,
++              .end = CH_UART0_RX+1,
++              .flags = IORESOURCE_DMA,
++      },
++};
++
++static struct platform_device bfin_sir0_device = {
++      .name = "bfin_sir",
++      .id = 0,
++      .num_resources = ARRAY_SIZE(bfin_sir0_resources),
++      .resource = bfin_sir0_resources,
++};
++#endif
++#ifdef CONFIG_BFIN_SIR1
++static struct resource bfin_sir1_resources[] = {
++      {
++              .start = 0xFFC02000,
++              .end = 0xFFC020FF,
++              .flags = IORESOURCE_MEM,
++      },
++      {
++              .start = IRQ_UART1_RX,
++              .end = IRQ_UART1_RX+1,
++              .flags = IORESOURCE_IRQ,
++      },
++      {
++              .start = CH_UART1_RX,
++              .end = CH_UART1_RX+1,
++              .flags = IORESOURCE_DMA,
++      },
++};
++
++static struct platform_device bfin_sir1_device = {
++      .name = "bfin_sir",
++      .id = 1,
++      .num_resources = ARRAY_SIZE(bfin_sir1_resources),
++      .resource = bfin_sir1_resources,
++};
++#endif
++#endif
++
++#if defined(CONFIG_I2C_BLACKFIN_TWI) || defined(CONFIG_I2C_BLACKFIN_TWI_MODULE)
++static struct resource bfin_twi0_resource[] = {
++      [0] = {
++              .start = TWI0_REGBASE,
++              .end   = TWI0_REGBASE + 0xFF,
++              .flags = IORESOURCE_MEM,
++      },
++      [1] = {
++              .start = IRQ_TWI,
++              .end   = IRQ_TWI,
++              .flags = IORESOURCE_IRQ,
++      },
++};
++
++static struct platform_device i2c_bfin_twi_device = {
++      .name = "i2c-bfin-twi",
++      .id = 0,
++      .num_resources = ARRAY_SIZE(bfin_twi0_resource),
++      .resource = bfin_twi0_resource,
++};
++#endif
++
++#if defined(CONFIG_SERIAL_BFIN_SPORT) || defined(CONFIG_SERIAL_BFIN_SPORT_MODULE)
++static struct platform_device bfin_sport0_uart_device = {
++      .name = "bfin-sport-uart",
++      .id = 0,
++};
++
++static struct platform_device bfin_sport1_uart_device = {
++      .name = "bfin-sport-uart",
++      .id = 1,
++};
++#endif
++
++static struct platform_device *stamp_devices[] __initdata = {
++#if defined(CONFIG_BFIN_CFPCMCIA) || defined(CONFIG_BFIN_CFPCMCIA_MODULE)
++      &bfin_pcmcia_cf_device,
++#endif
++
++#if defined(CONFIG_RTC_DRV_BFIN) || defined(CONFIG_RTC_DRV_BFIN_MODULE)
++      &rtc_device,
++#endif
++
++#if defined(CONFIG_USB_SL811_HCD) || defined(CONFIG_USB_SL811_HCD_MODULE)
++      &sl811_hcd_device,
++#endif
++
++#if defined(CONFIG_USB_ISP1362_HCD) || defined(CONFIG_USB_ISP1362_HCD_MODULE)
++      &isp1362_hcd_device,
++#endif
++
++#if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE)
++      &smc91x_device,
++#endif
++
++#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)
++      &dm9000_device,
++#endif
++
++#if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE)
++      &bfin_mac_device,
++#endif
++
++#if defined(CONFIG_USB_NET2272) || defined(CONFIG_USB_NET2272_MODULE)
++      &net2272_bfin_device,
++#endif
++
++#if defined(CONFIG_USB_ISP1760_HCD) || defined(CONFIG_USB_ISP1760_HCD_MODULE)
++      &bfin_isp1760_device,
++#endif
++
++#if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE)
++      &bfin_spi0_device,
++#endif
++
++#if defined(CONFIG_FB_BF537_LQ035) || defined(CONFIG_FB_BF537_LQ035_MODULE)
++      &bfin_fb_device,
++#endif
++
++#if defined(CONFIG_FB_BFIN_7393) || defined(CONFIG_FB_BFIN_7393_MODULE)
++      &bfin_fb_adv7393_device,
++#endif
++
++#if defined(CONFIG_SERIAL_BFIN) || defined(CONFIG_SERIAL_BFIN_MODULE)
++      &bfin_uart_device,
++#endif
++
++#if defined(CONFIG_BFIN_SIR) || defined(CONFIG_BFIN_SIR_MODULE)
++#ifdef CONFIG_BFIN_SIR0
++      &bfin_sir0_device,
++#endif
++#ifdef CONFIG_BFIN_SIR1
++      &bfin_sir1_device,
++#endif
++#endif
++
++#if defined(CONFIG_I2C_BLACKFIN_TWI) || defined(CONFIG_I2C_BLACKFIN_TWI_MODULE)
++      &i2c_bfin_twi_device,
++#endif
++
++#if defined(CONFIG_SERIAL_BFIN_SPORT) || defined(CONFIG_SERIAL_BFIN_SPORT_MODULE)
++      &bfin_sport0_uart_device,
++      &bfin_sport1_uart_device,
++#endif
++};
++
++static int __init stamp_init(void)
++{
++      printk(KERN_INFO "%s(): registering device resources\n", __func__);
++      platform_add_devices(stamp_devices, ARRAY_SIZE(stamp_devices));
++#if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE)
++      spi_register_board_info(bfin_spi_board_info,
++                              ARRAY_SIZE(bfin_spi_board_info));
++#endif
++
++      return 0;
++}
++
++arch_initcall(stamp_init);
++
++void native_machine_restart(char *cmd)
++{
++      /* workaround reboot hang when booting from SPI */
++      if ((bfin_read_SYSCR() & 0x7) == 0x3)
++              bfin_gpio_reset_spi0_ssel1();
++}
++
++#if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE)
++void bfin_get_ether_addr(char *addr)
++{
++      random_ether_addr(addr);
++      printk(KERN_WARNING "%s:%s: Setting Ethernet MAC to a random one\n", __FILE__, __func__);
++}
++EXPORT_SYMBOL(bfin_get_ether_addr);
++#endif
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/mach-bf537/boards/Kconfig linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf537/boards/Kconfig
+--- linux-2.6.29.owrt/arch/blackfin/mach-bf537/boards/Kconfig  2009-05-10 22:04:40.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf537/boards/Kconfig      2009-05-10 23:48:28.000000000 +0200
+@@ -33,4 +33,9 @@
+       help
+         Board supply package for CSP Minotaur
++config GENERIC_BF537_BOARD
++      bool "Generic"
++      help
++        Generic or Custom board support.
++
+ endchoice
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/mach-bf537/boards/Makefile linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf537/boards/Makefile
+--- linux-2.6.29.owrt/arch/blackfin/mach-bf537/boards/Makefile 2009-05-10 22:04:40.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf537/boards/Makefile     2009-05-10 23:48:28.000000000 +0200
+@@ -2,6 +2,7 @@
+ # arch/blackfin/mach-bf537/boards/Makefile
+ #
++obj-$(CONFIG_GENERIC_BF537_BOARD)      += generic_board.o
+ obj-$(CONFIG_BFIN537_STAMP)            += stamp.o
+ obj-$(CONFIG_BFIN537_BLUETECHNIX_CM)   += cm_bf537.o
+ obj-$(CONFIG_BFIN537_BLUETECHNIX_TCM)  += tcm_bf537.o
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/mach-bf537/boards/minotaur.c linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf537/boards/minotaur.c
+--- linux-2.6.29.owrt/arch/blackfin/mach-bf537/boards/minotaur.c       2009-05-10 22:04:40.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf537/boards/minotaur.c   2009-05-10 23:48:28.000000000 +0200
+@@ -61,13 +61,8 @@
+ #endif
+ #if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE)
+-static struct platform_device bfin_mii_bus = {
+-      .name = "bfin_mii_bus",
+-};
+-
+ static struct platform_device bfin_mac_device = {
+       .name = "bfin_mac",
+-      .dev.platform_data = &bfin_mii_bus,
+ };
+ #endif
+@@ -134,9 +129,9 @@
+ };
+ #endif
+-#if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE)
+-static struct bfin5xx_spi_chip mmc_spi_chip_info = {
+-      .enable_dma = 0,
++#if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE)
++static struct bfin5xx_spi_chip spi_mmc_chip_info = {
++      .enable_dma = 1,
+       .bits_per_word = 8,
+ };
+ #endif
+@@ -156,13 +151,23 @@
+       },
+ #endif
+-#if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE)
++#if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE)
++      {
++              .modalias = "spi_mmc_dummy",
++              .max_speed_hz = 5000000,     /* max spi clock (SCK) speed in HZ */
++              .bus_num = 0,
++              .chip_select = 0,
++              .platform_data = NULL,
++              .controller_data = &spi_mmc_chip_info,
++              .mode = SPI_MODE_3,
++      },
+       {
+-              .modalias = "mmc_spi",
++              .modalias = "spi_mmc",
+               .max_speed_hz = 5000000,     /* max spi clock (SCK) speed in HZ */
+               .bus_num = 0,
+-              .chip_select = 5,
+-              .controller_data = &mmc_spi_chip_info,
++              .chip_select = CONFIG_SPI_MMC_CS_CHAN,
++              .platform_data = NULL,
++              .controller_data = &spi_mmc_chip_info,
+               .mode = SPI_MODE_3,
+       },
+ #endif
+@@ -319,7 +324,6 @@
+ #endif
+ #if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE)
+-      &bfin_mii_bus,
+       &bfin_mac_device,
+ #endif
+@@ -373,5 +377,5 @@
+ {
+       /* workaround reboot hang when booting from SPI */
+       if ((bfin_read_SYSCR() & 0x7) == 0x3)
+-              bfin_reset_boot_spi_cs(P_DEFAULT_BOOT_SPI_CS);
++              bfin_gpio_reset_spi0_ssel1();
+ }
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/mach-bf537/boards/pnav10.c linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf537/boards/pnav10.c
+--- linux-2.6.29.owrt/arch/blackfin/mach-bf537/boards/pnav10.c 2009-05-10 22:04:40.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf537/boards/pnav10.c     2009-05-10 23:48:28.000000000 +0200
+@@ -198,13 +198,8 @@
+ #endif
+ #if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE)
+-static struct platform_device bfin_mii_bus = {
+-      .name = "bfin_mii_bus",
+-};
+-
+ static struct platform_device bfin_mac_device = {
+       .name = "bfin_mac",
+-      .dev.platform_data = &bfin_mii_bus,
+ };
+ #endif
+@@ -289,9 +284,9 @@
+ };
+ #endif
+-#if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE)
+-static struct bfin5xx_spi_chip mmc_spi_chip_info = {
+-      .enable_dma = 0,
++#if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE)
++static struct bfin5xx_spi_chip spi_mmc_chip_info = {
++      .enable_dma = 1,
+       .bits_per_word = 8,
+ };
+ #endif
+@@ -364,13 +359,23 @@
+               .controller_data = &ad9960_spi_chip_info,
+       },
+ #endif
+-#if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE)
++#if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE)
++      {
++              .modalias = "spi_mmc_dummy",
++              .max_speed_hz = 25000000,     /* max spi clock (SCK) speed in HZ */
++              .bus_num = 0,
++              .chip_select = 7,
++              .platform_data = NULL,
++              .controller_data = &spi_mmc_chip_info,
++              .mode = SPI_MODE_3,
++      },
+       {
+-              .modalias = "mmc_spi",
++              .modalias = "spi_mmc",
+               .max_speed_hz = 25000000,     /* max spi clock (SCK) speed in HZ */
+               .bus_num = 0,
+-              .chip_select = 5,
+-              .controller_data = &mmc_spi_chip_info,
++              .chip_select = CONFIG_SPI_MMC_CS_CHAN,
++              .platform_data = NULL,
++              .controller_data = &spi_mmc_chip_info,
+               .mode = SPI_MODE_3,
+       },
+ #endif
+@@ -524,7 +529,6 @@
+ #endif
+ #if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE)
+-      &bfin_mii_bus,
+       &bfin_mac_device,
+ #endif
+@@ -554,7 +558,7 @@
+ #endif
+ };
+-static int __init pnav_init(void)
++static int __init stamp_init(void)
+ {
+       printk(KERN_INFO "%s(): registering device resources\n", __func__);
+       platform_add_devices(stamp_devices, ARRAY_SIZE(stamp_devices));
+@@ -565,7 +569,7 @@
+       return 0;
+ }
+-arch_initcall(pnav_init);
++arch_initcall(stamp_init);
+ void bfin_get_ether_addr(char *addr)
+ {
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/mach-bf537/boards/stamp.c linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf537/boards/stamp.c
+--- linux-2.6.29.owrt/arch/blackfin/mach-bf537/boards/stamp.c  2009-05-10 22:04:40.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf537/boards/stamp.c      2009-05-10 23:48:28.000000000 +0200
+@@ -321,13 +321,8 @@
+ #endif
+ #if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE)
+-static struct platform_device bfin_mii_bus = {
+-      .name = "bfin_mii_bus",
+-};
+-
+ static struct platform_device bfin_mac_device = {
+       .name = "bfin_mac",
+-      .dev.platform_data = &bfin_mii_bus,
+ };
+ #endif
+@@ -1073,6 +1068,7 @@
+ };
+ #endif
++#ifdef CONFIG_I2C_BOARDINFO
+ static struct i2c_board_info __initdata bfin_i2c_board_info[] = {
+ #if defined(CONFIG_JOYSTICK_AD7142) || defined(CONFIG_JOYSTICK_AD7142_MODULE)
+       {
+@@ -1106,6 +1102,7 @@
+       },
+ #endif
+ };
++#endif
+ #if defined(CONFIG_SERIAL_BFIN_SPORT) || defined(CONFIG_SERIAL_BFIN_SPORT_MODULE)
+ static struct platform_device bfin_sport0_uart_device = {
+@@ -1220,7 +1217,6 @@
+ #endif
+ #if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE)
+-      &bfin_mii_bus,
+       &bfin_mac_device,
+ #endif
+@@ -1288,8 +1284,12 @@
+ static int __init stamp_init(void)
+ {
+       printk(KERN_INFO "%s(): registering device resources\n", __func__);
++
++#ifdef CONFIG_I2C_BOARDINFO
+       i2c_register_board_info(0, bfin_i2c_board_info,
+                               ARRAY_SIZE(bfin_i2c_board_info));
++#endif
++
+       bfin_plat_nand_init();
+       platform_add_devices(stamp_devices, ARRAY_SIZE(stamp_devices));
+       spi_register_board_info(bfin_spi_board_info, ARRAY_SIZE(bfin_spi_board_info));
+@@ -1307,7 +1307,7 @@
+ {
+       /* workaround reboot hang when booting from SPI */
+       if ((bfin_read_SYSCR() & 0x7) == 0x3)
+-              bfin_reset_boot_spi_cs(P_DEFAULT_BOOT_SPI_CS);
++              bfin_gpio_reset_spi0_ssel1();
+ }
+ /*
+diff -ruN --exclude='*.rej' --exclude='*.orig' linux-2.6.29.owrt/arch/blackfin/mach-bf537/boards/tcm_bf537.c linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf537/boards/tcm_bf537.c
+--- linux-2.6.29.owrt/arch/blackfin/mach-bf537/boards/tcm_bf537.c      2009-05-10 22:04:40.000000000 +0200
++++ linux-2.6.29-rc3.owrt/arch/blackfin/mach-bf537/boards/tcm_bf537.c  2009-05-10 23:48:28.000000000 +0200
+@@ -108,9 +108,9 @@
+ };
+ #endif
+-#if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE)
+-static struct bfin5xx_spi_chip mmc_spi_chip_info = {
+-      .enable_dma = 0,
++#if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE)
++static struct bfin5xx_spi_chip spi_mmc_chip_info = {
++      .enable_dma = 1,
+       .bits_per_word = 8,
+ };
+ #endif
+@@ -160,13 +160,23 @@
+       },
+ #endif
+-#if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE)
++#if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE)
+       {
+-              .modalias = "mmc_spi",
++              .modalias = "spi_mmc_dummy",
+               .max_speed_hz = 25000000,     /* max spi clock (SCK) speed in HZ */
+               .bus_num = 0,
+-              .chip_select = 5,
+-              .controller_data = &mmc_spi_chip_info,
++              .chip_select = 7,
++              .platform_data = NULL,
++              .controller_data = &spi_mmc_chip_info,
++              .mode = SPI_MODE_3,
++      },
++      {
++              .modalias = "spi_mmc",
++              .max_speed_hz = 25000000,     /* max spi clock (SCK) speed in HZ */
++              .bus_num = 0,
++              .chip_select = CONFIG_SPI_MMC_CS_CHA