Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 18 Nov 1997 01:36:32 -0800
From:      David Greenman <dg@root.com>
To:        "John W. DeBoskey" <jwd@unx.sas.com>
Cc:        freebsd-current@FreeBSD.ORG
Subject:   Re: fxp0 causes machine lockup 
Message-ID:  <199711180936.BAA12735@implode.root.com>
In-Reply-To: Your message of "Mon, 17 Nov 1997 21:08:19 EST." <199711180208.AA05446@iluvatar.unx.sas.com> 

next in thread | previous in thread | raw e-mail | index | archive | help
>in /sys/pci/if_fxp.c the following fragment from fxp_init()
>appears to be the problem:
>
>        /*
>         * Start the config command/DMA.
>         */
>        fxp_scb_wait(sc);
>        CSR_WRITE_4(sc, FXP_CSR_SCB_GENERAL, vtophys(cbp));
>        CSR_WRITE_1(sc, FXP_CSR_SCB_COMMAND, FXP_SCB_COMMAND_CU_START);
>        /* ...and wait for it to complete. */
>        while (!(cbp->cb_status & FXP_CB_STATUS_C));
>
>   The fxp_scb_wait, CSR_WRITE_4 and CSR_WRITE_1 calls (appear to)
>work correctly. What I cannot find is the location in the code where
>the FXP_CB_STATUS_C bit is set in a (interrupt?) routine. Nor can I
>break into DDB at this point.

   The "FXP_CB_STATUS_C" flag is set by the Pro/100B DMA engine when the
processing of the command descriptor has completed. Network interrupts are
disabled at that point, so none are expected. I would guess that it is
hanging when DMA is started and not in the while loop after it.
   I noticed this:

>fxp0: <Intel EtherExpress Pro 10/100B Ethernet> rev 0x04 int a irq 14 on pci1.9.0
>fxp0: Ethernet address 00:a0:c9:8b:09:a5

   "rev 0x04"...hmmm. I haven't see a rev that high on the 82557 - perhaps
your card is an 82558 based Pro/100+? That should still work just fine, but
I haven't specifically tested it in FreeBSD.

>built and installed the new kernel. When rebooting, I specified the
>-d option to bring up the kernel debugger. I then specified:
>
>b fxp_init
>c
>
>   and the system panic'd in the bounce buffer code saying it could not
>malloc enough memory.. Ok, well, I don't need bounce buffers on my
>machine, so I removed options BOUNCE_BUFFERS from GENERIC and once
>again rebuilt & installed. Again I rebooted and specified -d and
>issued the break & continue commands.
>
>   This time, a series of "Could not malloc" messages went by, but
>none stopped the system. Finally, it got to the point where is wanted
>to mount the root filesystem. It said it could not mount the root
>filesystem and hung.

   Strange. I can't explain that, but I'd say it was indicating something
seriously bad happened. Did you remove any other options or make any other
changes to the config file? Does the new kernel boot without the "-d"?

-DG

David Greenman
Core-team/Principal Architect, The FreeBSD Project



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199711180936.BAA12735>