Date: Sun, 29 Jan 2006 15:01:19 -0800 (PST) From: =?ISO-8859-1?Q?Mikko_Ty=F6l=E4j=E4rvi?= <mbsd@pacbell.net> To: lyubich_freebsd <lyubich-freebsd1@gmx.net> Cc: 'Bill Paul' <wpaul@FreeBSD.ORG>, freebsd-stable@FreeBSD.ORG Subject: RE: Broadcomm BCM4401-B0 and memory upgrade issue. Message-ID: <20060129145021.P834@spirou.home> In-Reply-To: <20060129221813.3F71043D75@mx1.FreeBSD.org> References: <20060129221813.3F71043D75@mx1.FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Hi, The chip is indeed unable to do DMA > 1G, as seen in the linux driver from Broadcom: [...] v3.0.11 (Aug 03, 2005) ====================== Fixes: ------------- 1. Problem: (CQ #13593) 4401 hangs when dealing with memory addresses above 1G. Cause : Hardware DMA limitation. Change : Modify the code to ensure memory addresses are below the 1G ceiling. Impact : None. [...] See <http://www.broadcom.com/support/ethernet_nic/downloaddrivers.php>, under BCM4401 drivers. $.02, /Mikko On Sun, 29 Jan 2006, lyubich_freebsd wrote: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > Hi, > > I applied the suggested changes. > I got the following message when I load the if_bfe driver. > > vm_page_alloc_config: alignment must be a power of 2 > > After that the kernel panics and system reboots. > > I think, if I can specified the allignment correctly, it should work. > Tell me, how to do this, and I will try it again. > > Regards, > LM > >> >> static int >> bfe_dma_alloc(device_t dev) >> { >> struct bfe_softc *sc; >> int error, i; >> >> sc = device_get_softc(dev); >> >> /* parent tag */ >> error = bus_dma_tag_create(NULL, /* parent */ >> PAGE_SIZE, 0, /* >> alignment, boundary */ >> BUS_SPACE_MAXADDR, /* lowaddr */ >> BUS_SPACE_MAXADDR_32BIT, /* highaddr */ >> NULL, NULL, /* filter, >> filterarg */ >> MAXBSIZE, /* maxsize */ >> BUS_SPACE_UNRESTRICTED, /* num of >> segments */ >> BUS_SPACE_MAXSIZE_32BIT, /* max >> segment size */ >> BUS_DMA_ALLOCNOW, /* flags */ >> NULL, NULL, /* >> lockfunc, lockarg */ >> &sc->bfe_parent_tag); >> >> - Change it to look like this: >> >> static int >> bfe_dma_alloc(device_t dev) >> { >> struct bfe_softc *sc; >> int error, i; >> >> sc = device_get_softc(dev); >> >> /* parent tag */ >> error = bus_dma_tag_create(NULL, /* parent */ >> PAGE_SIZE, 0, /* >> alignment, boundary */ >> /* change this -> */ 0x3E7FFFFF /*BUS_SPACE_MAXADDR*/, >> /* lowaddr */ >> BUS_SPACE_MAXADDR_32BIT, /* highaddr */ >> NULL, NULL, /* filter, >> filterarg */ >> MAXBSIZE, /* maxsize */ >> BUS_SPACE_UNRESTRICTED, /* num of >> segments */ >> BUS_SPACE_MAXSIZE_32BIT, /* max >> segment size */ >> BUS_DMA_ALLOCNOW, /* flags */ >> NULL, NULL, /* >> lockfunc, lockarg */ >> &sc->bfe_parent_tag); >> >> - Save if_bfe.c >> - Recompile if_bfe.ko and/or your kernel, test it, and report >> back what >> happens. >> >> Wait, let me say that last part again: REPORT BACK WHAT >> HAPPENS! I hate it when I send people things to test and they >> vanish into a black hole, never to be heard from again. >> >> I suspect this chipset has a DMA limitation that prevents it >> from performing DMA to/from any addresses outside the first >> 1GB of RAM. >> Curiously, I ran into this with a Linksys wireless NIC with >> the NDISulator, which is based on a Broadcom chipset too >> (802.11b only). >> > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v1.4.2 (MingW32) > > iD8DBQFD3T87KOV0oHioLCARAvxGAKCn4FieqHpPBD7+6vOm+taaLjfZlgCgk2WR > 5H7hLglq++SV8eaiujVL6cE= > =L2Ut > -----END PGP SIGNATURE----- > > _______________________________________________ > freebsd-stable@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-stable > To unsubscribe, send any mail to "freebsd-stable-unsubscribe@freebsd.org" >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20060129145021.P834>