Skip site navigation (1)Skip section navigation (2)
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>