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

SVN-Revision: 33779
This commit is contained in:
Florian Fainelli
2012-10-15 18:54:34 +00:00
parent 160c2ef011
commit 60ecd5fe04
27 changed files with 53 additions and 89 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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))

View File

@@ -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

View File

@@ -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;

View File

@@ -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))

View File

@@ -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. */

View File

@@ -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).

View File

@@ -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);

View File

@@ -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 */

View File

@@ -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) {

View File

@@ -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

View File

@@ -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);
}

View File

@@ -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 */

View File

@@ -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

View File

@@ -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

View File

@@ -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
}

View File

@@ -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

View File

@@ -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()

View File

@@ -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

View File

@@ -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))

View File

@@ -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))

View File

@@ -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))

View File

@@ -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))

View File

@@ -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