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-----
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-stable
To unsubscribe, send any mail to "[EMAIL PROTECTED]"
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-stable
To unsubscribe, send any mail to "[EMAIL PROTECTED]"