From: Florian Fainelli <florian@openwrt.org>
Date: Mon, 15 Oct 2012 18:54:34 +0000 (+0000)
Subject: merge the RDC R-321x target as a subtarget of x86
X-Git-Tag: reboot~12602
X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;h=60ecd5fe04ebeaefedad4d06a756bc46bc772638;p=openwrt%2Fstaging%2Fxback.git

merge the RDC R-321x target as a subtarget of x86

SVN-Revision: 33779
---

diff --git a/target/linux/rdc/Makefile b/target/linux/rdc/Makefile
deleted file mode 100644
index db97a33377..0000000000
--- a/target/linux/rdc/Makefile
+++ /dev/null
@@ -1,30 +0,0 @@
-#
-# Copyright (C) 2006-2012 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-include $(TOPDIR)/rules.mk
-
-ARCH:=i386
-BOARD:=rdc
-BOARDNAME:=RDC 321x
-FEATURES:=squashfs jffs2 pci usb pcmcia
-CFLAGS:=-Os -pipe -march=i486 -mtune=i486 -fno-caller-saves
-MAINTAINER:=Florian Fainelli <florian@openwrt.org>
-
-LINUX_VERSION:=3.3.8
-
-include $(INCLUDE_DIR)/target.mk
-
-DEFAULT_PACKAGES += kmod-llc kmod-stp kmod-bridge kmod-8021q \
-		    wpad-mini kmod-libphy kmod-r6040 kmod-input-core \
-		    kmod-input-polldev kmod-input-gpio-buttons kmod-button-hotplug \
-		    kmod-rdc321x-wdt
-
-define Target/Description
-        Build firmware images for RDC321x based routers
-        (e.g. Airlink101 AR525W, Linksys WRT54GR, Sitecom WL-153)
-endef
-
-$(eval $(call BuildTarget))
diff --git a/target/linux/rdc/base-files/etc/config/network b/target/linux/rdc/base-files/etc/config/network
deleted file mode 100644
index 44c57940e2..0000000000
--- a/target/linux/rdc/base-files/etc/config/network
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (C) 2009 OpenWrt.org
-
-config interface loopback
-        option ifname   lo
-        option proto    static
-        option ipaddr   127.0.0.1
-        option netmask  255.0.0.0
-
-config interface lan
-        option ifname   eth1
-        option type     bridge
-        option proto    static
-        option ipaddr   192.168.1.1
-        option netmask  255.255.255.0
-
-config interface wan
-	option ifname	eth0
-	option proto	dhcp
diff --git a/target/linux/rdc/base-files/etc/diag.sh b/target/linux/rdc/base-files/etc/diag.sh
deleted file mode 100644
index 8d5c38262c..0000000000
--- a/target/linux/rdc/base-files/etc/diag.sh
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/bin/sh
-# Copyright (C) 2007 OpenWrt.org
-
-set_led() {
-	local led="$1"
-	local state="$2"
-	[ -d "/sys/class/leds/rdc321x:$led" ] && echo "$state" > "/sys/class/leds/rdc321x:$led/brightness"
-}
-
-set_state() {
-	case "$1" in
-		preinit)
-			set_led dmz 1
-		;;
-		done)
-			set_led dmz 0
-		;;
-	esac
-}
diff --git a/target/linux/rdc/base-files/lib/preinit/05_set_ether_mac_rdc b/target/linux/rdc/base-files/lib/preinit/05_set_ether_mac_rdc
deleted file mode 100644
index 4640e008fa..0000000000
--- a/target/linux/rdc/base-files/lib/preinit/05_set_ether_mac_rdc
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/bin/sh
-# Copyright (C) 2009-2012 OpenWrt.org
-
-. /lib/functions/boot.sh
-
-r6040_module() {
-	insmod libphy
-	insmod swconfig
-	insmod ip17xx
-	sleep 1
-	insmod r6040
-}
-
-set_ether_mac() {
-	kernel=$(grep firmware /proc/mtd | awk -F: '{print $1}')
-	[ -n "$kernel" ] && hdr=$(dd if=/dev/$kernel count=4 bs=1 2> /dev/null)
-	[ "$hdr" = "CSYS" ] && config=$(find_mtd_part config)
-	if [ -n "$config" ]; then
-		mac0=$(hexdump -n 6 -e '6/1 ":%X"' -s 24583 $config | cut -c2-)
-		[ "$mac0" = "FF:FF:FF:FF:FF:FF" -o "$mac0" = "0:0:0:0:0:0" ] && unset mac0
-		mac1=$(hexdump -n 6 -e '6/1 ":%X"' -s 24589 $config | cut -c2-)
-		[ "$mac1" = "FF:FF:FF:FF:FF:FF" -o "$mac1" = "0:0:0:0:0:0" ] && unset mac1
-	fi
-	if [ -n "$mac0" ]; then
-		logger -t kernel -p user.info "r6040: Setting MAC for eth0 to $mac0"
-		ifconfig eth0 hw ether "$mac0"
-	fi
-	if [ -n "$mac1" ]; then
-		logger -t kernel -p user.info "r6040: Setting MAC for eth1 to $mac1"
-		ifconfig eth1 hw ether "$mac1"
-	fi
-}
-
-boot_hook_add preinit_main r6040_module
-boot_hook_add preinit_main set_ether_mac
-
diff --git a/target/linux/rdc/base-files/lib/upgrade/platform.sh b/target/linux/rdc/base-files/lib/upgrade/platform.sh
deleted file mode 100644
index 6348a6990b..0000000000
--- a/target/linux/rdc/base-files/lib/upgrade/platform.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-PART_NAME=firmware
-
-platform_check_image() {
-	[ "$(get_magic_word $(find_mtd_part firmware))" -eq "$(get_magic_word "$1")" ] && return 0
-
-	echo "Invalid image type. Please use an appropriate .bin file"
-	return 1
-}
-
-# use default for platform_do_upgrade()
diff --git a/target/linux/rdc/config-3.3 b/target/linux/rdc/config-3.3
deleted file mode 100644
index 33e27ebab4..0000000000
--- a/target/linux/rdc/config-3.3
+++ /dev/null
@@ -1,326 +0,0 @@
-# CONFIG_60XX_WDT is not set
-# CONFIG_64BIT is not set
-# CONFIG_ACPI is not set
-# CONFIG_ACQUIRE_WDT is not set
-# CONFIG_ADVANTECH_WDT is not set
-# CONFIG_ALIM1535_WDT is not set
-# CONFIG_ALIX is not set
-CONFIG_ARCH_BINFMT_ELF_RANDOMIZE_PIE=y
-CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig"
-CONFIG_ARCH_DISCARD_MEMBLOCK=y
-CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
-CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y
-CONFIG_ARCH_HAS_CPU_RELAX=y
-CONFIG_ARCH_HAS_DEFAULT_IDLE=y
-CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG=y
-CONFIG_ARCH_HIBERNATION_POSSIBLE=y
-CONFIG_ARCH_HWEIGHT_CFLAGS="-fcall-saved-ecx -fcall-saved-edx"
-CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-CONFIG_ARCH_RANDOM=y
-CONFIG_ARCH_REQUIRE_GPIOLIB=y
-CONFIG_ARCH_SELECT_MEMORY_MODEL=y
-CONFIG_ARCH_SPARSEMEM_ENABLE=y
-CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
-CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y
-CONFIG_ARCH_SUSPEND_POSSIBLE=y
-CONFIG_ARCH_WANT_FRAME_POINTERS=y
-CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
-# CONFIG_ARPD is not set
-# CONFIG_AUDIT_ARCH is not set
-# CONFIG_BASE_FULL is not set
-CONFIG_BASE_SMALL=1
-CONFIG_BCMA_POSSIBLE=y
-# CONFIG_BLK_DEV_INITRD is not set
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=16
-CONFIG_BLK_DEV_RAM_SIZE=4096
-CONFIG_BOUNCE=y
-CONFIG_BRIDGE=m
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_CLKBLD_I8253=y
-CONFIG_CLKEVT_I8253=y
-CONFIG_CLKSRC_I8253=y
-CONFIG_CLOCKSOURCE_WATCHDOG=y
-CONFIG_CMDLINE="console=uart,io,0x3f8 rootfstype=squashfs,jffs2"
-CONFIG_CMDLINE_BOOL=y
-# CONFIG_CMDLINE_OVERRIDE is not set
-# CONFIG_COMPAT_VDSO is not set
-# CONFIG_CPU5_WDT is not set
-CONFIG_CPU_IDLE=y
-CONFIG_CPU_IDLE_GOV_LADDER=y
-# CONFIG_CPU_SUP_AMD is not set
-# CONFIG_CPU_SUP_CENTAUR is not set
-# CONFIG_CPU_SUP_CYRIX_32 is not set
-# CONFIG_CPU_SUP_INTEL is not set
-# CONFIG_CPU_SUP_TRANSMETA_32 is not set
-# CONFIG_CPU_SUP_UMC_32 is not set
-# CONFIG_CRYPTO_SERPENT_SSE2_586 is not set
-# CONFIG_DCDBAS is not set
-# CONFIG_DEBUG_BOOT_PARAMS is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_VIRTUAL is not set
-CONFIG_DEFAULT_IO_DELAY_TYPE=0
-# CONFIG_DELL_RBU is not set
-# CONFIG_DMI is not set
-CONFIG_DOUBLEFAULT=y
-# CONFIG_EARLY_PRINTK is not set
-# CONFIG_EDD is not set
-# CONFIG_EUROTECH_WDT is not set
-# CONFIG_F71808E_WDT is not set
-# CONFIG_FIRMWARE_MEMMAP is not set
-CONFIG_FIX_EARLYCON_MEM=y
-CONFIG_GENERIC_BUG=y
-CONFIG_GENERIC_CLOCKEVENTS=y
-CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-CONFIG_GENERIC_CLOCKEVENTS_MIN_ADJUST=y
-CONFIG_GENERIC_CMOS_UPDATE=y
-CONFIG_GENERIC_FIND_FIRST_BIT=y
-CONFIG_GENERIC_GPIO=y
-CONFIG_GENERIC_IOMAP=y
-CONFIG_GENERIC_IRQ_SHOW=y
-CONFIG_GENERIC_ISA_DMA=y
-CONFIG_GENERIC_PCI_IOMAP=y
-# CONFIG_GENERIC_TIME_VSYSCALL is not set
-# CONFIG_GEN_RTC is not set
-# CONFIG_GOOGLE_FIRMWARE is not set
-CONFIG_GPIOLIB=y
-CONFIG_GPIO_RDC321X=y
-CONFIG_GPIO_SYSFS=y
-# CONFIG_HAMRADIO is not set
-# CONFIG_HANGCHECK_TIMER is not set
-CONFIG_HAS_DMA=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAVE_AOUT=y
-CONFIG_HAVE_ARCH_JUMP_LABEL=y
-CONFIG_HAVE_ARCH_KGDB=y
-CONFIG_HAVE_ARCH_KMEMCHECK=y
-CONFIG_HAVE_ARCH_TRACEHOOK=y
-CONFIG_HAVE_ATOMIC_IOMAP=y
-CONFIG_HAVE_CMPXCHG_DOUBLE=y
-CONFIG_HAVE_CMPXCHG_LOCAL=y
-CONFIG_HAVE_C_RECORDMCOUNT=y
-CONFIG_HAVE_DMA_API_DEBUG=y
-CONFIG_HAVE_DMA_ATTRS=y
-CONFIG_HAVE_DYNAMIC_FTRACE=y
-CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
-CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
-CONFIG_HAVE_FUNCTION_GRAPH_FP_TEST=y
-CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
-CONFIG_HAVE_FUNCTION_TRACER=y
-CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y
-CONFIG_HAVE_GENERIC_DMA_COHERENT=y
-CONFIG_HAVE_GENERIC_HARDIRQS=y
-CONFIG_HAVE_HW_BREAKPOINT=y
-CONFIG_HAVE_IDE=y
-CONFIG_HAVE_IOREMAP_PROT=y
-CONFIG_HAVE_IRQ_WORK=y
-CONFIG_HAVE_KERNEL_BZIP2=y
-CONFIG_HAVE_KERNEL_GZIP=y
-CONFIG_HAVE_KERNEL_LZMA=y
-CONFIG_HAVE_KERNEL_LZO=y
-CONFIG_HAVE_KERNEL_XZ=y
-CONFIG_HAVE_KVM=y
-CONFIG_HAVE_LATENCYTOP_SUPPORT=y
-CONFIG_HAVE_MEMBLOCK=y
-CONFIG_HAVE_MEMBLOCK_NODE_MAP=y
-CONFIG_HAVE_MIXED_BREAKPOINTS_REGS=y
-CONFIG_HAVE_MMIOTRACE_SUPPORT=y
-CONFIG_HAVE_OPROFILE=y
-CONFIG_HAVE_OPTPROBES=y
-CONFIG_HAVE_PCSPKR_PLATFORM=y
-CONFIG_HAVE_PERF_EVENTS=y
-CONFIG_HAVE_PERF_EVENTS_NMI=y
-CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
-CONFIG_HAVE_SETUP_PER_CPU_AREA=y
-CONFIG_HAVE_SPARSE_IRQ=y
-CONFIG_HAVE_SYSCALL_TRACEPOINTS=y
-CONFIG_HAVE_TEXT_POKE_SMP=y
-CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
-CONFIG_HAVE_USER_RETURN_NOTIFIER=y
-# CONFIG_HIGHMEM4G is not set
-# CONFIG_HIGH_RES_TIMERS is not set
-# CONFIG_HPET_TIMER is not set
-# CONFIG_HP_WATCHDOG is not set
-# CONFIG_HUGETLBFS is not set
-CONFIG_HZ=250
-# CONFIG_HZ_100 is not set
-CONFIG_HZ_250=y
-# CONFIG_I6300ESB_WDT is not set
-# CONFIG_I8K is not set
-# CONFIG_IB700_WDT is not set
-# CONFIG_IBMASR is not set
-CONFIG_ILLEGAL_POINTER_VALUE=0
-CONFIG_INSTRUCTION_DECODER=y
-# CONFIG_IOMMU_HELPER is not set
-# CONFIG_IOMMU_STRESS is not set
-CONFIG_IO_DELAY_0X80=y
-# CONFIG_IO_DELAY_0XED is not set
-# CONFIG_IO_DELAY_NONE is not set
-CONFIG_IO_DELAY_TYPE_0X80=0
-CONFIG_IO_DELAY_TYPE_0XED=1
-CONFIG_IO_DELAY_TYPE_NONE=3
-CONFIG_IO_DELAY_TYPE_UDELAY=2
-# CONFIG_IO_DELAY_UDELAY is not set
-# CONFIG_IP_MROUTE is not set
-CONFIG_IRQ_FORCED_THREADING=y
-# CONFIG_IRQ_TIME_ACCOUNTING is not set
-CONFIG_IRQ_WORK=y
-# CONFIG_ISA is not set
-CONFIG_ISA_DMA_API=y
-# CONFIG_ISCSI_IBFT_FIND is not set
-# CONFIG_IT8712F_WDT is not set
-# CONFIG_IT87_WDT is not set
-# CONFIG_ITCO_WDT is not set
-# CONFIG_JFFS2_SUMMARY is not set
-CONFIG_KTIME_SCALAR=y
-CONFIG_LEDS_GPIO=y
-# CONFIG_LEDS_TRIGGER_NETDEV is not set
-# CONFIG_LEDS_TRIGGER_TIMER is not set
-CONFIG_LLC=m
-# CONFIG_M386 is not set
-CONFIG_M486=y
-# CONFIG_M586 is not set
-# CONFIG_M586MMX is not set
-# CONFIG_M586TSC is not set
-# CONFIG_M686 is not set
-# CONFIG_MACHZ_WDT is not set
-CONFIG_MATH_EMULATION=y
-# CONFIG_MATOM is not set
-# CONFIG_MCA is not set
-# CONFIG_MCORE2 is not set
-# CONFIG_MCRUSOE is not set
-# CONFIG_MCYRIXIII is not set
-# CONFIG_MEFFICEON is not set
-# CONFIG_MELAN is not set
-# CONFIG_MEMTEST is not set
-CONFIG_MFD_CORE=y
-CONFIG_MFD_RDC321X=y
-# CONFIG_MGEODEGX1 is not set
-# CONFIG_MGEODE_LX is not set
-# CONFIG_MICROCODE is not set
-# CONFIG_MK6 is not set
-# CONFIG_MK7 is not set
-# CONFIG_MK8 is not set
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MPENTIUM4 is not set
-# CONFIG_MPENTIUMII is not set
-# CONFIG_MPENTIUMIII is not set
-# CONFIG_MPENTIUMM is not set
-# CONFIG_MTD_CFI_INTELEXT is not set
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_NETSC520 is not set
-CONFIG_MTD_PHYSMAP=y
-# CONFIG_MTD_SC520CDP is not set
-# CONFIG_MTD_TS5500 is not set
-# CONFIG_MTRR is not set
-# CONFIG_MVIAC3_2 is not set
-# CONFIG_MVIAC7 is not set
-# CONFIG_MWINCHIP3D is not set
-# CONFIG_MWINCHIPC6 is not set
-# CONFIG_NEED_DMA_MAP_STATE is not set
-CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y
-CONFIG_NEED_PER_CPU_KM=y
-CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y
-CONFIG_NEED_SG_DMA_LENGTH=y
-CONFIG_NLS=y
-CONFIG_NOHIGHMEM=y
-CONFIG_NO_BOOTMEM=y
-CONFIG_NR_CPUS=1
-# CONFIG_NSC_GPIO is not set
-# CONFIG_OLPC is not set
-CONFIG_OPROFILE_NMI_TIMER=y
-# CONFIG_OPTIMIZE_INLINING is not set
-CONFIG_OUTPUT_FORMAT="elf32-i386"
-CONFIG_PAGEFLAGS_EXTENDED=y
-CONFIG_PAGE_OFFSET=0xC0000000
-# CONFIG_PARAVIRT_GUEST is not set
-# CONFIG_PC8736x_GPIO is not set
-# CONFIG_PC87413_WDT is not set
-CONFIG_PCI=y
-# CONFIG_PCIEPORTBUS is not set
-CONFIG_PCI_BIOS=y
-CONFIG_PCI_DIRECT=y
-CONFIG_PCI_DISABLE_COMMON_QUIRKS=y
-CONFIG_PCI_DOMAINS=y
-CONFIG_PCI_GOANY=y
-# CONFIG_PCI_GOBIOS is not set
-# CONFIG_PCI_GODIRECT is not set
-# CONFIG_PCI_GOMMCONFIG is not set
-# CONFIG_PCI_QUIRKS is not set
-# CONFIG_PDA_POWER is not set
-CONFIG_PERF_EVENTS=y
-CONFIG_PHYSICAL_ALIGN=0x100000
-CONFIG_PHYSICAL_START=0x100000
-CONFIG_POWER_SUPPLY=y
-# CONFIG_PREEMPT_RCU is not set
-CONFIG_PROCESSOR_SELECT=y
-# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set
-CONFIG_RDC321X_WDT=m
-# CONFIG_RELOCATABLE is not set
-# CONFIG_RTC is not set
-# CONFIG_RWSEM_GENERIC_SPINLOCK is not set
-CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-# CONFIG_SBC7240_WDT is not set
-# CONFIG_SBC8360_WDT is not set
-# CONFIG_SBC_EPX_C3_WATCHDOG is not set
-# CONFIG_SC1200_WDT is not set
-# CONFIG_SC520_WDT is not set
-# CONFIG_SCHED_HRTICK is not set
-# CONFIG_SCSI_DMA is not set
-# CONFIG_SCx200 is not set
-# CONFIG_SHMEM is not set
-# CONFIG_SMSC37B787_WDT is not set
-# CONFIG_SMSC_SCH311X_WDT is not set
-CONFIG_SPARSEMEM_STATIC=y
-CONFIG_SPARSE_IRQ=y
-CONFIG_STP=m
-# CONFIG_TELCLOCK is not set
-CONFIG_THERMAL=y
-# CONFIG_TOSHIBA is not set
-# CONFIG_TRANSPARENT_HUGEPAGE is not set
-CONFIG_UID16=y
-CONFIG_USB_ARCH_HAS_XHCI=y
-CONFIG_USB_SUPPORT=y
-CONFIG_USER_STACKTRACE_SUPPORT=y
-# CONFIG_VIA_WDT is not set
-CONFIG_VLAN_8021Q=m
-# CONFIG_VM86 is not set
-# CONFIG_VMWARE_BALLOON is not set
-# CONFIG_W83697UG_WDT is not set
-# CONFIG_WAFER_WDT is not set
-CONFIG_X86=y
-CONFIG_X86_32=y
-# CONFIG_X86_32_IRIS is not set
-CONFIG_X86_32_LAZY_GS=y
-# CONFIG_X86_64 is not set
-CONFIG_X86_ALIGNMENT_16=y
-CONFIG_X86_BSWAP=y
-# CONFIG_X86_CHECK_BIOS_CORRUPTION is not set
-CONFIG_X86_CMPXCHG=y
-# CONFIG_X86_CPUID is not set
-CONFIG_X86_EXTENDED_PLATFORM=y
-CONFIG_X86_F00F_BUG=y
-# CONFIG_X86_GENERIC is not set
-CONFIG_X86_INTERNODE_CACHE_SHIFT=4
-CONFIG_X86_INVD_BUG=y
-CONFIG_X86_INVLPG=y
-CONFIG_X86_L1_CACHE_SHIFT=4
-# CONFIG_X86_MCE is not set
-CONFIG_X86_MINIMUM_CPU_FAMILY=4
-# CONFIG_X86_MSR is not set
-# CONFIG_X86_PAE is not set
-# CONFIG_X86_PLATFORM_DEVICES is not set
-CONFIG_X86_POPAD_OK=y
-# CONFIG_X86_PPRO_FENCE is not set
-# CONFIG_X86_PTDUMP is not set
-CONFIG_X86_RDC321X=y
-CONFIG_X86_REBOOTFIXUPS=y
-CONFIG_X86_RESERVE_LOW=64
-# CONFIG_X86_UP_APIC is not set
-# CONFIG_X86_VERBOSE_BOOTUP is not set
-# CONFIG_X86_WANT_INTEL_MID is not set
-CONFIG_X86_WP_WORKS_OK=y
-CONFIG_X86_XADD=y
-CONFIG_XZ_DEC=y
-# CONFIG_ZONE_DMA32 is not set
diff --git a/target/linux/rdc/image/Makefile b/target/linux/rdc/image/Makefile
deleted file mode 100644
index 7086b998cd..0000000000
--- a/target/linux/rdc/image/Makefile
+++ /dev/null
@@ -1,47 +0,0 @@
-#
-# Copyright (C) 2006-2010 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-include $(TOPDIR)/rules.mk
-include $(INCLUDE_DIR)/image.mk
-
-define Image/Prepare
-	$(CP) $(LINUX_DIR)/arch/x86/boot/bzImage $(KDIR)/bzImage
-endef
-
-define Image/Build/ar525w
-	cp $(KDIR)/bzImage $(KDIR)/bzImage.tmp
-	$(SCRIPT_DIR)/pad_image $(1) $(KDIR)/bzImage.tmp $(KDIR)/root.$(1) 32
-	$(STAGING_DIR_HOST)/bin/airlink -b 1 $(KDIR)/bzImage.tmp $(KDIR)/root.$(1) $(BIN_DIR)/$(IMG_PREFIX)-$(1)-$(2).img
-	$(STAGING_DIR_HOST)/bin/airlink -e -b 1 $(KDIR)/bzImage.tmp $(KDIR)/root.$(1) $(BIN_DIR)/$(IMG_PREFIX)-$(1)-$(2)-web.img
-endef
-
-define Image/Build/sitecom
-	cp $(KDIR)/bzImage $(KDIR)/bzImage.tmp
-	#32k config data + 20 bytes header + 2 bytes checksum after kernel image
-	$(SCRIPT_DIR)/pad_image $(1) $(KDIR)/bzImage.tmp $(KDIR)/root.$(1) 32790
-	$(TOPDIR)/target/linux/rdc/image/mkimg_sitecom.pl $(KDIR)/bzImage.tmp > $(KDIR)/tmp.img
-	cat $(KDIR)/root.$(1) >> $(KDIR)/tmp.img
-	cp $(KDIR)/tmp.img $(BIN_DIR)/$(IMG_PREFIX)-$(1)-$(2).img
-	rm $(KDIR)/tmp.img $(KDIR)/bzImage.tmp
-endef
-
-define Image/Build/bifferboard
-	$(TOPDIR)/target/linux/rdc/image/mkimg_bifferboard.py $(KDIR)/bzImage $(KDIR)/root.$(1) $(BIN_DIR)/$(IMG_PREFIX)-$(1)-$(2).img
-endef
-
-define Image/Build/Initramfs
-	$(CP) $(KDIR)/bzImage $(BIN_DIR)/$(IMG_PREFIX)-ramfs.bzImage
-endef
-
-define Image/Build
-	$(CP) $(KDIR)/bzImage $(BIN_DIR)/$(IMG_PREFIX).bzImage
-	$(call Image/Build/$(PROFILE),$(1),$(PROFILE),$(patsubst jffs2-%k,%,$(1)))
-ifeq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),y)
-	$(call Image/Build/Initramfs)
-endif
-endef
-
-$(eval $(call BuildImage))
diff --git a/target/linux/rdc/image/mkimg_bifferboard.py b/target/linux/rdc/image/mkimg_bifferboard.py
deleted file mode 100755
index 5444abebd1..0000000000
--- a/target/linux/rdc/image/mkimg_bifferboard.py
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/usr/bin/env python
-
-"""
-   Create firmware for 4/8MB Bifferboards, suitable for uploading using
-   either bb_upload8.py or bb_eth_upload8.py
-"""
-
-import struct, sys
-
-# Increase the kmax value if the script gives errors about the kernel being 
-# too large.  You need to set the Biffboot kmax value to the same value you
-# use here.
-kmax = 0x10
-
-# No need to change this for 4MB devices, it's only used to tell you if 
-# the firmware is too large!
-flash_size = 0x800000
-
-# This is always the same, for 1MB, 4MB and 8MB devices
-config_extent = 0x6000
-
-kernel_extent = kmax * 0x10000
-
-if __name__ == "__main__":
-
-  if len(sys.argv) != 4:
-    print  "usage: mkimg_bifferboard.py <kernel> <rootfs> <output file>"
-    sys.exit(-1)
-    
-  bzimage = sys.argv[1]
-  rootfs = sys.argv[2]
-  target = sys.argv[3]
-
-  # Kernel first
-  fw = file(bzimage).read()
-  if len(fw) > (kernel_extent - config_extent):
-    raise IOError("Kernel too large")
-
-  # Pad up to end of kernel partition
-  while len(fw) < (kernel_extent - config_extent):
-    fw += "\xff"
-
-  fw += file(rootfs).read()
-
-  # Check length of total
-  if len(fw) > (flash_size - 0x10000 - config_extent):
-    raise IOError("Rootfs too large")
-
-  file(target,"wb").write(fw)
-  print "Firmware written to '%s'" % target
diff --git a/target/linux/rdc/image/mkimg_sitecom.pl b/target/linux/rdc/image/mkimg_sitecom.pl
deleted file mode 100755
index cfd5e652f0..0000000000
--- a/target/linux/rdc/image/mkimg_sitecom.pl
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/perl
-
-open (bzimg, @ARGV[0]);
-while (<bzimg>) { $i .= $_; }
-$i .= pack "v", -(unpack "%v*", $i); 
-print "CSYS";
-print pack("V", length($i));
-print pack("V", 0);
-print "WRRM";
-print pack("V", length($i));
-print $i;
diff --git a/target/linux/rdc/modules.mk b/target/linux/rdc/modules.mk
deleted file mode 100644
index ce7cbdf6e3..0000000000
--- a/target/linux/rdc/modules.mk
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# Copyright (C) 2010 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-define KernelPackage/rdc321x-wdt
-  SUBMENU:=$(OTHER_MENU)
-  TITLE:=RDC321x watchdog
-  DEPENDS:=@TARGET_rdc
-  KCONFIG:=CONFIG_RDC321X_WDT
-  FILES:=$(LINUX_DIR)/drivers/$(WATCHDOG_DIR)/rdc321x_wdt.ko
-  AUTOLOAD:=$(call AutoLoad,50,rdc321x_wdt)
-endef
-
-define KernelPackage/rdc321x-wdt/description
-  RDC-321x watchdog driver
-endef
-
-$(eval $(call KernelPackage,rdc321x-wdt))
-
diff --git a/target/linux/rdc/patches-3.3/006-yenta_mistery.patch b/target/linux/rdc/patches-3.3/006-yenta_mistery.patch
deleted file mode 100644
index 65893ea2b9..0000000000
--- a/target/linux/rdc/patches-3.3/006-yenta_mistery.patch
+++ /dev/null
@@ -1,20 +0,0 @@
---- a/drivers/pcmcia/yenta_socket.c
-+++ b/drivers/pcmcia/yenta_socket.c
-@@ -1233,6 +1233,17 @@ static int __devinit yenta_probe(struct
- 
- 	/* We must finish initialization here */
- 
-+#ifdef CONFIG_X86_RDC321X
-+/* #define YO_TI1510_DATASHEET_GUY_EXPLAIN_THIS_JUNK 0x0044f044 */
-+#define YO_TI1510_DATASHEET_GUY_EXPLAIN_THIS_JUNK 0x0844b060
-+/* #define YO_TI1510_DATASHEET_GUY_EXPLAIN_THIS_JUNK 0x0044d044 */
-+
-+	config_writel(socket, 32*4, YO_TI1510_DATASHEET_GUY_EXPLAIN_THIS_JUNK);
-+	config_writel(socket, 35*4, 0x00000022);
-+	config_writel(socket, 36*4, 0x60200000);
-+	config_writel(socket, 40*4, 0x7e020000);
-+#endif
-+
- 	if (!socket->cb_irq || request_irq(socket->cb_irq, yenta_interrupt, IRQF_SHARED, "yenta", socket)) {
- 		/* No IRQ or request_irq failed. Poll */
- 		socket->cb_irq = 0; /* But zero is a valid IRQ number. */
diff --git a/target/linux/rdc/patches-3.3/009-rdc321x_select_embedded.patch b/target/linux/rdc/patches-3.3/009-rdc321x_select_embedded.patch
deleted file mode 100644
index 2d094fc743..0000000000
--- a/target/linux/rdc/patches-3.3/009-rdc321x_select_embedded.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/arch/x86/Kconfig
-+++ b/arch/x86/Kconfig
-@@ -466,6 +466,8 @@ config X86_RDC321X
- 	depends on X86_EXTENDED_PLATFORM
- 	select M486
- 	select X86_REBOOTFIXUPS
-+	select EMBEDDED
-+	select ARCH_REQUIRE_GPIOLIB
- 	---help---
- 	  This option is needed for RDC R-321x system-on-chip, also known
- 	  as R-8610-(G).
diff --git a/target/linux/rdc/patches-3.3/010-rdc_cpu_ident.patch b/target/linux/rdc/patches-3.3/010-rdc_cpu_ident.patch
deleted file mode 100644
index 0f2314a3e2..0000000000
--- a/target/linux/rdc/patches-3.3/010-rdc_cpu_ident.patch
+++ /dev/null
@@ -1,176 +0,0 @@
---- /dev/null
-+++ b/Documentation/x86/rdc.txt
-@@ -0,0 +1,69 @@
-+
-+Introduction
-+============
-+
-+RDC (http://www.rdc.com.tw) have been manufacturing x86-compatible SoC
-+(system-on-chips) for a number of years.  They are not the fastest of
-+CPUs (clock speeds ranging from 133-150MHz) but 486SX compatibility
-+coupled with very low power consumption[1] and low cost make them ideal
-+for embedded applications.
-+
-+
-+Where to find
-+=============
-+
-+RDC chips show up in numerous embedded devices, but be careful since
-+many of them will not run Linux 2.6 without significant expertise.
-+
-+There are several variants of what the linux kernel refers to generically
-+as RDC321X:  R8610, R321x, S3282 and AMRISC20000.
-+
-+R321x: Found in various routers, see the OpenWrt project for details,
-+   http://wiki.openwrt.org/oldwiki/rdcport
-+
-+R8610: Found on the RDC evaluation board
-+   http://www.ivankuten.com/system-on-chip-soc/rdc-r8610/
-+
-+AMRISC20000: Found in the MGB-100 wireless hard disk
-+   http://tintuc.no-ip.com/linux/tipps/mgb100/
-+
-+S3282: Found in various NAS devices, including the Bifferboard
-+   http://www.bifferos.com
-+
-+
-+Kernel Configuration
-+====================
-+
-+Add support for this CPU with CONFIG_X86_RDC321X.  Ensure that maths
-+emulation is included (CONFIG_MATH_EMULATION selected) and avoid MCE
-+(CONFIG_X86_MCE not selected).
-+
-+
-+CPU detection
-+=============
-+
-+None of these chips support the cpuid instruction, so as with some
-+other x86 compatible SoCs, we must check the north bridge and look
-+for specific 'signature' PCI device config.
-+
-+The current detection code has been tested only on the Bifferboard
-+(S3282 CPU), please send bug reports or success stories with
-+other devices to bifferos@yahoo.co.uk.
-+
-+
-+Credits
-+=======
-+
-+Many thanks to RDC for providing the customer codes to allow
-+detection of all known variants, without which this detection code
-+would have been very hard to ascertain.
-+
-+
-+References
-+==========
-+
-+[1] S3282 in certain NAS solutions consumes less than 1W
-+
-+
-+mark@bifferos.com 2009
-+
---- a/arch/x86/Kconfig
-+++ b/arch/x86/Kconfig
-@@ -464,6 +464,7 @@ config X86_RDC321X
- 	bool "RDC R-321x SoC"
- 	depends on X86_32
- 	depends on X86_EXTENDED_PLATFORM
-+	select PCI
- 	select M486
- 	select X86_REBOOTFIXUPS
- 	select EMBEDDED
---- a/arch/x86/include/asm/processor.h
-+++ b/arch/x86/include/asm/processor.h
-@@ -119,7 +119,8 @@ struct cpuinfo_x86 {
- #define X86_VENDOR_CENTAUR	5
- #define X86_VENDOR_TRANSMETA	7
- #define X86_VENDOR_NSC		8
--#define X86_VENDOR_NUM		9
-+#define X86_VENDOR_RDC		9
-+#define X86_VENDOR_NUM		10
- 
- #define X86_VENDOR_UNKNOWN	0xff
- 
---- a/arch/x86/kernel/cpu/Makefile
-+++ b/arch/x86/kernel/cpu/Makefile
-@@ -26,6 +26,7 @@ obj-$(CONFIG_CPU_SUP_CYRIX_32)		+= cyrix
- obj-$(CONFIG_CPU_SUP_CENTAUR)		+= centaur.o
- obj-$(CONFIG_CPU_SUP_TRANSMETA_32)	+= transmeta.o
- obj-$(CONFIG_CPU_SUP_UMC_32)		+= umc.o
-+obj-$(CONFIG_X86_RDC321X)		+= rdc.o
- 
- obj-$(CONFIG_PERF_EVENTS)		+= perf_event.o
- 
---- /dev/null
-+++ b/arch/x86/kernel/cpu/rdc.c
-@@ -0,0 +1,69 @@
-+/*
-+ * See Documentation/x86/rdc.txt
-+ *
-+ * mark@bifferos.com
-+ */
-+
-+#include <linux/pci.h>
-+#include <asm/pci-direct.h>
-+#include "cpu.h"
-+
-+
-+static void __cpuinit rdc_identify(struct cpuinfo_x86 *c)
-+{
-+	u16 vendor, device;
-+	u32 customer_id;
-+
-+	if (!early_pci_allowed())
-+		return;
-+
-+	/* RDC CPU is SoC (system-on-chip), Northbridge is always present */
-+	vendor = read_pci_config_16(0, 0, 0, PCI_VENDOR_ID);
-+	device = read_pci_config_16(0, 0, 0, PCI_DEVICE_ID);
-+
-+	if (vendor != PCI_VENDOR_ID_RDC || device != PCI_DEVICE_ID_RDC_R6020)
-+		return;  /* not RDC */
-+	/*
-+	 * NB: We could go on and check other devices, e.g. r6040 NIC, but
-+	 * that's probably overkill
-+	 */
-+
-+	customer_id = read_pci_config(0, 0, 0, 0x90);
-+
-+	switch (customer_id) {
-+		/* id names are from RDC */
-+	case 0x00321000:
-+		strcpy(c->x86_model_id, "R3210/R3211");
-+		break;
-+	case 0x00321001:
-+		strcpy(c->x86_model_id, "AMITRISC20000/20010");
-+		break;
-+	case 0x00321002:
-+		strcpy(c->x86_model_id, "R3210X/Edimax");
-+		break;
-+	case 0x00321003:
-+		strcpy(c->x86_model_id, "R3210/Kcodes");
-+		break;
-+	case 0x00321004:  /* tested */
-+		strcpy(c->x86_model_id, "S3282/CodeTek");
-+		break;
-+	case 0x00321007:
-+		strcpy(c->x86_model_id, "R8610");
-+		break;
-+	default:
-+		pr_info("RDC CPU: Unrecognised Customer ID (0x%x) please report to linux-kernel@vger.kernel.org\n", customer_id);
-+		break;
-+	}
-+
-+	strcpy(c->x86_vendor_id, "RDC");
-+	c->x86_vendor = X86_VENDOR_RDC;
-+}
-+
-+static const struct cpu_dev __cpuinitconst rdc_cpu_dev = {
-+	.c_vendor	= "RDC",
-+	.c_ident	= { "RDC" },
-+	.c_identify	= rdc_identify,
-+	.c_x86_vendor	= X86_VENDOR_RDC,
-+};
-+
-+cpu_dev_register(rdc_cpu_dev);
diff --git a/target/linux/rdc/patches-3.3/011-tune_lzma_options.patch b/target/linux/rdc/patches-3.3/011-tune_lzma_options.patch
deleted file mode 100644
index e6fd44d4e1..0000000000
--- a/target/linux/rdc/patches-3.3/011-tune_lzma_options.patch
+++ /dev/null
@@ -1,22 +0,0 @@
---- a/scripts/Makefile.lib
-+++ b/scripts/Makefile.lib
-@@ -296,7 +296,7 @@ cmd_bzip2 = (cat $(filter-out FORCE,$^)
- 
- quiet_cmd_lzma = LZMA    $@
- cmd_lzma = (cat $(filter-out FORCE,$^) | \
--	lzma e -d20 -lc1 -lp2 -pb2 -eos -si -so && $(call size_append, $(filter-out FORCE,$^))) > $@ || \
-+	lzma e -lc8 -eos -si -so && $(call size_append, $(filter-out FORCE,$^))) > $@ || \
- 	(rm -f $@ ; false)
- 
- quiet_cmd_lzo = LZO     $@
---- a/arch/x86/include/asm/boot.h
-+++ b/arch/x86/include/asm/boot.h
-@@ -28,7 +28,7 @@
- #error "Invalid value for CONFIG_PHYSICAL_ALIGN"
- #endif
- 
--#ifdef CONFIG_KERNEL_BZIP2
-+#if defined(CONFIG_KERNEL_BZIP2) || defined(CONFIG_KERNEL_LZMA)
- #define BOOT_HEAP_SIZE             0x400000
- #else /* !CONFIG_KERNEL_BZIP2 */
- 
diff --git a/target/linux/rdc/patches-3.3/012-export_erase_write.patch b/target/linux/rdc/patches-3.3/012-export_erase_write.patch
deleted file mode 100644
index 893d4d8252..0000000000
--- a/target/linux/rdc/patches-3.3/012-export_erase_write.patch
+++ /dev/null
@@ -1,23 +0,0 @@
---- a/drivers/mtd/mtdblock.c
-+++ b/drivers/mtd/mtdblock.c
-@@ -62,7 +62,7 @@ static void erase_callback(struct erase_
- 	wake_up(wait_q);
- }
- 
--static int erase_write (struct mtd_info *mtd, unsigned long pos,
-+int erase_write (struct mtd_info *mtd, unsigned long pos,
- 			int len, const char *buf)
- {
- 	struct erase_info erase;
---- a/include/linux/mtd/mtd.h
-+++ b/include/linux/mtd/mtd.h
-@@ -530,6 +530,9 @@ extern void register_mtd_user (struct mt
- extern int unregister_mtd_user (struct mtd_notifier *old);
- void *mtd_kmalloc_up_to(const struct mtd_info *mtd, size_t *size);
- 
-+int erase_write (struct mtd_info *mtd, unsigned long pos,
-+		 int len, const char *buf);
-+
- void mtd_erase_callback(struct erase_info *instr);
- 
- static inline int mtd_is_bitflip(int err) {
diff --git a/target/linux/rdc/patches-3.3/100-rdc_boards.patch b/target/linux/rdc/patches-3.3/100-rdc_boards.patch
deleted file mode 100644
index 958bee0064..0000000000
--- a/target/linux/rdc/patches-3.3/100-rdc_boards.patch
+++ /dev/null
@@ -1,741 +0,0 @@
---- a/arch/x86/Makefile
-+++ b/arch/x86/Makefile
-@@ -136,6 +136,9 @@ libs-y  += arch/x86/lib/
- # See arch/x86/Kbuild for content of core part of the kernel
- core-y += arch/x86/
- 
-+# RDC R-321X support
-+core-$(CONFIG_X86_RDC321X)   += arch/x86/mach-rdc321x/
-+
- # drivers-y are linked after core-y
- drivers-$(CONFIG_MATH_EMULATION) += arch/x86/math-emu/
- drivers-$(CONFIG_PCI)            += arch/x86/pci/
---- /dev/null
-+++ b/arch/x86/mach-rdc321x/Makefile
-@@ -0,0 +1,5 @@
-+#
-+# Makefile for the RDC321x specific parts of the kernel
-+#
-+obj-$(CONFIG_X86_RDC321X)	:= platform.o reboot.o boards/sitecom.o boards/ar525w.o boards/bifferboard.o boards/r8610.o
-+
---- /dev/null
-+++ b/arch/x86/mach-rdc321x/platform.c
-@@ -0,0 +1,115 @@
-+/*
-+ *  Generic RDC321x platform devices
-+ *
-+ *  Copyright (C) 2007-2009 OpenWrt.org
-+ *  Copyright (C) 2007 Florian Fainelli <florian@openwrt.org>
-+ *  Copyright (C) 2008-2009 Daniel Gimpelevich <daniel@gimpelevich.san-francisco.ca.us>
-+ *
-+ *  This program is free software; you can redistribute it and/or
-+ *  modify it under the terms of the GNU General Public License
-+ *  as published by the Free Software Foundation; either version 2
-+ *  of the License, or (at your option) any later version.
-+ *
-+ *  This program is distributed in the hope that it will be useful,
-+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *  GNU General Public License for more details.
-+ *
-+ *  You should have received a copy of the GNU General Public License
-+ *  along with this program; if not, write to the
-+ *  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-+ *  Boston, MA  02110-1301, USA.
-+ *
-+ */
-+
-+#include <linux/init.h>
-+#include <linux/platform_device.h>
-+#include <linux/mtd/map.h>
-+#include <linux/mtd/mtd.h>
-+#include <linux/mtd/physmap.h>
-+#include <linux/root_dev.h>
-+
-+#include <asm/rdc_boards.h>
-+
-+static struct rdc_platform_data rdcplat_data;
-+
-+/* LEDS */
-+static struct platform_device rdc321x_leds = {
-+	.name = "leds-gpio",
-+	.id = -1,
-+	.dev = {
-+		.platform_data = &rdcplat_data.led_data,
-+	}
-+};
-+
-+/* Button */
-+static struct platform_device rdc321x_buttons = {
-+	.name = "gpio-buttons",
-+	.id = -1,
-+	.dev = {
-+		.platform_data = &rdcplat_data.button_data,
-+	}
-+};
-+
-+static __initdata struct platform_device *rdc321x_devs[] = {
-+	&rdc321x_leds,
-+	&rdc321x_buttons,
-+};
-+
-+const char *__initdata boards[] = {
-+	"Sitecom",
-+	"AR525W",
-+	"Bifferboard",
-+	"R8610",
-+	0
-+};
-+
-+static struct map_info rdc_map_info = {
-+	.name		= "rdc_flash",
-+	.size		= 0x800000,	/* 8MB */
-+	.phys		= 0xFF800000,	/* (u32) -rdc_map_info.size */
-+	.bankwidth	= 2,
-+};
-+
-+static int __init rdc_board_setup(void)
-+{
-+	struct mtd_info *mtdinfo;
-+	struct mtd_part_parser_data *ppdata;
-+	int res;
-+
-+	simple_map_init(&rdc_map_info);
-+
-+	while (1) {
-+		rdc_map_info.virt = ioremap(rdc_map_info.phys,
-+					    rdc_map_info.size);
-+		if (rdc_map_info.virt == NULL)
-+			continue;
-+
-+		mtdinfo = do_map_probe("cfi_probe", &rdc_map_info);
-+		if (mtdinfo == NULL)
-+			mtdinfo = do_map_probe("jedec_probe", &rdc_map_info);
-+		if (mtdinfo != NULL)
-+			break;
-+
-+		iounmap(rdc_map_info.virt);
-+		if ((rdc_map_info.size >>= 1) < 0x100000)	/* 1MB */
-+			panic("RDC321x: Could not find start of flash!");
-+		rdc_map_info.phys = (u32) -rdc_map_info.size;
-+	}
-+
-+	/*
-+	 * TODO: add a new field to mtd_part_parser_data, and use that
-+	 * instead of this ugly casting
-+	 */
-+	ppdata = (struct mtd_part_parser_data *) &rdcplat_data;
-+	res = mtd_device_parse_register(mtdinfo, boards, ppdata, NULL, 0);
-+	if (res) {
-+		panic("RDC321x: can't identify board type");
-+		return -ENOSYS;
-+	}
-+
-+	ROOT_DEV = 0;
-+
-+	return platform_add_devices(rdc321x_devs, ARRAY_SIZE(rdc321x_devs));
-+}
-+late_initcall(rdc_board_setup);
---- /dev/null
-+++ b/arch/x86/mach-rdc321x/boards/ar525w.c
-@@ -0,0 +1,247 @@
-+/*
-+ * ar525w RDC321x platform devices
-+ *
-+ *  Copyright (C) 2007-2009 OpenWrt.org
-+ *  Copyright (C) 2007 Florian Fainelli <florian@openwrt.org>
-+ *  Copyright (C) 2008-2009 Daniel Gimpelevich <daniel@gimpelevich.san-francisco.ca.us>
-+ *
-+ *  This program is free software; you can redistribute it and/or
-+ *  modify it under the terms of the GNU General Public License
-+ *  as published by the Free Software Foundation; either version 2
-+ *  of the License, or (at your option) any later version.
-+ *
-+ *  This program is distributed in the hope that it will be useful,
-+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *  GNU General Public License for more details.
-+ *
-+ *  You should have received a copy of the GNU General Public License
-+ *  along with this program; if not, write to the
-+ *  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-+ *  Boston, MA  02110-1301, USA.
-+ *
-+ */
-+
-+#include <linux/init.h>
-+#include <linux/module.h>
-+#include <linux/mtd/physmap.h>
-+#include <linux/input.h>
-+#include <linux/vmalloc.h>
-+#include <linux/mtd/mtd.h>
-+#include <linux/slab.h>
-+
-+#include <asm/rdc_boards.h>
-+
-+struct image_header {
-+	char magic[4];              /* ASICII: GMTK */
-+	u32 checksum;               /* CRC32 */
-+	u32 version;                /* x.x.x.x */
-+	u32 kernelsz;               /* The size of the kernel image */
-+	u32 imagesz;                /* The length of this image file ( kernel + romfs + this header) */
-+	u32 pid;                    /* Product ID */
-+	u32 fastcksum;              /* Partial CRC32 on (First(256), medium(256), last(512)) */
-+	u32 reserved;
-+};
-+
-+static struct gpio_led ar525w_leds[] = {
-+	{ .name = "rdc321x:dmz", .gpio = 1, .active_low = 1},
-+};
-+static struct gpio_button ar525w_btns[] = {
-+	{
-+		.gpio = 6,
-+		.code = BTN_0,
-+		.desc = "Reset",
-+		.active_low = 1,
-+	}
-+};
-+
-+static u32 __initdata crctab[257] = {
-+	0x00000000, 0x77073096, 0xee0e612c, 0x990951ba,
-+	0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
-+	0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
-+	0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
-+	0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
-+	0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
-+	0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec,
-+	0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
-+	0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
-+	0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
-+	0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940,
-+	0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
-+	0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116,
-+	0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
-+	0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
-+	0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
-+	0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a,
-+	0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
-+	0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818,
-+	0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
-+	0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
-+	0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
-+	0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c,
-+	0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
-+	0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
-+	0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
-+	0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
-+	0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
-+	0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086,
-+	0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
-+	0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4,
-+	0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
-+	0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
-+	0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
-+	0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
-+	0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
-+	0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe,
-+	0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
-+	0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
-+	0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
-+	0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252,
-+	0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
-+	0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60,
-+	0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
-+	0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
-+	0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
-+	0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04,
-+	0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
-+	0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a,
-+	0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
-+	0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
-+	0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
-+	0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e,
-+	0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
-+	0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
-+	0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
-+	0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
-+	0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
-+	0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0,
-+	0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
-+	0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6,
-+	0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
-+	0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
-+	0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d,
-+	0
-+};
-+
-+static u32 __init crc32(u8 * buf, u32 len)
-+{
-+	register int i;
-+	u32 sum;
-+	register u32 s0;
-+	s0 = ~0;
-+	for (i = 0; i < len; i++) {
-+		s0 = (s0 >> 8) ^ crctab[(u8) (s0 & 0xFF) ^ buf[i]];
-+	}
-+	sum = ~s0;
-+	return sum;
-+}
-+
-+static int __init fixup_ar525w_header(struct mtd_info *master, struct image_header *header)
-+{
-+	char *buffer;
-+	int res;
-+	u32 bufferlength = header->kernelsz + sizeof(struct image_header);
-+	u32 len;
-+	static char crcbuf[0x400];
-+
-+	printk(KERN_INFO "Fixing up AR525W header, old image size: %u, new image size: %u\n",
-+		   header->imagesz, bufferlength);
-+
-+	buffer = vmalloc(bufferlength);
-+	if (!buffer) {
-+		printk(KERN_ERR "Can't allocate %u bytes\n", bufferlength);
-+		return -ENOMEM;
-+	}
-+
-+	res =  master->read(master, 0x0, bufferlength, &len, buffer);
-+	if (res || len != bufferlength)
-+		goto out;
-+
-+	header = (struct image_header *) buffer;
-+	header->imagesz = bufferlength;
-+	header->checksum = 0;
-+	header->fastcksum = 0;
-+
-+	memcpy(crcbuf, buffer, 0x100);
-+	memcpy(crcbuf + 0x100, buffer + (bufferlength >> 1) - ((bufferlength & 0x6) >> 1), 0x100);
-+	memcpy(crcbuf + 0x200, buffer + bufferlength - 0x200, 0x200);
-+
-+	header->fastcksum = crc32(crcbuf, sizeof(crcbuf));
-+	header->checksum = crc32(buffer, bufferlength);
-+
-+	if (master->unlock)
-+		master->unlock(master, 0, master->erasesize);
-+	res = erase_write (master, 0, master->erasesize, buffer);
-+	if (res)
-+		printk(KERN_ERR "Can't rewrite image header\n");
-+
-+out:
-+	vfree(buffer);
-+	return res;
-+}
-+
-+static int __init
-+parse_ar525w_partitions(struct mtd_info *master, struct mtd_partition **pparts,
-+			struct mtd_part_parser_data *plat_data)
-+{
-+	struct image_header header;
-+	int res;
-+	size_t len;
-+	struct mtd_partition *rdc_flash_parts;
-+	struct rdc_platform_data *pdata = (struct rdc_platform_data *) plat_data;
-+
-+	if (master->size != 0x400000) //4MB
-+		return -ENOSYS;
-+
-+	res =  master->read(master, 0x0, sizeof(header), &len, (char *)&header);
-+	if (res)
-+		return res;
-+
-+	if (strncmp(header.magic, "GMTK", 4))
-+		return -ENOSYS;
-+
-+	if (header.kernelsz > 0x400000 || header.kernelsz < master->erasesize) {
-+		printk(KERN_ERR "AR525W image header found, but seems corrupt, kernel size %u\n", header.kernelsz);
-+		return -EINVAL;
-+	}
-+
-+	if (header.kernelsz + sizeof(header) != header.imagesz) {
-+		res = fixup_ar525w_header(master, &header);
-+		if (res)
-+			return res;
-+	}
-+
-+	rdc_flash_parts = kzalloc(sizeof(struct mtd_partition) * 3, GFP_KERNEL);
-+
-+	rdc_flash_parts[0].name = "firmware";
-+	rdc_flash_parts[0].offset = 0x0;
-+	rdc_flash_parts[0].size = 0x3E0000;
-+	rdc_flash_parts[1].name = "rootfs";
-+	rdc_flash_parts[1].offset = header.kernelsz + sizeof(header);
-+	rdc_flash_parts[1].size = rdc_flash_parts[0].size - rdc_flash_parts[1].offset;
-+	rdc_flash_parts[2].name = "bootloader";
-+	rdc_flash_parts[2].offset = 0x3E0000;
-+	rdc_flash_parts[2].size = 0x20000;
-+
-+	*pparts = rdc_flash_parts;
-+
-+	pdata->led_data.num_leds = ARRAY_SIZE(ar525w_leds);
-+	pdata->led_data.leds = ar525w_leds;
-+	pdata->button_data.nbuttons = ARRAY_SIZE(ar525w_btns);
-+	pdata->button_data.buttons = ar525w_btns;
-+
-+	return 3;
-+}
-+
-+static struct mtd_part_parser __initdata ar525w_parser = {
-+	.owner = THIS_MODULE,
-+	.parse_fn = parse_ar525w_partitions,
-+	.name = "AR525W",
-+};
-+
-+static int __init ar525w_setup(void)
-+{
-+	return register_mtd_parser(&ar525w_parser);
-+}
-+
-+arch_initcall(ar525w_setup);
---- /dev/null
-+++ b/arch/x86/mach-rdc321x/boards/bifferboard.c
-@@ -0,0 +1,74 @@
-+/*
-+ *  Bifferboard RDC321x platform devices
-+ *
-+ *  Copyright (C) 2010 bifferos@yahoo.co.uk
-+ *
-+ *  This program is free software; you can redistribute it and/or
-+ *  modify it under the terms of the GNU General Public License
-+ *  as published by the Free Software Foundation; either version 2
-+ *  of the License, or (at your option) any later version.
-+ *
-+ *  This program is distributed in the hope that it will be useful,
-+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *  GNU General Public License for more details.
-+ *
-+ *  You should have received a copy of the GNU General Public License
-+ *  along with this program; if not, write to the
-+ *  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-+ *  Boston, MA  02110-1301, USA.
-+ *
-+ */
-+
-+#include <linux/init.h>
-+#include <linux/module.h>
-+#include <linux/mtd/physmap.h>
-+#include <linux/input.h>
-+#include <linux/slab.h>
-+
-+#include <asm/rdc_boards.h>
-+
-+static int __init
-+parse_bifferboard_partitions(struct mtd_info *master,
-+			     struct mtd_partition **pparts,
-+			     struct mtd_part_parser_data *plat_data)
-+{
-+	int res;
-+	size_t len;
-+	struct mtd_partition *rdc_flash_parts;
-+	u32 kernel_len;
-+	u16 tmp;
-+
-+	res =  master->read(master, 0x4000 + 1036, 2, &len, (char *) &tmp);
-+	if (res)
-+		return res;
-+	kernel_len = tmp * master->erasesize;
-+
-+	rdc_flash_parts = kzalloc(sizeof(struct mtd_partition) * 3, GFP_KERNEL);
-+
-+	*pparts = rdc_flash_parts;
-+
-+	rdc_flash_parts[0].name = "kernel";
-+	rdc_flash_parts[0].offset = 0;
-+	rdc_flash_parts[0].size = kernel_len;
-+	rdc_flash_parts[1].name = "rootfs";
-+	rdc_flash_parts[1].offset = kernel_len;
-+	rdc_flash_parts[1].size = master->size - kernel_len - 0x10000;
-+	rdc_flash_parts[2].name = "biffboot";
-+	rdc_flash_parts[2].offset = master->size - 0x10000;
-+	rdc_flash_parts[2].size = 0x10000;
-+
-+	return 3;
-+}
-+
-+struct mtd_part_parser __initdata bifferboard_parser = {
-+	.owner = THIS_MODULE,
-+	.parse_fn = parse_bifferboard_partitions,
-+	.name = "Bifferboard",
-+};
-+
-+static int __init bifferboard_setup(void)
-+{
-+	return register_mtd_parser(&bifferboard_parser);
-+}
-+arch_initcall(bifferboard_setup);
---- /dev/null
-+++ b/arch/x86/mach-rdc321x/boards/r8610.c
-@@ -0,0 +1,69 @@
-+/*
-+ *  R8610 RDC321x platform devices
-+ *
-+ *  Copyright (C) 2009, Florian Fainelli <florian@openwrt.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, write to the
-+ *  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-+ *  Boston, MA  02110-1301, USA.
-+ *
-+ */
-+
-+#include <linux/init.h>
-+#include <linux/module.h>
-+#include <linux/mtd/physmap.h>
-+#include <linux/input.h>
-+#include <linux/slab.h>
-+
-+#include <asm/rdc_boards.h>
-+
-+static int __init
-+parse_r8610_partitions(struct mtd_info *master, struct mtd_partition **pparts,
-+		       struct mtd_part_parser_data *plat_data)
-+{
-+	struct mtd_partition *rdc_flash_parts;
-+
-+	rdc_flash_parts = kzalloc(sizeof(struct mtd_partition) * 4, GFP_KERNEL);
-+
-+	*pparts = rdc_flash_parts;
-+
-+	rdc_flash_parts[0].name = "kernel";
-+	rdc_flash_parts[0].size = 0x001f0000;
-+	rdc_flash_parts[0].offset = 0;
-+	rdc_flash_parts[1].name = "config";
-+	rdc_flash_parts[1].size = 0x10000;
-+	rdc_flash_parts[1].offset = MTDPART_OFS_APPEND;
-+	rdc_flash_parts[2].name = "rootfs";
-+	rdc_flash_parts[2].size = 0x1E0000;
-+	rdc_flash_parts[2].offset = MTDPART_OFS_APPEND;
-+	rdc_flash_parts[3].name = "redboot";
-+	rdc_flash_parts[3].size = 0x20000;
-+	rdc_flash_parts[3].offset = MTDPART_OFS_APPEND;
-+	rdc_flash_parts[3].mask_flags = MTD_WRITEABLE;
-+
-+	return 4;
-+}
-+
-+struct mtd_part_parser __initdata r8610_parser = {
-+	.owner = THIS_MODULE,
-+	.parse_fn = parse_r8610_partitions,
-+	.name = "R8610",
-+};
-+
-+static int __init r8610_setup(void)
-+{
-+	return register_mtd_parser(&r8610_parser);
-+}
-+
-+arch_initcall(r8610_setup);
---- /dev/null
-+++ b/arch/x86/mach-rdc321x/boards/sitecom.c
-@@ -0,0 +1,115 @@
-+/*
-+ *  Sitecom RDC321x platform devices
-+ *
-+ *  Copyright (C) 2007-2009 OpenWrt.org
-+ *  Copyright (C) 2007 Florian Fainelli <florian@openwrt.org>
-+ *  Copyright (C) 2008-2009 Daniel Gimpelevich <daniel@gimpelevich.san-francisco.ca.us>
-+ *
-+ *  This program is free software; you can redistribute it and/or
-+ *  modify it under the terms of the GNU General Public License
-+ *  as published by the Free Software Foundation; either version 2
-+ *  of the License, or (at your option) any later version.
-+ *
-+ *  This program is distributed in the hope that it will be useful,
-+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *  GNU General Public License for more details.
-+ *
-+ *  You should have received a copy of the GNU General Public License
-+ *  along with this program; if not, write to the
-+ *  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-+ *  Boston, MA  02110-1301, USA.
-+ *
-+ */
-+
-+#include <linux/init.h>
-+#include <linux/module.h>
-+#include <linux/mtd/physmap.h>
-+#include <linux/input.h>
-+#include <linux/slab.h>
-+
-+#include <asm/rdc_boards.h>
-+
-+struct image_header {
-+	char	magic[4];
-+	u32	kernel_length;
-+	u32	ramdisk_length;
-+	char	magic2[4];
-+	u32	kernel_length2;
-+};
-+
-+static struct gpio_led sitecom_leds[] = {
-+	{ .name = "rdc321x:power", .gpio = 15, .active_low = 1},
-+	{ .name = "rdc321x:usb0", .gpio = 0, .active_low = 1},
-+	{ .name = "rdc321x:usb1", .gpio = 1, .active_low = 1},
-+};
-+
-+static struct gpio_button sitecom_btns[] = {
-+	{
-+		.gpio = 6,
-+		.code = BTN_0,
-+		.desc = "Reset",
-+		.active_low = 1,
-+	}
-+};
-+
-+static int __init
-+parse_sitecom_partitions(struct mtd_info *master, struct mtd_partition **pparts,
-+			 struct mtd_part_parser_data *plat_data)
-+{
-+	struct image_header header;
-+	int res;
-+	size_t len;
-+	struct mtd_partition *rdc_flash_parts;
-+	struct rdc_platform_data *pdata = (struct rdc_platform_data *) plat_data;
-+
-+	if (master->size != 0x400000) /* 4MB */
-+		return -ENOSYS;
-+
-+	res =  master->read(master, 0x8000, sizeof(header), &len, (char *)&header);
-+	if (res)
-+		return res;
-+
-+	if (strncmp(header.magic, "CSYS", 4) || strncmp(header.magic2, "WRRM", 4))
-+		return -ENOSYS;
-+
-+	rdc_flash_parts = kzalloc(sizeof(struct mtd_partition) * 5, GFP_KERNEL);
-+
-+	rdc_flash_parts[0].name = "firmware";
-+	rdc_flash_parts[0].offset = 0x8000;
-+	rdc_flash_parts[0].size = 0x3F0000 - 0x8000;
-+	rdc_flash_parts[1].name = "config";
-+	rdc_flash_parts[1].offset = 0;
-+	rdc_flash_parts[1].size = 0x8000;
-+	rdc_flash_parts[2].name = "kernel";
-+	rdc_flash_parts[2].offset = 0x8014;
-+	rdc_flash_parts[2].size = header.kernel_length;
-+	rdc_flash_parts[3].name = "rootfs";
-+	rdc_flash_parts[3].offset = 0x8014 + header.kernel_length;
-+	rdc_flash_parts[3].size = 0x3F0000 - rdc_flash_parts[3].offset;
-+	rdc_flash_parts[4].name = "bootloader";
-+	rdc_flash_parts[4].offset = 0x3F0000;
-+	rdc_flash_parts[4].size = 0x10000;
-+
-+	*pparts = rdc_flash_parts;
-+
-+	pdata->led_data.num_leds = ARRAY_SIZE(sitecom_leds);
-+	pdata->led_data.leds = sitecom_leds;
-+	pdata->button_data.nbuttons = ARRAY_SIZE(sitecom_btns);
-+	pdata->button_data.buttons = sitecom_btns;
-+
-+	return 5;
-+}
-+
-+struct mtd_part_parser __initdata sitecom_parser = {
-+	.owner = THIS_MODULE,
-+	.parse_fn = parse_sitecom_partitions,
-+	.name = "Sitecom",
-+};
-+
-+static int __init sitecom_setup(void)
-+{
-+	return register_mtd_parser(&sitecom_parser);
-+}
-+
-+arch_initcall(sitecom_setup);
---- /dev/null
-+++ b/arch/x86/mach-rdc321x/reboot.c
-@@ -0,0 +1,44 @@
-+/*
-+ *  This program is free software; you can redistribute it and/or
-+ *  modify it under the terms of the GNU General Public License
-+ *  as published by the Free Software Foundation; either version 2
-+ *  of the License, or (at your option) any later version.
-+ *
-+ *  This program is distributed in the hope that it will be useful,
-+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *  GNU General Public License for more details.
-+ *
-+ *  You should have received a copy of the GNU General Public License
-+ *  along with this program; if not, write to the
-+ *  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-+ *  Boston, MA  02110-1301, USA.
-+ *
-+ */
-+
-+#include <asm/reboot.h>
-+#include <asm/io.h>
-+
-+static void rdc321x_reset(void)
-+{
-+	unsigned i;
-+
-+	/* write to southbridge config register 0x41
-+	   enable pci reset on cpu reset, make internal port 0x92 writeable
-+	   and switch port 0x92 to internal */
-+	outl(0x80003840, 0xCF8);
-+	i = inl(0xCFC);
-+	i |= 0x1600;
-+	outl(i, 0xCFC);
-+
-+	/* soft reset */
-+	outb(1, 0x92);
-+}
-+
-+static int __init rdc_setup_reset(void)
-+{
-+	machine_ops.emergency_restart = rdc321x_reset;
-+	return 0;
-+}
-+
-+arch_initcall(rdc_setup_reset);
---- /dev/null
-+++ b/arch/x86/include/asm/rdc_boards.h
-@@ -0,0 +1,36 @@
-+/*
-+ *  RDC321x boards
-+ *
-+ *  Copyright (C) 2007-2009 OpenWrt.org
-+ *  Copyright (C) 2007 Florian Fainelli <florian@openwrt.org>
-+ *  Copyright (C) 2008-2009 Daniel Gimpelevich <daniel@gimpelevich.san-francisco.ca.us>
-+ *
-+ *  This program is free software; you can redistribute it and/or
-+ *  modify it under the terms of the GNU General Public License
-+ *  as published by the Free Software Foundation; either version 2
-+ *  of the License, or (at your option) any later version.
-+ *
-+ *  This program is distributed in the hope that it will be useful,
-+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *  GNU General Public License for more details.
-+ *
-+ *  You should have received a copy of the GNU General Public License
-+ *  along with this program; if not, write to the
-+ *  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-+ *  Boston, MA  02110-1301, USA.
-+ *
-+ */
-+
-+#ifndef _RDC_BOARDS_H__
-+#define _RDC_BOARDS_H__
-+
-+#include <linux/leds.h>
-+#include <linux/gpio_buttons.h>
-+
-+struct rdc_platform_data {
-+	struct gpio_led_platform_data led_data;
-+	struct gpio_buttons_platform_data button_data;
-+};
-+
-+#endif
diff --git a/target/linux/rdc/patches-3.3/120-panic_on_unrecovered_nmi.patch b/target/linux/rdc/patches-3.3/120-panic_on_unrecovered_nmi.patch
deleted file mode 100644
index 6a1279ceac..0000000000
--- a/target/linux/rdc/patches-3.3/120-panic_on_unrecovered_nmi.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/drivers/mfd/rdc321x-southbridge.c
-+++ b/drivers/mfd/rdc321x-southbridge.c
-@@ -86,6 +86,8 @@ static int __devinit rdc321x_sb_probe(st
- 	rdc321x_gpio_pdata.sb_pdev = pdev;
- 	rdc321x_wdt_pdata.sb_pdev = pdev;
- 
-+	panic_on_unrecovered_nmi = 1;
-+
- 	return mfd_add_devices(&pdev->dev, -1,
- 		rdc321x_sb_cells, ARRAY_SIZE(rdc321x_sb_cells), NULL, 0);
- }
diff --git a/target/linux/rdc/patches-3.3/150-pit-tick-rate.patch b/target/linux/rdc/patches-3.3/150-pit-tick-rate.patch
deleted file mode 100644
index 5af3cef2fa..0000000000
--- a/target/linux/rdc/patches-3.3/150-pit-tick-rate.patch
+++ /dev/null
@@ -1,14 +0,0 @@
---- a/include/linux/timex.h
-+++ b/include/linux/timex.h
-@@ -274,7 +274,11 @@ extern void hardpps(const struct timespe
- int read_current_timer(unsigned long *timer_val);
- 
- /* The clock frequency of the i8253/i8254 PIT */
-+#ifdef CONFIG_X86_RDC321X
-+#define PIT_TICK_RATE 1041816ul
-+#else
- #define PIT_TICK_RATE 1193182ul
-+#endif
- 
- #endif /* KERNEL */
- 
diff --git a/target/linux/rdc/patches-3.3/160-kexec-fix.patch b/target/linux/rdc/patches-3.3/160-kexec-fix.patch
deleted file mode 100644
index ea32494a09..0000000000
--- a/target/linux/rdc/patches-3.3/160-kexec-fix.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From 357954613bdbab0c1f3986589ff30cc4855a2efd Mon Sep 17 00:00:00 2001
-From: root <root@cent.localnet>
-Date: Sun, 6 Dec 2009 18:26:43 +0000
-Subject: [PATCH 03/14] kexec fix
-
----
- arch/x86/kernel/relocate_kernel_32.S |    6 ++++++
- 1 files changed, 6 insertions(+), 0 deletions(-)
-
---- a/arch/x86/kernel/relocate_kernel_32.S
-+++ b/arch/x86/kernel/relocate_kernel_32.S
-@@ -54,8 +54,10 @@ relocate_kernel:
- 	movl	%eax, CR0(%edi)
- 	movl	%cr3, %eax
- 	movl	%eax, CR3(%edi)
-+#ifndef CONFIG_X86_RDC321X
- 	movl	%cr4, %eax
- 	movl	%eax, CR4(%edi)
-+#endif
- 
- 	/* read the arguments and say goodbye to the stack */
- 	movl  20+4(%esp), %ebx /* page_list */
-@@ -124,7 +126,9 @@ identity_mapped:
- 	 * Setting everything to zero seems safe.
- 	 */
- 	xorl	%eax, %eax
-+#ifndef CONFIG_X86_RDC321X
- 	movl	%eax, %cr4
-+#endif
- 
- 	jmp 1f
- 1:
-@@ -195,8 +199,10 @@ identity_mapped:
- 	ret
- 
- virtual_mapped:
-+#ifndef CONFIG_X86_RDC321X
- 	movl	CR4(%edi), %eax
- 	movl	%eax, %cr4
-+#endif
- 	movl	CR3(%edi), %eax
- 	movl	%eax, %cr3
- 	movl	CR0(%edi), %eax
diff --git a/target/linux/rdc/profiles/ar525w.mk b/target/linux/rdc/profiles/ar525w.mk
deleted file mode 100644
index d38cb1f232..0000000000
--- a/target/linux/rdc/profiles/ar525w.mk
+++ /dev/null
@@ -1,12 +0,0 @@
-#
-# Copyright (C) 2010 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-define Profile/ar525w
-  NAME:=Airlink AR525W
-  PACKAGES:=kmod-rt61-pci kmod-switch-ip17xx swconfig
-endef
-$(eval $(call Profile,ar525w))
diff --git a/target/linux/rdc/profiles/bifferboard.mk b/target/linux/rdc/profiles/bifferboard.mk
deleted file mode 100644
index 28e1d0e6d4..0000000000
--- a/target/linux/rdc/profiles/bifferboard.mk
+++ /dev/null
@@ -1,13 +0,0 @@
-#
-# Copyright (C) 2010 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-define Profile/bifferboard
-	NAME:=Bifferboard
-	PACKAGES:=kmod-usb-core kmod-usb-ohci kmod-usb2 \
-		kmod-usb-storage kmod-scsi-core kmod-fs-ext3
-endef
-$(eval $(call Profile,bifferboard))
diff --git a/target/linux/rdc/profiles/r8610.mk b/target/linux/rdc/profiles/r8610.mk
deleted file mode 100644
index 67fef8a5ae..0000000000
--- a/target/linux/rdc/profiles/r8610.mk
+++ /dev/null
@@ -1,15 +0,0 @@
-#
-# Copyright (C) 2010 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-define Profile/r8610
-	NAME:=RDC R8610 Evaluation Board
-	PACKAGES:=kmod-usb-core kmod-usb-ohci kmod-usb2 \
-			kmod-hwmon-core kmod-hwmon-w83627hf kmod-ide-core kmod-ide-it821x \
-			kmod-rtc-core kmod-rtc-m48t86 \
-			kmod-fs-ext2 kmod-fs-ext3
-endef
-$(eval $(call Profile,r8610))
diff --git a/target/linux/rdc/profiles/sitecom.mk b/target/linux/rdc/profiles/sitecom.mk
deleted file mode 100644
index e3b2981ed8..0000000000
--- a/target/linux/rdc/profiles/sitecom.mk
+++ /dev/null
@@ -1,12 +0,0 @@
-#
-# Copyright (C) 2010 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-define Profile/sitecom
-	NAME:=Devices from Sitecom (WL-153, DC-230)
-	PACKAGES:=kmod-rt61-pci kmod-usb-core kmod-usb-ohci kmod-usb2
-endef
-$(eval $(call Profile,sitecom))
diff --git a/target/linux/x86/Makefile b/target/linux/x86/Makefile
index 422e828d4d..a64fbc38c9 100644
--- a/target/linux/x86/Makefile
+++ b/target/linux/x86/Makefile
@@ -10,7 +10,8 @@ ARCH:=i386
 BOARD:=x86
 BOARDNAME:=x86
 FEATURES:=squashfs jffs2 ext4 vdi vmdk pcmcia targz
-SUBTARGETS=generic olpc xen_domu ep80579 net5501 kvm_guest geos alix2 thincan
+SUBTARGETS=generic olpc xen_domu ep80579 net5501 kvm_guest geos alix2 thincan \
+	   rdc
 
 LINUX_VERSION:=3.3.8
 
diff --git a/target/linux/x86/image/Config.in b/target/linux/x86/image/Config.in
index 653aa61eff..9ced34c93e 100644
--- a/target/linux/x86/image/Config.in
+++ b/target/linux/x86/image/Config.in
@@ -15,7 +15,7 @@ config X86_ETHERBOOT_BOOTOPTS
 
 config X86_GRUB_IMAGES
 	bool "Build GRUB images (Linux x86 or x86_64 host only)"
-	depends TARGET_x86 && !TARGET_x86_olpc
+	depends TARGET_x86 && !(TARGET_x86_olpc || TARGET_x86_rdc)
 	depends TARGET_ROOTFS_EXT4FS || TARGET_ROOTFS_ISO || TARGET_ROOTFS_JFFS2 || TARGET_ROOTFS_SQUASHFS
 	select PACKAGE_grub2
 	default y
diff --git a/target/linux/x86/image/Makefile b/target/linux/x86/image/Makefile
index 3552748e60..399ce3c7d3 100644
--- a/target/linux/x86/image/Makefile
+++ b/target/linux/x86/image/Makefile
@@ -206,12 +206,40 @@ define Image/BuildKernel
   endif
 endef
 
+define Image/Build/Profile/ar525w
+	cp $(KDIR)/bzImage $(KDIR)/bzImage.tmp
+	$(SCRIPT_DIR)/pad_image $(1) $(KDIR)/bzImage.tmp $(KDIR)/root.$(1) 32
+	$(STAGING_DIR_HOST)/bin/airlink -b 1 $(KDIR)/bzImage.tmp $(KDIR)/root.$(1) \
+		$(BIN_DIR)/$(IMG_PREFIX)-$(1)-ar525w.img
+	$(STAGING_DIR_HOST)/bin/airlink -e -b 1 $(KDIR)/bzImage.tmp $(KDIR)/root.$(1) \
+		$(BIN_DIR)/$(IMG_PREFIX)-$(1)-ar525w-web.img
+endef
+
+define Image/Build/Profile/sitecom
+	cp $(KDIR)/bzImage $(KDIR)/bzImage.tmp
+	#32k config data + 20 bytes header + 2 bytes checksum after kernel image
+	$(SCRIPT_DIR)/pad_image $(1) $(KDIR)/bzImage.tmp $(KDIR)/root.$(1) 32790
+	$(TOPDIR)/target/linux/rdc/image/mkimg_sitecom.pl $(KDIR)/bzImage.tmp > $(KDIR)/tmp.img
+	cat $(KDIR)/root.$(1) >> $(KDIR)/tmp.img
+	cp $(KDIR)/tmp.img $(BIN_DIR)/$(IMG_PREFIX)-$(1)-sitecom.img
+	rm $(KDIR)/tmp.img $(KDIR)/bzImage.tmp
+endef
+
+define Image/Build/Profile/bifferboard
+	$(TOPDIR)/target/linux/rdc/image/mkimg_bifferboard.py $(KDIR)/bzImage $(KDIR)/root.$(1) \
+		$(BIN_DIR)/$(IMG_PREFIX)-$(1)-bifferboard.img
+endef
+
 define Image/Prepare
 	$(CP) $(LINUX_DIR)/arch/x86/boot/bzImage $(KDIR)/bzImage
 	$(call Image/Prepare/bootscript)
 	$(call Image/Prepare/grub2)
 endef
 
+define Image/Build/Initramfs
+	$(CP) $(KDIR)/bzImage $(BIN_DIR)/$(IMG_PREFIX)-ramfs.bzImage
+endef
+
 define Image/Build
 	$(call Image/Build/$(1))
 	$(call Image/Build/bootscript,$(1))
@@ -225,6 +253,10 @@ define Image/Build
   endif
 	$(CP) $(KDIR)/bzImage $(BIN_DIR)/$(IMG_PREFIX)-vmlinuz
 	$(call Image/Build/gzip/$(1))
+	$(call Image/Build/Profile/$(PROFILE),$(1))
+ifeq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),y)
+	$(call Image/Build/Initramfs)
+endif
 endef
 
 $(eval $(call BuildImage))
diff --git a/target/linux/x86/image/mkimg_bifferboard.py b/target/linux/x86/image/mkimg_bifferboard.py
new file mode 100755
index 0000000000..5444abebd1
--- /dev/null
+++ b/target/linux/x86/image/mkimg_bifferboard.py
@@ -0,0 +1,50 @@
+#!/usr/bin/env python
+
+"""
+   Create firmware for 4/8MB Bifferboards, suitable for uploading using
+   either bb_upload8.py or bb_eth_upload8.py
+"""
+
+import struct, sys
+
+# Increase the kmax value if the script gives errors about the kernel being 
+# too large.  You need to set the Biffboot kmax value to the same value you
+# use here.
+kmax = 0x10
+
+# No need to change this for 4MB devices, it's only used to tell you if 
+# the firmware is too large!
+flash_size = 0x800000
+
+# This is always the same, for 1MB, 4MB and 8MB devices
+config_extent = 0x6000
+
+kernel_extent = kmax * 0x10000
+
+if __name__ == "__main__":
+
+  if len(sys.argv) != 4:
+    print  "usage: mkimg_bifferboard.py <kernel> <rootfs> <output file>"
+    sys.exit(-1)
+    
+  bzimage = sys.argv[1]
+  rootfs = sys.argv[2]
+  target = sys.argv[3]
+
+  # Kernel first
+  fw = file(bzimage).read()
+  if len(fw) > (kernel_extent - config_extent):
+    raise IOError("Kernel too large")
+
+  # Pad up to end of kernel partition
+  while len(fw) < (kernel_extent - config_extent):
+    fw += "\xff"
+
+  fw += file(rootfs).read()
+
+  # Check length of total
+  if len(fw) > (flash_size - 0x10000 - config_extent):
+    raise IOError("Rootfs too large")
+
+  file(target,"wb").write(fw)
+  print "Firmware written to '%s'" % target
diff --git a/target/linux/x86/image/mkimg_sitecom.pl b/target/linux/x86/image/mkimg_sitecom.pl
new file mode 100755
index 0000000000..cfd5e652f0
--- /dev/null
+++ b/target/linux/x86/image/mkimg_sitecom.pl
@@ -0,0 +1,11 @@
+#!/usr/bin/perl
+
+open (bzimg, @ARGV[0]);
+while (<bzimg>) { $i .= $_; }
+$i .= pack "v", -(unpack "%v*", $i); 
+print "CSYS";
+print pack("V", length($i));
+print pack("V", 0);
+print "WRRM";
+print pack("V", length($i));
+print $i;
diff --git a/target/linux/x86/modules.mk b/target/linux/x86/modules.mk
index 70a64ffdb4..f0d436c1e9 100644
--- a/target/linux/x86/modules.mk
+++ b/target/linux/x86/modules.mk
@@ -312,3 +312,19 @@ define KernelPackage/leds-net48xx/description
 endef
 
 $(eval $(call KernelPackage,leds-net48xx))
+
+define KernelPackage/rdc321x-wdt
+  SUBMENU:=$(OTHER_MENU)
+  TITLE:=RDC321x watchdog
+  DEPENDS:=@TARGET_x86_rdc
+  KCONFIG:=CONFIG_RDC321X_WDT
+  FILES:=$(LINUX_DIR)/drivers/$(WATCHDOG_DIR)/rdc321x_wdt.ko
+  AUTOLOAD:=$(call AutoLoad,50,rdc321x_wdt)
+endef
+
+define KernelPackage/rdc321x-wdt/description
+  RDC-321x watchdog driver
+endef
+
+$(eval $(call KernelPackage,rdc321x-wdt))
+
diff --git a/target/linux/x86/patches-3.3/006-yenta_mistery.patch b/target/linux/x86/patches-3.3/006-yenta_mistery.patch
new file mode 100644
index 0000000000..65893ea2b9
--- /dev/null
+++ b/target/linux/x86/patches-3.3/006-yenta_mistery.patch
@@ -0,0 +1,20 @@
+--- a/drivers/pcmcia/yenta_socket.c
++++ b/drivers/pcmcia/yenta_socket.c
+@@ -1233,6 +1233,17 @@ static int __devinit yenta_probe(struct
+ 
+ 	/* We must finish initialization here */
+ 
++#ifdef CONFIG_X86_RDC321X
++/* #define YO_TI1510_DATASHEET_GUY_EXPLAIN_THIS_JUNK 0x0044f044 */
++#define YO_TI1510_DATASHEET_GUY_EXPLAIN_THIS_JUNK 0x0844b060
++/* #define YO_TI1510_DATASHEET_GUY_EXPLAIN_THIS_JUNK 0x0044d044 */
++
++	config_writel(socket, 32*4, YO_TI1510_DATASHEET_GUY_EXPLAIN_THIS_JUNK);
++	config_writel(socket, 35*4, 0x00000022);
++	config_writel(socket, 36*4, 0x60200000);
++	config_writel(socket, 40*4, 0x7e020000);
++#endif
++
+ 	if (!socket->cb_irq || request_irq(socket->cb_irq, yenta_interrupt, IRQF_SHARED, "yenta", socket)) {
+ 		/* No IRQ or request_irq failed. Poll */
+ 		socket->cb_irq = 0; /* But zero is a valid IRQ number. */
diff --git a/target/linux/x86/patches-3.3/009-rdc321x_select_embedded.patch b/target/linux/x86/patches-3.3/009-rdc321x_select_embedded.patch
new file mode 100644
index 0000000000..2d094fc743
--- /dev/null
+++ b/target/linux/x86/patches-3.3/009-rdc321x_select_embedded.patch
@@ -0,0 +1,11 @@
+--- a/arch/x86/Kconfig
++++ b/arch/x86/Kconfig
+@@ -466,6 +466,8 @@ config X86_RDC321X
+ 	depends on X86_EXTENDED_PLATFORM
+ 	select M486
+ 	select X86_REBOOTFIXUPS
++	select EMBEDDED
++	select ARCH_REQUIRE_GPIOLIB
+ 	---help---
+ 	  This option is needed for RDC R-321x system-on-chip, also known
+ 	  as R-8610-(G).
diff --git a/target/linux/x86/patches-3.3/010-rdc_cpu_ident.patch b/target/linux/x86/patches-3.3/010-rdc_cpu_ident.patch
new file mode 100644
index 0000000000..0f2314a3e2
--- /dev/null
+++ b/target/linux/x86/patches-3.3/010-rdc_cpu_ident.patch
@@ -0,0 +1,176 @@
+--- /dev/null
++++ b/Documentation/x86/rdc.txt
+@@ -0,0 +1,69 @@
++
++Introduction
++============
++
++RDC (http://www.rdc.com.tw) have been manufacturing x86-compatible SoC
++(system-on-chips) for a number of years.  They are not the fastest of
++CPUs (clock speeds ranging from 133-150MHz) but 486SX compatibility
++coupled with very low power consumption[1] and low cost make them ideal
++for embedded applications.
++
++
++Where to find
++=============
++
++RDC chips show up in numerous embedded devices, but be careful since
++many of them will not run Linux 2.6 without significant expertise.
++
++There are several variants of what the linux kernel refers to generically
++as RDC321X:  R8610, R321x, S3282 and AMRISC20000.
++
++R321x: Found in various routers, see the OpenWrt project for details,
++   http://wiki.openwrt.org/oldwiki/rdcport
++
++R8610: Found on the RDC evaluation board
++   http://www.ivankuten.com/system-on-chip-soc/rdc-r8610/
++
++AMRISC20000: Found in the MGB-100 wireless hard disk
++   http://tintuc.no-ip.com/linux/tipps/mgb100/
++
++S3282: Found in various NAS devices, including the Bifferboard
++   http://www.bifferos.com
++
++
++Kernel Configuration
++====================
++
++Add support for this CPU with CONFIG_X86_RDC321X.  Ensure that maths
++emulation is included (CONFIG_MATH_EMULATION selected) and avoid MCE
++(CONFIG_X86_MCE not selected).
++
++
++CPU detection
++=============
++
++None of these chips support the cpuid instruction, so as with some
++other x86 compatible SoCs, we must check the north bridge and look
++for specific 'signature' PCI device config.
++
++The current detection code has been tested only on the Bifferboard
++(S3282 CPU), please send bug reports or success stories with
++other devices to bifferos@yahoo.co.uk.
++
++
++Credits
++=======
++
++Many thanks to RDC for providing the customer codes to allow
++detection of all known variants, without which this detection code
++would have been very hard to ascertain.
++
++
++References
++==========
++
++[1] S3282 in certain NAS solutions consumes less than 1W
++
++
++mark@bifferos.com 2009
++
+--- a/arch/x86/Kconfig
++++ b/arch/x86/Kconfig
+@@ -464,6 +464,7 @@ config X86_RDC321X
+ 	bool "RDC R-321x SoC"
+ 	depends on X86_32
+ 	depends on X86_EXTENDED_PLATFORM
++	select PCI
+ 	select M486
+ 	select X86_REBOOTFIXUPS
+ 	select EMBEDDED
+--- a/arch/x86/include/asm/processor.h
++++ b/arch/x86/include/asm/processor.h
+@@ -119,7 +119,8 @@ struct cpuinfo_x86 {
+ #define X86_VENDOR_CENTAUR	5
+ #define X86_VENDOR_TRANSMETA	7
+ #define X86_VENDOR_NSC		8
+-#define X86_VENDOR_NUM		9
++#define X86_VENDOR_RDC		9
++#define X86_VENDOR_NUM		10
+ 
+ #define X86_VENDOR_UNKNOWN	0xff
+ 
+--- a/arch/x86/kernel/cpu/Makefile
++++ b/arch/x86/kernel/cpu/Makefile
+@@ -26,6 +26,7 @@ obj-$(CONFIG_CPU_SUP_CYRIX_32)		+= cyrix
+ obj-$(CONFIG_CPU_SUP_CENTAUR)		+= centaur.o
+ obj-$(CONFIG_CPU_SUP_TRANSMETA_32)	+= transmeta.o
+ obj-$(CONFIG_CPU_SUP_UMC_32)		+= umc.o
++obj-$(CONFIG_X86_RDC321X)		+= rdc.o
+ 
+ obj-$(CONFIG_PERF_EVENTS)		+= perf_event.o
+ 
+--- /dev/null
++++ b/arch/x86/kernel/cpu/rdc.c
+@@ -0,0 +1,69 @@
++/*
++ * See Documentation/x86/rdc.txt
++ *
++ * mark@bifferos.com
++ */
++
++#include <linux/pci.h>
++#include <asm/pci-direct.h>
++#include "cpu.h"
++
++
++static void __cpuinit rdc_identify(struct cpuinfo_x86 *c)
++{
++	u16 vendor, device;
++	u32 customer_id;
++
++	if (!early_pci_allowed())
++		return;
++
++	/* RDC CPU is SoC (system-on-chip), Northbridge is always present */
++	vendor = read_pci_config_16(0, 0, 0, PCI_VENDOR_ID);
++	device = read_pci_config_16(0, 0, 0, PCI_DEVICE_ID);
++
++	if (vendor != PCI_VENDOR_ID_RDC || device != PCI_DEVICE_ID_RDC_R6020)
++		return;  /* not RDC */
++	/*
++	 * NB: We could go on and check other devices, e.g. r6040 NIC, but
++	 * that's probably overkill
++	 */
++
++	customer_id = read_pci_config(0, 0, 0, 0x90);
++
++	switch (customer_id) {
++		/* id names are from RDC */
++	case 0x00321000:
++		strcpy(c->x86_model_id, "R3210/R3211");
++		break;
++	case 0x00321001:
++		strcpy(c->x86_model_id, "AMITRISC20000/20010");
++		break;
++	case 0x00321002:
++		strcpy(c->x86_model_id, "R3210X/Edimax");
++		break;
++	case 0x00321003:
++		strcpy(c->x86_model_id, "R3210/Kcodes");
++		break;
++	case 0x00321004:  /* tested */
++		strcpy(c->x86_model_id, "S3282/CodeTek");
++		break;
++	case 0x00321007:
++		strcpy(c->x86_model_id, "R8610");
++		break;
++	default:
++		pr_info("RDC CPU: Unrecognised Customer ID (0x%x) please report to linux-kernel@vger.kernel.org\n", customer_id);
++		break;
++	}
++
++	strcpy(c->x86_vendor_id, "RDC");
++	c->x86_vendor = X86_VENDOR_RDC;
++}
++
++static const struct cpu_dev __cpuinitconst rdc_cpu_dev = {
++	.c_vendor	= "RDC",
++	.c_ident	= { "RDC" },
++	.c_identify	= rdc_identify,
++	.c_x86_vendor	= X86_VENDOR_RDC,
++};
++
++cpu_dev_register(rdc_cpu_dev);
diff --git a/target/linux/x86/patches-3.3/011-tune_lzma_options.patch b/target/linux/x86/patches-3.3/011-tune_lzma_options.patch
new file mode 100644
index 0000000000..e6fd44d4e1
--- /dev/null
+++ b/target/linux/x86/patches-3.3/011-tune_lzma_options.patch
@@ -0,0 +1,22 @@
+--- a/scripts/Makefile.lib
++++ b/scripts/Makefile.lib
+@@ -296,7 +296,7 @@ cmd_bzip2 = (cat $(filter-out FORCE,$^)
+ 
+ quiet_cmd_lzma = LZMA    $@
+ cmd_lzma = (cat $(filter-out FORCE,$^) | \
+-	lzma e -d20 -lc1 -lp2 -pb2 -eos -si -so && $(call size_append, $(filter-out FORCE,$^))) > $@ || \
++	lzma e -lc8 -eos -si -so && $(call size_append, $(filter-out FORCE,$^))) > $@ || \
+ 	(rm -f $@ ; false)
+ 
+ quiet_cmd_lzo = LZO     $@
+--- a/arch/x86/include/asm/boot.h
++++ b/arch/x86/include/asm/boot.h
+@@ -28,7 +28,7 @@
+ #error "Invalid value for CONFIG_PHYSICAL_ALIGN"
+ #endif
+ 
+-#ifdef CONFIG_KERNEL_BZIP2
++#if defined(CONFIG_KERNEL_BZIP2) || defined(CONFIG_KERNEL_LZMA)
+ #define BOOT_HEAP_SIZE             0x400000
+ #else /* !CONFIG_KERNEL_BZIP2 */
+ 
diff --git a/target/linux/x86/patches-3.3/012-export_erase_write.patch b/target/linux/x86/patches-3.3/012-export_erase_write.patch
new file mode 100644
index 0000000000..893d4d8252
--- /dev/null
+++ b/target/linux/x86/patches-3.3/012-export_erase_write.patch
@@ -0,0 +1,23 @@
+--- a/drivers/mtd/mtdblock.c
++++ b/drivers/mtd/mtdblock.c
+@@ -62,7 +62,7 @@ static void erase_callback(struct erase_
+ 	wake_up(wait_q);
+ }
+ 
+-static int erase_write (struct mtd_info *mtd, unsigned long pos,
++int erase_write (struct mtd_info *mtd, unsigned long pos,
+ 			int len, const char *buf)
+ {
+ 	struct erase_info erase;
+--- a/include/linux/mtd/mtd.h
++++ b/include/linux/mtd/mtd.h
+@@ -530,6 +530,9 @@ extern void register_mtd_user (struct mt
+ extern int unregister_mtd_user (struct mtd_notifier *old);
+ void *mtd_kmalloc_up_to(const struct mtd_info *mtd, size_t *size);
+ 
++int erase_write (struct mtd_info *mtd, unsigned long pos,
++		 int len, const char *buf);
++
+ void mtd_erase_callback(struct erase_info *instr);
+ 
+ static inline int mtd_is_bitflip(int err) {
diff --git a/target/linux/x86/patches-3.3/100-rdc_boards.patch b/target/linux/x86/patches-3.3/100-rdc_boards.patch
new file mode 100644
index 0000000000..958bee0064
--- /dev/null
+++ b/target/linux/x86/patches-3.3/100-rdc_boards.patch
@@ -0,0 +1,741 @@
+--- a/arch/x86/Makefile
++++ b/arch/x86/Makefile
+@@ -136,6 +136,9 @@ libs-y  += arch/x86/lib/
+ # See arch/x86/Kbuild for content of core part of the kernel
+ core-y += arch/x86/
+ 
++# RDC R-321X support
++core-$(CONFIG_X86_RDC321X)   += arch/x86/mach-rdc321x/
++
+ # drivers-y are linked after core-y
+ drivers-$(CONFIG_MATH_EMULATION) += arch/x86/math-emu/
+ drivers-$(CONFIG_PCI)            += arch/x86/pci/
+--- /dev/null
++++ b/arch/x86/mach-rdc321x/Makefile
+@@ -0,0 +1,5 @@
++#
++# Makefile for the RDC321x specific parts of the kernel
++#
++obj-$(CONFIG_X86_RDC321X)	:= platform.o reboot.o boards/sitecom.o boards/ar525w.o boards/bifferboard.o boards/r8610.o
++
+--- /dev/null
++++ b/arch/x86/mach-rdc321x/platform.c
+@@ -0,0 +1,115 @@
++/*
++ *  Generic RDC321x platform devices
++ *
++ *  Copyright (C) 2007-2009 OpenWrt.org
++ *  Copyright (C) 2007 Florian Fainelli <florian@openwrt.org>
++ *  Copyright (C) 2008-2009 Daniel Gimpelevich <daniel@gimpelevich.san-francisco.ca.us>
++ *
++ *  This program is free software; you can redistribute it and/or
++ *  modify it under the terms of the GNU General Public License
++ *  as published by the Free Software Foundation; either version 2
++ *  of the License, or (at your option) any later version.
++ *
++ *  This program is distributed in the hope that it will be useful,
++ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *  GNU General Public License for more details.
++ *
++ *  You should have received a copy of the GNU General Public License
++ *  along with this program; if not, write to the
++ *  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ *  Boston, MA  02110-1301, USA.
++ *
++ */
++
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/mtd/map.h>
++#include <linux/mtd/mtd.h>
++#include <linux/mtd/physmap.h>
++#include <linux/root_dev.h>
++
++#include <asm/rdc_boards.h>
++
++static struct rdc_platform_data rdcplat_data;
++
++/* LEDS */
++static struct platform_device rdc321x_leds = {
++	.name = "leds-gpio",
++	.id = -1,
++	.dev = {
++		.platform_data = &rdcplat_data.led_data,
++	}
++};
++
++/* Button */
++static struct platform_device rdc321x_buttons = {
++	.name = "gpio-buttons",
++	.id = -1,
++	.dev = {
++		.platform_data = &rdcplat_data.button_data,
++	}
++};
++
++static __initdata struct platform_device *rdc321x_devs[] = {
++	&rdc321x_leds,
++	&rdc321x_buttons,
++};
++
++const char *__initdata boards[] = {
++	"Sitecom",
++	"AR525W",
++	"Bifferboard",
++	"R8610",
++	0
++};
++
++static struct map_info rdc_map_info = {
++	.name		= "rdc_flash",
++	.size		= 0x800000,	/* 8MB */
++	.phys		= 0xFF800000,	/* (u32) -rdc_map_info.size */
++	.bankwidth	= 2,
++};
++
++static int __init rdc_board_setup(void)
++{
++	struct mtd_info *mtdinfo;
++	struct mtd_part_parser_data *ppdata;
++	int res;
++
++	simple_map_init(&rdc_map_info);
++
++	while (1) {
++		rdc_map_info.virt = ioremap(rdc_map_info.phys,
++					    rdc_map_info.size);
++		if (rdc_map_info.virt == NULL)
++			continue;
++
++		mtdinfo = do_map_probe("cfi_probe", &rdc_map_info);
++		if (mtdinfo == NULL)
++			mtdinfo = do_map_probe("jedec_probe", &rdc_map_info);
++		if (mtdinfo != NULL)
++			break;
++
++		iounmap(rdc_map_info.virt);
++		if ((rdc_map_info.size >>= 1) < 0x100000)	/* 1MB */
++			panic("RDC321x: Could not find start of flash!");
++		rdc_map_info.phys = (u32) -rdc_map_info.size;
++	}
++
++	/*
++	 * TODO: add a new field to mtd_part_parser_data, and use that
++	 * instead of this ugly casting
++	 */
++	ppdata = (struct mtd_part_parser_data *) &rdcplat_data;
++	res = mtd_device_parse_register(mtdinfo, boards, ppdata, NULL, 0);
++	if (res) {
++		panic("RDC321x: can't identify board type");
++		return -ENOSYS;
++	}
++
++	ROOT_DEV = 0;
++
++	return platform_add_devices(rdc321x_devs, ARRAY_SIZE(rdc321x_devs));
++}
++late_initcall(rdc_board_setup);
+--- /dev/null
++++ b/arch/x86/mach-rdc321x/boards/ar525w.c
+@@ -0,0 +1,247 @@
++/*
++ * ar525w RDC321x platform devices
++ *
++ *  Copyright (C) 2007-2009 OpenWrt.org
++ *  Copyright (C) 2007 Florian Fainelli <florian@openwrt.org>
++ *  Copyright (C) 2008-2009 Daniel Gimpelevich <daniel@gimpelevich.san-francisco.ca.us>
++ *
++ *  This program is free software; you can redistribute it and/or
++ *  modify it under the terms of the GNU General Public License
++ *  as published by the Free Software Foundation; either version 2
++ *  of the License, or (at your option) any later version.
++ *
++ *  This program is distributed in the hope that it will be useful,
++ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *  GNU General Public License for more details.
++ *
++ *  You should have received a copy of the GNU General Public License
++ *  along with this program; if not, write to the
++ *  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ *  Boston, MA  02110-1301, USA.
++ *
++ */
++
++#include <linux/init.h>
++#include <linux/module.h>
++#include <linux/mtd/physmap.h>
++#include <linux/input.h>
++#include <linux/vmalloc.h>
++#include <linux/mtd/mtd.h>
++#include <linux/slab.h>
++
++#include <asm/rdc_boards.h>
++
++struct image_header {
++	char magic[4];              /* ASICII: GMTK */
++	u32 checksum;               /* CRC32 */
++	u32 version;                /* x.x.x.x */
++	u32 kernelsz;               /* The size of the kernel image */
++	u32 imagesz;                /* The length of this image file ( kernel + romfs + this header) */
++	u32 pid;                    /* Product ID */
++	u32 fastcksum;              /* Partial CRC32 on (First(256), medium(256), last(512)) */
++	u32 reserved;
++};
++
++static struct gpio_led ar525w_leds[] = {
++	{ .name = "rdc321x:dmz", .gpio = 1, .active_low = 1},
++};
++static struct gpio_button ar525w_btns[] = {
++	{
++		.gpio = 6,
++		.code = BTN_0,
++		.desc = "Reset",
++		.active_low = 1,
++	}
++};
++
++static u32 __initdata crctab[257] = {
++	0x00000000, 0x77073096, 0xee0e612c, 0x990951ba,
++	0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
++	0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
++	0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
++	0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
++	0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
++	0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec,
++	0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
++	0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
++	0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
++	0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940,
++	0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
++	0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116,
++	0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
++	0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
++	0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
++	0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a,
++	0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
++	0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818,
++	0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
++	0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
++	0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
++	0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c,
++	0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
++	0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
++	0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
++	0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
++	0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
++	0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086,
++	0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
++	0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4,
++	0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
++	0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
++	0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
++	0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
++	0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
++	0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe,
++	0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
++	0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
++	0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
++	0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252,
++	0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
++	0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60,
++	0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
++	0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
++	0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
++	0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04,
++	0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
++	0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a,
++	0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
++	0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
++	0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
++	0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e,
++	0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
++	0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
++	0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
++	0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
++	0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
++	0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0,
++	0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
++	0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6,
++	0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
++	0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
++	0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d,
++	0
++};
++
++static u32 __init crc32(u8 * buf, u32 len)
++{
++	register int i;
++	u32 sum;
++	register u32 s0;
++	s0 = ~0;
++	for (i = 0; i < len; i++) {
++		s0 = (s0 >> 8) ^ crctab[(u8) (s0 & 0xFF) ^ buf[i]];
++	}
++	sum = ~s0;
++	return sum;
++}
++
++static int __init fixup_ar525w_header(struct mtd_info *master, struct image_header *header)
++{
++	char *buffer;
++	int res;
++	u32 bufferlength = header->kernelsz + sizeof(struct image_header);
++	u32 len;
++	static char crcbuf[0x400];
++
++	printk(KERN_INFO "Fixing up AR525W header, old image size: %u, new image size: %u\n",
++		   header->imagesz, bufferlength);
++
++	buffer = vmalloc(bufferlength);
++	if (!buffer) {
++		printk(KERN_ERR "Can't allocate %u bytes\n", bufferlength);
++		return -ENOMEM;
++	}
++
++	res =  master->read(master, 0x0, bufferlength, &len, buffer);
++	if (res || len != bufferlength)
++		goto out;
++
++	header = (struct image_header *) buffer;
++	header->imagesz = bufferlength;
++	header->checksum = 0;
++	header->fastcksum = 0;
++
++	memcpy(crcbuf, buffer, 0x100);
++	memcpy(crcbuf + 0x100, buffer + (bufferlength >> 1) - ((bufferlength & 0x6) >> 1), 0x100);
++	memcpy(crcbuf + 0x200, buffer + bufferlength - 0x200, 0x200);
++
++	header->fastcksum = crc32(crcbuf, sizeof(crcbuf));
++	header->checksum = crc32(buffer, bufferlength);
++
++	if (master->unlock)
++		master->unlock(master, 0, master->erasesize);
++	res = erase_write (master, 0, master->erasesize, buffer);
++	if (res)
++		printk(KERN_ERR "Can't rewrite image header\n");
++
++out:
++	vfree(buffer);
++	return res;
++}
++
++static int __init
++parse_ar525w_partitions(struct mtd_info *master, struct mtd_partition **pparts,
++			struct mtd_part_parser_data *plat_data)
++{
++	struct image_header header;
++	int res;
++	size_t len;
++	struct mtd_partition *rdc_flash_parts;
++	struct rdc_platform_data *pdata = (struct rdc_platform_data *) plat_data;
++
++	if (master->size != 0x400000) //4MB
++		return -ENOSYS;
++
++	res =  master->read(master, 0x0, sizeof(header), &len, (char *)&header);
++	if (res)
++		return res;
++
++	if (strncmp(header.magic, "GMTK", 4))
++		return -ENOSYS;
++
++	if (header.kernelsz > 0x400000 || header.kernelsz < master->erasesize) {
++		printk(KERN_ERR "AR525W image header found, but seems corrupt, kernel size %u\n", header.kernelsz);
++		return -EINVAL;
++	}
++
++	if (header.kernelsz + sizeof(header) != header.imagesz) {
++		res = fixup_ar525w_header(master, &header);
++		if (res)
++			return res;
++	}
++
++	rdc_flash_parts = kzalloc(sizeof(struct mtd_partition) * 3, GFP_KERNEL);
++
++	rdc_flash_parts[0].name = "firmware";
++	rdc_flash_parts[0].offset = 0x0;
++	rdc_flash_parts[0].size = 0x3E0000;
++	rdc_flash_parts[1].name = "rootfs";
++	rdc_flash_parts[1].offset = header.kernelsz + sizeof(header);
++	rdc_flash_parts[1].size = rdc_flash_parts[0].size - rdc_flash_parts[1].offset;
++	rdc_flash_parts[2].name = "bootloader";
++	rdc_flash_parts[2].offset = 0x3E0000;
++	rdc_flash_parts[2].size = 0x20000;
++
++	*pparts = rdc_flash_parts;
++
++	pdata->led_data.num_leds = ARRAY_SIZE(ar525w_leds);
++	pdata->led_data.leds = ar525w_leds;
++	pdata->button_data.nbuttons = ARRAY_SIZE(ar525w_btns);
++	pdata->button_data.buttons = ar525w_btns;
++
++	return 3;
++}
++
++static struct mtd_part_parser __initdata ar525w_parser = {
++	.owner = THIS_MODULE,
++	.parse_fn = parse_ar525w_partitions,
++	.name = "AR525W",
++};
++
++static int __init ar525w_setup(void)
++{
++	return register_mtd_parser(&ar525w_parser);
++}
++
++arch_initcall(ar525w_setup);
+--- /dev/null
++++ b/arch/x86/mach-rdc321x/boards/bifferboard.c
+@@ -0,0 +1,74 @@
++/*
++ *  Bifferboard RDC321x platform devices
++ *
++ *  Copyright (C) 2010 bifferos@yahoo.co.uk
++ *
++ *  This program is free software; you can redistribute it and/or
++ *  modify it under the terms of the GNU General Public License
++ *  as published by the Free Software Foundation; either version 2
++ *  of the License, or (at your option) any later version.
++ *
++ *  This program is distributed in the hope that it will be useful,
++ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *  GNU General Public License for more details.
++ *
++ *  You should have received a copy of the GNU General Public License
++ *  along with this program; if not, write to the
++ *  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ *  Boston, MA  02110-1301, USA.
++ *
++ */
++
++#include <linux/init.h>
++#include <linux/module.h>
++#include <linux/mtd/physmap.h>
++#include <linux/input.h>
++#include <linux/slab.h>
++
++#include <asm/rdc_boards.h>
++
++static int __init
++parse_bifferboard_partitions(struct mtd_info *master,
++			     struct mtd_partition **pparts,
++			     struct mtd_part_parser_data *plat_data)
++{
++	int res;
++	size_t len;
++	struct mtd_partition *rdc_flash_parts;
++	u32 kernel_len;
++	u16 tmp;
++
++	res =  master->read(master, 0x4000 + 1036, 2, &len, (char *) &tmp);
++	if (res)
++		return res;
++	kernel_len = tmp * master->erasesize;
++
++	rdc_flash_parts = kzalloc(sizeof(struct mtd_partition) * 3, GFP_KERNEL);
++
++	*pparts = rdc_flash_parts;
++
++	rdc_flash_parts[0].name = "kernel";
++	rdc_flash_parts[0].offset = 0;
++	rdc_flash_parts[0].size = kernel_len;
++	rdc_flash_parts[1].name = "rootfs";
++	rdc_flash_parts[1].offset = kernel_len;
++	rdc_flash_parts[1].size = master->size - kernel_len - 0x10000;
++	rdc_flash_parts[2].name = "biffboot";
++	rdc_flash_parts[2].offset = master->size - 0x10000;
++	rdc_flash_parts[2].size = 0x10000;
++
++	return 3;
++}
++
++struct mtd_part_parser __initdata bifferboard_parser = {
++	.owner = THIS_MODULE,
++	.parse_fn = parse_bifferboard_partitions,
++	.name = "Bifferboard",
++};
++
++static int __init bifferboard_setup(void)
++{
++	return register_mtd_parser(&bifferboard_parser);
++}
++arch_initcall(bifferboard_setup);
+--- /dev/null
++++ b/arch/x86/mach-rdc321x/boards/r8610.c
+@@ -0,0 +1,69 @@
++/*
++ *  R8610 RDC321x platform devices
++ *
++ *  Copyright (C) 2009, Florian Fainelli <florian@openwrt.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, write to the
++ *  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ *  Boston, MA  02110-1301, USA.
++ *
++ */
++
++#include <linux/init.h>
++#include <linux/module.h>
++#include <linux/mtd/physmap.h>
++#include <linux/input.h>
++#include <linux/slab.h>
++
++#include <asm/rdc_boards.h>
++
++static int __init
++parse_r8610_partitions(struct mtd_info *master, struct mtd_partition **pparts,
++		       struct mtd_part_parser_data *plat_data)
++{
++	struct mtd_partition *rdc_flash_parts;
++
++	rdc_flash_parts = kzalloc(sizeof(struct mtd_partition) * 4, GFP_KERNEL);
++
++	*pparts = rdc_flash_parts;
++
++	rdc_flash_parts[0].name = "kernel";
++	rdc_flash_parts[0].size = 0x001f0000;
++	rdc_flash_parts[0].offset = 0;
++	rdc_flash_parts[1].name = "config";
++	rdc_flash_parts[1].size = 0x10000;
++	rdc_flash_parts[1].offset = MTDPART_OFS_APPEND;
++	rdc_flash_parts[2].name = "rootfs";
++	rdc_flash_parts[2].size = 0x1E0000;
++	rdc_flash_parts[2].offset = MTDPART_OFS_APPEND;
++	rdc_flash_parts[3].name = "redboot";
++	rdc_flash_parts[3].size = 0x20000;
++	rdc_flash_parts[3].offset = MTDPART_OFS_APPEND;
++	rdc_flash_parts[3].mask_flags = MTD_WRITEABLE;
++
++	return 4;
++}
++
++struct mtd_part_parser __initdata r8610_parser = {
++	.owner = THIS_MODULE,
++	.parse_fn = parse_r8610_partitions,
++	.name = "R8610",
++};
++
++static int __init r8610_setup(void)
++{
++	return register_mtd_parser(&r8610_parser);
++}
++
++arch_initcall(r8610_setup);
+--- /dev/null
++++ b/arch/x86/mach-rdc321x/boards/sitecom.c
+@@ -0,0 +1,115 @@
++/*
++ *  Sitecom RDC321x platform devices
++ *
++ *  Copyright (C) 2007-2009 OpenWrt.org
++ *  Copyright (C) 2007 Florian Fainelli <florian@openwrt.org>
++ *  Copyright (C) 2008-2009 Daniel Gimpelevich <daniel@gimpelevich.san-francisco.ca.us>
++ *
++ *  This program is free software; you can redistribute it and/or
++ *  modify it under the terms of the GNU General Public License
++ *  as published by the Free Software Foundation; either version 2
++ *  of the License, or (at your option) any later version.
++ *
++ *  This program is distributed in the hope that it will be useful,
++ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *  GNU General Public License for more details.
++ *
++ *  You should have received a copy of the GNU General Public License
++ *  along with this program; if not, write to the
++ *  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ *  Boston, MA  02110-1301, USA.
++ *
++ */
++
++#include <linux/init.h>
++#include <linux/module.h>
++#include <linux/mtd/physmap.h>
++#include <linux/input.h>
++#include <linux/slab.h>
++
++#include <asm/rdc_boards.h>
++
++struct image_header {
++	char	magic[4];
++	u32	kernel_length;
++	u32	ramdisk_length;
++	char	magic2[4];
++	u32	kernel_length2;
++};
++
++static struct gpio_led sitecom_leds[] = {
++	{ .name = "rdc321x:power", .gpio = 15, .active_low = 1},
++	{ .name = "rdc321x:usb0", .gpio = 0, .active_low = 1},
++	{ .name = "rdc321x:usb1", .gpio = 1, .active_low = 1},
++};
++
++static struct gpio_button sitecom_btns[] = {
++	{
++		.gpio = 6,
++		.code = BTN_0,
++		.desc = "Reset",
++		.active_low = 1,
++	}
++};
++
++static int __init
++parse_sitecom_partitions(struct mtd_info *master, struct mtd_partition **pparts,
++			 struct mtd_part_parser_data *plat_data)
++{
++	struct image_header header;
++	int res;
++	size_t len;
++	struct mtd_partition *rdc_flash_parts;
++	struct rdc_platform_data *pdata = (struct rdc_platform_data *) plat_data;
++
++	if (master->size != 0x400000) /* 4MB */
++		return -ENOSYS;
++
++	res =  master->read(master, 0x8000, sizeof(header), &len, (char *)&header);
++	if (res)
++		return res;
++
++	if (strncmp(header.magic, "CSYS", 4) || strncmp(header.magic2, "WRRM", 4))
++		return -ENOSYS;
++
++	rdc_flash_parts = kzalloc(sizeof(struct mtd_partition) * 5, GFP_KERNEL);
++
++	rdc_flash_parts[0].name = "firmware";
++	rdc_flash_parts[0].offset = 0x8000;
++	rdc_flash_parts[0].size = 0x3F0000 - 0x8000;
++	rdc_flash_parts[1].name = "config";
++	rdc_flash_parts[1].offset = 0;
++	rdc_flash_parts[1].size = 0x8000;
++	rdc_flash_parts[2].name = "kernel";
++	rdc_flash_parts[2].offset = 0x8014;
++	rdc_flash_parts[2].size = header.kernel_length;
++	rdc_flash_parts[3].name = "rootfs";
++	rdc_flash_parts[3].offset = 0x8014 + header.kernel_length;
++	rdc_flash_parts[3].size = 0x3F0000 - rdc_flash_parts[3].offset;
++	rdc_flash_parts[4].name = "bootloader";
++	rdc_flash_parts[4].offset = 0x3F0000;
++	rdc_flash_parts[4].size = 0x10000;
++
++	*pparts = rdc_flash_parts;
++
++	pdata->led_data.num_leds = ARRAY_SIZE(sitecom_leds);
++	pdata->led_data.leds = sitecom_leds;
++	pdata->button_data.nbuttons = ARRAY_SIZE(sitecom_btns);
++	pdata->button_data.buttons = sitecom_btns;
++
++	return 5;
++}
++
++struct mtd_part_parser __initdata sitecom_parser = {
++	.owner = THIS_MODULE,
++	.parse_fn = parse_sitecom_partitions,
++	.name = "Sitecom",
++};
++
++static int __init sitecom_setup(void)
++{
++	return register_mtd_parser(&sitecom_parser);
++}
++
++arch_initcall(sitecom_setup);
+--- /dev/null
++++ b/arch/x86/mach-rdc321x/reboot.c
+@@ -0,0 +1,44 @@
++/*
++ *  This program is free software; you can redistribute it and/or
++ *  modify it under the terms of the GNU General Public License
++ *  as published by the Free Software Foundation; either version 2
++ *  of the License, or (at your option) any later version.
++ *
++ *  This program is distributed in the hope that it will be useful,
++ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *  GNU General Public License for more details.
++ *
++ *  You should have received a copy of the GNU General Public License
++ *  along with this program; if not, write to the
++ *  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ *  Boston, MA  02110-1301, USA.
++ *
++ */
++
++#include <asm/reboot.h>
++#include <asm/io.h>
++
++static void rdc321x_reset(void)
++{
++	unsigned i;
++
++	/* write to southbridge config register 0x41
++	   enable pci reset on cpu reset, make internal port 0x92 writeable
++	   and switch port 0x92 to internal */
++	outl(0x80003840, 0xCF8);
++	i = inl(0xCFC);
++	i |= 0x1600;
++	outl(i, 0xCFC);
++
++	/* soft reset */
++	outb(1, 0x92);
++}
++
++static int __init rdc_setup_reset(void)
++{
++	machine_ops.emergency_restart = rdc321x_reset;
++	return 0;
++}
++
++arch_initcall(rdc_setup_reset);
+--- /dev/null
++++ b/arch/x86/include/asm/rdc_boards.h
+@@ -0,0 +1,36 @@
++/*
++ *  RDC321x boards
++ *
++ *  Copyright (C) 2007-2009 OpenWrt.org
++ *  Copyright (C) 2007 Florian Fainelli <florian@openwrt.org>
++ *  Copyright (C) 2008-2009 Daniel Gimpelevich <daniel@gimpelevich.san-francisco.ca.us>
++ *
++ *  This program is free software; you can redistribute it and/or
++ *  modify it under the terms of the GNU General Public License
++ *  as published by the Free Software Foundation; either version 2
++ *  of the License, or (at your option) any later version.
++ *
++ *  This program is distributed in the hope that it will be useful,
++ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *  GNU General Public License for more details.
++ *
++ *  You should have received a copy of the GNU General Public License
++ *  along with this program; if not, write to the
++ *  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ *  Boston, MA  02110-1301, USA.
++ *
++ */
++
++#ifndef _RDC_BOARDS_H__
++#define _RDC_BOARDS_H__
++
++#include <linux/leds.h>
++#include <linux/gpio_buttons.h>
++
++struct rdc_platform_data {
++	struct gpio_led_platform_data led_data;
++	struct gpio_buttons_platform_data button_data;
++};
++
++#endif
diff --git a/target/linux/x86/patches-3.3/120-panic_on_unrecovered_nmi.patch b/target/linux/x86/patches-3.3/120-panic_on_unrecovered_nmi.patch
new file mode 100644
index 0000000000..6a1279ceac
--- /dev/null
+++ b/target/linux/x86/patches-3.3/120-panic_on_unrecovered_nmi.patch
@@ -0,0 +1,11 @@
+--- a/drivers/mfd/rdc321x-southbridge.c
++++ b/drivers/mfd/rdc321x-southbridge.c
+@@ -86,6 +86,8 @@ static int __devinit rdc321x_sb_probe(st
+ 	rdc321x_gpio_pdata.sb_pdev = pdev;
+ 	rdc321x_wdt_pdata.sb_pdev = pdev;
+ 
++	panic_on_unrecovered_nmi = 1;
++
+ 	return mfd_add_devices(&pdev->dev, -1,
+ 		rdc321x_sb_cells, ARRAY_SIZE(rdc321x_sb_cells), NULL, 0);
+ }
diff --git a/target/linux/x86/patches-3.3/150-pit-tick-rate.patch b/target/linux/x86/patches-3.3/150-pit-tick-rate.patch
new file mode 100644
index 0000000000..5af3cef2fa
--- /dev/null
+++ b/target/linux/x86/patches-3.3/150-pit-tick-rate.patch
@@ -0,0 +1,14 @@
+--- a/include/linux/timex.h
++++ b/include/linux/timex.h
+@@ -274,7 +274,11 @@ extern void hardpps(const struct timespe
+ int read_current_timer(unsigned long *timer_val);
+ 
+ /* The clock frequency of the i8253/i8254 PIT */
++#ifdef CONFIG_X86_RDC321X
++#define PIT_TICK_RATE 1041816ul
++#else
+ #define PIT_TICK_RATE 1193182ul
++#endif
+ 
+ #endif /* KERNEL */
+ 
diff --git a/target/linux/x86/patches-3.3/160-kexec-fix.patch b/target/linux/x86/patches-3.3/160-kexec-fix.patch
new file mode 100644
index 0000000000..ea32494a09
--- /dev/null
+++ b/target/linux/x86/patches-3.3/160-kexec-fix.patch
@@ -0,0 +1,43 @@
+From 357954613bdbab0c1f3986589ff30cc4855a2efd Mon Sep 17 00:00:00 2001
+From: root <root@cent.localnet>
+Date: Sun, 6 Dec 2009 18:26:43 +0000
+Subject: [PATCH 03/14] kexec fix
+
+---
+ arch/x86/kernel/relocate_kernel_32.S |    6 ++++++
+ 1 files changed, 6 insertions(+), 0 deletions(-)
+
+--- a/arch/x86/kernel/relocate_kernel_32.S
++++ b/arch/x86/kernel/relocate_kernel_32.S
+@@ -54,8 +54,10 @@ relocate_kernel:
+ 	movl	%eax, CR0(%edi)
+ 	movl	%cr3, %eax
+ 	movl	%eax, CR3(%edi)
++#ifndef CONFIG_X86_RDC321X
+ 	movl	%cr4, %eax
+ 	movl	%eax, CR4(%edi)
++#endif
+ 
+ 	/* read the arguments and say goodbye to the stack */
+ 	movl  20+4(%esp), %ebx /* page_list */
+@@ -124,7 +126,9 @@ identity_mapped:
+ 	 * Setting everything to zero seems safe.
+ 	 */
+ 	xorl	%eax, %eax
++#ifndef CONFIG_X86_RDC321X
+ 	movl	%eax, %cr4
++#endif
+ 
+ 	jmp 1f
+ 1:
+@@ -195,8 +199,10 @@ identity_mapped:
+ 	ret
+ 
+ virtual_mapped:
++#ifndef CONFIG_X86_RDC321X
+ 	movl	CR4(%edi), %eax
+ 	movl	%eax, %cr4
++#endif
+ 	movl	CR3(%edi), %eax
+ 	movl	%eax, %cr3
+ 	movl	CR0(%edi), %eax
diff --git a/target/linux/x86/rdc/base-files/etc/config/network b/target/linux/x86/rdc/base-files/etc/config/network
new file mode 100644
index 0000000000..44c57940e2
--- /dev/null
+++ b/target/linux/x86/rdc/base-files/etc/config/network
@@ -0,0 +1,18 @@
+# Copyright (C) 2009 OpenWrt.org
+
+config interface loopback
+        option ifname   lo
+        option proto    static
+        option ipaddr   127.0.0.1
+        option netmask  255.0.0.0
+
+config interface lan
+        option ifname   eth1
+        option type     bridge
+        option proto    static
+        option ipaddr   192.168.1.1
+        option netmask  255.255.255.0
+
+config interface wan
+	option ifname	eth0
+	option proto	dhcp
diff --git a/target/linux/x86/rdc/base-files/etc/diag.sh b/target/linux/x86/rdc/base-files/etc/diag.sh
new file mode 100644
index 0000000000..8d5c38262c
--- /dev/null
+++ b/target/linux/x86/rdc/base-files/etc/diag.sh
@@ -0,0 +1,19 @@
+#!/bin/sh
+# Copyright (C) 2007 OpenWrt.org
+
+set_led() {
+	local led="$1"
+	local state="$2"
+	[ -d "/sys/class/leds/rdc321x:$led" ] && echo "$state" > "/sys/class/leds/rdc321x:$led/brightness"
+}
+
+set_state() {
+	case "$1" in
+		preinit)
+			set_led dmz 1
+		;;
+		done)
+			set_led dmz 0
+		;;
+	esac
+}
diff --git a/target/linux/x86/rdc/base-files/lib/preinit/05_set_ether_mac_rdc b/target/linux/x86/rdc/base-files/lib/preinit/05_set_ether_mac_rdc
new file mode 100644
index 0000000000..4640e008fa
--- /dev/null
+++ b/target/linux/x86/rdc/base-files/lib/preinit/05_set_ether_mac_rdc
@@ -0,0 +1,36 @@
+#!/bin/sh
+# Copyright (C) 2009-2012 OpenWrt.org
+
+. /lib/functions/boot.sh
+
+r6040_module() {
+	insmod libphy
+	insmod swconfig
+	insmod ip17xx
+	sleep 1
+	insmod r6040
+}
+
+set_ether_mac() {
+	kernel=$(grep firmware /proc/mtd | awk -F: '{print $1}')
+	[ -n "$kernel" ] && hdr=$(dd if=/dev/$kernel count=4 bs=1 2> /dev/null)
+	[ "$hdr" = "CSYS" ] && config=$(find_mtd_part config)
+	if [ -n "$config" ]; then
+		mac0=$(hexdump -n 6 -e '6/1 ":%X"' -s 24583 $config | cut -c2-)
+		[ "$mac0" = "FF:FF:FF:FF:FF:FF" -o "$mac0" = "0:0:0:0:0:0" ] && unset mac0
+		mac1=$(hexdump -n 6 -e '6/1 ":%X"' -s 24589 $config | cut -c2-)
+		[ "$mac1" = "FF:FF:FF:FF:FF:FF" -o "$mac1" = "0:0:0:0:0:0" ] && unset mac1
+	fi
+	if [ -n "$mac0" ]; then
+		logger -t kernel -p user.info "r6040: Setting MAC for eth0 to $mac0"
+		ifconfig eth0 hw ether "$mac0"
+	fi
+	if [ -n "$mac1" ]; then
+		logger -t kernel -p user.info "r6040: Setting MAC for eth1 to $mac1"
+		ifconfig eth1 hw ether "$mac1"
+	fi
+}
+
+boot_hook_add preinit_main r6040_module
+boot_hook_add preinit_main set_ether_mac
+
diff --git a/target/linux/x86/rdc/base-files/lib/upgrade/platform.sh b/target/linux/x86/rdc/base-files/lib/upgrade/platform.sh
new file mode 100644
index 0000000000..6348a6990b
--- /dev/null
+++ b/target/linux/x86/rdc/base-files/lib/upgrade/platform.sh
@@ -0,0 +1,10 @@
+PART_NAME=firmware
+
+platform_check_image() {
+	[ "$(get_magic_word $(find_mtd_part firmware))" -eq "$(get_magic_word "$1")" ] && return 0
+
+	echo "Invalid image type. Please use an appropriate .bin file"
+	return 1
+}
+
+# use default for platform_do_upgrade()
diff --git a/target/linux/x86/rdc/config-3.3 b/target/linux/x86/rdc/config-3.3
new file mode 100644
index 0000000000..33e27ebab4
--- /dev/null
+++ b/target/linux/x86/rdc/config-3.3
@@ -0,0 +1,326 @@
+# CONFIG_60XX_WDT is not set
+# CONFIG_64BIT is not set
+# CONFIG_ACPI is not set
+# CONFIG_ACQUIRE_WDT is not set
+# CONFIG_ADVANTECH_WDT is not set
+# CONFIG_ALIM1535_WDT is not set
+# CONFIG_ALIX is not set
+CONFIG_ARCH_BINFMT_ELF_RANDOMIZE_PIE=y
+CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig"
+CONFIG_ARCH_DISCARD_MEMBLOCK=y
+CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
+CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y
+CONFIG_ARCH_HAS_CPU_RELAX=y
+CONFIG_ARCH_HAS_DEFAULT_IDLE=y
+CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG=y
+CONFIG_ARCH_HIBERNATION_POSSIBLE=y
+CONFIG_ARCH_HWEIGHT_CFLAGS="-fcall-saved-ecx -fcall-saved-edx"
+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
+CONFIG_ARCH_RANDOM=y
+CONFIG_ARCH_REQUIRE_GPIOLIB=y
+CONFIG_ARCH_SELECT_MEMORY_MODEL=y
+CONFIG_ARCH_SPARSEMEM_ENABLE=y
+CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
+CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+CONFIG_ARCH_WANT_FRAME_POINTERS=y
+CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
+# CONFIG_ARPD is not set
+# CONFIG_AUDIT_ARCH is not set
+# CONFIG_BASE_FULL is not set
+CONFIG_BASE_SMALL=1
+CONFIG_BCMA_POSSIBLE=y
+# CONFIG_BLK_DEV_INITRD is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=4096
+CONFIG_BOUNCE=y
+CONFIG_BRIDGE=m
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_CLKBLD_I8253=y
+CONFIG_CLKEVT_I8253=y
+CONFIG_CLKSRC_I8253=y
+CONFIG_CLOCKSOURCE_WATCHDOG=y
+CONFIG_CMDLINE="console=uart,io,0x3f8 rootfstype=squashfs,jffs2"
+CONFIG_CMDLINE_BOOL=y
+# CONFIG_CMDLINE_OVERRIDE is not set
+# CONFIG_COMPAT_VDSO is not set
+# CONFIG_CPU5_WDT is not set
+CONFIG_CPU_IDLE=y
+CONFIG_CPU_IDLE_GOV_LADDER=y
+# CONFIG_CPU_SUP_AMD is not set
+# CONFIG_CPU_SUP_CENTAUR is not set
+# CONFIG_CPU_SUP_CYRIX_32 is not set
+# CONFIG_CPU_SUP_INTEL is not set
+# CONFIG_CPU_SUP_TRANSMETA_32 is not set
+# CONFIG_CPU_SUP_UMC_32 is not set
+# CONFIG_CRYPTO_SERPENT_SSE2_586 is not set
+# CONFIG_DCDBAS is not set
+# CONFIG_DEBUG_BOOT_PARAMS is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_VIRTUAL is not set
+CONFIG_DEFAULT_IO_DELAY_TYPE=0
+# CONFIG_DELL_RBU is not set
+# CONFIG_DMI is not set
+CONFIG_DOUBLEFAULT=y
+# CONFIG_EARLY_PRINTK is not set
+# CONFIG_EDD is not set
+# CONFIG_EUROTECH_WDT is not set
+# CONFIG_F71808E_WDT is not set
+# CONFIG_FIRMWARE_MEMMAP is not set
+CONFIG_FIX_EARLYCON_MEM=y
+CONFIG_GENERIC_BUG=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_GENERIC_CLOCKEVENTS_MIN_ADJUST=y
+CONFIG_GENERIC_CMOS_UPDATE=y
+CONFIG_GENERIC_FIND_FIRST_BIT=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_IOMAP=y
+CONFIG_GENERIC_IRQ_SHOW=y
+CONFIG_GENERIC_ISA_DMA=y
+CONFIG_GENERIC_PCI_IOMAP=y
+# CONFIG_GENERIC_TIME_VSYSCALL is not set
+# CONFIG_GEN_RTC is not set
+# CONFIG_GOOGLE_FIRMWARE is not set
+CONFIG_GPIOLIB=y
+CONFIG_GPIO_RDC321X=y
+CONFIG_GPIO_SYSFS=y
+# CONFIG_HAMRADIO is not set
+# CONFIG_HANGCHECK_TIMER is not set
+CONFIG_HAS_DMA=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAVE_AOUT=y
+CONFIG_HAVE_ARCH_JUMP_LABEL=y
+CONFIG_HAVE_ARCH_KGDB=y
+CONFIG_HAVE_ARCH_KMEMCHECK=y
+CONFIG_HAVE_ARCH_TRACEHOOK=y
+CONFIG_HAVE_ATOMIC_IOMAP=y
+CONFIG_HAVE_CMPXCHG_DOUBLE=y
+CONFIG_HAVE_CMPXCHG_LOCAL=y
+CONFIG_HAVE_C_RECORDMCOUNT=y
+CONFIG_HAVE_DMA_API_DEBUG=y
+CONFIG_HAVE_DMA_ATTRS=y
+CONFIG_HAVE_DYNAMIC_FTRACE=y
+CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
+CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
+CONFIG_HAVE_FUNCTION_GRAPH_FP_TEST=y
+CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
+CONFIG_HAVE_FUNCTION_TRACER=y
+CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y
+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+CONFIG_HAVE_GENERIC_HARDIRQS=y
+CONFIG_HAVE_HW_BREAKPOINT=y
+CONFIG_HAVE_IDE=y
+CONFIG_HAVE_IOREMAP_PROT=y
+CONFIG_HAVE_IRQ_WORK=y
+CONFIG_HAVE_KERNEL_BZIP2=y
+CONFIG_HAVE_KERNEL_GZIP=y
+CONFIG_HAVE_KERNEL_LZMA=y
+CONFIG_HAVE_KERNEL_LZO=y
+CONFIG_HAVE_KERNEL_XZ=y
+CONFIG_HAVE_KVM=y
+CONFIG_HAVE_LATENCYTOP_SUPPORT=y
+CONFIG_HAVE_MEMBLOCK=y
+CONFIG_HAVE_MEMBLOCK_NODE_MAP=y
+CONFIG_HAVE_MIXED_BREAKPOINTS_REGS=y
+CONFIG_HAVE_MMIOTRACE_SUPPORT=y
+CONFIG_HAVE_OPROFILE=y
+CONFIG_HAVE_OPTPROBES=y
+CONFIG_HAVE_PCSPKR_PLATFORM=y
+CONFIG_HAVE_PERF_EVENTS=y
+CONFIG_HAVE_PERF_EVENTS_NMI=y
+CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
+CONFIG_HAVE_SETUP_PER_CPU_AREA=y
+CONFIG_HAVE_SPARSE_IRQ=y
+CONFIG_HAVE_SYSCALL_TRACEPOINTS=y
+CONFIG_HAVE_TEXT_POKE_SMP=y
+CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
+CONFIG_HAVE_USER_RETURN_NOTIFIER=y
+# CONFIG_HIGHMEM4G is not set
+# CONFIG_HIGH_RES_TIMERS is not set
+# CONFIG_HPET_TIMER is not set
+# CONFIG_HP_WATCHDOG is not set
+# CONFIG_HUGETLBFS is not set
+CONFIG_HZ=250
+# CONFIG_HZ_100 is not set
+CONFIG_HZ_250=y
+# CONFIG_I6300ESB_WDT is not set
+# CONFIG_I8K is not set
+# CONFIG_IB700_WDT is not set
+# CONFIG_IBMASR is not set
+CONFIG_ILLEGAL_POINTER_VALUE=0
+CONFIG_INSTRUCTION_DECODER=y
+# CONFIG_IOMMU_HELPER is not set
+# CONFIG_IOMMU_STRESS is not set
+CONFIG_IO_DELAY_0X80=y
+# CONFIG_IO_DELAY_0XED is not set
+# CONFIG_IO_DELAY_NONE is not set
+CONFIG_IO_DELAY_TYPE_0X80=0
+CONFIG_IO_DELAY_TYPE_0XED=1
+CONFIG_IO_DELAY_TYPE_NONE=3
+CONFIG_IO_DELAY_TYPE_UDELAY=2
+# CONFIG_IO_DELAY_UDELAY is not set
+# CONFIG_IP_MROUTE is not set
+CONFIG_IRQ_FORCED_THREADING=y
+# CONFIG_IRQ_TIME_ACCOUNTING is not set
+CONFIG_IRQ_WORK=y
+# CONFIG_ISA is not set
+CONFIG_ISA_DMA_API=y
+# CONFIG_ISCSI_IBFT_FIND is not set
+# CONFIG_IT8712F_WDT is not set
+# CONFIG_IT87_WDT is not set
+# CONFIG_ITCO_WDT is not set
+# CONFIG_JFFS2_SUMMARY is not set
+CONFIG_KTIME_SCALAR=y
+CONFIG_LEDS_GPIO=y
+# CONFIG_LEDS_TRIGGER_NETDEV is not set
+# CONFIG_LEDS_TRIGGER_TIMER is not set
+CONFIG_LLC=m
+# CONFIG_M386 is not set
+CONFIG_M486=y
+# CONFIG_M586 is not set
+# CONFIG_M586MMX is not set
+# CONFIG_M586TSC is not set
+# CONFIG_M686 is not set
+# CONFIG_MACHZ_WDT is not set
+CONFIG_MATH_EMULATION=y
+# CONFIG_MATOM is not set
+# CONFIG_MCA is not set
+# CONFIG_MCORE2 is not set
+# CONFIG_MCRUSOE is not set
+# CONFIG_MCYRIXIII is not set
+# CONFIG_MEFFICEON is not set
+# CONFIG_MELAN is not set
+# CONFIG_MEMTEST is not set
+CONFIG_MFD_CORE=y
+CONFIG_MFD_RDC321X=y
+# CONFIG_MGEODEGX1 is not set
+# CONFIG_MGEODE_LX is not set
+# CONFIG_MICROCODE is not set
+# CONFIG_MK6 is not set
+# CONFIG_MK7 is not set
+# CONFIG_MK8 is not set
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MPENTIUM4 is not set
+# CONFIG_MPENTIUMII is not set
+# CONFIG_MPENTIUMIII is not set
+# CONFIG_MPENTIUMM is not set
+# CONFIG_MTD_CFI_INTELEXT is not set
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_NETSC520 is not set
+CONFIG_MTD_PHYSMAP=y
+# CONFIG_MTD_SC520CDP is not set
+# CONFIG_MTD_TS5500 is not set
+# CONFIG_MTRR is not set
+# CONFIG_MVIAC3_2 is not set
+# CONFIG_MVIAC7 is not set
+# CONFIG_MWINCHIP3D is not set
+# CONFIG_MWINCHIPC6 is not set
+# CONFIG_NEED_DMA_MAP_STATE is not set
+CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y
+CONFIG_NEED_PER_CPU_KM=y
+CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y
+CONFIG_NEED_SG_DMA_LENGTH=y
+CONFIG_NLS=y
+CONFIG_NOHIGHMEM=y
+CONFIG_NO_BOOTMEM=y
+CONFIG_NR_CPUS=1
+# CONFIG_NSC_GPIO is not set
+# CONFIG_OLPC is not set
+CONFIG_OPROFILE_NMI_TIMER=y
+# CONFIG_OPTIMIZE_INLINING is not set
+CONFIG_OUTPUT_FORMAT="elf32-i386"
+CONFIG_PAGEFLAGS_EXTENDED=y
+CONFIG_PAGE_OFFSET=0xC0000000
+# CONFIG_PARAVIRT_GUEST is not set
+# CONFIG_PC8736x_GPIO is not set
+# CONFIG_PC87413_WDT is not set
+CONFIG_PCI=y
+# CONFIG_PCIEPORTBUS is not set
+CONFIG_PCI_BIOS=y
+CONFIG_PCI_DIRECT=y
+CONFIG_PCI_DISABLE_COMMON_QUIRKS=y
+CONFIG_PCI_DOMAINS=y
+CONFIG_PCI_GOANY=y
+# CONFIG_PCI_GOBIOS is not set
+# CONFIG_PCI_GODIRECT is not set
+# CONFIG_PCI_GOMMCONFIG is not set
+# CONFIG_PCI_QUIRKS is not set
+# CONFIG_PDA_POWER is not set
+CONFIG_PERF_EVENTS=y
+CONFIG_PHYSICAL_ALIGN=0x100000
+CONFIG_PHYSICAL_START=0x100000
+CONFIG_POWER_SUPPLY=y
+# CONFIG_PREEMPT_RCU is not set
+CONFIG_PROCESSOR_SELECT=y
+# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set
+CONFIG_RDC321X_WDT=m
+# CONFIG_RELOCATABLE is not set
+# CONFIG_RTC is not set
+# CONFIG_RWSEM_GENERIC_SPINLOCK is not set
+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
+# CONFIG_SBC7240_WDT is not set
+# CONFIG_SBC8360_WDT is not set
+# CONFIG_SBC_EPX_C3_WATCHDOG is not set
+# CONFIG_SC1200_WDT is not set
+# CONFIG_SC520_WDT is not set
+# CONFIG_SCHED_HRTICK is not set
+# CONFIG_SCSI_DMA is not set
+# CONFIG_SCx200 is not set
+# CONFIG_SHMEM is not set
+# CONFIG_SMSC37B787_WDT is not set
+# CONFIG_SMSC_SCH311X_WDT is not set
+CONFIG_SPARSEMEM_STATIC=y
+CONFIG_SPARSE_IRQ=y
+CONFIG_STP=m
+# CONFIG_TELCLOCK is not set
+CONFIG_THERMAL=y
+# CONFIG_TOSHIBA is not set
+# CONFIG_TRANSPARENT_HUGEPAGE is not set
+CONFIG_UID16=y
+CONFIG_USB_ARCH_HAS_XHCI=y
+CONFIG_USB_SUPPORT=y
+CONFIG_USER_STACKTRACE_SUPPORT=y
+# CONFIG_VIA_WDT is not set
+CONFIG_VLAN_8021Q=m
+# CONFIG_VM86 is not set
+# CONFIG_VMWARE_BALLOON is not set
+# CONFIG_W83697UG_WDT is not set
+# CONFIG_WAFER_WDT is not set
+CONFIG_X86=y
+CONFIG_X86_32=y
+# CONFIG_X86_32_IRIS is not set
+CONFIG_X86_32_LAZY_GS=y
+# CONFIG_X86_64 is not set
+CONFIG_X86_ALIGNMENT_16=y
+CONFIG_X86_BSWAP=y
+# CONFIG_X86_CHECK_BIOS_CORRUPTION is not set
+CONFIG_X86_CMPXCHG=y
+# CONFIG_X86_CPUID is not set
+CONFIG_X86_EXTENDED_PLATFORM=y
+CONFIG_X86_F00F_BUG=y
+# CONFIG_X86_GENERIC is not set
+CONFIG_X86_INTERNODE_CACHE_SHIFT=4
+CONFIG_X86_INVD_BUG=y
+CONFIG_X86_INVLPG=y
+CONFIG_X86_L1_CACHE_SHIFT=4
+# CONFIG_X86_MCE is not set
+CONFIG_X86_MINIMUM_CPU_FAMILY=4
+# CONFIG_X86_MSR is not set
+# CONFIG_X86_PAE is not set
+# CONFIG_X86_PLATFORM_DEVICES is not set
+CONFIG_X86_POPAD_OK=y
+# CONFIG_X86_PPRO_FENCE is not set
+# CONFIG_X86_PTDUMP is not set
+CONFIG_X86_RDC321X=y
+CONFIG_X86_REBOOTFIXUPS=y
+CONFIG_X86_RESERVE_LOW=64
+# CONFIG_X86_UP_APIC is not set
+# CONFIG_X86_VERBOSE_BOOTUP is not set
+# CONFIG_X86_WANT_INTEL_MID is not set
+CONFIG_X86_WP_WORKS_OK=y
+CONFIG_X86_XADD=y
+CONFIG_XZ_DEC=y
+# CONFIG_ZONE_DMA32 is not set
diff --git a/target/linux/x86/rdc/profiles/ar525w.mk b/target/linux/x86/rdc/profiles/ar525w.mk
new file mode 100644
index 0000000000..d38cb1f232
--- /dev/null
+++ b/target/linux/x86/rdc/profiles/ar525w.mk
@@ -0,0 +1,12 @@
+#
+# Copyright (C) 2010 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+define Profile/ar525w
+  NAME:=Airlink AR525W
+  PACKAGES:=kmod-rt61-pci kmod-switch-ip17xx swconfig
+endef
+$(eval $(call Profile,ar525w))
diff --git a/target/linux/x86/rdc/profiles/bifferboard.mk b/target/linux/x86/rdc/profiles/bifferboard.mk
new file mode 100644
index 0000000000..28e1d0e6d4
--- /dev/null
+++ b/target/linux/x86/rdc/profiles/bifferboard.mk
@@ -0,0 +1,13 @@
+#
+# Copyright (C) 2010 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+define Profile/bifferboard
+	NAME:=Bifferboard
+	PACKAGES:=kmod-usb-core kmod-usb-ohci kmod-usb2 \
+		kmod-usb-storage kmod-scsi-core kmod-fs-ext3
+endef
+$(eval $(call Profile,bifferboard))
diff --git a/target/linux/x86/rdc/profiles/r8610.mk b/target/linux/x86/rdc/profiles/r8610.mk
new file mode 100644
index 0000000000..67fef8a5ae
--- /dev/null
+++ b/target/linux/x86/rdc/profiles/r8610.mk
@@ -0,0 +1,15 @@
+#
+# Copyright (C) 2010 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+define Profile/r8610
+	NAME:=RDC R8610 Evaluation Board
+	PACKAGES:=kmod-usb-core kmod-usb-ohci kmod-usb2 \
+			kmod-hwmon-core kmod-hwmon-w83627hf kmod-ide-core kmod-ide-it821x \
+			kmod-rtc-core kmod-rtc-m48t86 \
+			kmod-fs-ext2 kmod-fs-ext3
+endef
+$(eval $(call Profile,r8610))
diff --git a/target/linux/x86/rdc/profiles/sitecom.mk b/target/linux/x86/rdc/profiles/sitecom.mk
new file mode 100644
index 0000000000..e3b2981ed8
--- /dev/null
+++ b/target/linux/x86/rdc/profiles/sitecom.mk
@@ -0,0 +1,12 @@
+#
+# Copyright (C) 2010 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+define Profile/sitecom
+	NAME:=Devices from Sitecom (WL-153, DC-230)
+	PACKAGES:=kmod-rt61-pci kmod-usb-core kmod-usb-ohci kmod-usb2
+endef
+$(eval $(call Profile,sitecom))
diff --git a/target/linux/x86/rdc/target.mk b/target/linux/x86/rdc/target.mk
new file mode 100644
index 0000000000..32b300466a
--- /dev/null
+++ b/target/linux/x86/rdc/target.mk
@@ -0,0 +1,14 @@
+BOARDNAME:=RDC R-321x
+FEATURES:=squashfs jffs2 pci usb gpio pcmcia
+CFLAGS:=-Os -pipe -march=i486 -mtune=i486 -fno-caller-saves
+MAINTAINER:=Florian Fainelli <florian@openwrt.org>
+
+DEFAULT_PACKAGES += kmod-llc kmod-stp kmod-bridge kmod-8021q \
+		    wpad-mini kmod-libphy kmod-r6040 kmod-input-core \
+		    kmod-input-polldev kmod-input-gpio-buttons kmod-button-hotplug \
+		    kmod-rdc321x-wdt
+
+define Target/Description
+        Build firmware images for RDC321x based routers
+        (e.g. Airlink101 AR525W, Linksys WRT54GR, Sitecom WL-153)
+endef