Broadcomm BCM4401-B0 and memory upgrade issue.
Mikko Työläjärvi
mbsd at pacbell.net
Sun Jan 29 15:01:21 PST 2006
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 at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-stable
> To unsubscribe, send any mail to "freebsd-stable-unsubscribe at freebsd.org"
>
More information about the freebsd-stable
mailing list