Running RAM RedBoot to Move Flash from Outbound Direct Addressing Window Application Note January 2002 Document Number: 273660-001
Information in this document is provided in connection with Intel products. No license, express or implied, by estoppel or otherwise, to any intellectual property rights is granted by this document. Except as provided in Intel's Terms and Conditions of Sale for such products, Intel assumes no liability whatsoever, and Intel disclaims any express or implied warranty, relating to sale and/or use of Intel products including liability or warranties relating to fitness for a particular purpose, merchantability, or infringement of any patent, copyright or other intellectual property right. Intel products are not intended for use in medical, life saving, or life sustaining applications. Intel may make changes to specifications and product descriptions at any time, without notice. Designers must not rely on the absence or characteristics of any features or instructions marked reserved or undefined. Intel reserves these for future definition and shall have no responsibility whatsoever for conflicts or incompatibilities arising from future changes to them. Contact your local Intel sales office or your distributor to obtain the latest specifications and before placing your product order. Copies of documents which have an ordering number and are referenced in this document, or other Intel literature may be obtained by calling 1-800-548-4725 or by visiting Intel's website at http://www.intel.com. Copyright Intel Corporation, 2002 AlertVIEW, i960, AnyPoint, AppChoice, BoardWatch, BunnyPeople, CablePort, Celeron, Chips, Commerce Cart, CT Connect, CT Media, Dialogic, DM3, EtherExpress, ETOX, FlashFile, GatherRound, i386, i486, icat, icomp, Insight960, InstantIP, Intel, Intel logo, Intel386, Intel486, Intel740, IntelDX2, IntelDX4, IntelSX2, Intel ChatPad, Intel Create&Share, Intel Dot.Station, Intel GigaBlade, Intel InBusiness, Intel Inside, Intel Inside logo, Intel NetBurst, Intel NetStructure, Intel Play, Intel Play logo, Intel Pocket Concert, Intel SingleDriver, Intel SpeedStep, Intel StrataFlash, Intel TeamStation, Intel WebOutfitter, Intel Xeon, Intel XScale, Itanium, JobAnalyst, LANDesk, LanRover, MCS, MMX, MMX logo, NetPort, NetportExpress, Optimizer logo, OverDrive, Paragon, PC Dads, PC Parents, Pentium, Pentium II Xeon, Pentium III Xeon, Performance at Your Command, ProShare, RemoteExpress, Screamline, Shiva, SmartDie, Solutions960, Sound Mark, StorageExpress, The Computer Inside, The Journey Inside, This Way In, TokenExpress, Trillium, Vivonic, and VTune are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States and other countries. *Other names and brands may be claimed as the property of others. 2 Application Note
Contents Contents 1.0 Introduction...5 1.1 Issue Statement...5 2.0 Solution...5 3.0...6 4.0 Conclusion...15 5.0 Related Documents...15 Figures 1 Sequential Changes to Address Space...6 Tables No Tables Used At This Time Application Note 3
Contents Revision History Date Revision Description January 2002 001 4 Application Note
Introduction 1.0 Introduction Intel Corporation has had several inquiries into how to move Flash Bank 1, so that the ATU Outbound Direct Addressing Window can be used on the Intel 80310 I/O Processor Chipset with Intel XScale microarchitecture 1 (80310). This application note offers a solution using the RedHat* RedBoot* monitor. The technique presented here can be generalized to resolve other configuration conflicts. Further information on RedBoot can be found at: http://www.redhat.com/software/tools/gnupro/intel_xscale.html and further Intel XScale IOP information can be found at: http://developer.intel.com/ 1.1 Issue Statement The Intel 80200 I/O Processor based on Intel XScale microarchitecture (80200) requires that the initialization code be located at address 0x0000 0000. This initialization code resides in Flash Bank 1 which is 8 MB and overlaps the ATU Outbound Direct Addressing Window. After reset, this window is disabled so that there is no address conflict. When the Flash Bank stays where it is in the address space, the window cannot be used. 2.0 Solution To use the ATU Outbound Direct Addressing Window, Flash Bank 1 must be moved. Since the initialization code is only required at power up and reset, the Flash Bank can be moved within the address space by changing the base address register. When the monitor, in this case RedBoot, is also resident to the Flash, then it must be considered before moving the Flash. There are two ways to accomplish this: One is to have the boot board support package (BSP) relocate the Flash Base Address. The other is to run a version of RedBoot that executes out of SDRAM. The first solution requires a modified version of RedBoot which is not currently available, but the second solution is available now. The RAM version of RedBoot depends on the boot portion of the ROM version BSP to initialize SDRAM. Once SDRAM is initialized, the RAM version of RedBoot can be loaded and started. Because this version of RedBoot does not depend on Flash, the Flash Base Address can be relocated by the application code. Furthermore, the RAM version of RedBoot can be loaded into Flash and automatically loaded into SDRAM by the ROM version, when the board is first booted. 1. ARM* architecture compliant. Application Note 5
3.0 The following steps are described in detail in chapter 4 and chapter 5 of the RedBoot User s Guide. 1. The ROM version of RedBoot must reside at address 0x0000 0000. When it is not loaded in the Flash, then the Flash Recovery Utility (FRU) must be used to initially write to the Flash. The FRU manual and software are located at http://developer.intel.com/design/iio/docs/ dvtl_iq80310.htm. Use the prebuilt file redboot.bin (the binary version is required by FRU) located at C:\redhat\redboot-xscale-010413\redboot-bin\cyclone-rom\install\bin (The path assumes a default installation of GNUPro.). Once the ROM version of RedBoot is in the Flash, reset the platform to launch RedBoot. Figure 1 illustrates the sequential changes to the address space. The base address of RAM RedBoot in the Flash can vary depending on locked address blocks. Figure 1. Sequential Changes to Address Space At Power Up RedBoot* in RAM RAM RedBoot Copied to Flash A006 0000H A002 0000H RAM RedBoot A006 0000H A002 0000H RAM RedBoot 0008 0000H RAM RedBoot 0004 0000H 0004 0000H 0004 0000H ROMRedBoot ROMRedBoot ROMRedBoot 0000 0000H 0000 0000H 0000 0000H 6 Application Note
2. Load a RAM version of RedBoot into SDRAM. Use the prebuilt file redboot.srec located at C:\redhat\redboot-xscale-010413\redboot-bin\cyclone-ram\install\bin. A reference for common RedBoot commands is located in the GNUPro Toolkit, Optimized for Intel XScale Microarchitecture, Getting Started Guide, starting on page 128, and example code for updating RedBoot is found in chapter 4 of the RedBoot User s Guide. The following example was copied from there. Start HyperTerminal with a serial connection to the evaluation board. Then, reset the evaluation board. HyperTerminal displays the following: Flash configuration checksum error or invalid key Can't get BOOTP info - network disabled! RedBoot(tm) bootstrap and debug environment, version R1.24 - built 16:53:49, Sep 13 2001 Platform: IQ80310 (XScale) Copyright (C) 2000, 2001, Red Hat, Inc. RAM: 0xa0000000-0xa2000000, 0xa001b0a8-0xa1fdf000 available Flash: 0x00000000-0x00800000, 64 blocks of 0x00020000 bytes each. RedBoot> If you get a check sum error, you need to use the fconfig command and change any value thus causing the check sum to be corrected. For example: RedBoot> fconfig Run script at boot: false Use BOOTP for network configuration: true false Local IP address: 0.0.0.0 10.2.52.254 Default server IP address: 0.0.0.0 GDB connection port: 9000 Network debug at boot time: false Update RedBoot non-volatile configuration - are you sure (y/n)? y Entering y saves the changes.... Unlock from 0x007c0000-0x007e0000:.... Erase from 0x007c0000-0x007e0000:.... Program from 0xa0015030-0xa0016030 at 0x007df000:.... Lock from 0x007c0000-0x007e0000:. RedBoot> fis init -f About to initialize [format] Flash image system - are you sure (y/n)? y *** Initialize Flash Image System... Erase from 0x00080000-0x007df000:......... Unlock from 0x007e0000-0x00800000:.... Erase from 0x007e0000-0x00800000:.... Program from 0xa1fdf000-0xa1fdf400 at 0x007e0000:.... Lock from 0x007e0000-0x00800000:. Application Note 7
Use the RedBoot fis list command to list the images that are presently in the Flash. The command displays the name, Flash address, memory address, length, and entry point. When the display looks like the following, then the fis init commandmustbeusedfirsttosetupthe Flash. RedBoot> fis list Name Flash addr Mem addr Length Entry point The following example shows what to expect: RedBoot> fis free 0x00040000.. 0x00800000 The fis init f command should only be used once after the initial Flash image is loaded into the Flash using FRU. RedBoot> fis list Name Flash addr Mem addr Length Entry point RedBoot 0x00000000 0x00000000 0x00040000 0x00000000 RedBoot[backup] 0x00040000 0x00040000 0x00040000 0x00000000 RedBoot config 0x007DF000 0x007DF000 0x00001000 0x00000000 FIS directory 0x007E0000 0x007E0000 0x00020000 0x00000000 RedBoot> fis free 0x00040000.. 0x007E0000 RedBoot> dump -b 0x0 0x00000000: 18F0 9FE5 18F0 9FE5 18F0 9FE5 18F0 9FE5... 0x00000010: 18F0 9FE5 0000 0000 18F0 9FE5 18F0 9FE5... RedBoot> dump -b 0x40000 0x00040000: FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF... 0x00040010: FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF... RedBoot> dump -b 0x60000 0x00060000: FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF... 0x00060010: FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF... RedBoot> dump -b 0xa0020000 0xA0020000: 0000 0000 0000 0000 0000 0000 0000 0000... 0xA0020010: 0000 0000 0000 0000 0000 0000 0000 0000... RedBoot> load -m ymodem 8 Application Note
After executing the RedBoot load command, on the HyperTerminal menu, select Transfer, Send File, Browse, and go find the file. Use the RAM version of RedBoot, redboot.srec, located at C:\redhat\redboot-xscale-010413\redboot-bin\cyclone-ram\install\bin. The.srec file is required since Ymodem is being used. For protocol, select Ymodem. The load command times out, so this step needs to be done quickly. The screen looks something like the following: RedBoot> load -m ymodem CCxyzModem - CRC mode, 2(SOH)/445(STX)/0(CAN) packets, 5 retries RedBoot> dump -b 0x40000 0x00040000: FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF... 0x00040010: FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF... RedBoot> dump -b 0x60000 0x00060000: FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF... 0x00060010: FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF... RedBoot> dump -b 0xa0020000 0xA0020000: 18F0 9FE5 18F0 9FE5 18F0 9FE5 18F0 9FE5... 0xA0020010: 18F0 9FE5 0000 0000 18F0 9FE5 18F0 9FE5... Note: The RedBoot dump command now shows that addresses 0x0000 0000 and 0xA002 0000 contain the same hexadecimal values. If RedBoot did not load into RAM, 0xA002 0000 is filled with zeros. RedBoot> fis free 0x00040000.. 0x007E0000 Address 0x00040000 is where RamRedBoot goes. Application Note 9
3. Copy the RAM version of RedBoot into Flash, be careful not to overwrite the ROM version. Example code for updating RedBoot is found in chapter 4 of the RedBoot User s Guide. The following example was copied from there. Chapter 5 explains the option flags f b r and l. RedBoot> fis create RamRedBoot -b 0xa0020000 -l 0x40000 -r 0xa0020000... Erase from 0x00040000-0x00080000:..... Program from 0xa0020000-0xa0060000 at 0x00040000:..... Unlock from 0x007e0000-0x00800000:.... Erase from 0x007e0000-0x00800000:.... Program from 0xa1fdf000-0xa1fff000 at 0x007e0000:.... Lock from 0x007e0000-0x00800000:. RedBoot> dump -b 0x40000 0x00040000: 18F0 9FE5 18F0 9FE5 18F0 9FE5 18F0 9FE5... 0x00040010: 18F0 9FE5 0000 0000 18F0 9FE5 18F0 9FE5... RedBoot> dump -b 0x60000 0x00060000: 2D2D 2D2D 2D2D 2D2D 2D2D 2D2D 2D2D 2D2D ---------------- 0x00060010: 2D2D 2D2D 2D2D 2D2D 2D2D 2D2D 2D2D 2D2D ---------------- Note: Address 0x0004 0000 now has the same hexadecimal values as addresses 0x0000 0000 and 0xA002 0000. RedBoot> fis list Name Flash addr Mem addr Length Entry point RedBoot 0x00000000 0x00000000 0x00040000 0x00000000 RedBoot[backup] 0x00040000 0x00040000 0x00040000 0x00000000 RedBoot config 0x007DF000 0x007DF000 0x00001000 0x00000000 FIS directory 0x007E0000 0x007E0000 0x00020000 0x00000000 RamRedBoot 0x00040000 0xA0020000 0x00040000 0xA0020040 RedBoot> fis free 0x00080000.. 0x007E0000 RamRedBoot is now Flashed at address 0x00040000. 10 Application Note
4. Use an fconfig to program a script which automates loading and starting RAM RedBoot when the board is reset. The fconfig command is explained starting on page 133 in the GNUPro Toolkit, Optimized for Intel XScale Microarchitecture, Getting Started Guide. RedBoot> fconfig Run script at boot: false true Boot script: Enter script, terminate with empty line >> {ROM}fis load RamRedBoot >> {ROM}go >> {RAM}help >> version >> Boot script timeout (1000ms resolution): 0 10 Allow some time for boot script timeout. If there are problems with the script, this allows time to hit control-c to skip the script. Then enter into fconfig againandfixit. Use BOOTP for network configuration: false Local IP address: 10.2.52.254 Default server IP address: 0.0.0.0 GDB connection port: 9000 Network debug at boot time: false Update RedBoot non-volatile configuration - are you sure (y/n)? y Entering y saves the changes.... Unlock from 0x007c0000-0x007e0000:.... Erase from 0x007c0000-0x007e0000:.... Program from 0xa0015030-0xa0016030 at 0x007df000:.... Lock from 0x007c0000-0x007e0000:.... Unlock from 0x007c0000-0x007e0000:.... Erase from 0x007c0000-0x007e0000:.... Program from 0xa0015030-0xa0016030 at 0x007df000:.... Lock from 0x007c0000-0x007e0000:. RedBoot> reset... Resetting. Ethernet eth0: MAC address 00:80:4d:46:03:99 IP: 10.2.52.254, Default server: 0.0.0.0 RedBoot(tm) bootstrap and debug environment, version R1.24 - built 16:53:49, Sep 13 2001 Platform: IQ80310 (XScale) Copyright (C) 2000, 2001, Red Hat, Inc. RAM: 0xa0000000-0xa2000000, 0xa001b0a8-0xa1fdf000 available Flash: 0x00000000-0x00800000, 64 blocks of 0x00020000 bytes each. == Executing boot script in 10.000 seconds - enter ^C to abort RedBoot> fis load RamRedBoot RedBoot> go Application Note 11
Ethernet eth0: MAC address 00:80:4d:46:03:99 IP: 10.2.52.254, Default server: 0.0.0.0 RedBoot(tm) bootstrap and debug environment, version R1.24 - built 16:36:38, Sep 13 2001 Platform: IQ80310 (XScale) Copyright (C) 2000, 2001, Red Hat, Inc. RAM: 0xa0000000-0xa2000000, 0xa0059028-0xa1fdf000 available Flash: 0x00000000-0x00800000, 64 blocks of 0x00020000 bytes each. == Executing boot script in 10.000 seconds - enter ^C to abort RedBoot> help Manage aliases kept in Flash memory alias name [value] Manage machine caches cache [ON OFF] Display/switch console channel channel [-1 <channel number>] Compute a 32bit checksum [POSIX algorithm] for a range of memory cksum -b <location> -l <length> Display (hex dump) a range of memory dump -b <location> [-l <length>] Manage Flash images fis {cmds} Manage configuration kept in Flash memory fconfig [-i] [-l] [-n] [-f] nickname [value] Execute code at a location go [-w <timeout>] [entry] Run board diagnostics diag Help about help? help [<topic>] Load a file load [-r] [-v] [-h <host>] [-m {TFTP xyzmodem}] [-b <base_address>] <file_name> Network connectivity test ping [-v] [-n <count>] [-l <length>] [-t <timeout>] [-r <rate>] [-i <IP_addr>] -h <IP_addr> Reset the system reset Display RedBoot version information version RedBoot> version RedBoot(tm) bootstrap and debug environment, version R1.24 - built 16:36:38, Sep 13 2001 Platform: IQ80310 (XScale) Copyright (C) 2000, 2001, Red Hat, Inc. 12 Application Note
RAM: 0xa0000000-0xa2000000, 0xa0059028-0xa1fdf000 available Flash: 0x00000000-0x00800000, 64 blocks of 0x00020000 bytes each. RedBoot> The August 28, 2001 version or later of RedBoot recognizes the {RAM} and {ROM} modifiers. In older versions of RedBoot, the script goes into an infinite loop, because the RAM version of RedBoot also runs the script. The script is stored in the same Flash location for both the RAM and ROM versions of RedBoot. The modifiers are the only way that the ROM and RAM versions of RedBoot can determine which commands in the script should run. When the modifier does not precede a command, then both versions execute the command. The problem is that when the RAM version sees the load and go commands, then it continuously loads itself and goes. Check the built time stamp to see that it is different. A different time stamp indicates that the new build was successful and that RedBoot is running out of SDRAM. The RedBoot version command is used to display this information. In this example, the ROM RedBoot build time is 16:53:49, and the RAM RedBoot build time is 16:36:38. RedBoot(tm) bootstrap and debug environment, version R1.24 - built 16:53:49, Sep 13 2001 RedBoot(tm) bootstrap and debug environment, version R1.24 - built 16:36:38, Sep 13 2001 Also, the fconfig script can be changed to test for proper functionality. The above script copies RedBoot into SDRAM and launches it. Then the help and version commands run from there. When the script is changed to {ROM}help and {ROM}version, these commands would not run when the RAM version of RedBoot is running. RedBoot> fis list Name Flash addr Mem addr Length Entry point RedBoot 0x00000000 0x00000000 0x00040000 0x00000000 RedBoot[backup] 0x00040000 0x00040000 0x00040000 0x00000000 RedBoot config 0x007DF000 0x007DF000 0x00001000 0x00000000 FIS directory 0x007E0000 0x007E0000 0x00020000 0x00000000 RamRedBoot 0x00060000 0xA0020000 0x00040000 0xA0020040 RedBoot> dump -b 0xa0020000 0xA0020000: 18F0 9FE5 18F0 9FE5 18F0 9FE5 18F0 9FE5... 0xA0020010: 18F0 9FE5 0000 0000 18F0 9FE5 18F0 9FE5... RedBoot> dump -b 0x0 0x00000000: 18F0 9FE5 18F0 9FE5 18F0 9FE5 18F0 9FE5... 0x00000010: 18F0 9FE5 0000 0000 18F0 9FE5 18F0 9FE5... RedBoot> dump -b 0x40000 0x00060000: 18F0 9FE5 18F0 9FE5 18F0 9FE5 18F0 9FE5... 0x00060010: 18F0 9FE5 0000 0000 18F0 9FE5 18F0 9FE5... RedBoot> Application Note 13
5. The customer application code can now move the Flash Bank, by changing the address in the FEBR1 register and then enabling the ATU Outbound Direct Addressing Window, by changing bit 8 in the ATUCR register. Example code follows: In the appropriate header file: #define USER_FLASHBASE 0xD0000000 FEBR1_ADDR is defined in hal_iq80310.h as: #define FEBR1_ADDR 0x00001550 Insert in the users application code: *(volatile unsigned int *)FEBR1_ADDR = USER_FLASHBASE; address */ /* Move Flash Bank 1 base Note: There is no address conflict with the peripheral memory-mapped registers that are adjacent to the ATU Outbound Direct Addressing Window in the address space. The address overlap between the peripheral memory-mapped registers and Flash Bank 1 is resolved in the silicon by a prioritizing system described on page 3-33 in the Intel 80312 I/O Companion Chip Developer s Manual. At future resets, the Flash Bank 1 Base Address defaults to 0x0000 0000, so the ROM version of RedBoot runs, the fconfig script copies the RAM version of RedBoot into SDRAM from Flash and then runs it from there. The steps presented here are considered the quick fix to this problem. A better fix would be to modify the board support package and to build a version of RedBoot that accomplishes the same things in a more efficient manner. 14 Application Note
Conclusion 4.0 Conclusion The above steps have been tested with RedBoot, and the resulting HyperTerminal text has been included for explicit illustration of the techniques. These techniques have been applied to a specific issue and a particular software application, but the techniques demonstrated above can be used with other hardware and software applications and can be used to resolve a variety of address conflicts. 5.0 Related Documents GNUPro Toolkit, Optimized for Intel XScale Microarchitecture, Getting Started Guide.This manual comes in the Intel 80310 Evaluation Board Kit. RedBoot User s Guide: http://sources.redhat.com/ecos/docs-latest/redboot/redboot.html FRU manual and software: http://developer.intel.com/design/iio/docs/dvtl_iq80310.htm Application Note 15
Related Documents This page intentionally left blank. 16 Application Note