diff options
Diffstat (limited to 'target/linux')
| -rw-r--r-- | target/linux/x86/config-3.7 | 389 | ||||
| -rw-r--r-- | target/linux/x86/patches-3.7/006-yenta_mistery.patch | 20 | ||||
| -rw-r--r-- | target/linux/x86/patches-3.7/009-rdc321x_select_embedded.patch | 11 | ||||
| -rw-r--r-- | target/linux/x86/patches-3.7/010-rdc_cpu_ident.patch | 176 | ||||
| -rw-r--r-- | target/linux/x86/patches-3.7/011-tune_lzma_options.patch | 22 | ||||
| -rw-r--r-- | target/linux/x86/patches-3.7/012-export_erase_write.patch | 23 | ||||
| -rw-r--r-- | target/linux/x86/patches-3.7/100-rdc_boards.patch | 741 | ||||
| -rw-r--r-- | target/linux/x86/patches-3.7/120-panic_on_unrecovered_nmi.patch | 11 | ||||
| -rw-r--r-- | target/linux/x86/patches-3.7/150-pit-tick-rate.patch | 14 | ||||
| -rw-r--r-- | target/linux/x86/patches-3.7/160-kexec-fix.patch | 43 | 
10 files changed, 1450 insertions, 0 deletions
| diff --git a/target/linux/x86/config-3.7 b/target/linux/x86/config-3.7 new file mode 100644 index 000000000..68ab9fb96 --- /dev/null +++ b/target/linux/x86/config-3.7 @@ -0,0 +1,389 @@ +# 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_AMD_NB=y +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 is not set +CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_ARCH_SPARSEMEM_ENABLE=y +CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y +CONFIG_ARCH_SUPPORTS_MEMORY_FAILURE=y +CONFIG_ARCH_SUPPORTS_MSI=y +CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y +CONFIG_ARCH_SUSPEND_POSSIBLE=y +CONFIG_ARCH_USES_PG_UNCACHED=y +CONFIG_ARCH_WANT_FRAME_POINTERS=y +CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y +CONFIG_ATA=y +CONFIG_ATA_GENERIC=y +CONFIG_ATA_PIIX=y +# CONFIG_AUDIT_ARCH is not set +CONFIG_BCMA_POSSIBLE=y +CONFIG_BINFMT_MISC=y +CONFIG_BLK_DEV_SD=y +CONFIG_BOUNCE=y +CONFIG_CLKBLD_I8253=y +CONFIG_CLKEVT_I8253=y +CONFIG_CLKSRC_I8253=y +CONFIG_CLOCKSOURCE_WATCHDOG=y +CONFIG_COMPAT_VDSO=y +# CONFIG_CPU5_WDT is not set +CONFIG_CPU_FREQ=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set +CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set +# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set +# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set +CONFIG_CPU_FREQ_GOV_PERFORMANCE=y +# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set +# CONFIG_CPU_FREQ_GOV_USERSPACE is not set +CONFIG_CPU_FREQ_STAT=y +CONFIG_CPU_FREQ_STAT_DETAILS=y +CONFIG_CPU_FREQ_TABLE=y +CONFIG_CPU_IDLE=y +CONFIG_CPU_IDLE_GOV_LADDER=y +CONFIG_CPU_SUP_AMD=y +CONFIG_CPU_SUP_CENTAUR=y +CONFIG_CPU_SUP_CYRIX_32=y +CONFIG_CPU_SUP_INTEL=y +CONFIG_CPU_SUP_TRANSMETA_32=y +CONFIG_CPU_SUP_UMC_32=y +CONFIG_CPU_THERMAL=y +CONFIG_CRC16=y +# CONFIG_CRYPTO_SERPENT_SSE2_586 is not set +# CONFIG_DCDBAS is not set +# CONFIG_DEBUG_BOOT_PARAMS is not set +CONFIG_DEBUG_MEMORY_INIT=y +# CONFIG_DEBUG_TLBFLUSH is not set +# CONFIG_DEBUG_NMI_SELFTEST is not set +# CONFIG_DEBUG_VIRTUAL is not set +CONFIG_DECOMPRESS_BZIP2=y +CONFIG_DECOMPRESS_GZIP=y +CONFIG_DECOMPRESS_LZMA=y +CONFIG_DEFAULT_IO_DELAY_TYPE=0 +# CONFIG_DELL_RBU is not set +# CONFIG_DMI is not set +CONFIG_DNOTIFY=y +CONFIG_DOUBLEFAULT=y +CONFIG_EARLY_PRINTK=y +# CONFIG_EARLY_PRINTK_DBGP is not set +# CONFIG_EDD is not set +CONFIG_ELF_CORE=y +# CONFIG_EUROTECH_WDT is not set +CONFIG_EXT4_FS=y +# CONFIG_F71808E_WDT is not set +CONFIG_FIRMWARE_IN_KERNEL=y +CONFIG_FIRMWARE_MEMMAP=y +CONFIG_FIX_EARLYCON_MEM=y +CONFIG_FS_MBCACHE=y +CONFIG_GENERIC_BUG=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=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_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_GOOGLE_FIRMWARE is not set +# CONFIG_GPIO_ICH is not set +# CONFIG_HANGCHECK_TIMER is not set +CONFIG_HAS_DMA=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAVE_ALIGNED_STRUCT_PAGE=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_EMULATE_RTC=y +CONFIG_HPET_TIMER=y +# CONFIG_HP_WATCHDOG is not set +CONFIG_HT_IRQ=y +# CONFIG_HUGETLBFS is not set +CONFIG_HW_RANDOM=y +CONFIG_HW_RANDOM_GEODE=y +CONFIG_HW_RANDOM_VIA=y +# CONFIG_I6300ESB_WDT is not set +CONFIG_I8253_LOCK=y +# CONFIG_I8K is not set +# CONFIG_IB700_WDT is not set +# CONFIG_IBMASR is not set +# CONFIG_IBM_RTL is not set +# CONFIG_IE6XX_WDT is not set +CONFIG_ILLEGAL_POINTER_VALUE=0 +CONFIG_INITRAMFS_SOURCE="" +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_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_JBD2=y +CONFIG_KALLSYMS=y +CONFIG_KEXEC=y +CONFIG_KTIME_SCALAR=y +# 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_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_MPENTIUM4 is not set +# CONFIG_MPENTIUMII is not set +# CONFIG_MPENTIUMIII is not set +# CONFIG_MPENTIUMM is not set +CONFIG_MTD_BLOCK2MTD=y +# CONFIG_MTD_CFI is not set +# CONFIG_MTD_COMPLEX_MAPPINGS is not set +# CONFIG_MTD_TS5500 is not set +CONFIG_MTRR=y +# CONFIG_MTRR_SANITIZER 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_NAMESPACES=y +# 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_NET5501 is not set +# CONFIG_NET_NS is not set +CONFIG_NOHIGHMEM=y +CONFIG_NO_BOOTMEM=y +CONFIG_NR_CPUS=1 +# CONFIG_NSC_GPIO is not set +CONFIG_NVRAM=y +# 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_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_MSI=y +CONFIG_PCSPKR_PLATFORM=y +# CONFIG_PDA_POWER is not set +CONFIG_PERF_EVENTS=y +CONFIG_PHYSICAL_ALIGN=0x100000 +CONFIG_PHYSICAL_START=0x1000000 +CONFIG_POWER_SUPPLY=y +# CONFIG_PREEMPT_RCU is not set +# CONFIG_PROCESSOR_SELECT is not set +CONFIG_PROC_PAGE_MONITOR=y +# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set +CONFIG_RD_BZIP2=y +CONFIG_RD_GZIP=y +# CONFIG_RELOCATABLE is not set +CONFIG_RTC_CLASS=y +# CONFIG_RWSEM_GENERIC_SPINLOCK is not set +CONFIG_RWSEM_XCHGADD_ALGORITHM=y +# CONFIG_SAMSUNG_Q10 is not set +# 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=y +CONFIG_SCx200=y +CONFIG_SCx200HR_TIMER=y +# CONFIG_SCx200_GPIO is not set +# CONFIG_SCx200_WDT is not set +CONFIG_SERIAL_8250_PCI=y +CONFIG_SERIO=y +# CONFIG_SERIO_CT82C710 is not set +CONFIG_SERIO_I8042=y +CONFIG_SERIO_LIBPS2=y +CONFIG_SERIO_SERPORT=y +# CONFIG_SLAB is not set +CONFIG_SLUB=y +CONFIG_SLUB_DEBUG=y +# CONFIG_SLUB_DEBUG_ON 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_STRICT_DEVMEM=y +# CONFIG_TELCLOCK is not set +CONFIG_THERMAL=y +CONFIG_TICK_CPU_ACCOUNTING=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_NS is not set +CONFIG_USER_STACKTRACE_SUPPORT=y +# CONFIG_VIA_WDT is not set +CONFIG_VM86=y +# CONFIG_VMWARE_BALLOON is not set +CONFIG_VM_EVENT_COUNTERS=y +# 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_ANCIENT_MCE is not set +CONFIG_X86_BSWAP=y +# CONFIG_X86_CHECK_BIOS_CORRUPTION is not set +CONFIG_X86_CMPXCHG=y +# CONFIG_X86_CPUFREQ_NFORCE2 is not set +# CONFIG_X86_CPUID is not set +# CONFIG_X86_EXTENDED_PLATFORM is not set +# CONFIG_X86_E_POWERSAVER is not set +CONFIG_X86_F00F_BUG=y +CONFIG_X86_GENERIC=y +# CONFIG_X86_GX_SUSPMOD is not set +CONFIG_X86_INTEL_USERCOPY=y +CONFIG_X86_INTERNODE_CACHE_SHIFT=6 +CONFIG_X86_INVD_BUG=y +CONFIG_X86_INVLPG=y +CONFIG_X86_IO_APIC=y +CONFIG_X86_L1_CACHE_SHIFT=6 +CONFIG_X86_LOCAL_APIC=y +# CONFIG_X86_LONGRUN is not set +CONFIG_X86_MCE=y +CONFIG_X86_MCE_AMD=y +# CONFIG_X86_MCE_INJECT is not set +CONFIG_X86_MCE_INTEL=y +CONFIG_X86_MCE_THRESHOLD=y +CONFIG_X86_MINIMUM_CPU_FAMILY=4 +CONFIG_X86_MPPARSE=y +# CONFIG_X86_MSR is not set +# CONFIG_X86_P4_CLOCKMOD is not set +# CONFIG_X86_PAE is not set +CONFIG_X86_PAT=y +CONFIG_X86_PLATFORM_DEVICES=y +CONFIG_X86_POPAD_OK=y +# CONFIG_X86_POWERNOW_K6 is not set +# CONFIG_X86_POWERNOW_K7 is not set +CONFIG_X86_PPRO_FENCE=y +# CONFIG_X86_PTDUMP is not set +# CONFIG_X86_REBOOTFIXUPS is not set +CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y +CONFIG_X86_RESERVE_LOW=64 +# CONFIG_X86_SMAP is not set +# CONFIG_X86_SPEEDSTEP_CENTRINO is not set +# CONFIG_X86_SPEEDSTEP_ICH is not set +# CONFIG_X86_SPEEDSTEP_LIB is not set +# CONFIG_X86_SPEEDSTEP_SMI is not set +CONFIG_X86_SUPPORTS_MEMORY_FAILURE=y +CONFIG_X86_THERMAL_VECTOR=y +CONFIG_X86_UP_APIC=y +CONFIG_X86_UP_IOAPIC=y +CONFIG_X86_VERBOSE_BOOTUP=y +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/patches-3.7/006-yenta_mistery.patch b/target/linux/x86/patches-3.7/006-yenta_mistery.patch new file mode 100644 index 000000000..65893ea2b --- /dev/null +++ b/target/linux/x86/patches-3.7/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.7/009-rdc321x_select_embedded.patch b/target/linux/x86/patches-3.7/009-rdc321x_select_embedded.patch new file mode 100644 index 000000000..2d094fc74 --- /dev/null +++ b/target/linux/x86/patches-3.7/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.7/010-rdc_cpu_ident.patch b/target/linux/x86/patches-3.7/010-rdc_cpu_ident.patch new file mode 100644 index 000000000..0f2314a3e --- /dev/null +++ b/target/linux/x86/patches-3.7/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.7/011-tune_lzma_options.patch b/target/linux/x86/patches-3.7/011-tune_lzma_options.patch new file mode 100644 index 000000000..e6fd44d4e --- /dev/null +++ b/target/linux/x86/patches-3.7/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.7/012-export_erase_write.patch b/target/linux/x86/patches-3.7/012-export_erase_write.patch new file mode 100644 index 000000000..893d4d825 --- /dev/null +++ b/target/linux/x86/patches-3.7/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.7/100-rdc_boards.patch b/target/linux/x86/patches-3.7/100-rdc_boards.patch new file mode 100644 index 000000000..958bee006 --- /dev/null +++ b/target/linux/x86/patches-3.7/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.7/120-panic_on_unrecovered_nmi.patch b/target/linux/x86/patches-3.7/120-panic_on_unrecovered_nmi.patch new file mode 100644 index 000000000..6a1279cea --- /dev/null +++ b/target/linux/x86/patches-3.7/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.7/150-pit-tick-rate.patch b/target/linux/x86/patches-3.7/150-pit-tick-rate.patch new file mode 100644 index 000000000..5af3cef2f --- /dev/null +++ b/target/linux/x86/patches-3.7/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.7/160-kexec-fix.patch b/target/linux/x86/patches-3.7/160-kexec-fix.patch new file mode 100644 index 000000000..ea32494a0 --- /dev/null +++ b/target/linux/x86/patches-3.7/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 | 
