On Fri, 25 May 2007, Felix Fietkau wrote:
Peter Denison wrote:
Here's a set of patches (to the patches - reading them by hand is a
nightmare!) to let the brcm47xx-2.6 target compile against the 2.6.21.1
kernel. Note this allows it to compile and make the full image - it was
too late to test booting, which I'll do tomorrow.
Somehow the patch got corrupted on the way to the list. Please resend
and put it in as attachment instead of inline.
Thanks,
Oops, sorry.
Index: target/linux/brcm47xx-2.6/profiles/WRTSL54GS.mk
===================================================================
--- target/linux/brcm47xx-2.6/profiles/WRTSL54GS.mk (revision 0)
+++ target/linux/brcm47xx-2.6/profiles/WRTSL54GS.mk (revision 0)
@@ -0,0 +1,17 @@
+#
+# Copyright (C) 2006 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+define Profile/WRTSL54GS
+ NAME:=Linksys WRTSL54GS
+ PACKAGES:=kmod-usb-core kmod-usb-ohci kmod-usb2 webif
+endef
+
+define Profile/WRTSL54GS/Description
+ Package set compatible with the Linksys WRTSL54GS. Contains USB support
+endef
+$(eval $(call Profile,WRTSL54GS))
+
Index: target/linux/brcm47xx-2.6/config/default
===================================================================
--- target/linux/brcm47xx-2.6/config/default (revision 7326)
+++ target/linux/brcm47xx-2.6/config/default (working copy)
@@ -6,7 +6,7 @@
# CONFIG_ATMEL is not set
CONFIG_B44=y
CONFIG_BASE_SMALL=0
-# CONFIG_BCM43XX is not set
+CONFIG_BCM43XX=m
CONFIG_BCM947XX=y
# CONFIG_BONDING is not set
# CONFIG_BRIDGE_NETFILTER is not set
Index: target/linux/brcm47xx-2.6/patches/100-board_support.patch
===================================================================
--- target/linux/brcm47xx-2.6/patches/100-board_support.patch (revision 7326)
+++ target/linux/brcm47xx-2.6/patches/100-board_support.patch (working copy)
@@ -12,7 +12,7 @@
mainmenu "Linux/MIPS Kernel Configuration"
menu "Machine selection"
-@@ -222,6 +226,23 @@
+@@ -240,6 +240,22 @@
Members include the Acer PICA, MIPS Magnum 4000, MIPS Millenium and
Olivetti M700-10 workstations.
@@ -29,7 +29,6 @@
+ select SSB_DRIVER_PCICORE
+ select SSB_PCICORE_HOSTMODE
+ select CFE
-+ select GENERIC_GPIO
+ help
+ Support for BCM947xx based boards
+
@@ -39,7 +38,7 @@
diff -urN linux.old/arch/mips/kernel/cpu-probe.c
linux.dev/arch/mips/kernel/cpu-probe.c
--- linux.old/arch/mips/kernel/cpu-probe.c 2007-01-26 00:51:33.000000000
+0100
+++ linux.dev/arch/mips/kernel/cpu-probe.c 2007-01-25 23:34:01.000000000
+0100
-@@ -723,6 +723,28 @@
+@@ -711,6 +711,28 @@
}
@@ -68,7 +67,7 @@
__init void cpu_probe(void)
{
struct cpuinfo_mips *c = ¤t_cpu_data;
-@@ -745,6 +767,9 @@
+@@ -733,6 +755,9 @@
case PRID_COMP_SIBYTE:
cpu_probe_sibyte(c);
break;
@@ -93,7 +92,7 @@
diff -urN linux.old/arch/mips/Makefile linux.dev/arch/mips/Makefile
--- linux.old/arch/mips/Makefile 2007-01-26 00:51:33.000000000 +0100
+++ linux.dev/arch/mips/Makefile 2007-01-25 23:34:01.000000000 +0100
-@@ -571,6 +571,18 @@
+@@ -576,6 +576,18 @@
load-$(CONFIG_SIBYTE_BIGSUR) := 0xffffffff80100000
#
@@ -109,13 +108,13 @@
+core-$(CONFIG_CFE) += arch/mips/cfe/
+
+#
- # SNI RM200 PCI
+ # SNI RM
#
- core-$(CONFIG_SNI_RM200_PCI) += arch/mips/sni/
+ core-$(CONFIG_SNI_RM) += arch/mips/sni/
diff -urN linux.old/arch/mips/mm/tlbex.c linux.dev/arch/mips/mm/tlbex.c
--- linux.old/arch/mips/mm/tlbex.c 2007-01-26 00:51:33.000000000 +0100
+++ linux.dev/arch/mips/mm/tlbex.c 2007-01-25 23:34:01.000000000 +0100
-@@ -880,6 +880,8 @@
+@@ -892,6 +892,8 @@
case CPU_4KSC:
case CPU_20KC:
case CPU_25KF:
@@ -139,15 +138,15 @@
diff -urN linux.old/drivers/Makefile linux.dev/drivers/Makefile
--- linux.old/drivers/Makefile 2007-01-26 00:51:33.000000000 +0100
+++ linux.dev/drivers/Makefile 2007-01-25 23:34:01.000000000 +0100
-@@ -77,3 +77,4 @@
- obj-$(CONFIG_SUPERH) += sh/
- obj-$(CONFIG_GENERIC_TIME) += clocksource/
+@@ -81,3 +81,4 @@
obj-$(CONFIG_DMA_ENGINE) += dma/
+ obj-$(CONFIG_HID) += hid/
+ obj-$(CONFIG_PPC_PS3) += ps3/
+obj-$(CONFIG_SSB) += ssb/
diff -urN linux.old/include/asm-mips/bootinfo.h
linux.dev/include/asm-mips/bootinfo.h
--- linux.old/include/asm-mips/bootinfo.h 2007-01-26 00:51:33.000000000
+0100
+++ linux.dev/include/asm-mips/bootinfo.h 2007-01-25 23:34:01.000000000
+0100
-@@ -212,6 +212,12 @@
+@@ -213,6 +213,12 @@
#define MACH_GROUP_NEC_EMMA2RH 25 /* NEC EMMA2RH (was 23) */
#define MACH_NEC_MARKEINS 0 /* NEC EMMA2RH Mark-eins */
@@ -191,7 +190,7 @@
diff -urN linux.old/include/linux/pci_ids.h linux.dev/include/linux/pci_ids.h
--- linux.old/include/linux/pci_ids.h 2007-01-26 00:51:33.000000000 +0100
+++ linux.dev/include/linux/pci_ids.h 2007-01-25 23:34:01.000000000 +0100
-@@ -1950,6 +1950,7 @@
+@@ -1981,6 +1981,7 @@
#define PCI_DEVICE_ID_TIGON3_5906M 0x1713
#define PCI_DEVICE_ID_BCM4401 0x4401
#define PCI_DEVICE_ID_BCM4401B0 0x4402
Index: target/linux/brcm47xx-2.6/patches/160-kmap_coherent.patch
===================================================================
--- target/linux/brcm47xx-2.6/patches/160-kmap_coherent.patch (revision 7326)
+++ target/linux/brcm47xx-2.6/patches/160-kmap_coherent.patch (working copy)
@@ -1,6 +1,6 @@
--- ./arch/mips/mm/init.c.orig 2007-03-22 08:08:34.000000000 -0600
+++ ./arch/mips/mm/init.c 2007-03-22 08:09:04.000000000 -0600
-@@ -207,7 +207,7 @@
+@@ -230,7 +230,7 @@
struct page *page, unsigned long vaddr, void *dst, const void *src,
unsigned long len)
{
@@ -9,7 +9,7 @@
void *vto = kmap_coherent(page, vaddr) + (vaddr & ~PAGE_MASK);
memcpy(vto, src, len);
kunmap_coherent(page);
-@@ -223,7 +223,7 @@
+@@ -246,7 +246,7 @@
struct page *page, unsigned long vaddr, void *dst, const void *src,
unsigned long len)
{
@@ -36,7 +36,7 @@
+#endif /* __ASM_MACH_BCM947XX_CPU_FEATURE_OVERRIDES_H */
--- ./include/asm-mips/cpu-features.h.orig 2007-03-22 08:09:16.000000000
-0600
+++ ./include/asm-mips/cpu-features.h 2007-03-22 08:09:52.000000000 -0600
-@@ -98,6 +98,9 @@
+@@ -101,6 +101,9 @@
#ifndef cpu_has_pindexed_dcache
#define cpu_has_pindexed_dcache (cpu_data[0].dcache.flags &
MIPS_CACHE_PINDEX)
#endif
Index: target/linux/brcm47xx-2.6/patches/130-remove_scache.patch
===================================================================
--- target/linux/brcm47xx-2.6/patches/130-remove_scache.patch (revision 7326)
+++ target/linux/brcm47xx-2.6/patches/130-remove_scache.patch (working copy)
@@ -1,7 +1,7 @@
diff -urN linux-2.6.19.ref/arch/mips/Kconfig linux-2.6.19/arch/mips/Kconfig
--- linux-2.6.19.ref/arch/mips/Kconfig 2006-12-04 21:33:48.000000000 +0100
+++ linux-2.6.19/arch/mips/Kconfig 2006-12-04 21:34:04.000000000 +0100
-@@ -283,7 +283,6 @@
+@@ -315,7 +315,6 @@
select I8259
select MIPS_BOARDS_GEN
select MIPS_BONITO64
@@ -9,7 +9,7 @@
select MIPS_GT64120
select MIPS_MSC
select SWAP_IO_SPACE
-@@ -1434,13 +1433,6 @@
+@@ -1538,13 +1537,6 @@
bool
select BOARD_SCACHE
@@ -26,7 +26,7 @@
diff -urN linux-2.6.19.ref/arch/mips/kernel/cpu-probe.c
linux-2.6.19/arch/mips/kernel/cpu-probe.c
--- linux-2.6.19.ref/arch/mips/kernel/cpu-probe.c 2006-12-04
21:33:48.000000000 +0100
+++ linux-2.6.19/arch/mips/kernel/cpu-probe.c 2006-12-04 21:34:04.000000000
+0100
-@@ -631,6 +631,8 @@
+@@ -619,6 +619,8 @@
break;
case PRID_IMP_25KF:
c->cputype = CPU_25KF;
@@ -84,11 +84,8 @@
diff -urN linux-2.6.19.ref/arch/mips/mm/Makefile
linux-2.6.19/arch/mips/mm/Makefile
--- linux-2.6.19.ref/arch/mips/mm/Makefile 2006-11-29 22:57:37.000000000
+0100
+++ linux-2.6.19/arch/mips/mm/Makefile 2006-12-04 21:34:04.000000000 +0100
-@@ -30,7 +30,6 @@
+@@ -30,4 +30,3 @@
obj-$(CONFIG_IP22_CPU_SCACHE) += sc-ip22.o
obj-$(CONFIG_R5000_CPU_SCACHE) += sc-r5k.o
obj-$(CONFIG_RM7000_CPU_SCACHE) += sc-rm7k.o
-obj-$(CONFIG_MIPS_CPU_SCACHE) += sc-mips.o
-
- #
- # Choose one DMA coherency model
Index: target/linux/brcm47xx-2.6/patches/180-b44_timeout.patch
===================================================================
--- target/linux/brcm47xx-2.6/patches/180-b44_timeout.patch (revision 7326)
+++ target/linux/brcm47xx-2.6/patches/180-b44_timeout.patch (working copy)
@@ -1,12 +0,0 @@
-diff -urN linux-2.6.19.2/drivers/net/b44.c linux-2.6.19.2.new/drivers/net/b44.c
---- linux-2.6.19.2/drivers/net/b44.c 2007-05-03 12:22:54.000000000 +0200
-+++ linux-2.6.19.2.new/drivers/net/b44.c 2007-05-03 12:23:19.000000000
+0200
-@@ -1640,7 +1640,7 @@
- bw32(bp, B44_RXCONFIG, val);
- } else {
- unsigned char zero[6] = {0, 0, 0, 0, 0, 0};
-- int i = 0;
-+ int i = 1;
-
- __b44_set_mac_addr(bp);
-
Index: target/linux/brcm47xx-2.6/patches/150-cpu_fixes.patch
===================================================================
--- target/linux/brcm47xx-2.6/patches/150-cpu_fixes.patch (revision 7326)
+++ target/linux/brcm47xx-2.6/patches/150-cpu_fixes.patch (working copy)
@@ -1,7 +1,7 @@
diff -ur linux.old/arch/mips/kernel/genex.S linux.dev/arch/mips/kernel/genex.S
--- linux.old/arch/mips/kernel/genex.S 2007-03-23 16:10:35.572499592 +0100
+++ linux.dev/arch/mips/kernel/genex.S 2007-03-16 11:54:34.901251992 +0100
-@@ -50,6 +50,10 @@
+@@ -51,6 +51,10 @@
NESTED(except_vec3_generic, 0, sp)
.set push
.set noat
@@ -74,7 +74,7 @@
if (dc_lsize)
protected_writeback_dcache_line(addr & ~(dc_lsize - 1));
if (!cpu_icache_snoops_remote_store && scache_size)
-@@ -1199,6 +1216,15 @@
+@@ -1173,6 +1190,15 @@
/* Default cache error handler for R4000 and R5000 family */
set_uncached_handler (0x100, &except_vec2_generic, 0x80);
@@ -93,7 +93,7 @@
diff -ur linux.old/arch/mips/mm/tlbex.c linux.dev/arch/mips/mm/tlbex.c
--- linux.old/arch/mips/mm/tlbex.c 2007-03-16 11:54:34.826263000 +0100
+++ linux.dev/arch/mips/mm/tlbex.c 2007-03-23 16:03:23.608168152 +0100
-@@ -1174,6 +1174,10 @@
+@@ -1229,6 +1229,10 @@
#endif
}
@@ -104,7 +104,7 @@
static void __init build_r4000_tlb_refill_handler(void)
{
u32 *p = tlb_handler;
-@@ -1188,6 +1192,12 @@
+@@ -1243,6 +1247,12 @@
memset(relocs, 0, sizeof(relocs));
memset(final_handler, 0, sizeof(final_handler));
@@ -325,7 +325,7 @@
diff -ur linux.old/include/asm-mips/stackframe.h
linux.dev/include/asm-mips/stackframe.h
--- linux.old/include/asm-mips/stackframe.h 2007-03-23 16:10:35.573499440
+0100
+++ linux.dev/include/asm-mips/stackframe.h 2007-03-16 11:54:34.903251688
+0100
-@@ -334,6 +334,10 @@
+@@ -352,6 +352,10 @@
.macro RESTORE_SP_AND_RET
LONG_L sp, PT_R29(sp)
.set mips3
Index: target/linux/brcm47xx-2.6/patches/110-flash_map.patch
===================================================================
--- target/linux/brcm47xx-2.6/patches/110-flash_map.patch (revision 7326)
+++ target/linux/brcm47xx-2.6/patches/110-flash_map.patch (working copy)
@@ -1,7 +1,7 @@
diff -urN linux.old/drivers/mtd/maps/Kconfig linux.dev/drivers/mtd/maps/Kconfig
--- linux.old/drivers/mtd/maps/Kconfig 2006-12-11 20:32:53.000000000 +0100
+++ linux.dev/drivers/mtd/maps/Kconfig 2007-01-03 02:26:02.000000000 +0100
-@@ -299,6 +299,12 @@
+@@ -326,6 +326,12 @@
Mapping for the Flaga digital module. If you don't have one, ignore
this setting.
@@ -17,7 +17,7 @@
diff -urN linux.old/drivers/mtd/maps/Makefile
linux.dev/drivers/mtd/maps/Makefile
--- linux.old/drivers/mtd/maps/Makefile 2006-12-11 20:32:53.000000000
+0100
+++ linux.dev/drivers/mtd/maps/Makefile 2007-01-03 02:26:02.000000000
+0100
-@@ -29,6 +29,7 @@
+@@ -31,6 +31,7 @@
obj-$(CONFIG_MTD_PCMCIA) += pcmciamtd.o
obj-$(CONFIG_MTD_RPXLITE) += rpxlite.o
obj-$(CONFIG_MTD_TQM8XXL) += tqm8xxl.o
Index: target/linux/brcm47xx-2.6/patches/120-b44_ssb_support.patch
===================================================================
--- target/linux/brcm47xx-2.6/patches/120-b44_ssb_support.patch (revision 7326)
+++ target/linux/brcm47xx-2.6/patches/120-b44_ssb_support.patch (working copy)
@@ -27,7 +27,7 @@
#include "b44.h"
#define DRV_MODULE_NAME "b44"
-@@ -87,8 +91,8 @@
+@@ -86,8 +90,8 @@
static char version[] __devinitdata =
DRV_MODULE_NAME ".c:v" DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")\n";
@@ -38,7 +38,7 @@
MODULE_LICENSE("GPL");
MODULE_VERSION(DRV_MODULE_VERSION);
-@@ -96,24 +100,18 @@
+@@ -95,18 +99,11 @@
module_param(b44_debug, int, 0);
MODULE_PARM_DESC(b44_debug, "B44 bitmapped debugging message enable value");
@@ -59,15 +59,16 @@
-
static void b44_halt(struct b44 *);
static void b44_init_rings(struct b44 *);
- static void b44_init_hw(struct b44 *, int);
-
+
+@@ -118,6 +115,7 @@
+
static int dma_desc_align_mask;
static int dma_desc_sync_size;
+static int instance;
static const char b44_gstrings[][ETH_GSTRING_LEN] = {
#define _B44(x...) # x,
-@@ -121,35 +119,24 @@
+@@ -125,35 +123,24 @@
#undef _B44
};
@@ -121,7 +122,7 @@
}
static int b44_wait_bit(struct b44 *bp, unsigned long reg,
-@@ -177,117 +164,29 @@
+@@ -181,117 +168,29 @@
return 0;
}
@@ -252,7 +253,7 @@
{
u32 val;
-@@ -323,14 +222,14 @@
+@@ -327,14 +226,14 @@
bw32(bp, B44_IMASK, bp->imask);
}
@@ -269,7 +270,7 @@
(reg << MDIO_DATA_RA_SHIFT) |
(MDIO_TA_VALID << MDIO_DATA_TA_SHIFT)));
err = b44_wait_bit(bp, B44_EMAC_ISTAT, EMAC_INT_MII, 100, 0);
-@@ -339,18 +238,34 @@
+@@ -343,18 +242,34 @@
return err;
}
@@ -306,7 +307,7 @@
/* miilib interface */
/* FIXME FIXME: phy_id is ignored, bp->phy_addr use is unconditional
* due to code existing before miilib use was added to this driver.
-@@ -379,6 +294,8 @@
+@@ -383,6 +298,8 @@
u32 val;
int err;
@@ -315,7 +316,7 @@
err = b44_writephy(bp, MII_BMCR, BMCR_RESET);
if (err)
return err;
-@@ -437,11 +354,27 @@
+@@ -441,11 +358,27 @@
__b44_set_flow_ctrl(bp, pause_enab);
}
@@ -343,7 +344,7 @@
if ((err = b44_readphy(bp, B44_MII_ALEDCTRL, &val)) != 0)
goto out;
if ((err = b44_writephy(bp, B44_MII_ALEDCTRL,
-@@ -537,6 +470,19 @@
+@@ -541,6 +474,19 @@
{
u32 bmsr, aux;
@@ -363,7 +364,7 @@
if (!b44_readphy(bp, MII_BMSR, &bmsr) &&
!b44_readphy(bp, B44_MII_AUXCTRL, &aux) &&
(bmsr != 0xffff)) {
-@@ -613,10 +559,10 @@
+@@ -617,10 +563,10 @@
BUG_ON(skb == NULL);
@@ -376,7 +377,7 @@
rp->skb = NULL;
dev_kfree_skb_irq(skb);
}
-@@ -652,10 +598,10 @@
+@@ -656,10 +602,10 @@
skb = dev_alloc_skb(RX_PKT_BUF_SZ);
if (skb == NULL)
return -ENOMEM;
@@ -390,8 +391,8 @@
/* Hardware bug work-around, the chip is unable to do PCI DMA
to/from anything above 1GB :-( */
-@@ -663,18 +609,18 @@
- mapping + RX_PKT_BUF_SZ > B44_DMA_MASK) {
+@@ -667,18 +613,18 @@
+ mapping + RX_PKT_BUF_SZ > DMA_30BIT_MASK) {
/* Sigh... */
if (!dma_mapping_error(mapping))
- pci_unmap_single(bp->pdev, mapping,
RX_PKT_BUF_SZ,PCI_DMA_FROMDEVICE);
@@ -406,14 +407,14 @@
- PCI_DMA_FROMDEVICE);
+ DMA_FROM_DEVICE);
if (dma_mapping_error(mapping) ||
- mapping + RX_PKT_BUF_SZ > B44_DMA_MASK) {
+ mapping + RX_PKT_BUF_SZ > DMA_30BIT_MASK) {
if (!dma_mapping_error(mapping))
- pci_unmap_single(bp->pdev, mapping,
RX_PKT_BUF_SZ,PCI_DMA_FROMDEVICE);
+ dma_unmap_single(&bp->sdev->dev, mapping,
RX_PKT_BUF_SZ,DMA_FROM_DEVICE);
dev_kfree_skb_any(skb);
return -ENOMEM;
}
-@@ -703,9 +649,9 @@
+@@ -707,9 +653,9 @@
dp->addr = cpu_to_le32((u32) mapping + bp->rx_offset + bp->dma_offset);
if (bp->flags & B44_FLAG_RX_RING_HACK)
@@ -426,7 +427,7 @@
return RX_PKT_BUF_SZ;
}
-@@ -732,9 +678,9 @@
+@@ -736,9 +682,9 @@
pci_unmap_addr(src_map, mapping));
if (bp->flags & B44_FLAG_RX_RING_HACK)
@@ -439,7 +440,7 @@
ctrl = src_desc->ctrl;
if (dest_idx == (B44_RX_RING_SIZE - 1))
-@@ -748,13 +694,13 @@
+@@ -752,13 +698,13 @@
src_map->skb = NULL;
if (bp->flags & B44_FLAG_RX_RING_HACK)
@@ -450,15 +451,15 @@
+ dest_idx * sizeof(dest_desc),
+ DMA_BIDIRECTIONAL);
-- pci_dma_sync_single_for_device(bp->pdev, src_desc->addr,
-+ dma_sync_single_for_device(&bp->sdev->dev, src_desc->addr,
+- pci_dma_sync_single_for_device(bp->pdev, le32_to_cpu(src_desc->addr),
++ dma_sync_single_for_device(&bp->sdev->dev, le32_to_cpu(src_desc->addr),
RX_PKT_BUF_SZ,
- PCI_DMA_FROMDEVICE);
+ DMA_FROM_DEVICE);
}
static int b44_rx(struct b44 *bp, int budget)
-@@ -774,9 +720,9 @@
+@@ -778,9 +724,9 @@
struct rx_header *rh;
u16 len;
@@ -468,9 +469,9 @@
- PCI_DMA_FROMDEVICE);
+ DMA_FROM_DEVICE);
rh = (struct rx_header *) skb->data;
- len = cpu_to_le16(rh->len);
+ len = le16_to_cpu(rh->len);
if ((len > (RX_PKT_BUF_SZ - bp->rx_offset)) ||
-@@ -808,11 +754,11 @@
+@@ -812,11 +758,11 @@
skb_size = b44_alloc_rx_skb(bp, cons, bp->rx_prod);
if (skb_size < 0)
goto drop_it;
@@ -486,13 +487,13 @@
} else {
struct sk_buff *copy_skb;
-@@ -980,23 +926,23 @@
+@@ -986,23 +932,23 @@
goto err_out;
}
- mapping = pci_map_single(bp->pdev, skb->data, len, PCI_DMA_TODEVICE);
+ mapping = dma_map_single(&bp->sdev->dev, skb->data, len, DMA_TO_DEVICE);
- if (dma_mapping_error(mapping) || mapping + len > B44_DMA_MASK) {
+ if (dma_mapping_error(mapping) || mapping + len > DMA_30BIT_MASK) {
/* Chip can't handle DMA to/from >1GB, use bounce buffer */
if (!dma_mapping_error(mapping))
- pci_unmap_single(bp->pdev, mapping, len,
PCI_DMA_TODEVICE);
@@ -507,7 +508,7 @@
- len, PCI_DMA_TODEVICE);
+ mapping = dma_map_single(&bp->sdev->dev, bounce_skb->data,
+ len, DMA_TO_DEVICE);
- if (dma_mapping_error(mapping) || mapping + len > B44_DMA_MASK)
{
+ if (dma_mapping_error(mapping) || mapping + len >
DMA_30BIT_MASK) {
if (!dma_mapping_error(mapping))
- pci_unmap_single(bp->pdev, mapping,
- len, PCI_DMA_TODEVICE);
@@ -516,7 +517,7 @@
dev_kfree_skb_any(bounce_skb);
goto err_out;
}
-@@ -1019,9 +965,9 @@
+@@ -1025,9 +971,9 @@
bp->tx_ring[entry].addr = cpu_to_le32((u32) mapping+bp->dma_offset);
if (bp->flags & B44_FLAG_TX_RING_HACK)
@@ -529,7 +530,7 @@
entry = NEXT_TX(entry);
-@@ -1094,10 +1040,10 @@
+@@ -1100,10 +1046,10 @@
if (rp->skb == NULL)
continue;
@@ -542,7 +543,7 @@
dev_kfree_skb_any(rp->skb);
rp->skb = NULL;
}
-@@ -1108,10 +1054,10 @@
+@@ -1114,10 +1060,10 @@
if (rp->skb == NULL)
continue;
@@ -555,7 +556,7 @@
dev_kfree_skb_any(rp->skb);
rp->skb = NULL;
}
-@@ -1133,14 +1079,14 @@
+@@ -1139,14 +1085,14 @@
memset(bp->tx_ring, 0, B44_TX_RING_BYTES);
if (bp->flags & B44_FLAG_RX_RING_HACK)
@@ -576,7 +577,7 @@
for (i = 0; i < bp->rx_pending; i++) {
if (b44_alloc_rx_skb(bp, -1, i) < 0)
-@@ -1160,24 +1106,24 @@
+@@ -1166,24 +1112,24 @@
bp->tx_buffers = NULL;
if (bp->rx_ring) {
if (bp->flags & B44_FLAG_RX_RING_HACK) {
@@ -609,7 +610,7 @@
bp->tx_ring, bp->tx_ring_dma);
bp->tx_ring = NULL;
bp->flags &= ~B44_FLAG_TX_RING_HACK;
-@@ -1203,7 +1149,7 @@
+@@ -1209,7 +1155,7 @@
goto out_err;
size = DMA_TABLE_BYTES;
@@ -618,7 +619,7 @@
if (!bp->rx_ring) {
/* Allocation may have failed due to pci_alloc_consistent
insisting on use of GFP_DMA, which is more restrictive
-@@ -1215,9 +1161,9 @@
+@@ -1221,9 +1167,9 @@
if (!rx_ring)
goto out_err;
@@ -630,8 +631,8 @@
+ DMA_BIDIRECTIONAL);
if (dma_mapping_error(rx_ring_dma) ||
- rx_ring_dma + size > B44_DMA_MASK) {
-@@ -1230,9 +1176,9 @@
+ rx_ring_dma + size > DMA_30BIT_MASK) {
+@@ -1236,9 +1182,9 @@
bp->flags |= B44_FLAG_RX_RING_HACK;
}
@@ -643,7 +644,7 @@
insisting on use of GFP_DMA, which is more restrictive
than necessary... */
struct dma_desc *tx_ring;
-@@ -1242,9 +1188,9 @@
+@@ -1248,9 +1194,9 @@
if (!tx_ring)
goto out_err;
@@ -655,8 +656,8 @@
+ DMA_TO_DEVICE);
if (dma_mapping_error(tx_ring_dma) ||
- tx_ring_dma + size > B44_DMA_MASK) {
-@@ -1279,7 +1225,9 @@
+ tx_ring_dma + size > DMA_30BIT_MASK) {
+@@ -1285,7 +1231,9 @@
/* bp->lock is held. */
static void b44_chip_reset(struct b44 *bp)
{
@@ -666,8 +667,8 @@
+ if (ssb_device_is_enabled(bp->sdev)) {
bw32(bp, B44_RCV_LAZY, 0);
bw32(bp, B44_ENET_CTRL, ENET_CTRL_DISABLE);
- b44_wait_bit(bp, B44_ENET_CTRL, ENET_CTRL_DISABLE, 100, 1);
-@@ -1291,19 +1239,23 @@
+ b44_wait_bit(bp, B44_ENET_CTRL, ENET_CTRL_DISABLE, 200, 1);
+@@ -1297,19 +1245,23 @@
}
bw32(bp, B44_DMARX_CTRL, 0);
bp->rx_prod = bp->rx_cons = 0;
@@ -699,7 +700,7 @@
br32(bp, B44_MDIO_CTRL);
if (!(br32(bp, B44_DEVCTRL) & DEVCTRL_IPP)) {
-@@ -1346,6 +1298,7 @@
+@@ -1352,6 +1304,7 @@
{
struct b44 *bp = netdev_priv(dev);
struct sockaddr *addr = p;
@@ -707,7 +708,7 @@
if (netif_running(dev))
return -EBUSY;
-@@ -1356,7 +1309,11 @@
+@@ -1362,7 +1315,11 @@
memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
spin_lock_irq(&bp->lock);
@@ -720,7 +721,7 @@
spin_unlock_irq(&bp->lock);
return 0;
-@@ -1442,18 +1399,6 @@
+@@ -1448,18 +1405,6 @@
return err;
}
@@ -739,7 +740,7 @@
#ifdef CONFIG_NET_POLL_CONTROLLER
/*
* Polling receive - used by netconsole and other diagnostic tools
-@@ -1568,7 +1513,6 @@
+@@ -1574,7 +1519,6 @@
static void b44_setup_wol(struct b44 *bp)
{
u32 val;
@@ -747,7 +748,7 @@
bw32(bp, B44_RXCONFIG, RXCONFIG_ALLMULTI);
-@@ -1592,13 +1536,6 @@
+@@ -1598,13 +1542,6 @@
} else {
b44_setup_pseudo_magicp(bp);
}
@@ -761,7 +762,7 @@
}
static int b44_close(struct net_device *dev)
-@@ -1698,7 +1635,7 @@
+@@ -1704,7 +1641,7 @@
val = br32(bp, B44_RXCONFIG);
val &= ~(RXCONFIG_PROMISC | RXCONFIG_ALLMULTI);
@@ -770,7 +771,7 @@
val |= RXCONFIG_PROMISC;
bw32(bp, B44_RXCONFIG, val);
} else {
-@@ -1745,12 +1682,8 @@
+@@ -1751,12 +1688,8 @@
static void b44_get_drvinfo (struct net_device *dev, struct ethtool_drvinfo
*info)
{
@@ -783,7 +784,7 @@
}
static int b44_nway_reset(struct net_device *dev)
-@@ -2034,6 +1967,245 @@
+@@ -2040,6 +1973,245 @@
.get_perm_addr = ethtool_op_get_perm_addr,
};
@@ -1029,7 +1030,7 @@
static int b44_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
{
struct mii_ioctl_data *data = if_mii(ifr);
-@@ -2043,40 +2215,64 @@
+@@ -2049,40 +2221,64 @@
if (!netif_running(dev))
goto out;
@@ -1047,7 +1048,7 @@
-static int b44_read_eeprom(struct b44 *bp, u8 *data)
-{
- long i;
-- u16 *ptr = (u16 *) data;
+- __le16 *ptr = (__le16 *) data;
+ case SIOCGMIIPHY:
+ data->phy_id = bp->phy_addr;
@@ -1119,7 +1120,7 @@
if (!is_valid_ether_addr(&bp->dev->dev_addr[0])){
printk(KERN_ERR PFX "Invalid MAC address found in EEPROM\n");
-@@ -2085,108 +2281,52 @@
+@@ -2091,108 +2287,52 @@
memcpy(bp->dev->perm_addr, bp->dev->dev_addr, bp->dev->addr_len);
@@ -1187,13 +1188,13 @@
-
- pci_set_master(pdev);
-
-- err = pci_set_dma_mask(pdev, (u64) B44_DMA_MASK);
+- err = pci_set_dma_mask(pdev, (u64) DMA_30BIT_MASK);
- if (err) {
- dev_err(&pdev->dev, "No usable DMA configuration, aborting.\n");
- goto err_out_free_res;
- }
-
-- err = pci_set_consistent_dma_mask(pdev, (u64) B44_DMA_MASK);
+- err = pci_set_consistent_dma_mask(pdev, (u64) DMA_30BIT_MASK);
- if (err) {
- dev_err(&pdev->dev, "No usable DMA configuration, aborting.\n");
- goto err_out_free_res;
@@ -1237,7 +1238,7 @@
bp->rx_pending = B44_DEF_RX_RING_PENDING;
bp->tx_pending = B44_DEF_TX_RING_PENDING;
-@@ -2205,16 +2345,16 @@
+@@ -2211,16 +2351,16 @@
dev->poll_controller = b44_poll_controller;
#endif
dev->change_mtu = b44_change_mtu;
@@ -1257,7 +1258,7 @@
}
bp->mii_if.dev = dev;
-@@ -2233,61 +2373,52 @@
+@@ -2239,61 +2379,52 @@
err = register_netdev(dev);
if (err) {
@@ -1335,8 +1336,8 @@
del_timer_sync(&bp->timer);
-@@ -2305,19 +2436,15 @@
- b44_init_hw(bp, 0);
+@@ -2311,26 +2442,16 @@
+ b44_init_hw(bp, B44_PARTIAL_RESET);
b44_setup_wol(bp);
}
- pci_disable_device(pdev);
@@ -1350,15 +1351,22 @@
- struct net_device *dev = pci_get_drvdata(pdev);
+ struct net_device *dev = ssb_get_drvdata(pdev);
struct b44 *bp = netdev_priv(dev);
+ int rc = 0;
- pci_restore_state(pdev);
-- pci_enable_device(pdev);
+- rc = pci_enable_device(pdev);
+- if (rc) {
+- printk(KERN_ERR PFX "%s: pci_enable_device failed\n",
+- dev->name);
+- return rc;
+- }
+-
- pci_set_master(pdev);
-
if (!netif_running(dev))
return 0;
-@@ -2339,29 +2466,31 @@
+@@ -2356,29 +2477,31 @@
return 0;
}
@@ -1525,7 +1533,7 @@
diff -urN linux.old/drivers/net/Kconfig linux.dev/drivers/net/Kconfig
--- linux.old/drivers/net/Kconfig 2007-01-03 02:25:09.000000000 +0100
+++ linux.dev/drivers/net/Kconfig 2007-01-03 02:26:02.000000000 +0100
-@@ -1525,7 +1525,7 @@
+@@ -1511,7 +1511,7 @@
config B44
tristate "Broadcom 4400 ethernet support"
Index: target/linux/brcm47xx-2.6/patches/180-cpu_fixes2.patch
===================================================================
--- target/linux/brcm47xx-2.6/patches/180-cpu_fixes2.patch (revision 0)
+++ target/linux/brcm47xx-2.6/patches/180-cpu_fixes2.patch (revision 0)
@@ -0,0 +1,30 @@
+--- linux-2.6.21.1/arch/mips/bcm947xx/irq.c.orig 2007-05-18
21:27:17.000000000 +0100
++++ linux-2.6.21.1/arch/mips/bcm947xx/irq.c 2007-05-24 23:25:38.000000000
+0100
+@@ -59,5 +59,5 @@
+
+ void __init arch_init_irq(void)
+ {
+- mips_cpu_irq_init(0);
++ mips_cpu_irq_init();
+ }
+--- linux-2.6.21.1/arch/mips/bcm947xx/prom.c.orig 2007-05-18
21:27:17.000000000 +0100
++++ linux-2.6.21.1/arch/mips/bcm947xx/prom.c 2007-05-24 23:46:06.000000000
+0100
+@@ -56,7 +56,6 @@
+ add_memory_region(0, mem, BOOT_MEM_RAM);
+ }
+
+-unsigned long __init prom_free_prom_memory(void)
++void __init prom_free_prom_memory(void)
+ {
+- return 0;
+ }
+--- linux-2.6.21.1/drivers/mtd/maps/bcm47xx-flash.c.orig 2007-05-18
21:27:17.000000000 +0100
++++ linux-2.6.21.1/drivers/mtd/maps/bcm47xx-flash.c 2007-05-25
00:22:18.000000000 +0100
+@@ -40,6 +40,7 @@
+ #include <linux/module.h>
+ #include <linux/types.h>
+ #include <linux/kernel.h>
++#include <linux/sched.h>
+ #include <linux/wait.h>
+ #include <linux/mtd/mtd.h>
+ #include <linux/mtd/map.h>
Index: target/linux/brcm47xx-2.6/patches/170-cpu_wait.patch
===================================================================
--- target/linux/brcm47xx-2.6/patches/170-cpu_wait.patch (revision 7326)
+++ target/linux/brcm47xx-2.6/patches/170-cpu_wait.patch (working copy)
@@ -1,12 +1,12 @@
diff -urN linux-2.6.19.2.old/arch/mips/kernel/cpu-probe.c
linux-2.6.19.2/arch/mips/kernel/cpu-probe.c
--- linux-2.6.19.2.old/arch/mips/kernel/cpu-probe.c 2007-05-01
19:28:06.937756121 +0100
+++ linux-2.6.19.2/arch/mips/kernel/cpu-probe.c 2007-05-01
19:31:46.867756121 +0100
-@@ -145,6 +145,8 @@
+@@ -143,6 +143,8 @@
case CPU_34K:
case CPU_74K:
case CPU_PR4450:
+ case CPU_BCM3302:
+ case CPU_BCM4710:
cpu_wait = r4k_wait;
- printk(" available.\n");
break;
+ case CPU_TX49XX:
Index: package/broadcom-diag/src/diag.c
===================================================================
--- package/broadcom-diag/src/diag.c (revision 7326)
+++ package/broadcom-diag/src/diag.c (working copy)
@@ -675,8 +675,14 @@
gpio_set_irqenable(0, button_handler);
}
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
+static void hotplug_button(struct work_struct *work)
+{
+ struct event_t *event = container_of(work, struct event_t, wq);
+#else
static void hotplug_button(struct event_t *event)
{
+#endif
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
call_usermodehelper (event->argv[0], event->argv, event->envp, 1);
#else
@@ -724,7 +730,11 @@
scratch += sprintf (scratch, "SEEN=%ld", (jiffies -
b->seen)/HZ) + 1;
event->envp[i] = 0;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
+ INIT_WORK(&event->wq, (void *)(void *)hotplug_button);
+#else
INIT_WORK(&event->wq, (void *)(void *)hotplug_button,
(void *)event);
+#endif
schedule_work(&event->wq);
}
Index: package/broadcom-diag/src/diag.h
===================================================================
--- package/broadcom-diag/src/diag.h (revision 7326)
+++ package/broadcom-diag/src/diag.h (working copy)
@@ -88,7 +88,11 @@
static void register_buttons(struct button_t *b);
static void unregister_buttons(struct button_t *b);
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
+static void hotplug_button(struct work_struct *work);
+#else
static void hotplug_button(struct event_t *event);
+#endif
static irqreturn_t button_handler(int irq, void *dev_id, struct pt_regs *regs);
/* leds */
_______________________________________________
openwrt-devel mailing list
[email protected]
http://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel