Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 25 Jan 2015 20:11:36 +0000
From:      bugzilla-noreply@freebsd.org
To:        freebsd-net@FreeBSD.org
Subject:   [Bug 188897] [dc] dc ethernet driver seems to prevent the detection of other NIC chipsets
Message-ID:  <bug-188897-2472-50yg8l1xeT@https.bugs.freebsd.org/bugzilla/>
In-Reply-To: <bug-188897-2472@https.bugs.freebsd.org/bugzilla/>
References:  <bug-188897-2472@https.bugs.freebsd.org/bugzilla/>

next in thread | previous in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=188897

--- Comment #8 from John Baldwin <jhb@FreeBSD.org> ---
So I had missed that you had tried hint.agp.0.disabled=1 before and it fixed
this when I re-read this recently.  I suspect the re hint would also workaround
this.

The bug here is the same as one reported recently on net@ and I believe your
other PR is a dupe.  The problem is that when agp0 goes to allocate a random
page of memory, it allocates a resource range that conflicts with the memory
I/O windows already claimed by the PCI-PCI bridges on PCI bus 0.  We move the
window down for the first PCI-PCI bridge that re0 lives behind, but when we do,
we move it such that it overlaps the window that the second bridge the
quad-port card lives behind.  As a result, I believe that some of the memory
requests destined for re0 end up getting routed to one of the ports on the
quad-port card instead confusing the driver.  The second PCI-PCI bridge then
probes and notices it is busted, so it moves its window down.  If you were to
force the re0 device to reattach at that point it would actually work fine, but
there's currently not an easy way to do that.

The real bug is that the PCI-PCI bridge I/O windows need to be accounted for
and not conflicted with.  There are a couple of ways to fix this, most of which
aren't quite trivial:

1) Reserve the resources assigned to I/O windows just as we do for
firmware-assigned BARs before probing any devices.  This is probably what I
would prefer, but it is unfortunately a bit messy because of the ISA-enable bit
(the existing pci_pci driver has quite a bit of code to deal with this already
and it would be a shame to duplicate).  Also, the PCI bus driver doesn't
currently "know" about the resources backing an I/O window the same way it
knows about BARs.

1a) Like 1) but sidestep the ISA-enable ickiness by just applying this to
memory windows.

2) Flesh out new-bus multipass for x86.  This would cause the the PCI-PCI
bridge drivers to probe and claim any resources before drivers like agp0 got a
chance.  This is not a small amount of work however.

For now, hint.agp.0.disabled=1 should serve as a workaround for you for all of
your cases I believe until I have time to develop and test a better fix.

-- 
You are receiving this mail because:
You are the assignee for the bug.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-188897-2472-50yg8l1xeT>