diff options
10 files changed, 430 insertions, 1 deletions
diff --git a/target/linux/ramips/Makefile b/target/linux/ramips/Makefile index e7e76a5..0d375b5 100644 --- a/target/linux/ramips/Makefile +++ b/target/linux/ramips/Makefile @@ -13,7 +13,7 @@ SUBTARGETS:=rt288x rt305x CFLAGS:=-Os -pipe -mips32r2 -mtune=mips32r2 -funit-at-a-time FEATURES:=squashfs -LINUX_VERSION:=2.6.32.13 +LINUX_VERSION:=2.6.34 include $(INCLUDE_DIR)/target.mk DEFAULT_PACKAGES+=kmod-leds-gpio wpad-mini diff --git a/target/linux/ramips/patches-2.6.34/001-mips-add-cp0-compare-irq-function.patch b/target/linux/ramips/patches-2.6.34/001-mips-add-cp0-compare-irq-function.patch new file mode 100644 index 0000000..1eff47b --- /dev/null +++ b/target/linux/ramips/patches-2.6.34/001-mips-add-cp0-compare-irq-function.patch @@ -0,0 +1,33 @@ +Index: linux-2.6.34/arch/mips/kernel/traps.c +=================================================================== +--- linux-2.6.34.orig/arch/mips/kernel/traps.c 2010-05-17 01:17:36.000000000 +0400 ++++ linux-2.6.34/arch/mips/kernel/traps.c 2010-05-22 14:22:35.000000000 +0400 +@@ -51,6 +51,7 @@ + #include <asm/stacktrace.h> + #include <asm/irq.h> + #include <asm/uasm.h> ++#include <asm/time.h> + + extern void check_wait(void); + extern asmlinkage void r4k_wait(void); +@@ -1506,6 +1507,8 @@ + if (cpu_has_mips_r2) { + cp0_compare_irq_shift = CAUSEB_TI - CAUSEB_IP; + cp0_compare_irq = (read_c0_intctl() >> INTCTLB_IPTI) & 7; ++ if (get_c0_compare_irq) ++ cp0_compare_irq = get_c0_compare_irq(); + cp0_perfcount_irq = (read_c0_intctl() >> INTCTLB_IPPCI) & 7; + if (cp0_perfcount_irq == cp0_compare_irq) + cp0_perfcount_irq = -1; +Index: linux-2.6.34/arch/mips/include/asm/time.h +=================================================================== +--- linux-2.6.34.orig/arch/mips/include/asm/time.h 2010-05-17 01:17:36.000000000 +0400 ++++ linux-2.6.34/arch/mips/include/asm/time.h 2010-05-21 11:32:22.000000000 +0400 +@@ -52,6 +52,7 @@ + */ + #ifdef CONFIG_CEVT_R4K_LIB + extern unsigned int __weak get_c0_compare_int(void); ++extern unsigned int __weak get_c0_compare_irq(void); + extern int r4k_clockevent_init(void); + #endif + diff --git a/target/linux/ramips/patches-2.6.34/010-mtd_fix_cfi_cmdset_0002_erase_status_check.patch b/target/linux/ramips/patches-2.6.34/010-mtd_fix_cfi_cmdset_0002_erase_status_check.patch new file mode 100644 index 0000000..a4fb235 --- /dev/null +++ b/target/linux/ramips/patches-2.6.34/010-mtd_fix_cfi_cmdset_0002_erase_status_check.patch @@ -0,0 +1,20 @@ +--- a/drivers/mtd/chips/cfi_cmdset_0002.c ++++ b/drivers/mtd/chips/cfi_cmdset_0002.c +@@ -1557,7 +1557,7 @@ static int __xipram do_erase_chip(struct + chip->erase_suspended = 0; + } + +- if (chip_ready(map, adr)) ++ if (chip_good(map, adr, map_word_ff(map))) + break; + + if (time_after(jiffies, timeo)) { +@@ -1645,7 +1645,7 @@ static int __xipram do_erase_oneblock(st + chip->erase_suspended = 0; + } + +- if (chip_ready(map, adr)) { ++ if (chip_good(map, adr, map_word_ff(map))) { + xip_enable(map, chip, adr); + break; + } diff --git a/target/linux/ramips/patches-2.6.34/100-mips-ralink-core.patch b/target/linux/ramips/patches-2.6.34/100-mips-ralink-core.patch new file mode 100644 index 0000000..598a155 --- /dev/null +++ b/target/linux/ramips/patches-2.6.34/100-mips-ralink-core.patch @@ -0,0 +1,58 @@ +--- a/arch/mips/Makefile ++++ b/arch/mips/Makefile +@@ -181,6 +181,26 @@ ifeq (,$(findstring march=octeon, $(cfla + cflags-$(CONFIG_CPU_CAVIUM_OCTEON) += -Wa,-march=octeon + endif + ++# ++# Ralink SoC common stuff ++# ++core-$(CONFIG_MIPS_RALINK) += arch/mips/ralink/common/ ++cflags-$(CONFIG_MIPS_RALINK) += -I$(srctree)/arch/mips/include/asm/mach-ralink ++ ++# ++# Ralink RT288x ++# ++core-$(CONFIG_RALINK_RT288X) += arch/mips/ralink/rt288x/ ++cflags-$(CONFIG_RALINK_RT288X) += -I$(srctree)//arch/mips/include/asm/mach-ralink/rt288x ++load-$(CONFIG_RALINK_RT288X) += 0xffffffff88000000 ++ ++# ++# Ralink RT305x ++# ++core-$(CONFIG_RALINK_RT305X) += arch/mips/ralink/rt305x/ ++cflags-$(CONFIG_RALINK_RT305X) += -I$(srctree)/arch/mips/include/asm/mach-ralink/rt305x ++load-$(CONFIG_RALINK_RT305X) += 0xffffffff80000000 ++ + cflags-$(CONFIG_CPU_R4000_WORKAROUNDS) += $(call cc-option,-mfix-r4000,) + cflags-$(CONFIG_CPU_R4400_WORKAROUNDS) += $(call cc-option,-mfix-r4400,) + cflags-$(CONFIG_CPU_DADDI_WORKAROUNDS) += $(call cc-option,-mno-daddi,) +--- a/arch/mips/Kconfig ++++ b/arch/mips/Kconfig +@@ -48,6 +48,9 @@ config AR7 + Support for the Texas Instruments AR7 System-on-a-Chip + family: TNETD7100, 7200 and 7300. + ++config MIPS_RALINK ++ bool "Ralink MIPS SoC based boards" ++ + config BCM47XX + bool "Broadcom BCM47XX based boards" + select CEVT_R4K +@@ -688,6 +691,7 @@ source "arch/mips/bcm63xx/Kconfig" + source "arch/mips/jazz/Kconfig" + source "arch/mips/lasat/Kconfig" + source "arch/mips/pmc-sierra/Kconfig" ++source "arch/mips/ralink/Kconfig" + source "arch/mips/powertv/Kconfig" + source "arch/mips/sgi-ip27/Kconfig" + source "arch/mips/sibyte/Kconfig" +@@ -1044,7 +1048,7 @@ config BOOT_ELF32 + + config MIPS_L1_CACHE_SHIFT + int +- default "4" if MACH_DECSTATION || MIKROTIK_RB532 || PMC_MSP4200_EVAL ++ default "4" if MACH_DECSTATION || MIKROTIK_RB532 || PMC_MSP4200_EVAL || RALINK_RT288X + default "6" if MIPS_CPU_SCACHE + default "7" if SGI_IP22 || SGI_IP27 || SGI_IP28 || SNI_RM || CPU_CAVIUM_OCTEON + default "5" diff --git a/target/linux/ramips/patches-2.6.34/101-rt288x_serial_driver_hack.patch b/target/linux/ramips/patches-2.6.34/101-rt288x_serial_driver_hack.patch new file mode 100644 index 0000000..9cf0ebf --- /dev/null +++ b/target/linux/ramips/patches-2.6.34/101-rt288x_serial_driver_hack.patch @@ -0,0 +1,118 @@ +--- a/drivers/serial/8250.c ++++ b/drivers/serial/8250.c +@@ -302,9 +302,9 @@ static const struct serial8250_config ua + }, + }; + +-#if defined (CONFIG_SERIAL_8250_AU1X00) ++#if defined (CONFIG_SERIAL_8250_AU1X00) || defined (CONFIG_SERIAL_8250_RT288X) + +-/* Au1x00 UART hardware has a weird register layout */ ++/* Au1x00 and RT288x UART hardware has a weird register layout */ + static const u8 au_io_in_map[] = { + [UART_RX] = 0, + [UART_IER] = 2, +@@ -422,7 +422,7 @@ static unsigned int mem32_serial_in(stru + return readl(p->membase + offset); + } + +-#ifdef CONFIG_SERIAL_8250_AU1X00 ++#if defined(CONFIG_SERIAL_8250_AU1X00) || defined(CONFIG_SERIAL_8250_RT288X) + static unsigned int au_serial_in(struct uart_port *p, int offset) + { + offset = map_8250_in_reg(p, offset) << p->regshift; +@@ -503,7 +503,7 @@ static void set_io_from_upio(struct uart + p->serial_out = mem32_serial_out; + break; + +-#ifdef CONFIG_SERIAL_8250_AU1X00 ++#if defined (CONFIG_SERIAL_8250_AU1X00) || defined (CONFIG_SERIAL_8250_RT288X) + case UPIO_AU: + p->serial_in = au_serial_in; + p->serial_out = au_serial_out; +@@ -535,7 +535,7 @@ serial_out_sync(struct uart_8250_port *u + switch (p->iotype) { + case UPIO_MEM: + case UPIO_MEM32: +-#ifdef CONFIG_SERIAL_8250_AU1X00 ++#if defined (CONFIG_SERIAL_8250_AU1X00) || defined (CONFIG_SERIAL_8250_RT288X) + case UPIO_AU: + #endif + case UPIO_DWAPB: +@@ -573,8 +573,8 @@ static inline void _serial_dl_write(stru + serial_outp(up, UART_DLM, value >> 8 & 0xff); + } + +-#if defined(CONFIG_SERIAL_8250_AU1X00) +-/* Au1x00 haven't got a standard divisor latch */ ++#if defined (CONFIG_SERIAL_8250_AU1X00) || defined (CONFIG_SERIAL_8250_RT288X) ++/* Au1x00 and RT288x haven't got a standard divisor latch */ + static int serial_dl_read(struct uart_8250_port *up) + { + if (up->port.iotype == UPIO_AU) +@@ -781,22 +781,19 @@ static int size_fifo(struct uart_8250_po + */ + static unsigned int autoconfig_read_divisor_id(struct uart_8250_port *p) + { +- unsigned char old_dll, old_dlm, old_lcr; ++ unsigned char old_lcr; ++ unsigned int old_dl; + unsigned int id; + + old_lcr = serial_inp(p, UART_LCR); + serial_outp(p, UART_LCR, UART_LCR_DLAB); + +- old_dll = serial_inp(p, UART_DLL); +- old_dlm = serial_inp(p, UART_DLM); ++ old_dl = serial_dl_read(p); + +- serial_outp(p, UART_DLL, 0); +- serial_outp(p, UART_DLM, 0); ++ serial_dl_write(p, 0); ++ id = serial_dl_read(p); + +- id = serial_inp(p, UART_DLL) | serial_inp(p, UART_DLM) << 8; +- +- serial_outp(p, UART_DLL, old_dll); +- serial_outp(p, UART_DLM, old_dlm); ++ serial_dl_write(p, old_dl); + serial_outp(p, UART_LCR, old_lcr); + + return id; +@@ -2596,7 +2593,7 @@ static void serial8250_config_port(struc + if (flags & UART_CONFIG_TYPE) + autoconfig(up, probeflags); + +-#ifdef CONFIG_SERIAL_8250_AU1X00 ++#if defined (CONFIG_SERIAL_8250_AU1X00) || defined (CONFIG_SERIAL_8250_RT288X) + /* if access method is AU, it is a 16550 with a quirk */ + if (up->port.type == PORT_16550A && up->port.iotype == UPIO_AU) + up->bugs |= UART_BUG_NOMSR; +--- a/drivers/serial/Kconfig ++++ b/drivers/serial/Kconfig +@@ -266,6 +266,14 @@ config SERIAL_8250_AU1X00 + say Y to this option. The driver can handle up to 4 serial ports, + depending on the SOC. If unsure, say N. + ++config SERIAL_8250_RT288X ++ bool "Ralink RT288x/RT305x serial port support" ++ depends on SERIAL_8250 != n && (SOC_RT288X || SOC_RT305X) ++ help ++ If you have a Ralink RT288x/RT305x SoC based board and want to use the ++ serial port, say Y to this option. The driver can handle up to 2 serial ++ ports. If unsure, say N. ++ + config SERIAL_8250_RM9K + bool "Support for MIPS RM9xxx integrated serial port" + depends on SERIAL_8250 != n && SERIAL_RM9000 +--- a/include/linux/serial_core.h ++++ b/include/linux/serial_core.h +@@ -284,7 +284,7 @@ struct uart_port { + #define UPIO_HUB6 (1) + #define UPIO_MEM (2) + #define UPIO_MEM32 (3) +-#define UPIO_AU (4) /* Au1x00 type IO */ ++#define UPIO_AU (4) /* Au1x00 and RT288x type IO */ + #define UPIO_TSI (5) /* Tsi108/109 type IO */ + #define UPIO_DWAPB (6) /* DesignWare APB UART */ + #define UPIO_RM9000 (7) /* RM9000 type IO */ diff --git a/target/linux/ramips/patches-2.6.34/102-rt288x-pci-driver-hook.patch b/target/linux/ramips/patches-2.6.34/102-rt288x-pci-driver-hook.patch new file mode 100644 index 0000000..d2056c6 --- /dev/null +++ b/target/linux/ramips/patches-2.6.34/102-rt288x-pci-driver-hook.patch @@ -0,0 +1,10 @@ +--- a/arch/mips/pci/Makefile ++++ b/arch/mips/pci/Makefile +@@ -55,6 +55,7 @@ obj-$(CONFIG_ZAO_CAPCELLA) += fixup-capc + obj-$(CONFIG_WR_PPMC) += fixup-wrppmc.o + obj-$(CONFIG_MIKROTIK_RB532) += pci-rc32434.o ops-rc32434.o fixup-rc32434.o + obj-$(CONFIG_CPU_CAVIUM_OCTEON) += pci-octeon.o pcie-octeon.o ++obj-$(CONFIG_SOC_RT288X) += pci-rt288x.o + + ifdef CONFIG_PCI_MSI + obj-$(CONFIG_CPU_CAVIUM_OCTEON) += msi-octeon.o diff --git a/target/linux/ramips/patches-2.6.34/103-ethernet.patch b/target/linux/ramips/patches-2.6.34/103-ethernet.patch new file mode 100644 index 0000000..404f885 --- /dev/null +++ b/target/linux/ramips/patches-2.6.34/103-ethernet.patch @@ -0,0 +1,25 @@ +--- a/drivers/net/Kconfig ++++ b/drivers/net/Kconfig +@@ -614,6 +614,12 @@ config MIPS_AU1X00_ENET + If you have an Alchemy Semi AU1X00 based system + say Y. Otherwise, say N. + ++config MIPS_RAMIPS_NET ++ tristate "Ethernet driver for rt288x/rt305x" ++ depends on MIPS_RALINK ++ help ++ This driver supports the etehrnet mac inside the ralink wisocs ++ + config SGI_IOC3_ETH + bool "SGI IOC3 Ethernet" + depends on PCI && SGI_IP27 +--- a/drivers/net/Makefile ++++ b/drivers/net/Makefile +@@ -222,6 +222,7 @@ obj-$(CONFIG_KORINA) += korina.o + obj-$(CONFIG_MIPS_JAZZ_SONIC) += jazzsonic.o + obj-$(CONFIG_MIPS_AU1X00_ENET) += au1000_eth.o + obj-$(CONFIG_MIPS_SIM_NET) += mipsnet.o ++obj-$(CONFIG_MIPS_RAMIPS_NET) += ramips.o + obj-$(CONFIG_SGI_IOC3_ETH) += ioc3-eth.o + obj-$(CONFIG_DECLANCE) += declance.o + obj-$(CONFIG_ATARILANCE) += atarilance.o diff --git a/target/linux/ramips/patches-2.6.34/104-clsize.patch b/target/linux/ramips/patches-2.6.34/104-clsize.patch new file mode 100644 index 0000000..96465b2 --- /dev/null +++ b/target/linux/ramips/patches-2.6.34/104-clsize.patch @@ -0,0 +1,11 @@ +--- linux-2.6.34.orig/arch/mips/include/asm/bootinfo.h 2010-05-21 09:54:15.000000000 +0400 ++++ linux-2.6.34/arch/mips/include/asm/bootinfo.h 2010-05-21 09:55:09.000000000 +0400 +@@ -12,6 +12,8 @@ + #ifndef _ASM_BOOTINFO_H + #define _ASM_BOOTINFO_H + ++#define CL_SIZE COMMAND_LINE_SIZE ++ + #include <linux/types.h> + #include <asm/setup.h> + diff --git a/target/linux/ramips/patches-2.6.34/105-slab.patch b/target/linux/ramips/patches-2.6.34/105-slab.patch new file mode 100644 index 0000000..8b4c8dc --- /dev/null +++ b/target/linux/ramips/patches-2.6.34/105-slab.patch @@ -0,0 +1,19 @@ +--- linux-2.6.34.orig/arch/mips/ralink/common/dev-gpio-buttons.c 2010-05-21 09:59:26.000000000 +0400 ++++ linux-2.6.34/arch/mips/ralink/common/dev-gpio-buttons.c 2010-05-21 10:00:05.000000000 +0400 +@@ -10,6 +10,7 @@ + + #include "linux/init.h" + #include <linux/platform_device.h> ++#include <linux/slab.h> + + #include <asm/mach-ralink/dev-gpio-buttons.h> + +--- linux-2.6.34.orig/arch/mips/ralink/common/dev-gpio-leds.c 2010-05-21 09:59:22.000000000 +0400 ++++ linux-2.6.34/arch/mips/ralink/common/dev-gpio-leds.c 2010-05-21 09:59:44.000000000 +0400 +@@ -10,6 +10,7 @@ + + #include <linux/init.h> + #include <linux/platform_device.h> ++#include <linux/slab.h> + + #include <asm/mach-ralink/dev-gpio-leds.h> diff --git a/target/linux/ramips/patches-2.6.34/400-mips-multi-machine-update.patch b/target/linux/ramips/patches-2.6.34/400-mips-multi-machine-update.patch new file mode 100644 index 0000000..60fe04f --- /dev/null +++ b/target/linux/ramips/patches-2.6.34/400-mips-multi-machine-update.patch @@ -0,0 +1,135 @@ +--- a/arch/mips/kernel/mips_machine.c ++++ b/arch/mips/kernel/mips_machine.c +@@ -7,12 +7,14 @@ + * + */ + #include <linux/mm.h> ++#include <linux/string.h> ++#include <linux/slab.h> + + #include <asm/mips_machine.h> +-#include <asm/bootinfo.h> + + static struct list_head mips_machines __initdata = + LIST_HEAD_INIT(mips_machines); ++static char *mips_machid __initdata; + + char *mips_machine_name = "Unknown"; + +@@ -55,20 +56,65 @@ void __init mips_machine_set_name(char * + } + } + +-void __init mips_machine_setup(unsigned long machtype) ++void __init mips_machine_setup(void) + { + struct mips_machine *mach; + +- mach = mips_machine_find(machtype); ++ mach = mips_machine_find(mips_machtype); + if (!mach) { +- printk(KERN_ALERT "MIPS: no machine registered for " +- "machtype %lu\n", machtype); ++ printk(KERN_WARNING "MIPS: no machine registered for " ++ "machtype %lu\n", mips_machtype); + return; + } + + mips_machine_set_name(mach->mach_name); +- printk(KERN_INFO "MIPS: machine is %s\n", mips_machine_name); ++ printk(KERN_NOTICE "MIPS: machine is %s\n", mips_machine_name); + + if (mach->mach_setup) + mach->mach_setup(); + } ++ ++int __init mips_machtype_setup(char *id) ++{ ++ if (mips_machid == NULL) ++ mips_machid = id; ++ ++ return 1; ++} ++ ++__setup("machtype=", mips_machtype_setup); ++ ++static int __init mips_machtype_init(void) ++{ ++ struct list_head *this; ++ struct mips_machine *mach; ++ ++ if (mips_machid == NULL) ++ return 0; ++ ++ list_for_each(this, &mips_machines) { ++ mach = list_entry(this, struct mips_machine, list); ++ if (mach->mach_id == NULL) ++ continue; ++ ++ if (strcmp(mach->mach_id, mips_machid) == 0) { ++ mips_machtype = mach->mach_type; ++ return 0; ++ } ++ } ++ ++ printk(KERN_WARNING ++ "MIPS: no machine found for id: '%s', registered machines:\n", ++ mips_machid); ++ printk(KERN_WARNING "%32s %s\n", "id", "name"); ++ ++ list_for_each(this, &mips_machines) { ++ mach = list_entry(this, struct mips_machine, list); ++ printk(KERN_WARNING "%32s %s\n", ++ mach->mach_id ? mach->mach_id : "", mach->mach_name); ++ } ++ ++ return 0; ++} ++ ++core_initcall(mips_machtype_init); +--- a/arch/mips/include/asm/mips_machine.h ++++ b/arch/mips/include/asm/mips_machine.h +@@ -13,25 +13,33 @@ + #include <linux/init.h> + #include <linux/list.h> + ++#include <asm/bootinfo.h> ++ + struct mips_machine { + unsigned long mach_type; +- void (*mach_setup)(void); ++ char *mach_id; + char *mach_name; ++ void (*mach_setup)(void); + struct list_head list; + }; + + void mips_machine_register(struct mips_machine *) __init; +-void mips_machine_setup(unsigned long machtype) __init; ++void mips_machine_setup(void) __init; ++int mips_machtype_setup(char *id) __init; + void mips_machine_set_name(char *name) __init; + + extern char *mips_machine_name; + +-#define MIPS_MACHINE(_type, _name, _setup) \ +-static char machine_name_##_type[] __initdata = _name; \ ++#define MIPS_MACHINE(_type, _id, _name, _setup) \ ++static const char machine_name_##_type[] __initconst \ ++ __aligned(1) = _name; \ ++static const char machine_id_##_type[] __initconst \ ++ __aligned(1) = _id; \ + static struct mips_machine machine_##_type __initdata = \ + { \ + .mach_type = _type, \ +- .mach_name = machine_name_##_type, \ ++ .mach_id = (char *) machine_id_##_type, \ ++ .mach_name = (char *) machine_name_##_type, \ + .mach_setup = _setup, \ + }; \ + \ +@@ -44,4 +52,3 @@ static int __init register_machine_##_ty + pure_initcall(register_machine_##_type) + + #endif /* __ASM_MIPS_MACHINE_H */ +- |