Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 30 May 2013 09:29:31 -0400
From:      John Baldwin <jhb@freebsd.org>
To:        freebsd-net@freebsd.org, pyunyh@gmail.com
Cc:        "Mr. Clif" <clif@eugeneweb.com>, yongari@freebsd.org
Subject:   Re: misc/179033: [dc] dc ethernet driver seems to have issues with some multiport card and mother board combinations
Message-ID:  <201305300929.31872.jhb@freebsd.org>
In-Reply-To: <20130530051214.GA1530@michelle.cdnetworks.com>
References:  <201305300113.r4U1DRGp089692@freefall.freebsd.org> <51A6CE52.20501@eugeneweb.com> <20130530051214.GA1530@michelle.cdnetworks.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thursday, May 30, 2013 1:12:14 am YongHyeon PYUN wrote:
> On Wed, May 29, 2013 at 08:58:10PM -0700, Mr. Clif wrote:
> > Sorry for the confusion Pyun,
> > 
> > I started looking at it in the context of pfsense, but they rejected my 
> > bug report which was understandable because it's an upstream issue. They 
> > suggested I resubmit it to you guys if I could reproduce it. So I booted 
> > FreeBSD and lo and behold the same two ports failed in exactly the same 
> 
> Ok, I'd like to fix that.

Hmmm, the dc(4) driver is using the I/O port BARs rather than the
memory BARs for its registers and this bug seems to be that the dc(4)
device can't properly access its registers on dc0 and dc1 on the
Atom box.  The one thing I see is that the BIOS on the Atom box assigns
addresses in the 0x1100-0x11ff range for dc0 and dc1.  Those addresses
conflict with ISA I/O aliases for the 0x100-0x1ff range.  The Dell BIOS
is more careful to avoid these ranges.

I think the fix is that I need to fix the PCI-PCI bridge to reject these
resource ranges if the ISA enable bit is set in the bridge's control
register.  However, for the time being you can change dc(4) to use the
memory BAR instead of the I/O port BAR as a workaround:

Index: if_dc.c
===================================================================
--- if_dc.c	(revision 251132)
+++ if_dc.c	(working copy)
@@ -128,7 +128,7 @@ __FBSDID("$FreeBSD$");
 #include <dev/pci/pcireg.h>
 #include <dev/pci/pcivar.h>
 
-#define	DC_USEIOSPACE
+//#define	DC_USEIOSPACE
 
 #include <dev/dc/if_dcreg.h>
 

If this fixes it then I can take this PR as a test case for handling the ISA 
enable bit in the PCI-PCI bridge code.

-- 
John Baldwin



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