Overview
--------
The MPC8544DS system is similar to the 85xx CDS systems such
as the MPC8548CDS due to the similar E500 core.  However, it
is placed on the same board as the 8641 HPCN system.


Flash Banks
-----------
Like the 85xx CDS systems, the 8544 DS board has two flash banks.
They are both present on boot, but there locations can be swapped
using the dip-switch SW10, bit 2.

However, unlike the CDS systems, but similar to the 8641 HPCN
board, a runtime reset through the FPGA can also affect a swap
on the flash bank mappings for the next reset cycle.

Irrespective of the switch SW10[2], booting is always from the
boot bank at 0xfff8_0000.


Memory Map
----------

0xff80_0000 - 0xffbf_ffff	Alternate bank		4MB
0xffc0_0000 - 0xffff_ffff	Boot bank		4MB

0xffb8_0000			Alternate image start	512KB
0xfff8_0000			Boot image start	512KB


Flashing Images
---------------

For example, to place a new image in the alternate flash bank
and then reset with that new image temporarily, use this:

    tftp 1000000 u-boot.bin.8544ds
    erase ffb80000 ffbfffff
    cp.b 1000000 ffb80000 80000
    pixis_reset altbank


To overwrite the image in the boot flash bank:

    tftp 1000000 u-boot.bin.8544ds
    protect off all
    erase fff80000 ffffffff
    cp.b 1000000 fff80000 80000

Other example U-Boot image and flash manipulations examples
can be found in the README.mpc85xxcds file as well.


The pixis_reset command
-----------------------
A new command, "pixis_reset", is introduced to reset mpc8641hpcn board
using the FPGA sequencer.  When the board restarts, it has the option
of using either the current or alternate flash bank as the boot
image, with or without the watchdog timer enabled, and finally with
or without frequency changes.

Usage is;

	pixis_reset
	pixis_reset altbank
	pixis_reset altbank wd
	pixis_reset altbank cf <SYSCLK freq> <COREPLL ratio> <MPXPLL ratio>
	pixis_reset cf <SYSCLK freq> <COREPLL ratio> <MPXPLL ratio>

Examples;

	/* reset to current bank, like "reset" command */
	pixis_reset

	/* reset board but use the to alternate flash bank */
	pixis_reset altbank

	/* reset board, use alternate flash bank with watchdog timer enabled*/
	pixis_reset altbank wd

	/* reset board to alternate bank with frequency changed.
	 * 40 is SYSCLK, 2.5 is COREPLL ratio, 10 is MPXPLL ratio
	 */
	pixis-reset altbank cf 40 2.5 10

Valid clock choices are in the 8641 Reference Manuals.


Using the Device Tree Source File
---------------------------------
To create the DTB (Device Tree Binary) image file,
use a command similar to this:

    dtc -b 0 -f -I dts -O dtb mpc8544ds.dts > mpc8544ds.dtb

Likely, that .dts file will come from here;

    linux-2.6/arch/powerpc/boot/dts/mpc8544ds.dts

After placing the DTB file in your TFTP disk area,
you can download that dtb file using a command like:

    tftp 900000 mpc8544ds.dtb

Burn it to flash if you want.


Booting Linux
-------------

Place a linux uImage in the TFTP disk area too.

    tftp 1000000 uImage.8544
    tftp 900000 mpc8544ds.dtb
    bootm 1000000 - 900000

Watch your ethact, netdev and bootargs U-Boot environment variables.
You may want to do something like this too:

    setenv ethact eTSEC3
    setenv netdev eth1
