diff options
author | David Anders <dave123@abcsinc.com> | 2006-01-25 14:59:21 +0000 |
---|---|---|
committer | David Anders <dave123@abcsinc.com> | 2006-01-25 14:59:21 +0000 |
commit | 3d8aa36b65b2751d9dc8ba2c42a61f6ae5d5eeaf (patch) | |
tree | 17814f432b3cfb7aa5e3ef6aa14e70152c6cb3f5 /target/device/jp/q5/kernel-patches-2.4.26 | |
parent | c11d4552d4ae289dda2f675777eeafa1e4e9aab5 (diff) |
add the amd au1500 based q5 board per case 0000374
Diffstat (limited to 'target/device/jp/q5/kernel-patches-2.4.26')
4 files changed, 846 insertions, 0 deletions
diff --git a/target/device/jp/q5/kernel-patches-2.4.26/001-q5 b/target/device/jp/q5/kernel-patches-2.4.26/001-q5 new file mode 100644 index 000000000..70ca0c555 --- /dev/null +++ b/target/device/jp/q5/kernel-patches-2.4.26/001-q5 @@ -0,0 +1,730 @@ +diff -Naur -p -X do_not_diff -I '\$Id' -I '@(#)' linux-2.4.25-rc2_org/arch/mips/au1000/common/Makefile linux-2.4.25-rc2_q/arch/mips/au1000/common/Makefile +--- linux-2.4.25-rc2_org/arch/mips/au1000/common/Makefile 2004-02-13 01:03:35.000000000 +0100 ++++ linux-2.4.25-rc2_q/arch/mips/au1000/common/Makefile 2004-02-13 10:04:07.000000000 +0100 +@@ -16,7 +16,7 @@ all: au1000.o + + O_TARGET := au1000.o + +-export-objs = prom.o clocks.o power.o usbdev.o ++export-objs = prom.o clocks.o power.o usbdev.o setup.o + + obj-y := prom.o int-handler.o dma.o irq.o puts.o time.o reset.o \ + clocks.o power.o setup.o sleeper.o +diff -Naur -p -X do_not_diff -I '\$Id' -I '@(#)' linux-2.4.25-rc2_org/arch/mips/au1000/common/pci_fixup.c linux-2.4.25-rc2_q/arch/mips/au1000/common/pci_fixup.c +--- linux-2.4.25-rc2_org/arch/mips/au1000/common/pci_fixup.c 2004-02-13 01:03:35.000000000 +0100 ++++ linux-2.4.25-rc2_q/arch/mips/au1000/common/pci_fixup.c 2004-02-13 10:09:43.000000000 +0100 +@@ -105,42 +105,8 @@ void __init pcibios_fixup(void) + + void __init pcibios_fixup_irqs(void) + { +-#if defined( CONFIG_SOC_AU1500 ) || defined( CONFIG_SOC_AU1550 ) +- unsigned int slot, func; +- unsigned char pin; +- struct pci_dev *dev; +- +- pci_for_each_dev(dev) { +- if (dev->bus->number != 0) +- return; +- +- dev->irq = 0xff; +- slot = PCI_SLOT(dev->devfn); +-#if defined( CONFIG_SOC_AU1500 ) +- switch (slot) { +- case 12: +- case 13: +- default: +- dev->irq = AU1000_PCI_INTA; +- break; +- } +-#elif defined( CONFIG_SOC_AU1550 ) +- switch (slot) { +- default: +- case 12: +- dev->irq = AU1000_PCI_INTA; +- break; +- case 13: +- dev->irq = AU1000_PCI_INTB; +- break; +- } +-#endif +- +- pci_write_config_byte(dev, PCI_INTERRUPT_LINE, dev->irq); +- DBG("slot %d irq %d\n", slot, dev->irq); +- } +-#endif + } ++ + unsigned int pcibios_assign_all_busses(void) + { + return 0; +diff -Naur -p -X do_not_diff -I '\$Id' -I '@(#)' linux-2.4.25-rc2_org/arch/mips/au1000/common/prom.c linux-2.4.25-rc2_q/arch/mips/au1000/common/prom.c +--- linux-2.4.25-rc2_org/arch/mips/au1000/common/prom.c 2004-02-13 01:03:32.000000000 +0100 ++++ linux-2.4.25-rc2_q/arch/mips/au1000/common/prom.c 2004-02-13 10:07:12.000000000 +0100 +@@ -81,7 +81,7 @@ void prom_init_cmdline(void) + } + + +-char *prom_getenv(char *envname) ++char *prom_getenv_n(char *envname, int n) + { + /* + * Return a pointer to the given environment variable. +@@ -89,19 +89,24 @@ char *prom_getenv(char *envname) + */ + + t_env_var *env = (t_env_var *)prom_envp; +- int i; ++ int i, j=0; + + i = strlen(envname); + + while(env->name) { + if(strncmp(envname, env->name, i) == 0) { +- return(env->name + strlen(envname) + 1); ++ if(j++ == n) return(env->name + strlen(envname) + 1); + } + env++; + } + return(NULL); + } + ++char *prom_getenv(char *envname) ++{ ++ return prom_getenv_n(envname, 0); ++} ++ + inline unsigned char str2hexnum(unsigned char c) + { + if(c >= '0' && c <= '9') +@@ -128,18 +133,18 @@ inline void str2eaddr(unsigned char *ea, + } + } + +-int get_ethernet_addr(char *ethernet_addr) ++int get_ethernet_addr_n(char *ethernet_addr, int n) + { + char *ethaddr_str; + +- ethaddr_str = prom_getenv("ethaddr"); ++ ethaddr_str = prom_getenv_n("ethaddr", n); + if (!ethaddr_str) { + printk("ethaddr not set in boot prom\n"); + return -1; + } + str2eaddr(ethernet_addr, ethaddr_str); + +-#if 0 ++#if 1 + { + int i; + +@@ -153,7 +158,13 @@ int get_ethernet_addr(char *ethernet_add + return 0; + } + ++int get_ethernet_addr(char *ethernet_addr) ++{ ++ return get_ethernet_addr_n(ethernet_addr, 0); ++} ++ + void prom_free_prom_memory (void) {} ++EXPORT_SYMBOL(get_ethernet_addr_n); + EXPORT_SYMBOL(prom_getcmdline); + EXPORT_SYMBOL(get_ethernet_addr); + EXPORT_SYMBOL(str2eaddr); +diff -Naur -p -X do_not_diff -I '\$Id' -I '@(#)' linux-2.4.25-rc2_org/arch/mips/au1000/common/setup.c linux-2.4.25-rc2_q/arch/mips/au1000/common/setup.c +--- linux-2.4.25-rc2_org/arch/mips/au1000/common/setup.c 2004-02-13 01:03:31.000000000 +0100 ++++ linux-2.4.25-rc2_q/arch/mips/au1000/common/setup.c 2004-02-13 10:04:07.000000000 +0100 +@@ -57,6 +57,7 @@ extern struct ide_ops *ide_ops; + #endif + + extern struct rtc_ops no_rtc_ops; ++void (*__wbflush) (void); + extern char * __init prom_getcmdline(void); + extern void __init board_setup(void); + extern void au1000_restart(char *); +@@ -71,6 +72,11 @@ static phys_t au1500_fixup_bigphys_addr( + extern void au1xxx_time_init(void); + extern void au1xxx_timer_setup(void); + ++void au1500_wbflush(void) ++{ ++ __asm__ volatile ("sync"); ++} ++ + void __init au1x00_setup(void) + { + char *argptr; +@@ -89,6 +95,8 @@ void __init au1x00_setup(void) + } + #endif + ++ __wbflush = au1500_wbflush; ++ + #ifdef CONFIG_FB_AU1100 + if ((argptr = strstr(argptr, "video=")) == NULL) { + argptr = prom_getcmdline(); +@@ -215,3 +223,6 @@ static phys_t au1500_fixup_bigphys_addr( + return phys_addr; + } + #endif ++ ++EXPORT_SYMBOL(__wbflush); ++ +diff -Naur -p -X do_not_diff -I '\$Id' -I '@(#)' linux-2.4.25-rc2_org/arch/mips/au1000/pb1500/irqmap.c linux-2.4.25-rc2_q/arch/mips/au1000/pb1500/irqmap.c +--- linux-2.4.25-rc2_org/arch/mips/au1000/pb1500/irqmap.c 2004-02-13 01:03:28.000000000 +0100 ++++ linux-2.4.25-rc2_q/arch/mips/au1000/pb1500/irqmap.c 2004-02-13 10:10:21.000000000 +0100 +@@ -76,6 +76,7 @@ au1xxx_irq_map_t au1xxx_irq_map[] = { + { AU1500_GPIO_202, INTC_INT_LOW_LEVEL, 0 }, + { AU1500_GPIO_203, INTC_INT_LOW_LEVEL, 0 }, + { AU1500_GPIO_205, INTC_INT_LOW_LEVEL, 0 }, ++ { AU1500_GPIO_206, INTC_INT_FALL_EDGE, 0 }, + { AU1500_GPIO_207, INTC_INT_LOW_LEVEL, 0 }, + + { AU1000_ACSYNC_INT, INTC_INT_RISE_EDGE, 0 }, +diff -Naur -p -X do_not_diff -I '\$Id' -I '@(#)' linux-2.4.25-rc2_org/arch/mips/kernel/head.S linux-2.4.25-rc2_q/arch/mips/kernel/head.S +--- linux-2.4.25-rc2_org/arch/mips/kernel/head.S 2004-02-13 01:02:42.000000000 +0100 ++++ linux-2.4.25-rc2_q/arch/mips/kernel/head.S 2004-02-13 10:07:43.000000000 +0100 +@@ -33,7 +33,9 @@ + * Reserved space for exception handlers. + * Necessary for machines which link their kernels at KSEG0. + */ +- .fill 0x400 ++ j kernel_entry ++ nop ++ .org 0x400 + + /* The following two symbols are used for kernel profiling. */ + EXPORT(stext) +diff -Naur -p -X do_not_diff -I '\$Id' -I '@(#)' linux-2.4.25-rc2_org/arch/mips/Makefile linux-2.4.25-rc2_q/arch/mips/Makefile +--- linux-2.4.25-rc2_org/arch/mips/Makefile 2004-02-13 01:01:00.000000000 +0100 ++++ linux-2.4.25-rc2_q/arch/mips/Makefile 2004-04-09 10:40:09.000000000 +0200 +@@ -69,13 +69,13 @@ endif + set_gccflags = $(shell \ + while :; do \ + cpu=$(1); isa=-$(2); \ +- for gcc_opt in -march= -mcpu=; do \ ++ for gcc_opt in -march=; do \ + $(CC) $$gcc_opt$$cpu $$isa -S -o /dev/null \ + -xc /dev/null > /dev/null 2>&1 && \ + break 2; \ + done; \ + cpu=$(3); isa=-$(4); \ +- for gcc_opt in -march= -mcpu=; do \ ++ for gcc_opt in -march=; do \ + $(CC) $$gcc_opt$$cpu $$isa -S -o /dev/null \ + -xc /dev/null > /dev/null 2>&1 && \ + break 2; \ +@@ -90,7 +90,7 @@ else \ + fi; \ + gas_abi=-Wa,-32; gas_cpu=$$cpu; gas_isa=-Wa,$$isa; \ + while :; do \ +- for gas_opt in -Wa,-march= -Wa,-mcpu=; do \ ++ for gas_opt in -Wa,-march=; do \ + $(CC) $$gas_abi $$gas_opt$$cpu $$gas_isa -Wa,-Z -c \ + -o /dev/null -xassembler /dev/null > /dev/null 2>&1 && \ + break 2; \ +diff -Naur -p -X do_not_diff -I '\$Id' -I '@(#)' linux-2.4.25-rc2_org/drivers/char/dummy_keyb.c linux-2.4.25-rc2_q/drivers/char/dummy_keyb.c +--- linux-2.4.25-rc2_org/drivers/char/dummy_keyb.c 2004-02-12 23:51:10.000000000 +0100 ++++ linux-2.4.25-rc2_q/drivers/char/dummy_keyb.c 2004-02-13 10:11:06.000000000 +0100 +@@ -29,6 +29,7 @@ + #include <linux/errno.h> + #include <linux/init.h> + #include <linux/input.h> ++#include <linux/pm.h> + + void kbd_leds(unsigned char leds) + { +@@ -140,3 +141,46 @@ void __init kbd_init_hw(void) + { + printk("Dummy keyboard driver installed.\n"); + } ++ ++ ++void panic_blink(void) ++ { ++ } ++ ++ ++ int pckbd_translate(unsigned char scancode, unsigned char *keycode, ++ char raw_mode) ++ { ++ return 0; ++ } ++ ++ char pckbd_unexpected_up(unsigned char keycode) ++ { ++ return 0; ++ } ++ ++ ++ void pckbd_leds(unsigned char leds) ++ { ++ } ++ ++ ++ int pckbd_setkeycode(unsigned int scancode, unsigned int keycode) ++ { ++ return 0; ++ } ++ ++ int pckbd_getkeycode(unsigned int scancode) ++ { ++ return 0; ++ } ++ ++ void __init pckbd_init_hw(void) ++ { ++ } ++ ++ int pckbd_pm_resume(struct pm_dev *dev, pm_request_t rqst, void *data) ++ { ++ return 0; ++ } ++ +diff -Naur -p -X do_not_diff -I '\$Id' -I '@(#)' linux-2.4.25-rc2_org/drivers/char/Makefile linux-2.4.25-rc2_q/drivers/char/Makefile +--- linux-2.4.25-rc2_org/drivers/char/Makefile 2004-02-12 23:50:40.000000000 +0100 ++++ linux-2.4.25-rc2_q/drivers/char/Makefile 2004-02-13 10:11:06.000000000 +0100 +@@ -32,7 +32,7 @@ mod-subdirs := joystick ftape drm drm-4. + list-multi := + + KEYMAP =defkeymap.o +-KEYBD =pc_keyb.o ++KEYBD =dummy_keyb.o + CONSOLE =console.o + SERIAL =serial.o + +diff -Naur -p -X do_not_diff -I '\$Id' -I '@(#)' linux-2.4.25-rc2_org/drivers/mtd/chips/cfi_cmdset_0002.c linux-2.4.25-rc2_q/drivers/mtd/chips/cfi_cmdset_0002.c +--- linux-2.4.25-rc2_org/drivers/mtd/chips/cfi_cmdset_0002.c 2004-02-13 00:49:45.000000000 +0100 ++++ linux-2.4.25-rc2_q/drivers/mtd/chips/cfi_cmdset_0002.c 2004-03-16 10:04:18.000000000 +0100 +@@ -511,7 +511,7 @@ static int do_write_oneword(struct map_i + or tells us why it failed. */ + dq6 = CMD(1<<6); + dq5 = CMD(1<<5); +- timeo = jiffies + (HZ/1000); /* setting timeout to 1ms for now */ ++ timeo = jiffies + HZ; /* setting timeout to 1ms for now */ + + oldstatus = cfi_read(map, adr); + status = cfi_read(map, adr); +@@ -540,9 +540,7 @@ static int do_write_oneword(struct map_i + oldstatus = cfi_read(map, adr); + status = cfi_read(map, adr); + +- if ( (oldstatus & 0x00FF) == (status & 0x00FF) ) { +- printk(KERN_WARNING "Warning: DQ5 raised while program operation was in progress, however operation completed OK\n" ); +- } else { ++ if ( (oldstatus & 0x00FF) != (status & 0x00FF) ) { + /* DQ5 is active so we can do a reset and stop the erase */ + cfi_write(map, CMD(0xF0), chip->start); + printk(KERN_WARNING "Internal flash device timeout occurred or write operation was performed while flash was programming.\n" ); +diff -Naur -p -X do_not_diff -I '\$Id' -I '@(#)' linux-2.4.25-rc2_org/drivers/mtd/maps/physmap.c linux-2.4.25-rc2_q/drivers/mtd/maps/physmap.c +--- linux-2.4.25-rc2_org/drivers/mtd/maps/physmap.c 2004-02-13 00:50:09.000000000 +0100 ++++ linux-2.4.25-rc2_q/drivers/mtd/maps/physmap.c 2004-02-13 10:11:40.000000000 +0100 +@@ -86,28 +86,24 @@ static int mtd_parts_n + #else + static struct mtd_partition physmap_partitions[] = { + /* Put your own partition definitions here */ +-#if 0 + { +- name: "bootROM", +- size: 0x80000, ++ name: "fs1", ++ size: 28*1024*1024, + offset: 0, +- mask_flags: MTD_WRITEABLE, /* force read-only */ + }, { +- name: "zImage", +- size: 0x100000, ++ name: "bootldr", ++ size: 128*1024, + offset: MTDPART_OFS_APPEND, + mask_flags: MTD_WRITEABLE, /* force read-only */ + }, { +- name: "ramdisk.gz", +- size: 0x300000, ++ name: "kernel", ++ size: 1*1024*1024, + offset: MTDPART_OFS_APPEND, +- mask_flags: MTD_WRITEABLE, /* force read-only */ + }, { +- name: "User FS", ++ name: "fs2", + size: MTDPART_SIZ_FULL, + offset: MTDPART_OFS_APPEND, + } +-#endif + }; + + #define NUM_PARTITIONS (sizeof(physmap_partitions)/sizeof(struct mtd_partition)) +diff -Naur -p -X do_not_diff -I '\$Id' -I '@(#)' linux-2.4.25-rc2_org/drivers/net/au1000_eth.c linux-2.4.25-rc2_q/drivers/net/au1000_eth.c +--- linux-2.4.25-rc2_org/drivers/net/au1000_eth.c 2004-02-12 23:33:59.000000000 +0100 ++++ linux-2.4.25-rc2_q/drivers/net/au1000_eth.c 2004-02-13 10:06:01.000000000 +0100 +@@ -97,6 +97,7 @@ extern int get_ethernet_addr(char *ether + extern inline void str2eaddr(unsigned char *ea, unsigned char *str); + extern inline unsigned char str2hexnum(unsigned char c); + extern char * __init prom_getcmdline(void); ++extern int get_ethernet_addr_n(char *ethernet_addr, int n); + + /* + * Theory of operation +@@ -591,6 +592,99 @@ int ks8995m_status(struct net_device *de + return 0; + } + ++int ns_83847_reset(struct net_device *dev, int phy_addr) ++ { ++ s16 mii_control, timeout; ++ ++ // printk("ns_reset\n"); ++ mii_control = mdio_read(dev, phy_addr, MII_CONTROL); ++ mdio_write(dev, phy_addr, MII_CONTROL, mii_control | MII_CNTL_RESET); ++ mdelay(1); ++ for (timeout = 100; timeout > 0; --timeout) { ++ mii_control = mdio_read(dev, phy_addr, MII_CONTROL); ++ if ((mii_control & MII_CNTL_RESET) == 0) ++ break; ++ mdelay(1); ++ } ++ if (mii_control & MII_CNTL_RESET) { ++ printk(KERN_ERR "%s PHY reset timeout !\n", dev->name); ++ return -1; ++ } ++ return 0; ++ } ++ ++int ns_83847_init(struct net_device *dev, int phy_addr) ++ { ++ s16 data; ++ // printk("ns_init\n"); ++ ++ /* Stop auto-negotiation */ ++ // data = mdio_read(dev, phy_addr, MII_CONTROL); ++ // mdio_write(dev, phy_addr, MII_CONTROL, data & ~MII_CNTL_AUTO); ++ // mdio_write(dev, phy_addr, 0, 0x0000); ++ mdio_write(dev, phy_addr, MII_CONTROL, MII_CNTL_F100 /* | MII_CNTL_FDX */); ++ ++ /* Set advertisement to 10/100 and Half/Full duplex (full capabilities) */ ++ data = mdio_read(dev, phy_addr, MII_ANADV); ++ /* obs PAUSE bit */ ++ data |= MII_NWAY_TX | MII_NWAY_TX_FDX | MII_NWAY_T_FDX | MII_NWAY_T; /* MII_NWAY_T4 not sopported */ ; ++ mdio_write(dev, phy_addr, MII_ANADV, data); ++ ++ /* Bypass led stretching? */ ++ data = mdio_read(dev, phy_addr, MII_NS_PHYCTRL); ++ data |= MII_NS_PHYCTRL_BP_STRETCH; ++ mdio_write(dev, phy_addr, MII_NS_PHYCTRL, data); ++ ++ /* Restart auto-negotiation */ ++ data = mdio_read(dev, phy_addr, MII_CONTROL); ++ data |= MII_CNTL_RST_AUTO | MII_CNTL_AUTO; ++ mdio_write(dev, phy_addr, MII_CONTROL, data); ++ ++ return 0; ++ } ++ ++int ns_83847_status(struct net_device *dev, int phy_addr, u16 *link, u16 *speed) ++ { ++ u16 mii_data; ++ struct au1000_private *aup; ++ ++ if (!dev) { ++ printk(KERN_ERR "ns_83847_status error: NULL dev\n"); ++ return -1; ++ } ++ aup = (struct au1000_private *) dev->priv; ++ ++ mii_data = mdio_read(dev, aup->phy_addr, MII_STATUS); ++ // printk("ns_status: %04x\n", mii_data); ++ if (mii_data & MII_STAT_LINK) { ++ *link = 1; ++ mii_data = mdio_read(dev, aup->phy_addr, MII_NS_PHYSTS); ++ if (mii_data & MII_NS_PHYSTS_SPEED_10) { ++ *speed = IF_PORT_10BASET; ++ dev->if_port = IF_PORT_10BASET; ++ } ++ else { ++ if (mii_data & MII_NS_PHYSTS_DUPLEX_FULL) { ++ *speed = IF_PORT_100BASEFX; ++ dev->if_port = IF_PORT_100BASEFX; ++ } ++ else { ++ *speed = IF_PORT_100BASETX; ++ dev->if_port = IF_PORT_100BASETX; ++ } ++ } ++ ++ } ++ else { ++ *link = 0; ++ *speed = 0; ++ dev->if_port = IF_PORT_UNKNOWN; ++ } ++ return 0; ++ } ++ ++ ++ + #ifdef CONFIG_MIPS_BOSPORUS + int stub_init(struct net_device *dev, int phy_addr) + { +@@ -616,6 +710,12 @@ stub_status(struct net_device *dev, int + } + #endif + ++struct phy_ops ns_83847_ops = { ++ ns_83847_init, ++ ns_83847_reset, ++ ns_83847_status, ++}; ++ + struct phy_ops bcm_5201_ops = { + bcm_5201_init, + bcm_5201_reset, +@@ -667,6 +767,7 @@ static struct mii_chip_info { + struct phy_ops *phy_ops; + int dual_phy; + } mii_chip_table[] = { ++ {"Natsemi DP83847 PHY", 0x2000, 0x5c30, &ns_83847_ops }, + {"Broadcom BCM5201 10/100 BaseT PHY",0x0040,0x6212, &bcm_5201_ops,0}, + {"Broadcom BCM5221 10/100 BaseT PHY",0x0040,0x61e4, &bcm_5201_ops,0}, + {"Broadcom BCM5222 10/100 BaseT PHY",0x0040,0x6322, &bcm_5201_ops,1}, +@@ -868,6 +969,8 @@ static int mii_probe (struct net_device + } + } + } ++ printk(KERN_ERR "%s: Au1x No MII transceivers found!\n", dev->name); ++ return -1; + found: + + #ifdef CONFIG_MIPS_BOSPORUS +@@ -1176,21 +1279,10 @@ au1000_probe(u32 ioaddr, int irq, int po + switch (ioaddr) { + case AU1000_ETH0_BASE: + case AU1500_ETH0_BASE: +- /* check env variables first */ + if (!get_ethernet_addr(ethaddr)) { + memcpy(au1000_mac_addr, ethaddr, sizeof(dev->dev_addr)); + } else { +- /* Check command line */ +- argptr = prom_getcmdline(); +- if ((pmac = strstr(argptr, "ethaddr=")) == NULL) { +- printk(KERN_INFO "%s: No mac address found\n", +- dev->name); +- /* use the hard coded mac addresses */ +- } else { +- str2eaddr(ethaddr, pmac + strlen("ethaddr=")); +- memcpy(au1000_mac_addr, ethaddr, +- sizeof(dev->dev_addr)); +- } ++ printk(KERN_INFO "%s: No mac address found\n", dev->name); + } + if (ioaddr == AU1000_ETH0_BASE) + aup->enable = (volatile u32 *) +@@ -1206,6 +1298,11 @@ au1000_probe(u32 ioaddr, int irq, int po + + case AU1000_ETH1_BASE: + case AU1500_ETH1_BASE: ++ if (!get_ethernet_addr_n(ethaddr, 1)) { ++ memcpy(au1000_mac_addr, ethaddr, sizeof(dev->dev_addr)); ++ } else { ++ printk(KERN_INFO "%s: No mac address found\n", dev->name); ++ } + if (ioaddr == AU1000_ETH1_BASE) + aup->enable = (volatile u32 *) + ((unsigned long)AU1000_MAC1_ENABLE); +@@ -1213,7 +1310,6 @@ au1000_probe(u32 ioaddr, int irq, int po + aup->enable = (volatile u32 *) + ((unsigned long)AU1500_MAC1_ENABLE); + memcpy(dev->dev_addr, au1000_mac_addr, sizeof(dev->dev_addr)); +- dev->dev_addr[4] += 0x10; + setup_hw_rings(aup, MAC1_RX_DMA_ADDR, MAC1_TX_DMA_ADDR); + aup->mac_id = 1; + au_macs[1] = aup; +diff -Naur -p -X do_not_diff -I '\$Id' -I '@(#)' linux-2.4.25-rc2_org/drivers/net/au1000_eth.h linux-2.4.25-rc2_q/drivers/net/au1000_eth.h +--- linux-2.4.25-rc2_org/drivers/net/au1000_eth.h 2004-02-12 23:33:54.000000000 +0100 ++++ linux-2.4.25-rc2_q/drivers/net/au1000_eth.h 2004-02-13 10:06:01.000000000 +0100 +@@ -86,6 +86,28 @@ + #define MII_STAT_CAN_TX_FDX 0x4000 + #define MII_STAT_CAN_T4 0x8000 + ++/* mii registers for NS 83847 */ ++#define MII_NS_PHYSTS 0x10 ++#define MII_NS_FCSCR 0x14 ++#define MII_NS_RECR 0x15 ++#define MII_NS_PCSR 0x16 ++#define MII_NS_PHYCTRL 0x19 ++#define MII_NS_10BTSCR 0x1a ++#define MII_NS_CDCTRL 0x1b ++ ++/* MII_NS_PHYSTS bits */ ++#define MII_NS_PHYSTS_LINK (1) ++#define MII_NS_PHYSTS_SPEED_10 (1<<1) ++#define MII_NS_PHYSTS_DUPLEX_FULL (1<<2) ++ ++/* MII_NS_PHYCTRL bits */ ++#define MII_NS_PHYCTRL_BP_STRETCH (1<<8) ++ ++/* MII_NS_CDCTRL bits */ ++#define MII_NS_CDCTRL_CD_ENABLE (1<<15) ++#define MII_NS_CDCTRL_RISETIME (1<<11) ++#define MII_NS_CDCTRL_FALLTIME (1<<9) ++ + + #define MII_ID1_OUI_LO 0xFC00 /* low bits of OUI mask */ + #define MII_ID1_MODEL 0x03F0 /* model number */ +diff -Naur -p -X do_not_diff -I '\$Id' -I '@(#)' linux-2.4.25-rc2_org/drivers/net/natsemi.c linux-2.4.25-rc2_q/drivers/net/natsemi.c +--- linux-2.4.25-rc2_org/drivers/net/natsemi.c 2004-02-12 23:29:19.000000000 +0100 ++++ linux-2.4.25-rc2_q/drivers/net/natsemi.c 2004-04-22 09:28:51.000000000 +0200 +@@ -773,7 +773,11 @@ static int __devinit natsemi_probe1 (str + goto err_ioremap; + } + +- /* Work around the dropped serial bit. */ ++#ifdef __mips__ ++ if (get_ethernet_addr_n(dev->dev_addr, 2)) { ++ printk(KERN_INFO "%s: No mac address found\n", dev->name); ++ } ++#else + prev_eedata = eeprom_read(ioaddr, 6); + for (i = 0; i < 3; i++) { + int eedata = eeprom_read(ioaddr, i + 7); +@@ -781,6 +785,7 @@ static int __devinit natsemi_probe1 (str + dev->dev_addr[i*2+1] = eedata >> 7; + prev_eedata = eedata; + } ++#endif + + dev->base_addr = ioaddr; + dev->irq = irq; +diff -Naur -p -X do_not_diff -I '\$Id' -I '@(#)' linux-2.4.25-rc2_org/drivers/net/wireless/hermes.h linux-2.4.25-rc2_q/drivers/net/wireless/hermes.h +--- linux-2.4.25-rc2_org/drivers/net/wireless/hermes.h 2004-02-12 23:47:43.000000000 +0100 ++++ linux-2.4.25-rc2_q/drivers/net/wireless/hermes.h 2004-02-13 10:13:40.000000000 +0100 +@@ -302,9 +302,9 @@ typedef struct hermes_response { + #define hermes_read_reg(hw, off) ((hw)->io_space ? \ + inw((hw)->iobase + ( (off) << (hw)->reg_spacing )) : \ + readw((hw)->iobase + ( (off) << (hw)->reg_spacing ))) +-#define hermes_write_reg(hw, off, val) ((hw)->io_space ? \ +- outw_p((val), (hw)->iobase + ( (off) << (hw)->reg_spacing )) : \ +- writew((val), (hw)->iobase + ( (off) << (hw)->reg_spacing ))) ++#define hermes_write_reg(hw, off, val) { if((hw)->io_space) \ ++ outw_p((val), (hw)->iobase + ( (off) << (hw)->reg_spacing )); else \ ++ writew((val), (hw)->iobase + ( (off) << (hw)->reg_spacing ));} + + #define hermes_read_regn(hw, name) (hermes_read_reg((hw), HERMES_##name)) + #define hermes_write_regn(hw, name, val) (hermes_write_reg((hw), HERMES_##name, (val))) +diff -Naur -p -X do_not_diff -I '\$Id' -I '@(#)' linux-2.4.25-rc2_org/include/asm-mips/au1000.h linux-2.4.25-rc2_q/include/asm-mips/au1000.h +--- linux-2.4.25-rc2_org/include/asm-mips/au1000.h 2004-02-12 23:06:31.000000000 +0100 ++++ linux-2.4.25-rc2_q/include/asm-mips/au1000.h 2004-02-13 10:41:49.000000000 +0100 +@@ -283,14 +283,14 @@ extern au1xxx_irq_map_t au1xxx_irq_map[] + #define INTC_INT_HIGH_AND_LOW_LEVEL 0x7 + + /* Interrupt Numbers */ +-#define AU1000_UART0_INT 0 ++#define AU1000_UART0_INT 3 + #define AU1000_UART1_INT 1 /* au1000 */ + #define AU1000_UART2_INT 2 /* au1000 */ + + #define AU1000_PCI_INTA 1 /* au1500 */ + #define AU1000_PCI_INTB 2 /* au1500 */ + +-#define AU1000_UART3_INT 3 ++#define AU1000_UART3_INT 0 + + #define AU1000_SSI0_INT 4 /* au1000 */ + #define AU1000_SSI1_INT 5 /* au1000 */ +@@ -693,12 +693,12 @@ extern au1xxx_irq_map_t au1xxx_irq_map[] + + + /* UARTS 0-3 */ +-#define UART0_ADDR 0xB1100000 ++#define UART0_ADDR 0xB1400000 + #define UART1_ADDR 0xB1200000 + #define UART2_ADDR 0xB1300000 +-#define UART3_ADDR 0xB1400000 ++#define UART3_ADDR 0xB1100000 + #define UART_BASE UART0_ADDR +-#define UART_DEBUG_BASE UART3_ADDR ++#define UART_DEBUG_BASE UART0_ADDR + + #define UART_RX 0 /* Receive buffer */ + #define UART_TX 4 /* Transmit buffer */ +diff -Naur -p -X do_not_diff -I '\$Id' -I '@(#)' linux-2.4.25-rc2_org/include/asm-mips/page.h linux-2.4.25-rc2_q/include/asm-mips/page.h +--- linux-2.4.25-rc2_org/include/asm-mips/page.h 2004-02-12 23:06:14.000000000 +0100 ++++ linux-2.4.25-rc2_q/include/asm-mips/page.h 2004-03-23 14:18:38.000000000 +0100 +@@ -13,7 +13,6 @@ + #include <linux/config.h> + #include <asm/break.h> + +-#ifdef __KERNEL__ + + /* + * PAGE_SHIFT determines the page size +@@ -30,6 +29,7 @@ + #define PAGE_SIZE (1L << PAGE_SHIFT) + #define PAGE_MASK (~(PAGE_SIZE-1)) + ++#ifdef __KERNEL__ + #ifndef __ASSEMBLY__ + + #include <asm/cacheflush.h> +diff -Naur -p -X do_not_diff -I '\$Id' -I '@(#)' linux-2.4.25-rc2_org/include/asm-mips/wbflush.h linux-2.4.25-rc2_q/include/asm-mips/wbflush.h +--- linux-2.4.25-rc2_org/include/asm-mips/wbflush.h 2004-02-12 23:06:33.000000000 +0100 ++++ linux-2.4.25-rc2_q/include/asm-mips/wbflush.h 2004-02-13 20:42:57.000000000 +0100 +@@ -15,8 +15,11 @@ + + #ifdef CONFIG_CPU_HAS_WB + +-extern void (*__wbflush)(void); +-extern void wbflush_setup(void); ++//extern void (*__wbflush)(void); ++//extern void wbflush_setup(void); ++ ++ ++#define __wbflush() { __asm__ volatile ("sync"); } + + #define wbflush() \ + do { \ +diff -Naur -p -X do_not_diff -I '\$Id' -I '@(#)' linux-2.4.25-rc2_org/include/pcmcia/cs_types.h linux-2.4.25-rc2_q/include/pcmcia/cs_types.h +--- linux-2.4.25-rc2_org/include/pcmcia/cs_types.h 2004-02-12 23:13:05.000000000 +0100 ++++ linux-2.4.25-rc2_q/include/pcmcia/cs_types.h 2004-02-13 10:15:10.000000000 +0100 +@@ -37,6 +37,7 @@ + #endif + + #if defined(__arm__) || defined(__mips__) ++//obs jp: on mips, "typedef unsigned long long ioaddr_t;" may be needed to support cardbus + typedef u_int ioaddr_t; + #else + typedef u_short ioaddr_t; +diff -Naur -p -X do_not_diff -I '\$Id' -I '@(#)' linux-2.4.25-rc2_org/include/pcmcia/ss.h linux-2.4.25-rc2_q/include/pcmcia/ss.h +--- linux-2.4.25-rc2_org/include/pcmcia/ss.h 2004-02-12 23:13:02.000000000 +0100 ++++ linux-2.4.25-rc2_q/include/pcmcia/ss.h 2004-02-13 10:15:32.000000000 +0100 +@@ -112,7 +112,7 @@ typedef struct pccard_mem_map { + u_char map; + u_char flags; + u_short speed; +- u_long sys_start, sys_stop; ++ ioaddr_t sys_start, sys_stop; + u_int card_start; + } pccard_mem_map; + +diff -Naur -p -X do_not_diff -I '\$Id' -I '@(#)' linux-2.4.25-rc2_org/init/do_mounts.c linux-2.4.25-rc2_q/init/do_mounts.c +--- linux-2.4.25-rc2_org/init/do_mounts.c 2004-02-12 22:59:08.000000000 +0100 ++++ linux-2.4.25-rc2_q/init/do_mounts.c 2004-02-13 10:16:02.000000000 +0100 +@@ -760,8 +760,6 @@ static void __init devfs_make_root(char + static void __init mount_root(void) + { + #ifdef CONFIG_ROOT_NFS +- if (MAJOR(ROOT_DEV) == NFS_MAJOR +- && MINOR(ROOT_DEV) == NFS_MINOR) { + if (mount_nfs_root()) { + sys_chdir("/root"); + ROOT_DEV = current->fs->pwdmnt->mnt_sb->s_dev; +@@ -770,7 +768,6 @@ static void __init mount_root(void) + } + printk(KERN_ERR "VFS: Unable to mount root fs via NFS, trying floppy.\n"); + ROOT_DEV = MKDEV(FLOPPY_MAJOR, 0); +- } + #endif + devfs_make_root(root_device_name); + create_dev("/dev/root", ROOT_DEV, root_device_name); + diff --git a/target/device/jp/q5/kernel-patches-2.4.26/002-build_fixes b/target/device/jp/q5/kernel-patches-2.4.26/002-build_fixes new file mode 100644 index 000000000..a5928504e --- /dev/null +++ b/target/device/jp/q5/kernel-patches-2.4.26/002-build_fixes @@ -0,0 +1,81 @@ +diff -Naur linux-2.4.26-q5.org/arch/mips/au1000/common/clocks.c linux-2.4.26-q5/arch/mips/au1000/common/clocks.c +--- linux-2.4.26-q5.org/arch/mips/au1000/common/clocks.c 2003-08-25 07:44:39.000000000 -0400 ++++ linux-2.4.26-q5/arch/mips/au1000/common/clocks.c 2005-06-23 02:52:03.390000000 -0400 +@@ -85,9 +85,8 @@ + lcd_clock = sys_busclk / 4; + + if (lcd_clock > 50000) /* Epson MAX */ +- printk(__FUNCTION__ +- ": warning: LCD clock too high (%d KHz)\n", +- lcd_clock); ++ printk("%s: warning: LCD clock too high (%d KHz)\n", ++ __FUNCTION__, lcd_clock); + } + + unsigned int get_au1x00_lcd_clock(void) +--- linux-2.4.26-q5.org/arch/mips/kernel/time.c 2004-02-18 08:36:30.000000000 -0500 ++++ linux-2.4.26-q5/arch/mips/kernel/time.c 2005-06-23 03:13:07.720000000 -0400 +@@ -25,6 +25,7 @@ + #include <linux/interrupt.h> + #include <linux/module.h> + ++#include <asm/compiler.h> + #include <asm/bootinfo.h> + #include <asm/cpu.h> + #include <asm/time.h> +@@ -242,7 +243,7 @@ + __asm__("multu %1,%2" + : "=h" (res) + : "r" (count), "r" (sll32_usecs_per_cycle) +- : "lo", "accum"); ++ : "lo", GCC_REG_ACCUM); + + /* + * Due to possible jiffies inconsistencies, we need to check +@@ -297,7 +298,7 @@ + __asm__("multu %1,%2" + : "=h" (res) + : "r" (count), "r" (quotient) +- : "lo", "accum"); ++ : "lo", GCC_REG_ACCUM); + + /* + * Due to possible jiffies inconsistencies, we need to check +@@ -339,7 +340,7 @@ + : "r" (timerhi), "m" (timerlo), + "r" (tmp), "r" (USECS_PER_JIFFY), + "r" (USECS_PER_JIFFY_FRAC) +- : "hi", "lo", "accum"); ++ : "hi", "lo", GCC_REG_ACCUM); + cached_quotient = quotient; + } + } +@@ -353,7 +354,7 @@ + __asm__("multu %1,%2" + : "=h" (res) + : "r" (count), "r" (quotient) +- : "lo", "accum"); ++ : "lo", GCC_REG_ACCUM); + + /* + * Due to possible jiffies inconsistencies, we need to checkdiff -Naur linux-2.4.26-q5.org/include/asm-mips/compiler.h linux-2.4.26-q5/include/asm-mips/compiler.h +--- linux-2.4.26-q5.org/include/asm-mips/compiler.h 1969-12-31 19:00:00.000000000 -0500 ++++ linux-2.4.26-q5/include/asm-mips/compiler.h 2005-06-23 02:52:25.000000000 -0400 +@@ -0,0 +1,17 @@ ++/* ++ * Copyright (C) 2004 Maciej W. Rozycki ++ * ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License. See the file "COPYING" in the main directory of this archive ++ * for more details. ++ */ ++#ifndef _ASM_COMPILER_H ++#define _ASM_COMPILER_H ++ ++#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) ++#define GCC_REG_ACCUM "$0" ++#else ++#define GCC_REG_ACCUM "accum" ++#endif ++ ++#endif /* _ASM_COMPILER_H */ diff --git a/target/device/jp/q5/kernel-patches-2.4.26/004-correct_toolchain b/target/device/jp/q5/kernel-patches-2.4.26/004-correct_toolchain new file mode 100644 index 000000000..53e509d3a --- /dev/null +++ b/target/device/jp/q5/kernel-patches-2.4.26/004-correct_toolchain @@ -0,0 +1,24 @@ +--- linux-2.4.29/arch/mips/Makefile.orig 2005-03-08 23:24:05.000000000 -0700 ++++ linux-2.4.29/arch/mips/Makefile 2005-03-08 23:27:37.000000000 -0700 +@@ -17,16 +17,16 @@ + # Select the object file format to substitute into the linker script. + # + ifdef CONFIG_CPU_LITTLE_ENDIAN +-tool-prefix = mipsel-linux- ++#tool-prefix = mipsel-linux- + ld-emul = elf32ltsmip + else +-tool-prefix = mips-linux- ++#tool-prefix = mips-linux- + ld-emul = elf32btsmip + endif + +-ifdef CONFIG_CROSSCOMPILE +-CROSS_COMPILE = $(tool-prefix) +-endif ++#ifdef CONFIG_CROSSCOMPILE ++#CROSS_COMPILE = $(tool-prefix) ++#endif + + MAKEBOOT = $(MAKE) -C arch/$(ARCH)/boot + diff --git a/target/device/jp/q5/kernel-patches-2.4.26/100-version b/target/device/jp/q5/kernel-patches-2.4.26/100-version new file mode 100644 index 000000000..813d45f15 --- /dev/null +++ b/target/device/jp/q5/kernel-patches-2.4.26/100-version @@ -0,0 +1,11 @@ +--- linux/Makefile.orig 2004-08-18 14:17:14.000000000 -0600 ++++ linux/Makefile 2004-08-18 14:17:54.000000000 -0600 +@@ -1,7 +1,7 @@ + VERSION = 2 + PATCHLEVEL = 4 + SUBLEVEL = 26 +-EXTRAVERSION = ++EXTRAVERSION =-q5 + + KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) + |