u-boot/board/RPXlite_dw
Sebastien Carlier 6d8962e814 Switch from archive libraries to partial linking
Before this commit, weak symbols were not overridden by non-weak symbols
found in archive libraries when linking with recent versions of
binutils.  As stated in the System V ABI, "the link editor does not
extract archive members to resolve undefined weak symbols".

This commit changes all Makefiles to use partial linking (ld -r) instead
of creating library archives, which forces all symbols to participate in
linking, allowing non-weak symbols to override weak symbols as intended.
This approach is also used by Linux, from which the gmake function
cmd_link_o_target (defined in config.mk and used in all Makefiles) is
inspired.

The name of each former library archive is preserved except for
extensions which change from ".a" to ".o".  This commit updates
references accordingly where needed, in particular in some linker
scripts.

This commit reveals board configurations that exclude some features but
include source files that depend these disabled features in the build,
resulting in undefined symbols.  Known such cases include:
- disabling CMD_NET but not CMD_NFS;
- enabling CONFIG_OF_LIBFDT but not CONFIG_QE.

Signed-off-by: Sebastien Carlier <sebastien.carlier@gmail.com>
2010-11-17 21:02:18 +01:00
..
flash.c rename CFG_ macros to CONFIG_SYS 2008-10-18 21:54:03 +02:00
Makefile Switch from archive libraries to partial linking 2010-11-17 21:02:18 +01:00
README rename CFG_ENV_IS_IN_FLASH in CONFIG_ENV_IS_IN_FLASH 2008-09-10 22:48:04 +02:00
RPXlite_dw.c rename CFG_ macros to CONFIG_SYS 2008-10-18 21:54:03 +02:00
u-boot.lds Move arch/ppc to arch/powerpc 2010-04-21 23:42:38 +02:00
u-boot.lds.debug Move arch/ppc to arch/powerpc 2010-04-21 23:42:38 +02:00

After following the step of Yoo. Jonghoon and Wolfgang Denk,
I ported u-boot on RPXlite DW version board: RPXlite_DW or LITE_DW.

There are at least three differences between the Yoo-ported RPXlite and the RPXlite_DW.

Board(in U-Boot)	version(in EmbeddedPlanet)	CPU	SDRAM	FLASH
RPXlite				RPXlite CW		850	16MB	4MB
RPXlite_DW		RPXlite DW(EP 823 H1 DW)	823e	64MB	16MB

This fireware is specially coded for EmbeddedPlanet Co. Software Development
Platform(RPXlite DW),which has a NEC NL6448BC20-08 LCD panel.

It has the following three features:

1. 64MHz/48MHz system frequence setting options.
The default setting is 48MHz.To get a 64MHz u-boot,just add
'64' in make command,like

make distclean
make RPXlite_DW_64_config
make all

2. CONFIG_ENV_IS_IN_FLASH/CONFIG_ENV_IS_IN_NVRAM

The default environment parameter is stored in FLASH because it is a common choice for
environment parameter.So I make NVRAM as backup parameter storeage.The reason why I
didn't use EEPROM for ENV is that PlanetCore V2.0 use EEPROM as environment parameter
home.Because of the possibility of using two firewares on this board,I didn't
'disturb' EEPROM.To get NVRAM support,you may use the following build command:

make distclean
make RPXlite_DW_NVRAM_config
make all

3. LCD panel support

To support the Platform better,I added LCD panel(NL6448BC20-08) function.
For the convenience of debug, CONFIG_PERBOOT was supported. So you just
perss ENTER if you want to get a serial console in boot downcounting.
Then you can switch to LCD and serial console freely just typing
'run lcd' or 'run ser'. They are only vaild when CONFIG_LCD was enabled.

To get a LCD support u-boot,you can do the following:

make distclean
make RPXlite_DW_LCD_config
make all

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The basic make commands could be:

make RPXlite_DW_config
make RPXlite_DW_64_config
make RPXlite_DW_LCD_config
make RPXlite_DW_NVRAM_config

BTW,you can combine the above features together and get a workable u-boot to meet your need.
For example,to get a 64MHZ && ENV_IS_IN_FLASH && LCD panel support u-boot,you can type:

make RPXlite_DW_NVRAM_64_LCD_config
make all

So other combining make commands could be:

make RPXlite_DW_NVRAM_64_config
make RPXlite_DW_NVRAM_LCD_config
make RPXlite_DW_64_LCD_config

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The boot process by "make RPXlite_DW_config" could be:

U-Boot 1.1.2 (Aug 29 2004 - 15:11:27)

CPU:   PPC823EZTnnB2 at 48 MHz: 16 kB I-Cache 8 kB D-Cache
Board: RPXlite_DW
DRAM:  64 MB
FLASH: 16 MB
*** Warning - bad CRC, using default environment

In:    serial
Out:   serial
Err:   serial
Net:   SCC ETHERNET
u-boot>

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

A word on the U-Boot enviroment variable setting and usage :

In the beginning, you could just need very simple defult environment variable setting,
like[include/configs/RPXlite.h] :

#define CONFIG_BOOTCOMMAND                                                      \
	"bootp; "                                                               \
	"setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath} "     \
	"ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off; "   \
	"bootm"

This is enough for kernel NFS test. But as debug process goes on, you would expect
to save some time on environment variable setting and u-boot/kernel updating.
So the default environment variable setting would become more complicated. Just like
the one I did in include/configs/RPXlite_DW.h.

Two u-boot commands, ku and uu, should be careful to use. They were designed to update
kernel and u-boot image file respectively. You must tftp your image to default address
'100000' and then use them correctly. Yeah, you can create your own command to do this
job. :-) The example u-boot image updating process could be :

u-boot>t 100000 RPXlite_DW_LCD.bin
Using SCC ETHERNET device
TFTP from server 172.16.115.6; our IP address is 172.16.115.7
Filename 'RPXlite_DW_LCD.bin'.
Load address: 0x100000
Loading: #############################
done
Bytes transferred = 144700 (2353c hex)
u-boot>run uu
Un-Protect Flash Sectors 0-4 in Bank # 1
Erase Flash Sectors 0-4 in Bank # 1
.... done
Copy to Flash... done
ff000000: 27051956 552d426f 6f742031 2e312e32    '..VU-Boot 1.1.2
ff000010: 20284175 67203239 20323030 34202d20     (Aug 29 2004 -
ff000020: 31353a32 303a3238 29000000 00000000    15:20:28).......
ff000030: 00000000 00000000 00000000 00000000    ................
ff000040: 00000000 00000000 00000000 00000000    ................
ff000050: 00000000 00000000 00000000 00000000    ................
ff000060: 00000000 00000000 00000000 00000000    ................
ff000070: 00000000 00000000 00000000 00000000    ................
ff000080: 00000000 00000000 00000000 00000000    ................
ff000090: 00000000 00000000 00000000 00000000    ................
ff0000a0: 00000000 00000000 00000000 00000000    ................
ff0000b0: 00000000 00000000 00000000 00000000    ................
ff0000c0: 00000000 00000000 00000000 00000000    ................
ff0000d0: 00000000 00000000 00000000 00000000    ................
ff0000e0: 00000000 00000000 00000000 00000000    ................
ff0000f0: 00000000 00000000 00000000 00000000    ................
u-boot updating finished
u-boot>

Also for environment updating, 'run eu' could let you erase OLD default environment variable
and then use the working u-boot environment setting.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Finally, if you want to keep the serial port to possible debug on spot for deployment, you
just need to enable 'DEPLOYMENT' in RPXlite_DW.h as 'DEBUG' does. Only the special string
defined by CONFIG_AUTOBOOT_STOP_STR like 'st' can stop the autoboot.

I'd like to extend my heartfelt gratitute to kind people for helping me work it out.
I would particually thank Wolfgang Denk for his nice help.

Enjoy,

Sam Song, samsongshu@yahoo.com.cn
Institute of Electrical Machinery and Controls
Shanghai University

Oct. 11, 2004