Port-ofppc archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: Pegasos dmesg
Tim Rightnour wrote:
On 20.01.08 06:20:17 you wrote:
>> I have disabled radeonfb and genfb now. Or do I really have to check for
>> the Radeon in genofw_pci_conf_hook?
>
> No.. what I meant is that we have to avoid configuring the radeon (or any
> VGA CLASS device for that matter) in the pci_conf_hook.
So the easiest solution would be to run pci_configure_bus() on the primary
PCI bus @0x80000000 only, and leave the secondary for "AGP-emulation" alone?
>> For example the "pciio" extent is created from 0x8000 to 0xffff, although
>> the I/O ranges assigned by OFW are all between 0x1000 and 0x1200...?
>
> The pciio are probably not the problem. It's more likely the mem ones. Let
> me try to explain, with an example.
>
> Lets take this card from my 7044, an esiop:
>
> Base address register at 0x14
> type: 32-bit nonprefetchable memory
> base: 0xc0103000, size: 0x00000100
>
> now, lets notice a few things about that. First, the base seems to contain
> the 0xc as the starting address, and then moves upwards from there.
> Second, it seems to also be inhabiting the 0xc01 range. Now look at the
> ranges the pchb can map, on this machine, it happens to be 0xc-0xd.
> Finally, look at all the other mem BARs and see what ranges they normally
> inhabit. You should be able to generate a rough estimate, of what the
> final ranges should be when you are done.
Ok. For the Pegasos2 the primary pchb maps pcimem at 0x80000000-0xbfffffff.
But all the devices are usually limited to the 0x8 range.
When looking at vmparam.h, we need 0xa and 0xb for KERNEL_SR and KERNEL2_SR,
so I would limit the mem extent to 0x80000000-0x9fffffff.
> now, lets look at ofwpci's mem extent:
>
> memext = extent_create("pcimem", sc->sc_memt.pbs_base,
> sc->sc_memt.pbs_limit,
>
> So we are saying that the ranges it will map those cards to, lies between
> pbs.base (0xc) and pbs.limit (0xd).
Then pbs_limit is not absolutely correct, because extent_create needs the
last address to include into the extent: pbs_limit - 1.
But I'm still unsure if extent_create gets an offset to the pchb base address
or the real physical addresses? Your example here lets me think the latter,
but in the prep port you create a mem extent for 0x00000000-0x0fffffff,
which is rather strange...?
> I hope that makes sense. It's a little confusing at first.
Yes, a little bit. :)
Now I changed pegasospci.c to do the following in attach():
#ifdef PCI_NETBSD_CONFIGURE
if (isprim) {
ioext = extent_create("pciio", 0x00001000, 0x00003fff,
M_DEVBUF, NULL, 0, EX_NOWAIT);
memext = extent_create("pcimem", 0x80000000, 0x9fffffff,
M_DEVBUF, NULL, 0, EX_NOWAIT);
if (pci_configure_bus(pc, ioext, memext, NULL, 0,
CACHELINESIZE))
printf("pci_configure_bus() failed\n");
extent_destroy(ioext);
extent_destroy(memext);
}
#endif /* PCI_NETBSD_CONFIGURE */
But it doesn't work much better. Refer to the attached dmesg.
It no longer maps the audio device correctly:
auvia0 at pci0 dev 12 function 5bus_space_map(0xa005acd8[0:10000], 0x1000,
0x100) failed: 35
: can't map i/o space
The viaide is not recognized as being in native mode:
viaide0 at pci0 dev 12 function 1
viaide0: VIA Technologies VT8231 ATA100 controller
viaide0: primary channel interrupting at irq 14
atabus0 at viaide0 channel 0
And it still hangs after /sbin/init.
--
_ Frank Wille (frank%phoenix.owl.de@localhost)
_ // http://sun.hasenbraten.de/~frank/
\X/ Phx @ #AmigaGer
Home |
Main Index |
Thread Index |
Old Index