Acer Aspire 5672 and FreeBSD 6.2-beta1
John Baldwin
jhb at freebsd.org
Tue Oct 10 06:22:18 PDT 2006
On Tuesday 10 October 2006 05:52, Bruno Ducrot wrote:
> On Mon, Oct 09, 2006 at 04:11:46PM -0400, John Baldwin wrote:
> > On Saturday 07 October 2006 15:03, Bruno Ducrot wrote:
> > > On Sat, Oct 07, 2006 at 06:46:42PM +0200, Torfinn Ingolfsen wrote:
> > > > On Sat, 07 Oct 2006 17:01:03 +0200
> > > > Bruno Ducrot <ducrot at poupinou.org> wrote:
> > > >
> > > > > Thanks. The device do not have a BAR when acpi is enabled. We
> > > > > therefore have to enable one. I think just by poking aroud some pci
> > > > > config registers onto the pci bridge will do the trick. Your
> > > >
> > > > Ok. I'm wondering; will output from lspci under Linux help you get at
> > > > the info more easily? I have Xubuntu installed on a partition on this
> > > > machine, so it is easy for me to do that, if you wish.
> > >
> > > Well, I don't know if that will be helpful. Humm, maybe a dmesg?
> > >
> > > > > Looking at this datasheet I think we have to look more carrefully to
> > > > > register 0x04 (halfword), 0x20h, 0x24, 0x28 and 0x2c.
> > > > > Looking them both with and without acpi and comparing them will allows
> > > > > us to know hopefully how to enable the first BAR to the correct adress
> > > > > for your ethernet card. In short, if you can first boot without ACPI,
> > > > > then perform
> > > > > pciconf -r -h pci0:28:2 4
> > > > > pciconf -r pci0:28:2 0x20
> > > > > pciconf -r pci0:28:2 0x24
> > > > > pciconf -r pci0:28:2 0x28
> > > > > pciconf -r pci0:28:2 0x2c
> > > > >
> > > > > Also do a dump in order to check if something else might be needed:
> > > > > pciconf -r -b pci0:28:2 0:256
> > > > >
> > > > > Boot with ACPI enabled:
> > > > > do the same pciconf stuff, then send me the output.
> > > >
> > > > Done. I've sent you the files via email, and also uploaded them to the
> > > > web page, in case anyone else wants them for some reason. Webpage:
> > > > http://tingox.googlepages.com/aceraspireas5672andfreebsd
> > > >
> > > > > After that, we should be able to correct your problem, either by
> > > > > 1- hacking the DSDT,
> > > > > OR
> > > > > 2- hacking pcib.c.
> > > > > (at your option).
> > > >
> > > > I think hacking the DSDT is the more politically correct option, but
> > > > either one will work for me.
> > >
> > > Ok. First remove device bge in your kernel config. For example create a
> > > config file with:
> > >
> > > >>> BEGIN
> > > include GENERIC
> > > ident MYKERNEL (or what you like)
> > > nodevice bge
> > > <<< END
> > >
> > > After rebuilding and installing your kernel,
> > > you can do something like that:
> > >
> > > pciconf -w pci0:28:2 0xd8 0x04110008
> > >
> > > pciconf -w -h pci0:28:2 0x58 0x0000
> > >
> > > pciconf -w pci0:28:2 0x24 0x0001fff1
> > > pciconf -w pci0:28:2 0x20 0xc830c830
> > >
> > > pciconf -w -h pci0:28:2 0x04 0x0007
> > >
> > >
> > > After that, you should be able to kldload if_bge and report back if
> > > this work. In that case I will modify the DSDT so that you won't to
> > > worry about all of those pciconf stuff.
> >
> > You really shouldn't change BAR registers directly. First of all, the PCI
> > bus driver already knows how to allocate resources for a BAR if it is set
> > to 0 and when doing so will make sure to not allocate an address that
> > conflicts with another device. Secondly, a lot of PCI config registers are
> > cached in the ivars by the PCI bus, so it may not even read the values you
> > write into it (though writing those values will turn on the address decode
> > for the device, and if another device is using that address things will go
> > downhill quick).
>
> You are indeed right. The issue therefore seems to be, when ACPI is enabled,
> then the PCI bus driver doesn't set up correctly a BAR.
> FYI the bridge is one of the four PCIe embedded to an ICH-7.
The PCI bus driver does the same thing regardless of ACPI. When the NIC driver
does its bus_alloc_resource() the PCI bus should then go allocate resources for
it. At this point you will probably want to get a boot -v so you can see what
the bus prints out when it first looks at the device first. If the BAR is
listed (but with a base of 0), then you will want to look at the stuff in
pci_alloc_resource().
--
John Baldwin
More information about the freebsd-mobile
mailing list