Freescale MPC8641HPCN board
===========================

Created 05/24/2006 Haiying Wang
-------------------------------

1. Building U-Boot
------------------
The 86xx HPCN code base is known to compile using:
    Binutils 2.15, Gcc 3.4.3, Glibc 2.3.3

    $ make MPC8641HPCN_config
    Configuring for MPC8641HPCN board...

    $ make


2. Switch and Jumper Setting
----------------------------
Jumpers:
	J14 Pins 1-2 (near plcc32 socket)

Switches:
	SW1(1-5) = 01100	CONFIG_SYS_COREPLL	= 01000 :: CORE =   2:1
						  01100 :: CORE = 2.5:1
						  10000 :: CORE =   3:1
						  11100 :: CORE = 3.5:1
						  10100 :: CORE =   4:1
						  01110 :: CORE = 4.5:1
	SW1(6-8) = 001		CONFIG_SYS_SYSCLK	= 000	:: SYSCLK = 33MHz
						  001	:: SYSCLK = 40MHz

	SW2(1-4) = 1100		CONFIG_SYS_CCBPLL	= 0010	:: 2X
						  0100	:: 4X
						  0110	:: 6X
						  1000	:: 8X
						  1010	:: 10X
						  1100	:: 12X
						  1110	:: 14X
						  0000	:: 16X
	SW2(5-8) = 1110		CONFIG_SYS_BOOTLOC	= 1110	:: boot 16-bit localbus

	SW3(1-7) = 0011000	CONFIG_SYS_VID		= 0011000 :: VCORE = 1.2V
						  0100000 :: VCORE = 1.11V
	SW3(8)	 = 0		VCC_PLAT	= 0	:: VCC_PLAT = 1.2V
						  1	:: VCC_PLAT = 1.0V

	SW4(1-2) = 11		CONFIG_SYS_HOSTMODE	= 11	:: both prots host/root
	SW4(3-4) = 11		CONFIG_SYS_BOOTSEQ	= 11	:: no boot seq
	SW4(5-8) = 0011		CONFIG_SYS_IOPORT	= 0011	:: both PEX

	SW5(1)	 = 1		CONFIG_SYS_FLASHMAP	= 1	:: boot from flash
						  0	:: boot from PromJet
	SW5(2)	 = 1		CONFIG_SYS_FLASHBANK	= 1	:: swap upper/lower
							 halves (virtual banks)
						  0	:: normal
	SW5(3)	 = 0		CONFIG_SYS_FLASHWP	= 0	:: not protected
	SW5(4)	 = 0		CONFIG_SYS_PORTDIV	= 1	:: 2:1 for PD4
							   1:1 for PD6
	SW5(5-6) = 11		CONFIG_SYS_PIXISOPT	= 11	:: s/w determined
	SW5(7-8) = 11		CONFIG_SYS_LADOPT	= 11	:: s/w determined

	SW6(1)	 = 1		CONFIG_SYS_CPUBOOT	= 1	:: no boot holdoff
	SW6(2)	 = 1		CONFIG_SYS_BOOTADDR	= 1	:: no traslation
	SW6(3-5) = 000		CONFIG_SYS_REFCLKSEL	= 000	:: 100MHZ
	SW6(6)	 = 1		CONFIG_SYS_SERROM_ADDR= 1	::
	SW6(7)	 = 1		CONFIG_SYS_MEMDEBUG	= 1	::
	SW6(8)	 = 1		CONFIG_SYS_DDRDEBUG	= 1	::

	SW8(1)	 = 1		ACZ_SYNC	= 1	:: 48MHz on TP49
	SW8(2)	 = 1		ACB_SYNC	= 1	:: THRMTRIP disabled
	SW8(3)	 = 1		ACZ_SDOUT	= 1	:: p4 mode
	SW8(4)	 = 1		ACB_SDOUT	= 1	:: PATA freq. = 133MHz
	SW8(5)	 = 0		SUSLED		= 0	:: SouthBridge Mode
	SW8(6)	 = 0		SPREAD		= 0	:: REFCLK SSCG Disabled
	SW8(7)	 = 1		ACPWR		= 1	:: non-battery
	SW8(8)	 = 0		CONFIG_SYS_IDWP	= 0	:: write enable


3. Flash U-Boot
---------------
The flash range 0xEF800000 to 0xEFFFFFFF can be divided into 2 halves.
It is possible to use either half to boot using U-Boot.  Switch 5 bit 2
is used for this purpose.

0xEF800000 to 0xEFBFFFFF - 4MB
0xEFC00000 to 0xEFFFFFFF - 4MB
When this bit is 0, U-Boot is at 0xEFF00000.
When this bit is 1, U-Boot is at 0xEFB00000.

Use the above mentioned flash commands to program the other half, and
use switch 5, bit 2 to alternate between the halves.  Note: The booting
version of U-Boot will always be at 0xEFF00000.

To Flash U-Boot into the booting bank (0xEFC00000 - 0xEFFFFFFF):

	tftp 1000000 u-boot.bin
	protect off all
	erase eff00000 +$filesize
	cp.b 1000000 eff00000 $filesize

or use tftpflash command:
	run tftpflash

To Flash U-Boot into the alternative bank (0xEF800000 - 0xEFBFFFFF):

	tftp 1000000 u-boot.bin
	erase efb00000 +$filesize
	cp.b 1000000 efb00000 $filesize


4. Memory Map
-------------
NOTE:  RIO and PCI are mutually exclusive, so they share an address

For 32-bit U-Boot, devices are mapped so that the virtual address ==
the physical address, and the map looks liks this:

	Memory Range			Device		Size
	------------			------		----
	0x0000_0000	0x7fff_ffff	DDR		2G
	0x8000_0000	0x9fff_ffff	RIO MEM		512M
	0x8000_0000	0x9fff_ffff	PCI1/PEX1 MEM	512M
	0xa000_0000	0xbfff_ffff	PCI2/PEX2 MEM	512M
	0xffe0_0000	0xffef_ffff	CCSR		1M
	0xffdf_0000	0xffdf_7fff	PIXIS		8K
	0xffdf_8000	0xffdf_ffff	CF		8K
	0xf840_0000	0xf840_3fff	Stack space	32K
	0xffc0_0000	0xffc0_ffff	PCI1/PEX1 IO	64K
	0xffc1_0000	0xffc1_ffff	PCI2/PEX2 IO	64K
	0xef80_0000	0xefff_ffff	Flash		8M

For 36-bit-enabled U-Boot, the virtual map is the same as for 32-bit.
However, the physical map is altered to reside in 36-bit space, as follows.
Addresses are no longer mapped with VA == PA.  All accesses from
software use the VA; the PA is only used for setting up windows
and mappings. Note that with the exception of PCI MEM and RIO, the low
 32 bits are the same as the VA above; only the top 4 bits vary:

	Memory Range			Device		Size
	------------			------		----
	0x0_0000_0000	0x0_7fff_ffff	DDR		2G
	0xc_0000_0000	0xc_1fff_ffff	RIO MEM		512M
	0xc_0000_0000	0xc_1fff_ffff	PCI1/PEX1 MEM	512M
	0xc_2000_0000	0xc_3fff_ffff	PCI2/PEX2 MEM	512M
	0xf_ffe0_0000	0xf_ffef_ffff	CCSR		1M
	0xf_ffdf_0000	0xf_ffdf_7fff	PIXIS		8K
	0xf_ffdf_8000	0xf_ffdf_ffff	CF		8K
	0x0_f840_0000	0xf_f840_3fff	Stack space	32K
	0xf_ffc0_0000	0xf_ffc0_ffff	PCI1/PEX1 IO	64K
	0xf_ffc1_0000	0xf_ffc1_ffff	PCI2/PEX2 IO	64K
	0xf_ef80_0000	0xf_efff_ffff	Flash		8M

5. 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.
