* rebase 3.0 patches
* fold some fixes into existing patches

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@28308 3c298f89-4303-0410-b956-a3cf2f4a3e73
master
John Crispin 2011-09-26 09:35:02 +00:00
parent 573a49afbe
commit 1489979632
28 changed files with 766 additions and 585 deletions

View File

@ -1,6 +1,6 @@
--- a/arch/mips/lantiq/xway/mach-easy50601.c
+++ b/arch/mips/lantiq/xway/mach-easy50601.c
@@ -32,12 +32,7 @@
@@ -32,12 +32,7 @@ static struct mtd_partition easy50601_pa
{
.name = "linux",
.offset = 0x20000,
@ -16,7 +16,7 @@
--- a/arch/mips/lantiq/xway/mach-easy50712.c
+++ b/arch/mips/lantiq/xway/mach-easy50712.c
@@ -34,12 +34,7 @@
@@ -34,12 +34,7 @@ static struct mtd_partition easy50712_pa
{
.name = "linux",
.offset = 0x20000,

View File

@ -11,7 +11,7 @@
--- a/arch/mips/lantiq/clk.c
+++ b/arch/mips/lantiq/clk.c
@@ -100,6 +100,17 @@
@@ -100,6 +100,17 @@ void clk_put(struct clk *clk)
}
EXPORT_SYMBOL(clk_put);
@ -39,7 +39,7 @@
#include <asm/bootinfo.h>
#include <asm/irq_cpu.h>
@@ -105,6 +106,7 @@
@@ -99,6 +100,7 @@ void ltq_mask_and_ack_irq(struct irq_dat
ltq_icu_w32(ltq_icu_r32(ier) & ~(1 << irq_nr), ier);
ltq_icu_w32((1 << irq_nr), isr);
}
@ -58,7 +58,7 @@
void __init plat_mem_setup(void)
{
/* assume 16M as default incase uboot fails to pass proper ramsize */
@@ -40,8 +42,8 @@
@@ -40,8 +42,8 @@ void __init plat_mem_setup(void)
}
envp++;
}

View File

@ -72,7 +72,7 @@
+EXPORT_SYMBOL(ltq_get_fpi_hz);
--- /dev/null
+++ b/arch/mips/lantiq/falcon/devices.c
@@ -0,0 +1,254 @@
@@ -0,0 +1,258 @@
+#include <linux/init.h>
+#include <linux/module.h>
+#include <linux/types.h>
@ -109,6 +109,10 @@
+unsigned char ltq_ethaddr[6] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
+EXPORT_SYMBOL(ltq_ethaddr);
+
+/* create dummy ebu spinlock for drivers shared with XWAY targets */
+DEFINE_SPINLOCK(ebu_lock);
+EXPORT_SYMBOL_GPL(ebu_lock);
+
+static int __init
+falcon_set_ethaddr(char *str)
+{
@ -793,7 +797,7 @@
+EXPORT_SYMBOL(sys_gpe_hw_is_activated);
--- /dev/null
+++ b/arch/mips/lantiq/falcon/gpio.c
@@ -0,0 +1,463 @@
@@ -0,0 +1,505 @@
+/*
+ * 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
@ -842,6 +846,8 @@
+#define gpio_w32(val, reg) __raw_writel(val, reg)
+#define gpio_w32_mask(clear, set, reg) gpio_w32((gpio_r32(reg) & ~(clear)) | (set), reg)
+
+#define MAX_PORTS 5
+#define PINS_PER_PORT 32
+
+/** register structure for padctrl
+ (mainly needed for mux control) */
@ -926,6 +932,8 @@
+ unsigned int chained_irq;
+};
+
+static struct falcon_gpio_port ltq_gpio_port[MAX_PORTS];
+
+static int gpio_exported = 0;
+static int __init gpio_export_setup(char *str)
+{
@ -946,13 +954,6 @@
+ return 0;
+}
+
+static int falcon_gpio_direction_output(struct gpio_chip *chip, unsigned int offset, int value)
+{
+ struct falcon_gpio_port *gpio_port = to_falcon_gpio_port(chip);
+ gpio_w32(1<<offset, &gpio_port->port->dirset);
+ return 0;
+}
+
+static void falcon_gpio_set(struct gpio_chip *chip, unsigned int offset, int value)
+{
+ struct falcon_gpio_port *gpio_port = to_falcon_gpio_port(chip);
@ -962,6 +963,14 @@
+ gpio_w32(1<<offset, &gpio_port->port->outclr);
+}
+
+static int falcon_gpio_direction_output(struct gpio_chip *chip, unsigned int offset, int value)
+{
+ struct falcon_gpio_port *gpio_port = to_falcon_gpio_port(chip);
+ falcon_gpio_set(chip, offset, value);
+ gpio_w32(1<<offset, &gpio_port->port->dirset);
+ return 0;
+}
+
+static int falcon_gpio_get(struct gpio_chip *chip, unsigned int offset)
+{
+ struct falcon_gpio_port *gpio_port = to_falcon_gpio_port(chip);
@ -1038,6 +1047,46 @@
+ gpio_w32(1<<offset, &gpio_port->port->irncr);
+}
+
+int ltq_gpio_mux_set(unsigned int pin, unsigned int mux)
+{
+ int port = pin / 100;
+ int offset = pin % 100;
+ struct falcon_gpio_port *gpio_port;
+
+ if (offset >= PINS_PER_PORT || port >= MAX_PORTS)
+ return -EINVAL;
+
+ gpio_port = &ltq_gpio_port[port];
+ gpio_w32(mux, &gpio_port->pad->muxc[offset]);
+
+ return 0;
+}
+EXPORT_SYMBOL(ltq_gpio_mux_set);
+
+int ltq_gpio_request(unsigned int pin, unsigned int alt0,
+ unsigned int alt1, unsigned int dir, const char *name)
+{
+ int port = pin / 100;
+ int offset = pin % 100;
+ unsigned int mux = (alt0 & 1) + (alt1 & 1) * 2;
+
+ if (offset >= PINS_PER_PORT || port >= MAX_PORTS)
+ return -EINVAL;
+
+ if (gpio_request(pin, name)) {
+ pr_err("failed to setup lantiq gpio: %s\n", name);
+ return -EBUSY;
+ }
+
+ if (dir)
+ gpio_direction_output(pin, 1);
+ else
+ gpio_direction_input(pin);
+
+ return ltq_gpio_mux_set(pin, mux);
+}
+EXPORT_SYMBOL(ltq_gpio_request);
+
+static struct irq_chip falcon_gpio_irq_chip;
+static int falcon_gpio_irq_type(struct irq_data *d, unsigned int type)
+{
@ -1115,16 +1164,16 @@
+ struct resource *gpiores, *padres;
+ int irq;
+
+ if (pdev->id >= MAX_PORTS)
+ return -ENODEV;
+
+ gpiores = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+ padres = platform_get_resource(pdev, IORESOURCE_MEM, 1);
+ irq = platform_get_irq(pdev, 0);
+ if (!gpiores || !padres)
+ return -ENODEV;
+
+ gpio_port = kzalloc(sizeof(*gpio_port), GFP_KERNEL);
+ if (gpio_port == NULL)
+ return -ENOMEM;
+
+ gpio_port = &ltq_gpio_port[pdev->id];
+ gpio_port->gpio_chip.label = "falcon-gpio";
+ gpio_port->gpio_chip.direction_input = falcon_gpio_direction_input;
+ gpio_port->gpio_chip.direction_output = falcon_gpio_direction_output;
@ -1200,7 +1249,6 @@
+ iounmap(gpio_port->port);
+ if (gpio_port->pad)
+ iounmap(gpio_port->pad);
+ kfree(gpio_port);
+ return ret;
+}
+
@ -1218,8 +1266,6 @@
+ iounmap(gpio_port->port);
+ if (gpio_port->pad)
+ iounmap(gpio_port->pad);
+ if (ret == 0)
+ kfree(gpio_port);
+
+ return ret;
+}
@ -1278,7 +1324,7 @@
+#endif
--- /dev/null
+++ b/arch/mips/lantiq/falcon/reset.c
@@ -0,0 +1,80 @@
@@ -0,0 +1,95 @@
+/*
+ * 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
@ -1305,6 +1351,22 @@
+#define WDT_PW2 0x00DC0000
+#define WDT_REG_BASE (KSEG1 | 0x1F8803F0)
+
+struct gpon_reg_boot {
+ /* bootrom related virtual registers */
+ unsigned int rvec;
+ unsigned int nvec;
+ unsigned int evec;
+ unsigned int cp0_status;
+ unsigned int cp0_epc;
+ unsigned int cp0_eepc;
+ unsigned int size;
+ unsigned int cfg_stat;
+ /* additional virtual registers */
+ unsigned int magic0; /* magic for valid reboot */
+ unsigned int magic1; /* -"- */
+ unsigned int bcount; /* reboot counter, used by u-boot */
+} * const pBOOT = (struct gpon_reg_boot *)GPON_SBS0RAM_BASE;
+
+/* This function is used by the watchdog driver */
+int ltq_reset_cause(void)
+{
@ -1317,11 +1379,11 @@
+{
+ printk(KERN_NOTICE "System restart\n");
+ local_irq_disable();
+ ltq_w32(0, (void*)0xBF200000); /* reset Bootreg RVEC */
+#if 0
+ ltq_w32(RBT_CPU_TRIG, &pSYS1->rbt);
+#else
+ /* use workaround via watchdog timer */
+ /* write magic to signal a valid restart */
+ ltq_w32(0x4C545100, &pBOOT->magic0); /* 'LTQ\0' */
+ ltq_w32(0x0051544C, &pBOOT->magic1); /* '\0QTL' */
+ ltq_w32(0, &pBOOT->rvec); /* reset Bootreg RVEC */
+ /* reset via watchdog timer, to ensure reset of all hardware components */
+ ltq_w32(WDT_PW1, (void*)WDT_REG_BASE);
+ ltq_w32(WDT_PW2 |
+ (0x3 << 26) | /* PWL */
@ -1329,7 +1391,6 @@
+ (0x1 << 31) | /* enable */
+ (1), /* reload */
+ (void*)WDT_REG_BASE);
+#endif
+ for(;;);
+}
+
@ -1778,7 +1839,7 @@
+#endif
--- a/arch/mips/lantiq/Kconfig
+++ b/arch/mips/lantiq/Kconfig
@@ -16,8 +16,12 @@
@@ -16,8 +16,12 @@ config SOC_XWAY
bool "XWAY"
select SOC_TYPE_XWAY
select HW_HAS_PCI
@ -1793,21 +1854,21 @@
endif
--- a/arch/mips/lantiq/Makefile
+++ b/arch/mips/lantiq/Makefile
@@ -9,3 +9,4 @@
@@ -9,3 +9,4 @@ obj-y := irq.o setup.o clk.o prom.o devi
obj-$(CONFIG_EARLY_PRINTK) += early_printk.o
obj-$(CONFIG_SOC_TYPE_XWAY) += xway/
+obj-$(CONFIG_SOC_FALCON) += falcon/
--- a/arch/mips/lantiq/Platform
+++ b/arch/mips/lantiq/Platform
@@ -6,3 +6,4 @@
@@ -6,3 +6,4 @@ platform-$(CONFIG_LANTIQ) += lantiq/
cflags-$(CONFIG_LANTIQ) += -I$(srctree)/arch/mips/include/asm/mach-lantiq
load-$(CONFIG_LANTIQ) = 0xffffffff80002000
cflags-$(CONFIG_SOC_TYPE_XWAY) += -I$(srctree)/arch/mips/include/asm/mach-lantiq/xway
+cflags-$(CONFIG_SOC_FALCON) += -I$(srctree)/arch/mips/include/asm/mach-lantiq/falcon
--- a/arch/mips/lantiq/machtypes.h
+++ b/arch/mips/lantiq/machtypes.h
@@ -15,6 +15,12 @@
@@ -15,6 +15,12 @@ enum lantiq_mach_type {
LTQ_MACH_GENERIC = 0,
LTQ_MACH_EASY50712, /* Danube evaluation board */
LTQ_MACH_EASY50601, /* Amazon SE evaluation board */
@ -2035,3 +2096,20 @@
+
+module_init(easy98000_addon_init);
+module_exit(easy98000_addon_exit);
--- a/arch/mips/lantiq/prom.c
+++ b/arch/mips/lantiq/prom.c
@@ -45,10 +45,12 @@ static void __init prom_init_cmdline(voi
char **argv = (char **) KSEG1ADDR(fw_arg1);
int i;
+ arcs_cmdline[0] = '\0';
+
for (i = 0; i < argc; i++) {
- char *p = (char *) KSEG1ADDR(argv[i]);
+ char *p = (char *) KSEG1ADDR(argv[i]);
- if (p && *p) {
+ if (CPHYSADDR(p) && *p) {
strlcat(arcs_cmdline, p, sizeof(arcs_cmdline));
strlcat(arcs_cmdline, " ", sizeof(arcs_cmdline));
}

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
--- a/drivers/spi/Makefile
+++ b/drivers/spi/Makefile
@@ -55,6 +55,7 @@ obj-$(CONFIG_SPI_SH_SCI) += spi_sh_sci.
@@ -56,6 +56,7 @@ obj-$(CONFIG_SPI_SH_SCI) += spi_sh_sci.
obj-$(CONFIG_SPI_SH_MSIOF) += spi_sh_msiof.o
obj-$(CONFIG_SPI_STMP3XXX) += spi_stmp.o
obj-$(CONFIG_SPI_NUC900) += spi_nuc900.o
@ -484,7 +484,7 @@
+MODULE_DESCRIPTION("Lantiq Falcon SPI controller driver");
--- a/drivers/spi/Kconfig
+++ b/drivers/spi/Kconfig
@@ -210,6 +210,10 @@ config SPI_MPC52xx
@@ -219,6 +219,10 @@ config SPI_MPC52xx
This drivers supports the MPC52xx SPI controller in master SPI
mode.

View File

@ -116,7 +116,7 @@
+ easy98020_init);
--- a/arch/mips/lantiq/falcon/Kconfig
+++ b/arch/mips/lantiq/falcon/Kconfig
@@ -6,6 +6,10 @@
@@ -6,6 +6,10 @@ config LANTIQ_MACH_EASY98000
bool "Easy98000"
default y
@ -129,7 +129,7 @@
endif
--- a/arch/mips/lantiq/falcon/Makefile
+++ b/arch/mips/lantiq/falcon/Makefile
@@ -3,3 +3,4 @@
@@ -3,3 +3,4 @@ obj-y += softdog_vpe.o
obj-$(CONFIG_LANTIQ_MACH_EASY98000) += addon-easy98000.o
obj-$(CONFIG_LANTIQ_MACH_EASY98000) += mach-easy98000.o
obj-$(CONFIG_LANTIQ_MACH_EASY98000) += dev-leds-easy98000-cpld.o

View File

@ -102,7 +102,7 @@
+ board_95C3AM1_init);
--- a/arch/mips/lantiq/falcon/Kconfig
+++ b/arch/mips/lantiq/falcon/Kconfig
@@ -10,6 +10,10 @@
@@ -10,6 +10,10 @@ config LANTIQ_MACH_EASY98020
bool "Easy98020"
default y
@ -115,14 +115,14 @@
endif
--- a/arch/mips/lantiq/falcon/Makefile
+++ b/arch/mips/lantiq/falcon/Makefile
@@ -4,3 +4,4 @@
@@ -4,3 +4,4 @@ obj-$(CONFIG_LANTIQ_MACH_EASY98000) += a
obj-$(CONFIG_LANTIQ_MACH_EASY98000) += mach-easy98000.o
obj-$(CONFIG_LANTIQ_MACH_EASY98000) += dev-leds-easy98000-cpld.o
obj-$(CONFIG_LANTIQ_MACH_EASY98020) += mach-easy98020.o
+obj-$(CONFIG_LANTIQ_MACH_95C3AM1) += mach-95C3AM1.o
--- a/arch/mips/lantiq/machtypes.h
+++ b/arch/mips/lantiq/machtypes.h
@@ -21,6 +21,7 @@
@@ -21,6 +21,7 @@ enum lantiq_mach_type {
LANTIQ_MACH_EASY98000SF, /* Falcon Eval Board, Serial Flash */
LANTIQ_MACH_EASY98000NAND, /* Falcon Eval Board, NAND Flash */
LANTIQ_MACH_EASY98020, /* Falcon Reference Board */

View File

@ -8,7 +8,7 @@
#include <linux/module.h>
#include <linux/ioport.h>
#include <linux/netdevice.h>
@@ -125,6 +126,8 @@
@@ -125,6 +126,8 @@ typedef struct board_info {
struct delayed_work phy_poll;
struct net_device *ndev;
@ -17,7 +17,7 @@
spinlock_t lock;
struct mii_if_info mii;
@@ -824,6 +827,8 @@
@@ -824,6 +827,8 @@ static void dm9000_timeout(struct net_de
netif_stop_queue(dev);
dm9000_reset(db);
dm9000_init_dm9000(dev);
@ -26,7 +26,7 @@
/* We can accept TX packets again */
dev->trans_start = jiffies; /* prevent tx timeout */
netif_wake_queue(dev);
@@ -895,6 +900,12 @@
@@ -895,6 +900,12 @@ dm9000_start_xmit(struct sk_buff *skb, s
/* free this SKB */
dev_kfree_skb(skb);
@ -39,7 +39,7 @@
return NETDEV_TX_OK;
}
@@ -1136,6 +1147,18 @@
@@ -1136,6 +1147,18 @@ static void dm9000_poll_controller(struc
}
#endif
@ -58,7 +58,7 @@
/*
* Open the interface.
* The interface is opened whenever "ifconfig" actives it.
@@ -1149,14 +1172,15 @@
@@ -1149,14 +1172,15 @@ dm9000_open(struct net_device *dev)
if (netif_msg_ifup(db))
dev_dbg(db->dev, "enabling %s\n", dev->name);
@ -80,7 +80,7 @@
/* GPIO0 on pre-activate PHY, Reg 1F is not set by reset */
iow(db, DM9000_GPR, 0); /* REG_1F bit0 activate phyxcer */
mdelay(1); /* delay needs by DM9000B */
@@ -1165,8 +1189,14 @@
@@ -1165,8 +1189,14 @@ dm9000_open(struct net_device *dev)
dm9000_reset(db);
dm9000_init_dm9000(dev);
@ -97,7 +97,7 @@
/* Init driver variable */
db->dbug_cnt = 0;
@@ -1174,6 +1204,9 @@
@@ -1174,6 +1204,9 @@ dm9000_open(struct net_device *dev)
mii_check_media(&db->mii, netif_msg_link(db), 1);
netif_start_queue(dev);
@ -107,7 +107,7 @@
dm9000_schedule_poll(db);
return 0;
@@ -1371,6 +1404,7 @@
@@ -1371,6 +1404,7 @@ dm9000_probe(struct platform_device *pde
mutex_init(&db->addr_lock);
INIT_DELAYED_WORK(&db->phy_poll, dm9000_poll_work);

View File

@ -1,6 +1,6 @@
--- a/arch/mips/lantiq/irq.c
+++ b/arch/mips/lantiq/irq.c
@@ -51,6 +51,7 @@
@@ -52,6 +52,7 @@
#define ltq_eiu_w32(x, y) ltq_w32((x), ltq_eiu_membase + (y))
#define ltq_eiu_r32(x) ltq_r32(ltq_eiu_membase + (x))
@ -8,7 +8,7 @@
static unsigned short ltq_eiu_irq[MAX_EIU] = {
LTQ_EIU_IR0,
LTQ_EIU_IR1,
@@ -59,6 +60,7 @@
@@ -60,6 +61,7 @@ static unsigned short ltq_eiu_irq[MAX_EI
LTQ_EIU_IR4,
LTQ_EIU_IR5,
};
@ -16,7 +16,7 @@
static struct resource ltq_icu_resource = {
.name = "icu",
@@ -67,15 +69,19 @@
@@ -68,15 +70,19 @@ static struct resource ltq_icu_resource
.flags = IORESOURCE_MEM,
};
@ -36,7 +36,7 @@
void ltq_disable_irq(struct irq_data *d)
{
@@ -120,6 +126,7 @@
@@ -122,6 +128,7 @@ void ltq_enable_irq(struct irq_data *d)
ltq_icu_w32(ltq_icu_r32(ier) | (1 << irq_nr), ier);
}
@ -44,7 +44,7 @@
static unsigned int ltq_startup_eiu_irq(struct irq_data *d)
{
int i;
@@ -159,6 +166,7 @@
@@ -161,6 +168,7 @@ static void ltq_shutdown_eiu_irq(struct
}
}
}
@ -52,7 +52,7 @@
static struct irq_chip ltq_irq_type = {
"icu",
@@ -170,6 +178,7 @@
@@ -172,6 +180,7 @@ static struct irq_chip ltq_irq_type = {
.irq_mask_ack = ltq_mask_and_ack_irq,
};
@ -60,7 +60,7 @@
static struct irq_chip ltq_eiu_type = {
"eiu",
.irq_startup = ltq_startup_eiu_irq,
@@ -181,6 +190,7 @@
@@ -183,6 +192,7 @@ static struct irq_chip ltq_eiu_type = {
.irq_mask = ltq_disable_irq,
.irq_mask_ack = ltq_mask_and_ack_irq,
};
@ -68,7 +68,7 @@
static void ltq_hw_irqdispatch(int module)
{
@@ -196,10 +206,12 @@
@@ -198,10 +208,12 @@ static void ltq_hw_irqdispatch(int modul
irq = __fls(irq);
do_IRQ((int)irq + INT_NUM_IM0_IRL0 + (INT_NUM_IM_OFFSET * module));
@ -81,7 +81,7 @@
}
#define DEFINE_HWx_IRQDISPATCH(x) \
@@ -262,6 +274,7 @@
@@ -264,6 +276,7 @@ void __init arch_init_irq(void)
if (!ltq_icu_membase)
panic("Failed to remap icu memory\n");
@ -89,7 +89,7 @@
if (insert_resource(&iomem_resource, &ltq_eiu_resource) < 0)
panic("Failed to insert eiu memory\n");
@@ -273,6 +286,7 @@
@@ -275,6 +288,7 @@ void __init arch_init_irq(void)
resource_size(&ltq_eiu_resource));
if (!ltq_eiu_membase)
panic("Failed to remap eiu memory\n");
@ -97,7 +97,7 @@
/* make sure all irqs are turned off by default */
for (i = 0; i < 5; i++)
@@ -298,6 +312,7 @@
@@ -300,6 +314,7 @@ void __init arch_init_irq(void)
for (i = INT_NUM_IRQ0;
i <= (INT_NUM_IRQ0 + (5 * INT_NUM_IM_OFFSET)); i++)
@ -105,7 +105,7 @@
if ((i == LTQ_EIU_IR0) || (i == LTQ_EIU_IR1) ||
(i == LTQ_EIU_IR2))
irq_set_chip_and_handler(i, &ltq_eiu_type,
@@ -308,6 +323,7 @@
@@ -310,6 +325,7 @@ void __init arch_init_irq(void)
irq_set_chip_and_handler(i, &ltq_eiu_type,
handle_level_irq);
else
@ -115,7 +115,7 @@
--- a/arch/mips/lantiq/clk.c
+++ b/arch/mips/lantiq/clk.c
@@ -46,6 +46,7 @@
@@ -46,6 +46,7 @@ static struct clk cpu_clk_generic[] = {
},
};
@ -123,7 +123,7 @@
static struct resource ltq_cgu_resource = {
.name = "cgu",
.start = LTQ_CGU_BASE_ADDR,
@@ -55,6 +56,7 @@
@@ -55,6 +56,7 @@ static struct resource ltq_cgu_resource
/* remapped clock register range */
void __iomem *ltq_cgu_membase;
@ -131,7 +131,7 @@
void clk_init(void)
{
@@ -120,6 +122,7 @@
@@ -131,6 +133,7 @@ void __init plat_time_init(void)
{
struct clk *clk;
@ -139,7 +139,7 @@
if (insert_resource(&iomem_resource, &ltq_cgu_resource) < 0)
panic("Failed to insert cgu memory\n");
@@ -133,6 +136,7 @@
@@ -144,6 +147,7 @@ void __init plat_time_init(void)
pr_err("Failed to remap cgu memory\n");
unreachable();
}

View File

@ -1,6 +1,6 @@
--- /dev/null
+++ b/arch/mips/include/asm/mach-lantiq/falcon/lantiq_soc.h
@@ -0,0 +1,40 @@
@@ -0,0 +1,45 @@
+/*
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published
@ -39,5 +39,10 @@
+#define LTQ_WDT_BASE_ADDR 0x1F8803F0
+#define LTQ_WDT_SIZE 0x10
+
+extern int ltq_gpio_request(unsigned int pin, unsigned int alt0,
+ unsigned int alt1, unsigned int dir,
+ const char *name);
+extern int ltq_gpio_mux_set(unsigned int pin, unsigned int mux);
+
+#endif /* CONFIG_SOC_FALCON */
+#endif /* _LTQ_XWAY_H__ */

View File

@ -1,6 +1,6 @@
--- a/drivers/net/lantiq_etop.c
+++ b/drivers/net/lantiq_etop.c
@@ -155,8 +155,12 @@
@@ -147,8 +147,12 @@ ltq_etop_hw_receive(struct ltq_etop_chan
skb_put(skb, len);
skb->dev = ch->netdev;

View File

@ -1,7 +1,7 @@
--- a/drivers/mtd/Kconfig
+++ b/drivers/mtd/Kconfig
@@ -57,6 +57,10 @@ config MTD_ROOTFS_SPLIT
depends on MTD_PARTITIONS
@@ -41,6 +41,10 @@ config MTD_ROOTFS_SPLIT
bool "Automatically split 'rootfs' partition for squashfs"
default y
+config MTD_UIMAGE_SPLIT
@ -13,7 +13,7 @@
---help---
--- a/drivers/mtd/mtdpart.c
+++ b/drivers/mtd/mtdpart.c
@@ -860,6 +860,82 @@ static int refresh_rootfs_split(struct m
@@ -861,6 +861,82 @@ static int refresh_rootfs_split(struct m
}
#endif /* CONFIG_MTD_ROOTFS_SPLIT */
@ -96,7 +96,7 @@
/*
* This function, given a master MTD object and a partition table, creates
* and registers slave MTD objects which are bound to the master according to
@@ -893,6 +969,17 @@ int add_mtd_partitions(struct mtd_info *
@@ -894,6 +970,17 @@ int add_mtd_partitions(struct mtd_info *
add_mtd_device(&slave->mtd);

View File

@ -35,7 +35,7 @@
static void __init prom_init_cmdline(void)
{
int argc = fw_arg0;
@@ -53,6 +81,7 @@ static void __init prom_init_cmdline(voi
@@ -55,6 +83,7 @@ static void __init prom_init_cmdline(voi
strlcat(arcs_cmdline, " ", sizeof(arcs_cmdline));
}
}

View File

@ -250,7 +250,7 @@
--- a/net/ipv4/Makefile
+++ b/net/ipv4/Makefile
@@ -14,6 +14,9 @@ obj-y := route.o inetpeer.o protocol
inet_fragment.o
inet_fragment.o ping.o
obj-$(CONFIG_SYSCTL) += sysctl_net_ipv4.o
+ifneq ($(CONFIG_IFX_UDP_REDIRECT),)
@ -279,9 +279,9 @@
- int (*getfrag)(void *, char *, int, int, int, struct sk_buff *);
+ int (*getfrag)(void *, char *, int, int, int, struct sk_buff *) = NULL;
struct sk_buff *skb;
struct ip_options_data opt_copy;
if (len > 0xFFFF)
@@ -818,7 +822,13 @@ int udp_sendmsg(struct kiocb *iocb, stru
@@ -819,7 +823,13 @@ int udp_sendmsg(struct kiocb *iocb, stru
ipc.opt = NULL;
ipc.tx_flags = 0;
@ -294,9 +294,9 @@
+#endif /* IFX_UDP_REDIRECT */
+ getfrag = is_udplite ? udplite_getfrag : ip_generic_getfrag;
fl4 = &inet->cork.fl.u.ip4;
if (up->pending) {
/*
@@ -1608,6 +1618,7 @@ int __udp4_lib_rcv(struct sk_buff *skb,
@@ -1619,6 +1629,7 @@ int __udp4_lib_rcv(struct sk_buff *skb,
struct rtable *rt = skb_rtable(skb);
__be32 saddr, daddr;
struct net *net = dev_net(skb->dev);
@ -304,7 +304,7 @@
/*
* Validate the packet.
@@ -1640,7 +1651,16 @@ int __udp4_lib_rcv(struct sk_buff *skb,
@@ -1651,7 +1662,16 @@ int __udp4_lib_rcv(struct sk_buff *skb,
sk = __udp4_lib_lookup_skb(skb, uh->source, uh->dest, udptable);
if (sk != NULL) {
@ -322,7 +322,7 @@
sock_put(sk);
/* a return value > 0 means to resubmit the input, but
@@ -1937,7 +1957,7 @@ struct proto udp_prot = {
@@ -1948,7 +1968,7 @@ struct proto udp_prot = {
.clear_sk = sk_prot_clear_portaddr_nulls,
};
EXPORT_SYMBOL(udp_prot);

View File

@ -1,6 +1,6 @@
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
@@ -1871,6 +1871,28 @@ config MIPS_VPE_LOADER
@@ -1905,6 +1905,28 @@ config MIPS_VPE_LOADER
Includes a loader for loading an elf relocatable object
onto another VPE and running it.
@ -140,7 +140,7 @@
#define read_tc_gpr_sp() mftgpr(29)
--- a/arch/mips/kernel/Makefile
+++ b/arch/mips/kernel/Makefile
@@ -85,7 +85,8 @@ obj-$(CONFIG_MIPS32_O32) += binfmt_elfo3
@@ -86,7 +86,8 @@ obj-$(CONFIG_MIPS32_O32) += binfmt_elfo3
obj-$(CONFIG_KGDB) += kgdb.o
obj-$(CONFIG_PROC_FS) += proc.o

View File

@ -1,6 +1,6 @@
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
@@ -1878,6 +1878,28 @@ config IFX_VPE_EXT
@@ -1912,6 +1912,28 @@ config IFX_VPE_EXT
help
IFX included extensions in APRP
@ -113,7 +113,7 @@
write_vpe_c0_cause(0);
--- a/arch/mips/mm/c-r4k.c
+++ b/arch/mips/mm/c-r4k.c
@@ -1345,6 +1345,106 @@ static int __init setcoherentio(char *st
@@ -1346,6 +1346,106 @@ static int __init setcoherentio(char *st
__setup("coherentio", setcoherentio);
#endif
@ -220,7 +220,7 @@
void __cpuinit r4k_cache_init(void)
{
extern void build_clear_page(void);
@@ -1364,6 +1464,78 @@ void __cpuinit r4k_cache_init(void)
@@ -1365,6 +1465,78 @@ void __cpuinit r4k_cache_init(void)
break;
}

View File

@ -10,7 +10,7 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@googlemail.com>
--- a/drivers/spi/Kconfig
+++ b/drivers/spi/Kconfig
@@ -193,6 +193,14 @@
@@ -202,6 +202,14 @@ config SPI_IMX
This enables using the Freescale i.MX SPI controllers in master
mode.
@ -27,7 +27,7 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@googlemail.com>
depends on PARPORT && EXPERIMENTAL
--- a/drivers/spi/Makefile
+++ b/drivers/spi/Makefile
@@ -26,6 +26,7 @@
@@ -27,6 +27,7 @@ obj-$(CONFIG_SPI_EP93XX) += ep93xx_spi.
obj-$(CONFIG_SPI_GPIO) += spi_gpio.o
obj-$(CONFIG_SPI_GPIO_OLD) += spi_gpio_old.o
obj-$(CONFIG_SPI_IMX) += spi_imx.o

View File

@ -34,7 +34,7 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@googlemail.com>
#include <asm/bootinfo.h>
#include <asm/irq.h>
@@ -119,3 +120,41 @@
@@ -119,3 +120,41 @@ ltq_register_etop(struct ltq_eth_data *e
platform_device_register(&ltq_etop);
}
}

View File

@ -1,6 +1,6 @@
--- a/drivers/usb/Kconfig
+++ b/drivers/usb/Kconfig
@@ -116,6 +116,8 @@
@@ -116,6 +116,8 @@ source "drivers/usb/wusbcore/Kconfig"
source "drivers/usb/host/Kconfig"
@ -11,7 +11,7 @@
source "drivers/usb/renesas_usbhs/Kconfig"
--- a/drivers/usb/Makefile
+++ b/drivers/usb/Makefile
@@ -28,6 +28,8 @@
@@ -28,6 +28,8 @@ obj-$(CONFIG_USB_C67X00_HCD) += c67x00/
obj-$(CONFIG_USB_WUSB) += wusbcore/
@ -15615,7 +15615,7 @@
+#endif
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -2879,11 +2879,11 @@
@@ -2885,11 +2885,11 @@ hub_port_init (struct usb_hub *hub, stru
udev->ttport = hdev->ttport;
} else if (udev->speed != USB_SPEED_HIGH
&& hdev->speed == USB_SPEED_HIGH) {

View File

@ -1,6 +1,6 @@
--- a/arch/mips/lantiq/xway/Kconfig
+++ b/arch/mips/lantiq/xway/Kconfig
@@ -6,6 +6,10 @@
@@ -6,6 +6,10 @@ config LANTIQ_MACH_EASY50712
bool "Easy50712 - Danube"
default y
@ -13,7 +13,7 @@
endif
--- a/arch/mips/lantiq/xway/Makefile
+++ b/arch/mips/lantiq/xway/Makefile
@@ -5,3 +5,4 @@
@@ -5,3 +5,4 @@ obj-$(CONFIG_SOC_AMAZON_SE) += clk-ase.o
obj-$(CONFIG_LANTIQ_MACH_EASY50712) += mach-easy50712.o
obj-$(CONFIG_LANTIQ_MACH_EASY50601) += mach-easy50601.o
@ -518,7 +518,7 @@
+ arv752dpw22_init);
--- a/arch/mips/lantiq/machtypes.h
+++ b/arch/mips/lantiq/machtypes.h
@@ -22,6 +22,17 @@
@@ -22,6 +22,17 @@ enum lantiq_mach_type {
LANTIQ_MACH_EASY98000NAND, /* Falcon Eval Board, NAND Flash */
LANTIQ_MACH_EASY98020, /* Falcon Reference Board */
LANTIQ_MACH_95C3AM1, /* Board 95C3AM1 */

View File

@ -1,6 +1,6 @@
--- a/arch/mips/lantiq/machtypes.h
+++ b/arch/mips/lantiq/machtypes.h
@@ -33,6 +33,9 @@
@@ -33,6 +33,9 @@ enum lantiq_mach_type {
LANTIQ_MACH_ARV752DPW, /* Arcor easybox a802 */
LANTIQ_MACH_ARV752DPW22, /* Arcor easybox a803 */
LANTIQ_MACH_ARV7518PW, /* ASTORIA */
@ -12,7 +12,7 @@
#endif
--- a/arch/mips/lantiq/xway/Kconfig
+++ b/arch/mips/lantiq/xway/Kconfig
@@ -10,6 +10,10 @@
@@ -10,6 +10,10 @@ config LANTIQ_MACH_ARV45XX
bool "ARV45XX"
default y
@ -25,7 +25,7 @@
endif
--- a/arch/mips/lantiq/xway/Makefile
+++ b/arch/mips/lantiq/xway/Makefile
@@ -6,3 +6,4 @@
@@ -6,3 +6,4 @@ obj-$(CONFIG_SOC_AMAZON_SE) += clk-ase.o
obj-$(CONFIG_LANTIQ_MACH_EASY50712) += mach-easy50712.o
obj-$(CONFIG_LANTIQ_MACH_EASY50601) += mach-easy50601.o
obj-$(CONFIG_LANTIQ_MACH_ARV45XX) += mach-arv45xx.o

View File

@ -1,6 +1,6 @@
--- a/arch/mips/lantiq/xway/Kconfig
+++ b/arch/mips/lantiq/xway/Kconfig
@@ -14,6 +14,10 @@
@@ -14,6 +14,10 @@ config LANTIQ_MACH_NETGEAR
bool "Netgear"
default y
@ -13,7 +13,7 @@
endif
--- a/arch/mips/lantiq/xway/Makefile
+++ b/arch/mips/lantiq/xway/Makefile
@@ -7,3 +7,4 @@
@@ -7,3 +7,4 @@ obj-$(CONFIG_LANTIQ_MACH_EASY50712) += m
obj-$(CONFIG_LANTIQ_MACH_EASY50601) += mach-easy50601.o
obj-$(CONFIG_LANTIQ_MACH_ARV45XX) += mach-arv45xx.o
obj-$(CONFIG_LANTIQ_MACH_NETGEAR) += mach-netgear.o
@ -132,7 +132,7 @@
+ gigasx76x_init);
--- a/arch/mips/lantiq/machtypes.h
+++ b/arch/mips/lantiq/machtypes.h
@@ -36,6 +36,9 @@
@@ -36,6 +36,9 @@ enum lantiq_mach_type {
/* Netgear */
LANTIQ_MACH_DGN3500B, /* Netgear DGN3500 */

View File

@ -0,0 +1,27 @@
--- a/arch/mips/lantiq/falcon/mach-easy98020.c
+++ b/arch/mips/lantiq/falcon/mach-easy98020.c
@@ -111,3 +111,13 @@ MIPS_MACHINE(LANTIQ_MACH_EASY98020,
"EASY98020",
"EASY98020 Eval Board",
easy98020_init);
+
+MIPS_MACHINE(LANTIQ_MACH_EASY98020_1LAN,
+ "EASY98020_1LAN",
+ "EASY98020 Eval Board (1 LAN port)",
+ easy98020_init);
+
+MIPS_MACHINE(LANTIQ_MACH_EASY98020_2LAN,
+ "EASY98020_2LAN",
+ "EASY98020 Eval Board (2 LAN ports)",
+ easy98020_init);
--- a/arch/mips/lantiq/machtypes.h
+++ b/arch/mips/lantiq/machtypes.h
@@ -21,6 +21,8 @@ enum lantiq_mach_type {
LANTIQ_MACH_EASY98000SF, /* Falcon Eval Board, Serial Flash */
LANTIQ_MACH_EASY98000NAND, /* Falcon Eval Board, NAND Flash */
LANTIQ_MACH_EASY98020, /* Falcon Reference Board */
+ LANTIQ_MACH_EASY98020_1LAN, /* Falcon Reference Board (1 LAN port) */
+ LANTIQ_MACH_EASY98020_2LAN, /* Falcon Reference Board (2 LAN ports) */
LANTIQ_MACH_95C3AM1, /* Board 95C3AM1 */
/* Arcadyan */

View File

@ -1,6 +1,6 @@
--- a/arch/mips/lantiq/xway/devices.c
+++ b/arch/mips/lantiq/xway/devices.c
@@ -121,6 +121,16 @@
@@ -121,6 +121,16 @@ ltq_register_etop(struct ltq_eth_data *e
}
}
@ -19,7 +19,7 @@
.start = LTQ_SSC_BASE_ADDR,
--- a/arch/mips/lantiq/xway/devices.h
+++ b/arch/mips/lantiq/xway/devices.h
@@ -19,5 +19,6 @@
@@ -19,5 +19,6 @@ extern void ltq_register_ase_asc(void);
extern void ltq_register_etop(struct ltq_eth_data *eth);
extern void ltq_register_spi(struct ltq_spi_platform_data *pdata,
struct spi_board_info const *info, unsigned n);

View File

@ -1,6 +1,6 @@
--- a/arch/mips/lantiq/xway/devices.c
+++ b/arch/mips/lantiq/xway/devices.c
@@ -131,6 +131,26 @@
@@ -131,6 +131,26 @@ ltq_register_madwifi_eep(void)
lantiq_emulate_madwifi_eep = 1;
}
@ -37,7 +37,7 @@
extern void ltq_register_gpio(void);
extern void ltq_register_gpio_stp(void);
@@ -20,5 +21,6 @@
@@ -20,5 +21,6 @@ extern void ltq_register_etop(struct ltq
extern void ltq_register_spi(struct ltq_spi_platform_data *pdata,
struct spi_board_info const *info, unsigned n);
extern void ltq_register_madwifi_eep(void);

View File

@ -1,6 +1,6 @@
--- a/arch/mips/lantiq/devices.c
+++ b/arch/mips/lantiq/devices.c
@@ -120,3 +120,20 @@
@@ -120,3 +120,20 @@ void __init ltq_register_pci(struct ltq_
pr_err("kernel is compiled without PCI support\n");
}
#endif
@ -23,7 +23,7 @@
+}
--- a/arch/mips/lantiq/devices.h
+++ b/arch/mips/lantiq/devices.h
@@ -19,5 +19,6 @@
@@ -19,5 +19,6 @@ extern void ltq_register_nor(struct phys
extern void ltq_register_wdt(void);
extern void ltq_register_asc(int port);
extern void ltq_register_pci(struct ltq_pci_data *data);
@ -32,7 +32,7 @@
#endif
--- a/arch/mips/lantiq/xway/mach-easy50712.c
+++ b/arch/mips/lantiq/xway/mach-easy50712.c
@@ -61,6 +61,7 @@
@@ -61,6 +61,7 @@ static void __init easy50712_init(void)
ltq_register_nor(&easy50712_flash_data);
ltq_register_pci(&ltq_pci_data);
ltq_register_etop(&ltq_eth_data);

View File

@ -1,6 +1,6 @@
--- a/arch/mips/lantiq/xway/devices.c
+++ b/arch/mips/lantiq/xway/devices.c
@@ -151,6 +151,29 @@
@@ -151,6 +151,29 @@ ltq_register_gpio_buttons(struct gpio_bu
platform_device_register(&ltq_gpio_buttons_platform_device);
}

View File

@ -0,0 +1,59 @@
activate serial driver for ASC1 if "use_asc1=x" is given on kernel commandline
mux setup for pins is done via late_initcall, when the gpio driver is initialized
only implemented for EASY98000, generic version t.b.d.
--- a/arch/mips/lantiq/falcon/devices.c
+++ b/arch/mips/lantiq/falcon/devices.c
@@ -75,6 +75,7 @@ void __init falcon_register_asc(int port
case 1:
platform_device_register_simple("ltq_asc", 1,
falcon_asc1_resources, ARRAY_SIZE(falcon_asc1_resources));
+ sys1_hw_activate(ACTS_ASC1_ACT);
break;
default:
break;
--- a/arch/mips/lantiq/falcon/mach-easy98000.c
+++ b/arch/mips/lantiq/falcon/mach-easy98000.c
@@ -15,6 +15,7 @@
#include <linux/spi/spi.h>
#include <linux/spi/spi_gpio.h>
#include <linux/spi/eeprom.h>
+#include <falcon/lantiq_soc.h>
#include "../machtypes.h"
@@ -206,9 +207,34 @@ static void __init easy98000_spi_gpio_in
platform_device_register(&easy98000_spi_gpio_device);
}
+static int register_asc1 = 0;
+static int __init parse_asc1(char *p)
+{
+ register_asc1 = 1;
+ return 0;
+}
+__setup("use_asc1", parse_asc1);
+
+#define MUXC_SIF_RX_PIN 112
+#define MUXC_SIF_TX_PIN 113
+
+static int __init asc1_mux_setup(void)
+{
+ if (register_asc1) {
+ if (ltq_gpio_request(MUXC_SIF_RX_PIN, 1, 1, 0, "asc1-rx"))
+ return -1;
+ if (ltq_gpio_request(MUXC_SIF_TX_PIN, 1, 1, 1, "asc1-tx"))
+ return -1;
+ }
+ return 0;
+}
+late_initcall(asc1_mux_setup);
+
static void __init easy98000_init_common(void)
{
falcon_register_asc(0);
+ if (register_asc1)
+ falcon_register_asc(1);
falcon_register_gpio();
falcon_register_wdt();
falcon_register_i2c();