"Kevin D. Kissell" wrote:
>
> > > > > Since the kernel cache attribute is never initialized before
> > > > > ld_mmu_{whatever} is invoked, and since that Config field
> > > > > does not have a well-defined reset state on many MIPS
> > > > > CPUs, it would appear that we are in effect trusting the
> > > > > bootloader to have done something reasonable like
> > > > > set kseg0 to be non-cachable or write-through, either
> > > > > of which would be safe for the current code.
> > > >
> > > > I think you just proposed a fix: check current config register
> > > > when we turn off cache. Thanks. :-)
> > >
> > > That's a heuristic at best. If the config register comes up random,
> > > it can appear to be sane even though the cache is in fact uninitialized.
> > >
> >
> > For any practical reasons, we can assume there is a loader for Linux,
> > and we can assume loader does not run with a random config register.
>
> That's a position that would sound reasonable to someone working
> on Linux for legacy DEC/SGI systems, but not one that I would
> expect to satisfy someone working on embedded Linux. It would
> need to be governed by a config option, but I would think
> that ultimately we need to have a Linux that can be ROMed
> and branched to directly from the reset vector. Why force
> everyone doing an embedded MIPS/Linux widget to re-invent
> the wheel?
>
The currenct common practice in embedded world is:
1. during development stage, using a loader to download kernel to target.
2. during productization stage, use a separate rom loader to cold-start the
board and load the kernel from flash to RAM, assuming the kernel is on flash.
There are a couple of other vairants, but generally you do have a first stage
loader that will set up the environment right for Linux kernel.
Cold-starting a board and loading a kernel is highly board and system
specific. Does not seem to make sense to get included in the kernel
structure.
Jun
|