Mercurial > ecos
changeset 1748:d85108b3ed46
Add ROMRAM startup for IXDP425
line wrap: on
line diff
--- a/packages/hal/arm/xscale/ixdp425/current/ChangeLog +++ b/packages/hal/arm/xscale/ixdp425/current/ChangeLog @@ -1,3 +1,21 @@ +2004-09-07 Mark Salter <msalter@redhat.com> + + * misc/redboot_ROM.ecm (CYGBLD_REDBOOT_MIN_IMAGE_SIZE): Set to 0x80000. + * misc/redboot_RAM.ecm: Ditto. + * misc/redboot_ROMLE.ecm: Ditto. + * misc/redboot_RAMLE.ecm: Ditto. + + * include/pkgconf/mlt_arm_xscale_ixdp425_ram.mlt: Move .text to 0x80000. + * include/pkgconf/mlt_arm_xscale_ixdp425_ram.ldi: Ditto. + + * include/pkgconf/mlt_arm_xscale_ixdp425_romram.h: New file. + * include/pkgconf/mlt_arm_xscale_ixdp425_romram.ldi: Ditto. + * include/pkgconf/mlt_arm_xscale_ixdp425_romram.mlt: Ditto. + * misc/redboot_ROMRAM.ecm: Ditto. + * misc/redboot_ROMRAMLE.ecm: + + * include/hal_platform_setup.h: Support ROMRAM. + 2004-09-02 Mark Salter <msalter@redhat.com> * src/ixdp425_pci.c: Fix compilation when not configured for PCI.
--- a/packages/hal/arm/xscale/ixdp425/current/cdl/hal_arm_xscale_ixdp425.cdl +++ b/packages/hal/arm/xscale/ixdp425/current/cdl/hal_arm_xscale_ixdp425.cdl @@ -79,14 +79,16 @@ cdl_package CYGPKG_HAL_ARM_XSCALE_IXDP42 display "Startup type" flavor data default_value {"RAM"} - legal_values {"RAM" "ROM" } + legal_values {"RAM" "ROM" "ROMRAM" } no_define define -file system.h CYG_HAL_STARTUP description " When targeting the IXDP425 eval board it is possible to build the system for either RAM bootstrap or ROM bootstrap(s). Select 'ram' when building programs to load into RAM using onboard - debug software such as RedBoot or eCos GDB stubs." + debug software such as RedBoot or eCos GDB stubs. Select 'romram' + when building a stand-alone application which will be put + into ROM, but execute from RAM." } cdl_component CYGBLD_GLOBAL_OPTIONS { @@ -135,7 +137,7 @@ cdl_package CYGPKG_HAL_ARM_XSCALE_IXDP42 cdl_option CYGBLD_BUILD_GDB_STUBS { display "Build GDB stub ROM image" default_value 0 - requires { CYG_HAL_STARTUP == "ROM" } + requires { CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" } requires CYGSEM_HAL_ROM_MONITOR requires CYGBLD_BUILD_COMMON_GDB_STUBS requires CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS @@ -221,7 +223,8 @@ cdl_package CYGPKG_HAL_ARM_XSCALE_IXDP42 flavor data no_define calculated { CYG_HAL_STARTUP == "RAM" ? "arm_xscale_ixdp425_ram" : \ - "arm_xscale_ixdp425_rom" } + CYG_HAL_STARTUP == "ROM" ? "arm_xscale_ixdp425_rom" : \ + "arm_xscale_ixdp425_romram" } cdl_option CYGHWR_MEMORY_LAYOUT_LDI { display "Memory layout linker script fragment" @@ -229,7 +232,8 @@ cdl_package CYGPKG_HAL_ARM_XSCALE_IXDP42 no_define define -file system.h CYGHWR_MEMORY_LAYOUT_LDI calculated { CYG_HAL_STARTUP == "RAM" ? "<pkgconf/mlt_arm_xscale_ixdp425_ram.ldi>" : \ - "<pkgconf/mlt_arm_xscale_ixdp425_rom.ldi>" } + CYG_HAL_STARTUP == "ROM" ? "<pkgconf/mlt_arm_xscale_ixdp425_rom.ldi>" : \ + "<pkgconf/mlt_arm_xscale_ixdp425_romram.ldi>" } } cdl_option CYGHWR_MEMORY_LAYOUT_H { @@ -238,7 +242,8 @@ cdl_package CYGPKG_HAL_ARM_XSCALE_IXDP42 no_define define -file system.h CYGHWR_MEMORY_LAYOUT_H calculated { CYG_HAL_STARTUP == "RAM" ? "<pkgconf/mlt_arm_xscale_ixdp425_ram.h>" : \ - "<pkgconf/mlt_arm_xscale_ixdp425_rom.h>" } + CYG_HAL_STARTUP == "ROM" ? "<pkgconf/mlt_arm_xscale_ixdp425_rom.h>" : \ + "<pkgconf/mlt_arm_xscale_ixdp425_romram.h>" } } } @@ -247,7 +252,7 @@ cdl_package CYGPKG_HAL_ARM_XSCALE_IXDP42 flavor bool default_value 0 parent CYGPKG_HAL_ROM_MONITOR - requires { CYG_HAL_STARTUP == "ROM" } + requires { CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" } description " Enable this option if this program is to be used as a ROM monitor, i.e. applications will be loaded into RAM on the board, and this
--- a/packages/hal/arm/xscale/ixdp425/current/include/hal_platform_setup.h +++ b/packages/hal/arm/xscale/ixdp425/current/include/hal_platform_setup.h @@ -83,7 +83,7 @@ .endm -#if defined(CYG_HAL_STARTUP_ROM) +#if defined(CYG_HAL_STARTUP_ROM) || defined(CYG_HAL_STARTUP_ROMRAM) #define PLATFORM_SETUP1 _platform_setup1 #define CYGHWR_HAL_ARM_HAS_MMU @@ -234,6 +234,11 @@ // value to load into pc to jump to real runtime address ldr r0, =1f +#if defined(CYG_HAL_STARTUP_ROMRAM) + // R0 holds a RAM address for ROMRAM startup, + // so convert to a flash address. + orr r0, r0, #IXDP_FLASH_BASE +#endif // Setup EXP_CNFG0 value to switch EXP bus out of low memory ldr r2, =IXP425_EXP_CFG_BASE @@ -242,6 +247,7 @@ ldr r3, =0xFFFF ldr r4, =IXDP425_LED_DATA + b icache_boundary .p2align 5 icache_boundary: @@ -261,6 +267,21 @@ icache_boundary: DISPLAY 0x1004, r7, r8 +#if defined(CYG_HAL_STARTUP_ROMRAM) + mov r0, #IXDP_FLASH_BASE + mov r1, #SDRAM_PHYS_BASE + ldr r2, =__ram_data_end +20: ldr r3, [r0],#4 + str r3, [r1],#4 + cmp r1, r2 + bne 20b + + // start executing from RAM + ldr r0, =30f + mov pc, r0 +30: +#endif + // Build mmu tables into RAM so page table walks by the cpu // don't interfere with FLASH programming. mov r1, #SDRAM_PHYS_BASE
--- a/packages/hal/arm/xscale/ixdp425/current/include/pkgconf/mlt_arm_xscale_ixdp425_ram.ldi +++ b/packages/hal/arm/xscale/ixdp425/current/include/pkgconf/mlt_arm_xscale_ixdp425_ram.ldi @@ -13,7 +13,7 @@ SECTIONS { SECTIONS_BEGIN SECTION_fixed_vectors (ram, 0x20, LMA_EQ_VMA) - SECTION_rom_vectors (ram, 0x20000, LMA_EQ_VMA) + SECTION_rom_vectors (ram, 0x80000, LMA_EQ_VMA) SECTION_text (ram, ALIGN (0x4), LMA_EQ_VMA) SECTION_fini (ram, ALIGN (0x4), LMA_EQ_VMA) SECTION_rodata (ram, ALIGN (0x4), LMA_EQ_VMA)
--- a/packages/hal/arm/xscale/ixdp425/current/include/pkgconf/mlt_arm_xscale_ixdp425_ram.mlt +++ b/packages/hal/arm/xscale/ixdp425/current/include/pkgconf/mlt_arm_xscale_ixdp425_ram.mlt @@ -1,7 +1,7 @@ version 0 region ram 0 10000000 0 ! section fixed_vectors 0 1 0 1 1 0 1 0 20 20 ! -section rom_vectors 0 1 0 1 1 1 1 1 20000 20000 text text ! +section rom_vectors 0 1 0 1 1 1 1 1 80000 80000 text text ! section text 0 4 0 1 0 1 0 1 fini fini ! section fini 0 4 0 1 0 1 0 1 rodata rodata ! section rodata 0 4 0 1 0 1 0 1 rodata1 rodata1 !
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/xscale/ixdp425/current/include/pkgconf/mlt_arm_xscale_ixdp425_romram.h @@ -0,0 +1,21 @@ +// eCos memory layout - Fri Oct 20 05:56:24 2000 + +// This is a generated file - do not edit + +#ifndef __ASSEMBLER__ +#include <cyg/infra/cyg_type.h> +#include <stddef.h> + +#endif +#define CYGMEM_REGION_ram (0) +#define CYGMEM_REGION_ram_SIZE (0x10000000) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#define CYGMEM_REGION_rom (0x50000000) +#define CYGMEM_REGION_rom_SIZE (0x01000000) +#define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (0x10000000 - (size_t) CYG_LABEL_NAME (__heap1)) +
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/xscale/ixdp425/current/include/pkgconf/mlt_arm_xscale_ixdp425_romram.ldi @@ -0,0 +1,28 @@ +// eCos memory layout - Fri Oct 20 05:56:24 2000 + +// This is a generated file - do not edit + +#include <cyg/infra/cyg_type.inc> + +MEMORY +{ + ram : ORIGIN = 0, LENGTH = 0x10000000 +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (ram, 0x00000000, LMA_EQ_VMA) + SECTION_fixed_vectors (ram, 0x20, LMA_EQ_VMA) + SECTION_text (ram, 0x8000, LMA_EQ_VMA) + SECTION_fini (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata1 (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_got (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixup (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_gcc_except_table (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_data (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +}
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/xscale/ixdp425/current/include/pkgconf/mlt_arm_xscale_ixdp425_romram.mlt @@ -0,0 +1,14 @@ +version 0 +region ram 0 10000000 0 ! +section rom_vectors 0 1 0 1 1 1 1 1 0 0 text text ! +section fixed_vectors 0 1 0 1 1 0 1 0 20 20 ! +section text 0 4 0 1 0 1 0 1 fini fini ! +section fini 0 4 0 1 0 1 0 1 rodata rodata ! +section rodata 0 4 0 1 0 1 0 1 rodata1 rodata1 ! +section rodata1 0 4 0 1 0 1 0 1 fixup fixup ! +section fixup 0 4 0 1 0 1 0 1 gcc_except_table gcc_except_table ! +section gcc_except_table 0 4 0 1 0 1 0 1 data data ! +section data 0 4 0 1 0 1 0 1 bss bss ! +section bss 0 4 0 1 0 1 0 1 heap1 heap1 ! +section heap1 0 8 0 0 0 0 0 0 ! +
--- a/packages/hal/arm/xscale/ixdp425/current/misc/redboot_RAM.ecm +++ b/packages/hal/arm/xscale/ixdp425/current/misc/redboot_RAM.ecm @@ -72,7 +72,7 @@ cdl_component CYGBLD_BUILD_REDBOOT { }; cdl_option CYGBLD_REDBOOT_MIN_IMAGE_SIZE { - inferred_value 0x40000 + inferred_value 0x80000 }; cdl_component CYGSEM_REDBOOT_FLASH_CONFIG {
--- a/packages/hal/arm/xscale/ixdp425/current/misc/redboot_RAMLE.ecm +++ b/packages/hal/arm/xscale/ixdp425/current/misc/redboot_RAMLE.ecm @@ -72,7 +72,7 @@ cdl_component CYGBLD_BUILD_REDBOOT { }; cdl_option CYGBLD_REDBOOT_MIN_IMAGE_SIZE { - inferred_value 0x40000 + inferred_value 0x80000 }; cdl_component CYGSEM_REDBOOT_FLASH_CONFIG {
--- a/packages/hal/arm/xscale/ixdp425/current/misc/redboot_ROM.ecm +++ b/packages/hal/arm/xscale/ixdp425/current/misc/redboot_ROM.ecm @@ -76,7 +76,7 @@ cdl_component CYGBLD_BUILD_REDBOOT { }; cdl_option CYGBLD_REDBOOT_MIN_IMAGE_SIZE { - inferred_value 0x40000 + inferred_value 0x80000 }; cdl_component CYGSEM_REDBOOT_FLASH_CONFIG {
--- a/packages/hal/arm/xscale/ixdp425/current/misc/redboot_ROMLE.ecm +++ b/packages/hal/arm/xscale/ixdp425/current/misc/redboot_ROMLE.ecm @@ -76,7 +76,7 @@ cdl_component CYGBLD_BUILD_REDBOOT { }; cdl_option CYGBLD_REDBOOT_MIN_IMAGE_SIZE { - inferred_value 0x40000 + inferred_value 0x80000 }; cdl_component CYGSEM_REDBOOT_FLASH_CONFIG {
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/xscale/ixdp425/current/misc/redboot_ROMRAM.ecm @@ -0,0 +1,133 @@ +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +cdl_configuration eCos { + description "" ; + hardware ixdp425 ; + template redboot ; + package -hardware CYGPKG_HAL_ARM current ; + package -hardware CYGPKG_HAL_ARM_XSCALE_CORE current ; + package -hardware CYGPKG_HAL_ARM_XSCALE_IXP425 current ; + package -hardware CYGPKG_HAL_ARM_XSCALE_IXDP425 current ; + package -hardware CYGPKG_DEVS_FLASH_STRATA current ; + package -hardware CYGPKG_DEVS_FLASH_IXDP425 current ; + package -hardware CYGPKG_DEVS_ETH_INTEL_I82559 current ; + package -hardware CYGPKG_DEVS_ETH_ARM_IXDP425_I82559 current ; + package -template CYGPKG_HAL current ; + package -template CYGPKG_INFRA current ; + package -template CYGPKG_REDBOOT current ; + package -template CYGPKG_ISOINFRA current ; + package -template CYGPKG_LIBC_STRING current ; + package -template CYGPKG_CRC current ; + package CYGPKG_IO_FLASH current ; + package CYGPKG_IO_ETH_DRIVERS current ; + package CYGPKG_MEMALLOC current ; + package CYGPKG_COMPRESS_ZLIB current ; +}; + +cdl_component CYG_HAL_STARTUP { + user_value ROMRAM +}; + +cdl_option CYGBLD_BUILD_GDB_STUBS { + user_value 0 +}; + +cdl_option CYGFUN_LIBC_STRING_BSD_FUNCS { + inferred_value 0 +}; + +cdl_option CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE { + user_value 4096 +}; + +cdl_option CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT { + user_value 0 +}; + +cdl_option CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM { + inferred_value 0 +}; + +cdl_option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS { + inferred_value 1 +}; + +cdl_option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT { + inferred_value 0 +}; + +cdl_option CYGSEM_HAL_ROM_MONITOR { + user_value 1 +}; + +cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + inferred_value 0 0 +}; + +cdl_component CYGBLD_BUILD_REDBOOT { + user_value 1 +}; + +cdl_option CYGBLD_REDBOOT_MIN_IMAGE_SIZE { + inferred_value 0x80000 +}; + +cdl_component CYGSEM_REDBOOT_FLASH_CONFIG { + user_value 1 +}; + +cdl_component CYGSEM_REDBOOT_BSP_SYSCALLS { + inferred_value 1 +}; + +cdl_option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT { + inferred_value 0x10008000 +}; + +cdl_option CYGHWR_HAL_IXP425_PCI_NP_WORKAROUND { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRTOK_R_HEADER { + inferred_value 1 <cyg/libc/string/string.h> +}; + +cdl_option CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER { + inferred_value 1 <cyg/libc/string/string.h> +}; + +cdl_option CYGBLD_ISO_STRING_BSD_FUNCS_HEADER { + inferred_value 1 <cyg/libc/string/bsdstring.h> +}; + +cdl_option CYGBLD_ISO_STRING_MEMFUNCS_HEADER { + inferred_value 1 <cyg/libc/string/string.h> +}; + +cdl_option CYGBLD_ISO_STRING_STRFUNCS_HEADER { + inferred_value 1 <cyg/libc/string/string.h> +}; + +cdl_option CYGBLD_ISO_DNS_HEADER { + inferred_value 1 <cyg/ns/dns/dns.h> +}; + +cdl_option CYGPKG_HAL_GDB_FILEIO { + user_value 1 +}; + +cdl_option CYGHWR_REDBOOT_LINUX_EXEC_X_SWITCH { + user_value 1 +} + +cdl_option CYGHWR_HAL_ARM_BIGENDIAN { + user_value 1 +}; +
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/xscale/ixdp425/current/misc/redboot_ROMRAMLE.ecm @@ -0,0 +1,136 @@ +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +cdl_configuration eCos { + description "" ; + hardware ixdp425 ; + template redboot ; + package -hardware CYGPKG_HAL_ARM current ; + package -hardware CYGPKG_HAL_ARM_XSCALE_CORE current ; + package -hardware CYGPKG_HAL_ARM_XSCALE_IXP425 current ; + package -hardware CYGPKG_HAL_ARM_XSCALE_IXDP425 current ; + package -hardware CYGPKG_DEVS_FLASH_STRATA current ; + package -hardware CYGPKG_DEVS_FLASH_IXDP425 current ; + package -hardware CYGPKG_DEVS_ETH_INTEL_I82559 current ; + package -hardware CYGPKG_DEVS_ETH_ARM_IXDP425_I82559 current ; + package -template CYGPKG_HAL current ; + package -template CYGPKG_INFRA current ; + package -template CYGPKG_REDBOOT current ; + package -template CYGPKG_ISOINFRA current ; + package -template CYGPKG_LIBC_STRING current ; + package -template CYGPKG_CRC current ; + package CYGPKG_IO_FLASH current ; + package CYGPKG_IO_ETH_DRIVERS current ; + package CYGPKG_MEMALLOC current ; + package CYGPKG_COMPRESS_ZLIB current ; +}; + +cdl_component CYG_HAL_STARTUP { + user_value ROMRAM +}; + +cdl_option CYGBLD_BUILD_GDB_STUBS { + user_value 0 +}; + +cdl_option CYGFUN_LIBC_STRING_BSD_FUNCS { + inferred_value 0 +}; + +cdl_option CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE { + user_value 4096 +}; + +cdl_option CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT { + user_value 0 +}; + +cdl_option CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM { + inferred_value 0 +}; + +cdl_option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS { + inferred_value 1 +}; + +cdl_option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT { + inferred_value 0 +}; + +cdl_option CYGSEM_HAL_ROM_MONITOR { + user_value 1 +}; + +cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + inferred_value 0 0 +}; + +cdl_component CYGBLD_BUILD_REDBOOT { + user_value 1 +}; + +cdl_option CYGBLD_REDBOOT_MIN_IMAGE_SIZE { + inferred_value 0x80000 +}; + +cdl_component CYGSEM_REDBOOT_FLASH_CONFIG { + user_value 1 +}; + +cdl_component CYGSEM_REDBOOT_BSP_SYSCALLS { + inferred_value 1 +}; + +cdl_option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT { + inferred_value 0x10008000 +}; + +cdl_option CYGHWR_HAL_IXP425_PCI_NP_WORKAROUND { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRTOK_R_HEADER { + inferred_value 1 <cyg/libc/string/string.h> +}; + +cdl_option CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER { + inferred_value 1 <cyg/libc/string/string.h> +}; + +cdl_option CYGBLD_ISO_STRING_BSD_FUNCS_HEADER { + inferred_value 1 <cyg/libc/string/bsdstring.h> +}; + +cdl_option CYGBLD_ISO_STRING_MEMFUNCS_HEADER { + inferred_value 1 <cyg/libc/string/string.h> +}; + +cdl_option CYGBLD_ISO_STRING_STRFUNCS_HEADER { + inferred_value 1 <cyg/libc/string/string.h> +}; + +cdl_option CYGBLD_ISO_DNS_HEADER { + inferred_value 1 <cyg/ns/dns/dns.h> +}; + +cdl_option CYGPKG_HAL_GDB_FILEIO { + user_value 1 +}; + +cdl_option CYGHWR_REDBOOT_LINUX_EXEC_X_SWITCH { + user_value 1 +} + +cdl_option CYGHWR_HAL_ARM_BIGENDIAN { + user_value 0 +}; + +cdl_option CYGOPT_REDBOOT_FLASH_BYTEORDER { + user_value MSBFIRST +}
