tech-x11 archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: range of resource of PCI memory for PowerPC
Hi! Michael,
From: Michael <macallan%netbsd.org@localhost>
Date: Mon, 15 Dec 2008 11:58:42 -0500
> On Dec 15, 2008, at 11:12 AM, KIYOHARA Takashi wrote:
>
> > From: Michael <macallan%netbsd.org@localhost>
> > Date: Sun, 14 Dec 2008 14:40:28 -0500
> >
> >> On Dec 14, 2008, at 1:33 PM, KIYOHARA Takashi wrote:
> >>
> >>> I know, bebox and prep (and ibmnws?) has resource problem of PCI
> >>> memory.
> >>> We extent memory region at start 0x00000000. However
> >>> xf86PciBusAccWindowsFromOS() add to resource-list at 0x80000000.
> >>
> >> That's the Xserver trying to play operating system and configure PCI
> >> devices. This list is largely bogus anyway - just set your entries to
> >> something big enough to cover any PCI memory or IO address legal on
> >> your hardware.
> >> The start at 0x80000000 is more or less macppc-specific - all host
> >> bridges Apple ever used in PowerPC boxes have a rimilar address space
> >> layout - the lower 2GB for RAM and the upper 2GB for PCI space,
> >> firmware and various hardware registers. They even did that on the G5
> >> ( with more RAM above 4GB ). Many IBM and Motorola hostbridges use a
> >> very similar layout ( in fact Apple used Motorola's MPC106 and IBM's
> >> CPC9x5 host bridges in some Macs, either can be found in prep or
> >> ofppc
> >> machines as well )
> >>
> >>> Shall we define PCI_MAGIC_MEM_RANGE_{START,END} in param.h, just
> >>> like
> >>> PCI_MAGIC_IO_RANGE?
> >>
> >> I don't see a need for that as long as you can
> >> mmap(some_pci_bus_address) via ttyE0 you should be fine.
> >>
> >
> >
> > hmm?
> > Then, should I make xf86PciBusAccWindowsFromOS() for __ powerpc__?
> >
> >
> > #if defined(__powerpc__)
> >
> > xf86PciBusAccWindowsFromOS(void)
> > {
> > :
> >
> > RANGE(range, 0x00000000, 0xffffffff, ResExcMemBlock);
> > ret = xf86AddResToList(ret, &range, -1);
> >
> > :
> > }
>
> 0x80000000 - 0xffffffff is appropriate for macppc and probably most
> prep and ofppc boxes. I'd prefer if you put them into a separate #else
> if defined(...) branch. Not that it makes much of a difference since
> we don't expect the Xserver to configure cards ( even if OF doesn't
> know a card it will still configure its BARs ) but I'd like to keep
> the entry for macppc to avoid future confusion and as a (very) basic
> sanity check.
# Also prep (and ibmnws) set pcimem as extent region 0x00000000.
# you can look sys/arch/prep/prep/mainbus.c:mainbus_attach().
> > When the problem of this space is not solved, we see the following
> > message.
> > And, this address will fixup forcedly.
> >
> > (WW) ****INVALID MEM ALLOCATION**** b: 0x8000000 e: 0xbffffff
> > correcting^G
>
> Ah, so PCI allocations below 2GB are legal on bebox. In that case you
> should definitely adapt xf86PciBusAccWindowsFromOS() to whatever range
> is valid on your hardware.
> I'm not sure it makes much sense to keep entries for prep, ofppc and
> bebox separate since prep and ofppc can have all kinds of funky PCI
> bridges and there's probably no fixed range for all models.
#if defined(__powerpc__)
xf86PciBusAccWindowsFromOS(void)
{
:
RANGE(range, PCI_MAGIC_MEM_RANGE_START, PCI_MAGIC_MEM_RANGE_END,
ResExcMemBlock);
ret = xf86AddResToList(ret, &range, -1);
:
}
>
> > And, we fail in mmap() to a wrong address...
>
> Do you mmap() through /dev/ttyE0 like pretty much all non-x86 ports?
> All framebuffer console drivers I wrote should accept PCI bus
> addresses as offsets. I'm not 100% sure about vga at pci though, it
> might need some work.
hmm...
For my bebox case, original pcimem address is 0x08000000. The fixup-ed
address is 0x80000000. We can obtain original address perhaps, if
'0x08000000 + OUR_MAGIC_NUMBER'. (i.e. 0x88000000)
Also, can we obtain address, if VGA-card has two or more memory-BARs?
I think that it is important not to allow fixup.
Thanks,
--
kiyohara
Home |
Main Index |
Thread Index |
Old Index