|  | The Korat board has two NOR flashes, FLASH0 and FLASH1, which are connected to | 
|  | chip select 0 and 1, respectively.  FLASH0 contains 16 MiB, and is mapped to | 
|  | addresses 0xFF000000 - 0xFFFFFFFF as U-Boot Flash Bank #2.  FLASH1 contains | 
|  | from 16 to 128 MiB, and is mapped to 0xF?000000 - 0xF7FFFFFF as U-Boot Flash | 
|  | Bank #1 (with the starting address depending on the flash size detected at | 
|  | runtime).  The write-enable pin on FLASH0 is disabled, so the contents of FLASH0 | 
|  | cannot be modified in the field.  This also prevents FLASH0 from executing | 
|  | commands to return chip information, so its configuration is hard-coded in | 
|  | U-Boot. | 
|  |  | 
|  | There are two versions of U-Boot for Korat: "permanent" and "upgradable".  The | 
|  | permanent U-Boot is pre-programmed at the top of FLASH0, e.g., at addresses | 
|  | 0xFFFA0000 - 0xFFFFFFFF for the current 384 KiB size.  The upgradable U-Boot is | 
|  | located 256 KiB from the top of FLASH1, e.g. at addresses 0xF7F6000 - 0xF7FC0000 | 
|  | for the current 384 KiB size.  FLASH1 addresses 0xF7FE0000 - 0xF7FF0000 are | 
|  | used for the U-Boot environmental parameters, and addresses 0xF7FC0000 - | 
|  | 0xF7FDFFFF are used for the redundant copy of the parameters.  These locations | 
|  | are used by both versions of U-Boot. | 
|  |  | 
|  | On booting, the permanent U-Boot in FLASH0 begins executing.  After performing | 
|  | minimal setup, it monitors the state of the board's Reset switch (GPIO47).  If | 
|  | the switch is sensed as open before a timeout period, then U-Boot branches to | 
|  | address 0xF7FBFFFC.  This causes the upgradable U-Boot to execute from the | 
|  | beginning.  If the switch remains closed thoughout the timeout period, the | 
|  | permanent U-Boot activates the on-board buzzer until the switch is sensed as | 
|  | opened.  It then continues to execute without branching to FLASH1.  The effect | 
|  | of this is that normally the Korat board boots its upgradable U-Boot, but, if | 
|  | this has been corrupted, the user can boot the permanent U-Boot, which can then | 
|  | be used to erase and reload FLASH1 as needed. | 
|  |  | 
|  | Note that it is not necessary for the permanent U-Boot to have all the latest | 
|  | features, but only that it have sufficient functionality (working "tftp", | 
|  | "erase", "cp.b", etc.) to repair FLASH1.  Also, the permanent U-Boot makes no | 
|  | assumptions about the size of FLASH1 or the size of the upgradable U-Boot: it is | 
|  | sufficient that the upgradable U-Boot can be started by a branch to 0xF7FBFFFC. | 
|  |  | 
|  | The build sequence: | 
|  |  | 
|  | make korat_config | 
|  | make all perm=1 | 
|  |  | 
|  | builds the permanent U-Boot by selecting loader file "u-boot.lds" and defining | 
|  | preprocessor symbol "CONFIG_KORAT_PERMANENT".  The default build: | 
|  |  | 
|  | make korat_config | 
|  | make all | 
|  |  | 
|  | creates the upgradable U-Boot but selecting loader file "u-boot-F7FC.lds" and | 
|  | leaving preprocessor symbol "CONFIG_KORAT_PERMANENT" undefined. | 
|  |  | 
|  | 2008-02-22, Larry Johnson <lrj@acm.org> | 
|  |  | 
|  |  | 
|  | The CompactFlash(R) controller on the Korat board provides a hi-speed USB | 
|  | interface.  This may be connected to either a dedicated port on the on-board | 
|  | USB controller, or to a USB port on the PowerPC 440EPx processor.  The U-Boot | 
|  | environment variable "korat_usbcf" can be used to specify which of these two | 
|  | USB host ports is used for CompactFlash.  The valid setting for the variable are | 
|  | the strings "pci" and "ppc".  If the variable defined and set to "ppc", then the | 
|  | PowerPC USB port is used.  In all other cases the on-board USB controller is | 
|  | used, but if "korat_usbcf" is defined but is set to a string other than the two | 
|  | valid options, a warning is also issued. | 
|  |  | 
|  | 2009-01-28, Larry Johnson <lrj@acm.org> |