Help booting MBX through bootd

Wolfgang Denk wd at denx.muc.de
Sat Jun 12 02:44:25 EST 1999


Hi,

in message <376110CB.8CE16CAF at switchboard.ericsson.se>
Magnus Damm wrote:
> 
> The kernel has no problems. But glibc 2.2.1 has.
> 
> The fact that the cache magic in sysdeps/powerpc/memset.S in glibc
> will make the dynamic linker crash in it's early startup phase is
> quite a big problem... ;)
> Also sysdeps/powerpc/dl-machine.c makes an assumption about the cache
> line size, but that seems to be less fatal.

Grrrghh... I see.

But the cache line size differs even for different models of the  8xx
family!

> If compatible binaries is what you want then this has to be dealt
> with. The code in sysdeps/powerpc/dl-machine.c is easy enough to
> fix and not particularly performance critical. But the non-embedded
> people will probably not be happy if we almost half the speed of
> memory clearing, so here we'd need some sort of runtime check of the
> line size. Probably by checking /proc/cpuinfo the first time and cache
> the result.

We will have to do this, or otherwise drown in a flood  of  different
versions  of  libraries  and  binaries.

It's impossible to provide a whole  set  of  libraries  and  all  the
binaries linked against the right versions of these libraries for the
821, 823, 850, 860, 8240, 8260, ....

> > * There are multiple versions of the same functions, for instance
> >   udelay (for the kernel as assembler inline in include/asm-ppc/delay.h,
> >   for the boot code in arch/ppc/mbxboot/head.S).
> 
> Isn't that because the mbxboot runs before the real kernel has booted?
> It needs it own set of functions. 

Yes, but they could use the same source? Or am I missing something?

> > *  The  whole  file  arch/ppc/mbxboot/head.S  is  a  complex  mix  of
> >   #ifdef'ed  and  #ifndef'ed  code  -  trying to add yet another bard
...
> It sure is a mess. 
> Maybe is should be a good idea to create seperate board files?

Seems some people are doing this already, so I guess the answer is YES.

> >   console speed than the default 9600 bps? And how do  you  find  all
> >   those places? Are you sure you didn't forget a few places where the
> >   bus clock is hard coded?
> 
> Or where IMMR is hardcoded in head.S ? =)
> 
> That is a big problem.

Right.

> My opinion is that one include file should contain all neccesary
> settings.

I definitely support this idea.

> why not have a ENET_ENABLE_TENA() which is defined in your board file?
> And uart.c shouldn't mess with all pins, only pins that are used. 

Right. This could even be done for  some  board  specific  functions.
Instead  of putting m8xx_gorom() in a common source file and wrapping
it into a nightmare  iof  #ifdef's  this  should  go  to  some  board
specific source file (or header file, maybe).

> >   Another are of problems is port pin assignement  and  CPM  configu-
> >   ration  in  general. Which SCC is used for your ethernet interface?
> >   Which BRG's does it use? Is your console on a SMC or a  SCC?  Which
> >   port pins have to be used? Which clocks? Etc. etc. - right now this
> >   configuration  is  distributed  to  many  places in the code, which
> >   makes changes in the configuration difficult.
> 
> You are absolute right about that.
> I think that could be solved in the board include file.
> It would also be great with some kind of resource allocation code.
> But we don't want PlugNPray, do we? 

No, we don't.

But with a little generalization in the code many things could become
a bit simpler. For instance, in LynxOS they use a concept of "logical
devices" which allows that for instance device  consiguration  become
as simple as:

Serial driver:

	/* /dev/com1: is on  SMC1,  uses  BRG1,  speed  115200 bps */
	UART(tty_8xx_info1, DEV_SMC1, CPM_CLOCK_BRG1, B115200);

or Ethernet:

	  DEV_SCC1,
	  32,                   /* Number of BDs in the Rx BD table */
	  32,                   /* Number of BDs in the Tx BD table */
	  CPM_CLOCK_CLK1,       /* PA7 = CLK1 used for Rx Clock     */
	  CPM_CLOCK_CLK3,       /* PA5 = CLK3 used for Tx Clock     */

they  use  generalized  functions  like  `cpm_uart_install()',  which
checks  if the "logical device" is a DEV_SMCx or a DEV_SCCx, and then
access the appropriate data structures. There _is_ some logic in  the
bits used for all the CPM devices; instead of building individual bit
masks for each single device we can use a _generic_ pattern that just
needs  to  be  shifted  to the right position depending on the device
being used.

I don't want to say that I find the LynxOS code to be the best of all
possible solutions - but at least it's easier to understand than what
we have right now in Linux. And *much* simpler to port.

> >   I don't think I'm the first who  notices  this  problem.  Is  there
> >   already any work being done in this direction?
> 
> I would like a word from Dan.
> Lead us sheep in the right direction. =)

Yes, please!

> Could people out there tell the rest of us what you're doing?

I'm trying to provide some kind of "Demo CD" for a board manufacturer
to be shipped with the hardware (of course for free and with source),
allowing his customers to  start  development  with  a  free  (Linux)
environment instead of spending a lot of $$ for commercial tools.

All these boards have >32 MB of RAM so a native environment with  NFS
mounted  root  filesystem  is quite easy. But I definitely don't have
the resources to build a  complete  LinuxPPC  release  with  all  the
libraries and binaries for the whole mix of 8xx CPU's.

SO I have *great* interest in a simplified handling of board specific
configuration parameters like

- clock rate
- address mapping (RAM, FLASH, IMMR, ...)
- devices (serial/console ports, ethernet, ...): which CPM channel,
  BRG, Clock routing, number of BD's, baud rate, ...

> It doesn't feel good when you've implemented something and
> you find out that someone else has done _exactly_ the same thing.

Exactly what I'm feeling.

And of course I'm willing to provide feedback about  what  I  changed
for  my  port or where I see things that could/should be changed. But
right now it was for instance much easier  to  me  to  write  my  own
version  of mbxboot/head.S than to add yet another level of #ifdef'ed
complexity.

> Communicate.

:-)

Wolfgang

-- 
Phone: (+49)-8142-4596-87  Fax: -88  Home: -86  Email: wd at denx.muc.de
There are three things I always forget. Names, faces -  the  third  I
can't remember.                                         - Italo Svevo

[[ This message was sent via the linuxppc-dev mailing list.  Replies are ]]
[[ not  forced  back  to the list, so be sure to Cc linuxppc-dev if your ]]
[[ reply is of general interest. Please check http://lists.linuxppc.org/ ]]
[[ and http://www.linuxppc.org/ for useful information before posting.   ]]





More information about the Linuxppc-dev mailing list