Summary

APEX is a bootloader for embedded systems. It was originally written to support the Sharp LH series of processors but has been ported to a number of additional ARM targets such as the Samsung S3C24xx series.

Easy to build. It depends only on shell utilities and GCC.

Easy to configure. There is a single configuration file and it uses the linux-2.6 Kconfig infrastructure.

src/apex/command.c (expand_variables): Revised expand_variables code to expand references within expanded references. This change permits us to define the kernel location, for example, as depending on the $serverip.

2009-01-23 Version 1.6.8

Makefile (SUBLEVEL): v1.6.8

src/mach-lh7a40x/initialize.c (target_init): Added code to the target initialization for Companion that initializes the modem.

2009-01-21 Version 1.6.7

Makefile (SUBLEVEL): v1.6.7 for push of new features.

src/drivers-lh/drv-mmc.c (mmc_report): Revised reporting to make it easier to troubleshoot cards.

2009-01-20 Version 1.6.6

include/mmc.h (mmc_card_acquired): Revised the card acquisition code so that we don't assume that the first byte of the CID register is non-zero. IMHO, our assumption was correct based on the SD association's documentation, but we found that the Eye-FI card has a bogus looking card ID (CID) register and we have to be lenient to see it.

Makefile (SUBLEVEL): v1.6.6 for Companion fixes so it can use a 1.6.x version of APEX.

src/drivers/relocate-nand.c: Revised NAND relocator to work with the LPD7A404. Considering that the only other user of the code is a test implemented for the LH79524, this should be safe to rework. The key difference is that the relocator will address each page in turn instead of depending on an unreliable feature of NAND flash that automatically loads successive sectors.

src/arch-arm/Kconfig: Changed the Companion bootstrap to use the NAND relocator. This allows us to have a loader that is larger than 80KiB, the size of SRAM. Added a page size configuration option for relocation from NAND flash.

src/apex/cmd-version.c (cmd_version): Fixed display of environment variables s.t. the >64KiB length is properly shown in the version command output.

src/apex/cmd-image.c (cmd_image): Added an option to relocate the ramdisk image s.t. the uBoot image format can be loaded with "image load" and then used to boot the system.

2009-01-05 Version 1.6.5

src/mach-orion5x/mv2120_config: Moving to the CodeSourcery compiler for thumb support.

src/arch-arm/lib/cp15-invalidate-dcache-va.c (invalidate_dcache_va): Conditionally compiling the invalidate-dcache-va function based on the presence of the macro and, therefore, the CP15 feature.

Makefile (SUBLEVEL): 1.6.5 for orion5x merge.

src/apex/cmd-flashusage.c (cmd_flashusage): New command to scan eraseblocks of a flash device for the presence of data.

src/mach-lh7952x/memory.h (RAM_BANK0_LENGTH): Fixed the declarations of the extents for the memory regions in the LH7952x. The macros were correct for the LH79524 but not the LH79520. This is now fixed.

src/drivers/drv-ext2.c (ext2_identify): Revised EXT2 driver to took for extended partitions and to cope with 64 bit IO.

include/driver.h: Support for 64 bit IO sizes. This is only necessary for large devices like those accessible via ATA/SATA. It is optional and somewhat expensive. Even the EXT2 driver will function without it, but it won't be able to see partitions past 2GiB. This change trickled into lots of areas of APEX because of the change of types in the descriptor structure. However, there should be no size or performance impact when the system is compiled without CONFIG_DRIVER_LONG_LONG_SIZE.

src/arch-arm/lib/muldi3.S: Inclusion of another kernel function for handling aeabi entry points. This was required by drv-ata when we compiled it with THUMB.

src/arch-arm/lib/cp15-wait.c: This and other cp15 functions so that cp15 operations can be invoked from THUMB code without THUMB2 support and without specialized code to detect the operation mode. These functions allow all code that lacks __asm's to be compiled with THUMB.

src/drivers/drv-fat.c (fat_open): Adding greater specificity to the region construction from the block_driver().

src/drivers/drv-ext2.c (ext2_open): Adding greater specificity to the region construction from the block_driver().

src/drivers/driver.c (parse_descriptor): Fix to disambiguate regions that could have path elements. The parser would not interpret driver:10k as having a start address of 10k when the driver could accept a path. Now, parser will interpret driver:bin as having a path of 'bin', but driver:10k as having a starting offset as 10k. The region can be unambiguously constructed using '@' and '/' appropriately.

src/mach-mx3/drv-i2c.c: New I2C driver for MX3x. Not complete, but working for writes to the I2C#1 controller.

src/mach-mx3/cmd-wm8955.c: New command for sending control messages to the WM8955L on the PSJL Karma.

src/drivers/driver.c (parse_descriptor): Fix for the parsing of FS descriptors such that the start address and length parameters may be set.(parse_descriptor): Added the '%' special character for combining one or more descriptors. This is used by the drivers that have a basis driver defined in an environment variable, s.t. the driver can specify a starting address and/or length without knowing the exact form specified by the

2008-12-18 Version 1.6.4

Makefile (SUBLEVEL): Rolling revision for PSJL implementation. 1.6.4.

src/drivers/drv-nor-cfi.c (nor_probe_chip): Support for broken AMD/Spansion NOR flash that does not properly report top-boot vs. bottom-boot.

src/drivers/drv-nor-cfi.c: In order to support the Micronix (Spansion compatible) NOR flash in the HP MediaVault 2120, we needed to completely fill out the Spansion support. There is support for a single byte wide bus and a 16 bit internal logic as is the case on the MV2120.

src/drivers/drv-nor-cfi.c (ReadArray): Changed the ReadArray command for Spansion to 0xf0.

src/arch-arm/lib/cp15.c (cp15_ctrl): Enhanced the cp15 report on the control register to be more readable and to show more bits (ARMv6).

src/apex/cmd-image.c (cmd_image): Adding descriptor_open() call to image load so that we can read from tftp.

2008-11-13 Version 1.6.3

Makefile (SUBLEVEL): Version 1.6.3 for dm9000. The initial orion patches are in as well, but not yet supported.

src/drivers/drv-dm9000.c (dm9000_read): Implementation of dm9000_{read,write} to round out support for dm9000 as a complete Ethernet MAC/PHY driver.

src/lib/strtol.c: Adding strtol as a separate library function, in case it is needed. The memlimit command will use this function.

src/mach-mx3/rosencrantz.h (CCM_PDR0_V): Override for the PDR0 so that the CSI clock scalar is non-default.

src/mach-mx3/mx31.h (CCM_UPCTL_266_V): Fixed the UPCTL initialization values. This PLL is based on the CKIH, so it doesn't need to change when the CPU clock speed changes. (CCM_PDR0_V): Allowing this value to be overridden by the board specific header.

src/drivers/drv-mem.c (cmd_memlimit): Revised memlimit to permit a negative offset which is then subtracted from the total system memory.

debian/rules (binary-arch): Adding apex-image to the tools installed in the debian package.

src/apex/cmd-image-uboot.c: Documentation for UBOOT image format. (verify_uboot_image): Added support for multi-images. Now loading UBOOT images the same way that UBOOT does.

src/apex/region-checksum.c (region_checksum): Fixed the checksum to account for incoming CRC value as is necessary for UBOOT image CRC computation.

src/apex/cmd-image-uboot.c: Added uboot image support. No multi-images, but the rest works OK.

src/apex/region-checksum.c (region_checksum): Added neglected check for whether or not the caller wants the length added to the checksum

src/apex/cmd-image-apex.c (handle_apex_image): Factored out the APEX image code so we can implement UBOOT in separate file with optional compilation.

src/arch-arm/entry/apex.lds.S: Renamed some of the sections to make the meanings clear. Preemtively fixed a vulnerability to section reordering. Fixed the setting of fSDRAMBoot so that it works for INLINE init mode and for the older form.

src/mach-ixp42x/initialize.c (bootstrap_sdram_pre): Revamped the initialization code for ixp42x to use inline mode. Took the opportunity to elide a lot of cruft from the routines. It isn't yet tested as written to flash as this requires setup of one of the wigglers. None of the typical uses of APEX on the ixp42x install APEX as the primary boot loader, so this can wait.

src/arch-arm/Kconfig: Configuration option to override the default SDRAM execution detection code. Most platforms can use the execution address to detect whether or not APEX is running in SDRAM. Some, like the ixp42x map flash over SDRAM, so we have to use a custom piece of code to detect this circumstance.

src/arch-arm/Kconfig: Added AEABI configuration option so that we can link APEX with an AEABI toolchain. Really, the only difference is the inclusion of a couple of math functions.

src/arch-arm/lib/lib1funcs.S: Added config.h to build of lib1funcs so that the configuration dependencies are checked.

2007-06-02 Version 1.5.6

src/arch-arm/entry/reset.c: Fixed a problem in the ordering of the reset sections that was illuminated by rwhitby's default compiler.

2007-06-01 Version 1.5.5

Makefile (SUBLEVEL): 1.5.5 for the SAVEATONCE option, very necessary for OneNAND stored environment.

src/lib/env.c: New option, CONFIG_ENV_SAVEATONCE implements a cached environment that is saved at one time to non-volatile storage instead of through incremental updates. This is necessary for some types of NAND flash where multiple writes to the same page are limited.

src/apex/*.c: Groomed error reporting for opening regions.

src/lib/env.c: Changed the environment region descriptor name to d_env so that it is easier to remember.

2007-05-30 Version 1.5.4

Makefile (SUBLEVEL): 1.5.4. Rolling revision for the sake of the xscale fixes.

src/mach-mx3/cmd-sleep.c (cmd_sleep): Test code for MX31 sleep modes.

src/mach-mx3/cmd-reset.c (cmd_reset): Command verified.

src/arch-arm/entry/reset.c: Added a jump to reset_exit() from reset() in the event that we disable the MMU at startup. The ixp42x needs this because the xscale MMU flush code allocates data in the text section.

src/mach-ixp42x/initialize-sdram.c (cmd_initialize_sdram): Fixed the scan of 256Mib SDRAM chips. A small change to the algorithm and we seem to be able to detect 64MiB of memory just fine.

src/arch-arm/entry/apex.lds.S: Reorganized the sections and the section names to be more readable and consistent.

src/arch-arm/entry/reset.c: Restructured to allow for cleaner startup code. Legacy implementations are still OK, but the new plumbing permits seamless transitions between various initialization elements to handle constrained boot situations. Also removed an onerous constraint on register usage in the relocate_apex() function. The caller is now forced to assume that no registers are saved.

src/apex/env.c: Improved the environment link so that it can exist even if there is no user-modifiable environment. This is to allow user-land to browse environment variables even if they cannot set them.

src/mach-mx3/initialize.c: Extra check in the initialization routine so that we don't alter the timing registers if the CPU is already in the target mode. It looks like the CPU doesn't like the PLLs being changed once it has booted. It may be the SDRAM that doesn't like the timing change.

src/arch-arm/entry/reset.c: Restored setting of the CPSR mode in the loader. The CPU boots in the undefined mode. We move to supervisor mode, though this doesn't appear to be necessary for the kernel to boot.

src/mach-mx3/ipu.c (ipu_report): Improved clarity of IPU report to break out fields and to describe the formats in English.

include/asm/cp15-armv6.h: Fixed the cache control macros for the ARMV6.

src/mach-mx3/ipu.c: More IPU debug code. The report function has a clean rendering of the registers.