Subject: Re: need advice regarding Au 1550 (MIPS) memory mapping
To: Simon Burge <simonb@wasabisystems.com>
From: Garrett D'Amore <garrett_damore@tadpole.com>
List: port-mips
Date: 10/12/2005 08:26:54
Simon,
First off thanks for getting back to me. More detail follows:
Simon Burge wrote:
>Hi Garrett,
>
>On Fri, Sep 30, 2005 at 03:36:43PM -0700, Garrett D'Amore wrote:
>
>
>
>>Andrey Petrov wrote:
>>
>>
>>
>>>On Fri, Sep 30, 2005 at 09:08:07AM -0700, Garrett D'Amore wrote:
>>>
>>>If you need 36-bit address (constant prefixes even) only for PCI access
>>>then
>>>likely you can work it out in your bus_.. functions. And that wouldn't
>>>justify
>>>larger paddr_t and new port, I understand temptation thou -)
>>>
>>>
>>>
>>Hmmm... looking at this, the problem isn't just setting up DMA, but also
>>setting up the MMU mappings. I'm pretty sure that the new port is the
>>right way to handle this.
>>
>>There is precedent -- the ARC port does much the same thing. Actually,
>>it does this apparently because of a need to map above KSEG0/1. I not
>>only need to map above that, but above 4GB entirely! I'll map the PAs
>>into KSEG2, most likey, following the example of the ARC port.
>>
>>So what I'm going to do is break out the AMD/Alchemy stuff from evbmips
>>into a new port "aumips".
>>
>>
>
>I don't think there's a need to move all the existing Alchemy eval board
>support from out of evbmips. For 64-bit paddr_t support, you can just
>add something like:
>
> options _MIPS_PADDR_T_64BIT
>
>
I thought about this, but I am concerned about this type being different
for userland bits. It seems like there is only one userland for
evbmips, and having the size of paddr_t be different for diffferent
kernels might break some things (tools, etc.)
If paddr_t is truly confined to the kernel and is not exposed to any
user applications, then it will work.
I've also considered *not* changing paddr_t and instead just localizing
the larger types to the logic that wires down the addresses. For now
I've gone the other way, but I might go back and localize it.
Certainly, if we are going to remain in evbmips then I think it is a
good idea to try to minimize changes to the system types like paddr_t.
>to evbmips/conf/std.pb1000 (ignoring for now that the file should
>probably be renamed to std.alchemy). There may be issues with building
>LKMs by doing this, but that's a bridge that can be crossed later. I'm
>also not sure that you should be wiring down TLBs like the ARC port
>does. The Au1 core has only 32 TLB entries, so it's not as if you want
>to lower the general number available any more than you have too.
>
>I'm not sure if you're targetting the AMD/Alchemy Au1550 eval board
>or an entirely new board. Ignore the next few paragraphs if you're
>targeting the DBAu1550. :-)
>
>
I'm targetting both the DBAu1550 (which is my bring up machine), and
will eventually have our own board design. I fully realize that parts
of the design will be board-specific, but for the moment everything I'm
doing is generic to the Au1550 chip itself. (And pretty much for the
Au1500 as well.)
>If the board you're targeting is an SBC or thin-client type machine,
>you'd create a new sub-port under evbmips. The current evbmips PB1000
>sub-port (again, that probably should be renamed to ALCHEMY as well)
>is specifically for the AMD/Alchemy eval boards. Maybe something like
>evbmips/tadpole.
>
>
Yes. But ideally I think a lot of the changes from our board to the
eval boards will be easily handled by a different kernel config. The
main source files should all be the same, I think.
In any case, whether our "tadpole" platform lives in a separate port or
in evbmips should not be a major concern, because I strongly doubt that
we will be putting *that* part of the code back into NetBSD. (We are
likely to have some proprietary bootup logic, as well as other bits that
are not generally applicable.)
>An example of a recently added SBC is the ARM TS7200 (under evbarm) and
>a somewhat less recent example of a thin-client is the PowerPC Explora
>(under evbppc). Some other currently separate ports (such as algor and
>sbmips) probably should be moved under evb* at some stage as they also
>fit in this category.
>
>
Okay. So it seems like the idea is that evbmips should be a catchall
for all of the various mips ports.
>If the board you're targeting is more or less a standalone computer,
>then that would probably be enough to justify a completely new port.
>However, that new port wouldn't be "aumips" but something along the
>board/model name of your port. Without knowing more about your target,
>"tadpolemips" or "autadpole" something similar, given that there are
>other sorts of tadpoles available with different CPUs.
>
>
Yes, we could do that. But my intent is not to have a full port,
because I don't think I need one. The only truly unique part of our
kernel will probably be the bits around the booting logic. (We may or
may not use yamon.)
>The ARC port you've already mentioned is an example of a "normal"
>standalone computer, and thus has its own port.
>
>
>
>>I'm also going to move the alchemy specific logic from mips/alchemy to
>>the aumips directory. Hopefully this cleanup will make it easier to see
>>what is going on.
>>
>>
>
>The way the arch directories are structured is that any CPU specific
>support is under arch/mips and any board/port specific support is under
>arch/<machine-name>.
>
>By doing this, multiple different machines can use the same CPU support.
>If, for example, a new game console called (for example) the frobnitz
>were to be based on an Alchemy CPU, it would possibly live under
>arch/frobnitz but use the shared Alchemy support from arch/mips/alchemy.
>
>
Okay, perhaps I was too hasty in moving this. I may have been confused
about the delineation between "port" and "processor". I would have
thought that a "port" would be to a processor, and that most of the
other details (IO, address maps, IRQs etc.) would be handled by
configuration files.
>
>
>>Of course, whether or not any of this gets committed to NetBSD-current
>>is unclear at this time. I hope that once I have pretty much the full
>>Au1550 (and probably also the Au1500) going, that I can get the stuff
>>committed. I'm going to try to do it in a way that localizes
>>"board-specific" changes to the configuration files, since otherwise
>>these SoCs all have pretty much the same stuff on them.
>>
>>
>
>You mentioned (I think) that USB was broken? It works on at least
>the Au1000 and Au1500, and I thought the USB controller on the Au1550
>was the same. You may have some board specific problem rather than a
>general Au1xxx USB problem there.
>
>
It doesn't work on the Au1550. It complains about a bad OHCI version.
I don't have an Au1500 to test it with. (I did fix the address and
interrupt mappings for this, because they are different on the Au1550.)
-- Garrett
>Cheers,
>Simon.
>--
>Simon Burge <simonb@wasabisystems.com>
>NetBSD Development, Support and Service: http://www.wasabisystems.com/
>
>