Mercurial > ecos-v2_0-branch
changeset 50:a0774359f013 ecos-sw-1999-11-02
Merge from eCos master repository on 1999-11-02-17:02:15-GMT
line wrap: on
line diff
--- a/packages/ChangeLog +++ b/packages/ChangeLog @@ -1,3 +1,12 @@ +1999-10-27 Jesper Skov <jskov@cygnus.co.uk> + + * targets: Reenabled stubs startup for pid9. + +1999-10-26 Jesper Skov <jskov@cygnus.co.uk> + + * targets: Removed stubs startup for pid9. + * targets: Added pidBE platform. + 1999-10-19 Jesper Skov <jskov@cygnus.co.uk> * targets: Added pid9 target.
--- a/packages/NEWS +++ b/packages/NEWS @@ -32,10 +32,11 @@ *** The following are the new target platforms... - **** ARM: - ARM720 - Cirrus Logic CL7211 board - ARM710C - Cirrus Logic CL7111 board + ARM7TDMI - ARM PID7T board configured in big-endian mode + Cirrus Logic EP7211 (ARM720) CPU - Cirrus Logic EDB7211 evaluation board + (silk-screened EDB7111-2) + Cirrus Logic CL-PS7111 (ARM710C) CPU - Cirrus Logic EB7111 evaluation board Sharp LH77790 (ARM7DI core) - ARM AEB-1 rev C board **** PowerPC @@ -52,11 +53,11 @@ *** These are the new host platforms... -**** FIXME +**** None yet ** Host tool features -**** FIXME +**** None yet ** Drivers *** Watchdog Drivers added for: @@ -64,18 +65,17 @@ ** New toolchain features -** API additions (are there any?) +** API additions + -*** FIXME +*** Debugging + The file <cyg/kernel/test/stackmon.h> defines some functions + that can be used to profile stack usage. ** API changes *** Kernel -**** Debugging - The file <cyg/kernel/test/stackmon.h> defines some functions - that can be used to profile stack usage. - **** KAPI include/kapi.h (cyg_thread_delete): is now a boolean function to indicate success. Failure is when the thread needs to run in @@ -90,3 +90,6 @@ (except in special configurations, see linux_misc.c). *** Common + +** Other new features +
--- a/packages/hal/arm/aeb/current/ChangeLog +++ b/packages/hal/arm/aeb/current/ChangeLog @@ -1,3 +1,22 @@ +1999-10-28 Jesper Skov <jskov@cygnus.co.uk> + + * misc/PKGconf.mak: Don't strip symbols when making .img. + +1999-10-27 Jesper Skov <jskov@cygnus.co.uk> + + * misc/PKGconf.mak: Build UU encoded stubs per default. + + * misc/STUBS_config: + Updated stub scripts. Allow to configure for revC. + + * src/hal_diag.c: Fixed conditional include. + +1999-10-26 Hugo Tyson <hmt@cygnus.co.uk> + + * src/hal_diag.c (hal_diag_write_char): Use new macro + CYG_HAL_GDB_ENTER_CRITICAL_IO_REGION and its mate to control + stepping through gdb $O packet output. + 1999-10-12 Jesper Skov <jskov@cygnus.co.uk> * include/pkgconf/hal_arm_aeb.h: Add CT config of revision.
--- a/packages/hal/arm/aeb/current/misc/PKGconf.mak +++ b/packages/hal/arm/aeb/current/misc/PKGconf.mak @@ -38,7 +38,7 @@ PACKAGE := hal_arm_aeb include ../../../../../pkgconf/pkgconf.mak PROGS := gdb_module_ncs -OTHER_PROGS := gdb_module.img +OTHER_PROGS := gdb_module.img gdb_module.img.UU WHEREAMI := misc CKSUM = 0 @@ -59,7 +59,7 @@ gdb_module.cs: gdb_module_ncs.stamp $(SRC)/gdb_module.c -DCHECKSUM=$(CKSUM) gdb_module.img: gdb_module.cs gdb_module.stamp - $(OBJCOPY) --strip-all gdb_module gdb_module.img.XX + $(OBJCOPY) --strip-debug gdb_module gdb_module.img.XX $(OBJCOPY) --change-addresses=0xFBFF4000 gdb_module.img.XX gdb_module.img $(OBJCOPY) -O binary gdb_module.img gdb_module.img.raw $(RM) -f gdb_module.img.XX
--- a/packages/hal/arm/aeb/current/misc/STUBS_config +++ b/packages/hal/arm/aeb/current/misc/STUBS_config @@ -1,10 +1,33 @@ #! /bin/sh - -# Configure ARM/AEB eCos to create AEB-1 GDB stubs +# Configure ARM/AEB-1 eCos to create AEB-1 GDB stubs +# Ensure that PATH include the directory where the ARM tools reside. +# +# Run from an empty temporary directory with two arguments: the path to +# the packages directory (i.e., where pkgconf.tcl lives), and the platform +# name (aeb or aebC). +# +# Output files are in the directory hal/arm/aeb/<version>/misc. +# gdb_module.img: suitable for programming via GDB stub/Angel +# gdb_module.img.UU: suitable for programming via ROM menu +# See Notes for details. +if [ "$2"x = "x" ]; then + AEB="aeb" +else + AEB=$2 +fi -tcl $1/pkgconf.tcl \ - --target=arm --platform=aeb --startup=stubs \ +if ( echo | tclsh ) 2>/dev/null ; then + TCL=tclsh +elif ( echo | cygtclsh80 ) 2>/dev/null ; then + TCL=cygtclsh80 +else + echo Could not find TCL interpreter + exit 1 +fi + +$TCL $1/pkgconf.tcl \ + --target=arm --platform=${AEB} --startup=stubs \ --disable CYGPKG_KERNEL --disable CYGPKG_UITRON \ --disable CYGPKG_LIBC --disable CYGPKG_LIBM \ --disable CYGPKG_ERROR --disable CYGPKG_IO \ @@ -12,9 +35,18 @@ tcl $1/pkgconf.tcl --disable CYGPKG_DEVICES_WATCHDOG patch <<END_OF_PATCH -p0 ---- pkgconf/hal.h~ Thu Jul 8 08:26:44 1999 -+++ pkgconf/hal.h Wed Jul 28 10:51:07 1999 -@@ -369,10 +369,10 @@ +--- pkgconf/hal.h.orig Fri Oct 22 09:32:14 1999 ++++ pkgconf/hal.h Wed Oct 27 11:15:09 1999 +@@ -110,7 +110,7 @@ + } + + }}CFG_DATA */ +-#define CYGFUN_HAL_COMMON_KERNEL_SUPPORT ++#undef CYGFUN_HAL_COMMON_KERNEL_SUPPORT + + /* {{CFG_DATA + +@@ -382,10 +382,10 @@ }}CFG_DATA */ @@ -29,3 +61,6 @@ patch <<END_OF_PATCH -p0 /* * NOTE: END_OF_PATCH + +make +make misc
--- a/packages/hal/arm/aeb/current/src/hal_diag.c +++ b/packages/hal/arm/aeb/current/src/hal_diag.c @@ -49,8 +49,9 @@ #include <cyg/hal/hal_intr.h> // interrupt macros #include <cyg/hal/hal_io.h> // IO macros #include <cyg/hal/hal_diag.h> -#ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS #include <cyg/hal/drv_api.h> +#include <cyg/hal/hal_stub.h> // cyg_hal_gdb_interrupt #endif // Assumption: all diagnostic output must be GDB packetized unless this is a ROM (i.e. @@ -269,7 +270,11 @@ hal_diag_write_char(char c) // receive interrupt will be seen when we re-enable interrupts // later. +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + CYG_HAL_GDB_ENTER_CRITICAL_IO_REGION(old); +#else HAL_DISABLE_INTERRUPTS(old); +#endif while(1) { @@ -319,7 +324,11 @@ hal_diag_write_char(char c) // And re-enable interrupts +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + CYG_HAL_GDB_LEAVE_CRITICAL_IO_REGION(old); +#else HAL_RESTORE_INTERRUPTS(old); +#endif } }
--- a/packages/hal/arm/arch/current/ChangeLog +++ b/packages/hal/arm/arch/current/ChangeLog @@ -1,3 +1,25 @@ +1999-11-01 Jonathan Larmour <jlarmour@cygnus.co.uk> + + * src/hal_misc.c (exception_handler): Check for CYGDAT_CYGMON_ENABLE + rather than just CYGPKG_CYGMON + Include <pkgconf/cygmon.h> to get this define + +1999-10-26 Jesper Skov <jskov@cygnus.co.uk> + + * src/vectors.S: Cleaned up LED code a bit. + +1999-10-25 Gary Thomas <gthomas@cygnus.co.uk> + + * src/vectors.S: Reorder context restore so stack changes are + protected (interrupts off). + +1999-10-26 Jesper Skov <jskov@cygnus.co.uk> + + * src/arm.ld: Added support for merging RODATA sections into DATA + * include/hal_io.h: Added BE support. + + * src/vectors.S (LED): Added definition for PID board. + 1999-10-22 Hugo Tyson <hmt@cygnus.co.uk> * src/arm_stub.c (cyg_hal_gdb_running_step):
--- a/packages/hal/arm/arch/current/include/hal_io.h +++ b/packages/hal/arm/arch/current/include/hal_io.h @@ -51,16 +51,22 @@ #include <pkgconf/system.h> #include <cyg/infra/cyg_type.h> +#include <cyg/hal/basetype.h> + //----------------------------------------------------------------------------- // IO Register address. // This type is for recording the address of an IO register. typedef volatile CYG_ADDRWORD HAL_IO_REGISTER; + //----------------------------------------------------------------------------- // BYTE Register access. // Individual and vectorized access to 8 bit registers. +// Little-endian version +#if (CYG_BYTEORDER == CYG_LSBFIRST) + #define HAL_READ_UINT8( _register_, _value_ ) \ ((_value_) = *((volatile CYG_BYTE *)(_register_))) @@ -81,11 +87,39 @@ typedef volatile CYG_ADDRWORD HAL_IO_REG ((volatile CYG_BYTE *)(_register_))[_j_] = (_buf_)[_i_]; \ CYG_MACRO_END +#else // Big-endian version + +#define HAL_READ_UINT8( _register_, _value_ ) \ + ((_value_) = *((volatile CYG_BYTE *)((CYG_ADDRWORD)(_register_)^3))) + +#define HAL_WRITE_UINT8( _register_, _value_ ) \ + (*((volatile CYG_BYTE *)((CYG_ADDRWORD)(_register_)^3)) = (_value_)) + +#define HAL_READ_UINT8_VECTOR( _register_, _buf_, _count_, _step_ ) \ + CYG_MACRO_START \ + cyg_count32 _i_,_j_; \ + volatile CYG_BYTE* _r_ = ((CYG_ADDRWORD)(_register_)^3); \ + for( _i_ = 0, _j_ = 0; _i_ < (_count_); _i_++, _j_ += (_step_)) \ + (_buf_)[_i_] = _r_[_j_]; \ + CYG_MACRO_END + +#define HAL_WRITE_UINT8_VECTOR( _register_, _buf_, _count_, _step_ ) \ + CYG_MACRO_START \ + cyg_count32 _i_,_j_; \ + volatile CYG_BYTE* _r_ = ((CYG_ADDRWORD)(_register_)^3); \ + for( _i_ = 0, _j_ = 0; _i_ < (_count_); _i_++, _j_ += (_step_)) \ + _r_[_j_] = (_buf_)[_i_]; \ + CYG_MACRO_END + +#endif // Big-endian //----------------------------------------------------------------------------- // 16 bit access. // Individual and vectorized access to 16 bit registers. +// Little-endian version +#if (CYG_BYTEORDER == CYG_LSBFIRST) + #define HAL_READ_UINT16( _register_, _value_ ) \ ((_value_) = *((volatile CYG_WORD16 *)(_register_))) @@ -106,9 +140,37 @@ typedef volatile CYG_ADDRWORD HAL_IO_REG ((volatile CYG_WORD16 *)(_register_))[_j_] = (_buf_)[_i_]; \ CYG_MACRO_END +#else // Big-endian version + +#define HAL_READ_UINT16( _register_, _value_ ) \ + ((_value_) = *((volatile CYG_WORD16 *)((CYG_ADDRWORD)(_register_)^3))) + +#define HAL_WRITE_UINT16( _register_, _value_ ) \ + (*((volatile CYG_WORD16 *)((CYG_ADDRWORD)(_register_)^3)) = (_value_)) + +#define HAL_READ_UINT16_VECTOR( _register_, _buf_, _count_, _step_ ) \ + CYG_MACRO_START \ + cyg_count32 _i_,_j_; \ + volatile CYG_WORD16* _r_ = ((CYG_ADDRWORD)(_register_)^3); \ + for( _i_ = 0, _j_ = 0; _i_ < (_count_); _i_++, _j_ += (_step_)) \ + (_buf_)[_i_] = _r_[_j_]; \ + CYG_MACRO_END + +#define HAL_WRITE_UINT16_VECTOR( _register_, _buf_, _count_, _step_ ) \ + CYG_MACRO_START \ + cyg_count32 _i_,_j_; \ + volatile CYG_WORD16* _r_ = ((CYG_ADDRWORD)(_register_)^3); \ + for( _i_ = 0, _j_ = 0; _i_ < (_count_); _i_++, _j_ += (_step_)) \ + _r_[_j_] = (_buf_)[_i_]; \ + CYG_MACRO_END + +#endif // Big-endian + //----------------------------------------------------------------------------- // 32 bit access. // Individual and vectorized access to 32 bit registers. + +// Note: same macros for little- and big-endian systems. #define HAL_READ_UINT32( _register_, _value_ ) \ ((_value_) = *((volatile CYG_WORD32 *)(_register_)))
--- a/packages/hal/arm/arch/current/include/pkgconf/hal_arm.h +++ b/packages/hal/arm/arch/current/include/pkgconf/hal_arm.h @@ -73,6 +73,23 @@ }}CFG_DATA */ #undef CYGHWR_HAL_ARM_DUMP_EXCEPTIONS +/* --------------------------------------------------------------------- + {{CFG_DATA + cdl_option CYGIMP_HAL_PROCESS_ALL_EXCEPTIONS { + display "Process all exceptions with the eCos application" + parent CYGPKG_HAL_ARM + description " + Normal [RAM-based] programs which do not include GDB stubs + defer processing of the illegal instruction exception to GDB. + Setting this options allows the program to explicitly handle + the illegal instruction exception itself. Note: this will + prevent the use of GDB to debug the application as breakpoints + will no longer work." + } + + }}CFG_DATA */ +#undef CYGIMP_HAL_PROCESS_ALL_EXCEPTIONS + /* -------------------------------------------------------------------*/ #endif /* CYGONCE_PKGCONF_HAL_ARM_H */
--- a/packages/hal/arm/arch/current/src/arm.ld +++ b/packages/hal/arm/arch/current/src/arm.ld @@ -35,6 +35,30 @@ INPUT(extras.o) #endif GROUP(libtarget.a libgcc.a) +#if defined(__ARMEB__) +OUTPUT_FORMAT(elf32-bigarm) +#endif + +#if defined(CYG_HAL_STARTUP_STUBS) \ + && defined(CYGPKG_HAL_ARM_PID) \ + && defined(__ARMEB__) +// Note: This is only needed when the PID board is used in BE mode without +// the proper ROM controller part. +// +// In big-endian mode, merge .RODATA sections into the .DATA section. This +// causes the data in these sections to be copied to RAM. When the CPU +// makes byte or halfword access to RAM, A0/A1 are modified correctly. +// This does not happen on ROM access (unless the proper ROM controller +// is used). +// +// This is matched in the PID stubs.ldi file which does not use the +// RODATA macros. +#define MERGE_IN_RODATA *(.rodata*) +#else +// Keep RODATA in separate sections. +#define MERGE_IN_RODATA +#endif + #define ALIGN_LMA 4 #define FOLLOWING(_section_) AT ((LOADADDR (_section_) + SIZEOF (_section_) + ALIGN_LMA - 1) & ~ (ALIGN_LMA - 1)) #define LMA_EQ_VMA @@ -92,7 +116,7 @@ GROUP(libtarget.a libgcc.a) #define SECTION_data(_region_, _vma_, _lma_) \ .data _vma_ : _lma_ \ - { __ram_data_start = ABSOLUTE (.); *(.data*) *(.data1) \ + { __ram_data_start = ABSOLUTE (.); *(.data*) *(.data1) MERGE_IN_RODATA \ _GOT1_START_ = ABSOLUTE (.); *(.got1) _GOT1_END_ = ABSOLUTE (.); \ _GOT2_START_ = ABSOLUTE (.); *(.got2) _GOT2_END_ = ABSOLUTE (.); \ . = ALIGN (4); \
--- a/packages/hal/arm/arch/current/src/arm_stub.c +++ b/packages/hal/arm/arch/current/src/arm_stub.c @@ -16,6 +16,9 @@ #include <stddef.h> #include <pkgconf/hal.h> +#ifdef CYGPKG_CYGMON +#include <pkgconf/cygmon.h> +#endif #ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
--- a/packages/hal/arm/arch/current/src/hal_misc.c +++ b/packages/hal/arm/arch/current/src/hal_misc.c @@ -45,6 +45,9 @@ #ifdef CYGPKG_KERNEL #include <pkgconf/kernel.h> #endif +#ifdef CYGPKG_CYGMON +#include <pkgconf/cygmon.h> +#endif #include <cyg/infra/cyg_type.h> #include <cyg/infra/cyg_trac.h> // tracing macros @@ -101,7 +104,7 @@ static void void exception_handler(HAL_SavedRegisters *regs) { -#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS +#if defined(CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS) && !defined(CYGDAT_CYGMON_ENABLE) if (__mem_fault_handler && regs->vector == CYGNUM_HAL_EXCEPTION_DATA_ACCESS) { regs->pc = (unsigned long)__mem_fault_handler;
--- a/packages/hal/arm/arch/current/src/vectors.S +++ b/packages/hal/arm/arch/current/src/vectors.S @@ -78,8 +78,18 @@ .file "vectors.S" + +// CYGHWR_LED_MACRO can be defined in hal_platform_setup.h. It's free to +// use r0+r1. Argument is in "\x" - cannot use macro arguments since the +// macro may contain #-chars and use of arguments cause these to be +// interpreted as CPP stringify operators. +// See example in PID hal_platform_setup.h. +#ifndef CYGHWR_LED_MACRO +#define CYGHWR_LED_MACRO +#endif .macro LED x + CYGHWR_LED_MACRO .endm @@ -213,7 +223,7 @@ 10: str r2,[r0,#0x30] LED 4 - + #if defined(CYG_HAL_STARTUP_ROM) || defined(CYG_HAL_STARTUP_STUBS) // Relocate [copy] data from ROM to RAM ldr r3,.__rom_data_start @@ -276,6 +286,10 @@ 2: // to single-step through most of the init code, except the below. // Put a breakpoint at the call to cyg_hal_invoke_constructors to // pass over this bit (s-s depends on internal state in the stub). +#endif + +#if defined(CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS) || \ + defined(CYGIMP_HAL_PROCESS_ALL_EXCEPTIONS) mov r0,#0 // move vectors ldr r1,=__exception_handlers ldr r2,[r1,#0x04] // undefined instruction @@ -482,15 +496,15 @@ call_exception_handler: // Restore [interrupted] context mov ip,sp // get stack pointer - ldr lr,[ip,#armreg_lr] - ldr sp,[sp,#armreg_sp] - mrs r0,cpsr // move back to IRQ mode orr r0,r0,#CPSR_IRQ_DISABLE|CPSR_FIQ_DISABLE msr cpsr,r0 nop nop + ldr lr,[ip,#armreg_lr] + ldr sp,[sp,#armreg_sp] + bic r0,r0,#CPSR_MODE_BITS orr r0,r0,#CPSR_IRQ_MODE msr cpsr,r0 @@ -575,9 +589,7 @@ 10: str r4,[r3] #endif -// TEMP mov r0,v6 -// TEMP bl hal_IRQ_handler // determine interrupt source mov v1,r0 // returned vector # @@ -636,15 +648,15 @@ spurious_IRQ: mov ip,sp // get stack pointer - ldr lr,[ip,#armreg_lr] - ldr sp,[sp,#armreg_sp] - mrs r0,cpsr // move back to IRQ mode orr r0,r0,#CPSR_IRQ_DISABLE|CPSR_FIQ_DISABLE msr cpsr,r0 nop nop - + + ldr lr,[ip,#armreg_lr] + ldr sp,[sp,#armreg_sp] + bic r0,r0,#CPSR_MODE_BITS orr r0,r0,#CPSR_IRQ_MODE msr cpsr,r0
--- a/packages/hal/arm/cl7211/current/ChangeLog +++ b/packages/hal/arm/cl7211/current/ChangeLog @@ -1,3 +1,39 @@ +1999-10-27 Gary Thomas <gthomas@cygnus.co.uk> + + * src/cl7211_misc.c (enable_FIQ): New function. Used to re-enable + FIQ interrupts during DRAM refresh code. + + * include/pkgconf/mlt_arm_eb7211_stubs.h: + * include/pkgconf/mlt_arm_eb7211_rom.h: + * include/pkgconf/mlt_arm_eb7211_ram.h: New files. + + * include/pkgconf/mlt_arm_eb7211_rom.ldi: + * include/pkgconf/mlt_arm_eb7211_ram.ldi: + * include/pkgconf/mlt_arm_eb7211_stubs.ldi: + * include/pkgconf/mlt_arm_eb7211_ram.mlt: + * include/pkgconf/mlt_arm_eb7211_rom.mlt: + * include/pkgconf/mlt_arm_eb7211_stubs.mlt: Update for new layout + which describes physical regions completely. + +1999-10-27 Jesper Skov <jskov@cygnus.co.uk> + + * src/hal_diag.c: Fixed conditional include. + +1999-10-26 Hugo Tyson <hmt@cygnus.co.uk> + + * src/hal_diag.c (hal_diag_write_char): Use new macro + CYG_HAL_GDB_ENTER_CRITICAL_IO_REGION and its mate to control + stepping through gdb $O packet output. + +1999-10-25 Gary Thomas <gthomas@cygnus.co.uk> + + * tests/PKGconf.mak: Add DRAM test program. + + * tests/dram_test.c: New file. + + * include/hal_platform_setup.h: Fix DRAM mapping (was slightly + incorrect at end of first DRAM chip). + 1999-10-04 Gary Thomas <gthomas@cygnus.co.uk> * include/hal_platform_setup.h: Allow ROM applications to be linked at "ram" addresses and be automatically relocated at startup time.
new file mode 100644 index 0000000000000000000000000000000000000000..c351918bfd42489822bc4a76d77b6bed0941b2e6 GIT binary patch literal 15900 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 Sj3p<NmFL6H^mh#U`riS7_AJo=
new file mode 100644 index 0000000000000000000000000000000000000000..5e1c5b52d9d67547ac347786cb61d1febcbac39a GIT binary patch literal 15956 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
deleted file mode 100644 index 2c7a2a184b51637e191c514dccbddc5fba971895..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc$@<O00001
--- a/packages/hal/arm/cl7211/current/include/hal_platform_setup.h +++ b/packages/hal/arm/cl7211/current/include/hal_platform_setup.h @@ -73,8 +73,9 @@ #else #define LCD_BUFFER_SIZE 0x00000000 #endif -#define MMU_BASE 0xC0000000+LCD_BUFFER_SIZE -#define PTE_BASE 0xC0004000+LCD_BUFFER_SIZE +#define DRAM_PA_START 0xC0000000 +#define MMU_BASE DRAM_PA_START+LCD_BUFFER_SIZE +#define PTE_BASE DRAM_PA_START+0x4000+LCD_BUFFER_SIZE #if (CYGHWR_HAL_ARM_CL7211_DRAM_SIZE == 2) #define MMU_TABLES_SIZE 0x4000+0x1000+0x1000 // RAM used for PTE entries #define DRAM_LA_END 0x00200000-MMU_TABLES_SIZE @@ -201,10 +202,10 @@ 10: mov r6,r2 /* Set up page table desc orr r6,r6,r7 ;\ str r6,[r1],#4 /* Store PTE, update pointer */ ;\ ldr r8,=MMU_SECTION_SIZE/MMU_PAGE_SIZE ;\ - ldr r6,=DRAM_PA+0x00800000 /* Need to skip at 8M boundary */ ;\ - cmp r5,r6 ;\ + ldr r9,=DRAM_PA_START+0x00800000 /* Need to skip at 8M boundary */ ;\ +12: cmp r5,r9 ;\ bne 15f ;\ - ldr r5,=DRAM_PA+0x01000000 /* Next chunk of DRAM */ ;\ + ldr r5,=DRAM_PA_START+0x01000000 /* Next chunk of DRAM */ ;\ 15: mov r6,r5 /* Build page table entry */ ;\ ldr r7,=MMU_L2_TYPE_Small|MMU_AP_Any|MMU_Bufferable|MMU_Cacheable ;\ orr r6,r6,r7 ;\ @@ -216,7 +217,7 @@ 15: mov r6,r5 /* Build page table entry beq 20f ;\ sub r8,r8,#1 /* End of 1M section? */ ;\ cmp r8,#0 ;\ - bne 15b /* Next page */ ;\ + bne 12b /* Next page */ ;\ b 10b /* Next section */ ;\ 20: #else @@ -252,7 +253,7 @@ 10: ldr r1,=0xFFFFFFFF ;\ mcr MMU_CP,0,r1,MMU_DomainAccess,c0 ;\ ldr r2,=10f ;\ - ldr r3,=__exception_handlers ;\ + ldr r3,=__exception_handlers ;\ sub r2,r2,r3 ;\ ldr r3,=ROM0_LA_START ;\ add r2,r2,r3 ;\ @@ -396,17 +397,17 @@ 10: orr r0,r5,r6 cmp r3,r4 ;\ bne 10b ;\ /* Now initialize the MMU to use this new page table */ ;\ - MMU_INITIALIZE ;\ - ldr r2,=__exception_handlers ;\ - ldr r3,=ROM0_LA_START ;\ - cmp r2,r3 ;\ - beq 20f ;\ - ldr r4,=__rom_data_end ;\ -15: ;\ - ldr r0,[r3],#4 ;\ - str r0,[r2],#4 ;\ - cmp r2,r4 ;\ - bne 15b ;\ + MMU_INITIALIZE ;\ + ldr r2,=__exception_handlers ;\ + ldr r3,=ROM0_LA_START ;\ + cmp r2,r3 ;\ + beq 20f ;\ + ldr r4,=__rom_data_end ;\ +15: ;\ + ldr r0,[r3],#4 ;\ + str r0,[r2],#4 ;\ + cmp r2,r4 ;\ + bne 15b ;\ 20: #else
--- a/packages/hal/arm/cl7211/current/include/pkgconf/hal_arm_cl7211.h +++ b/packages/hal/arm/cl7211/current/include/pkgconf/hal_arm_cl7211.h @@ -186,6 +186,23 @@ /* ---------------------------------------------------------------------------- {{CFG_DATA + cdl_option CYGHWR_HAL_ARM_CL7211_SOFTWARE_DRAM_REFRESH { + display "Perform DRAM refresh in software" + type bool + parent CYGPKG_HAL_ARM_CL7211 + description " + This option will add code that refreshes the DRAM by + touching all of DRAM during the system clock interrupt + processing." + } + + }}CFG_DATA */ + +#define CYGHWR_HAL_ARM_CL7211_SOFTWARE_DRAM_REFRESH + +/* ---------------------------------------------------------------------------- + {{CFG_DATA + cdl_option CYGHWR_HAL_ARM_CL7211_LCD_INSTALLED { display "LCD panel" type bool
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/cl7211/current/include/pkgconf/mlt_arm_eb7211_ram.h @@ -0,0 +1,41 @@ +//=========================================================================== +// +// MLT linker script export +// +//=========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Cygnus eCos Public License +// Version 1.0 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://sourceware.cygnus.com/ecos +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Cygnus Operating System, released +// September 30, 1998. +// +// The Initial Developer of the Original Code is Cygnus. Portions created +// by Cygnus are Copyright (C) 1998,1999 Cygnus Solutions. All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//=========================================================================== + +// eCos memory layout - Wed Oct 27 13:28:21 1999 + +// This is a generated file - do not edit + +#include <cyg/infra/cyg_type.h> +#include <stddef.h> + +#define CYGMEM_REGION_ram (0) +#define CYGMEM_REGION_ram_SIZE (0x1000000) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +extern char CYG_LABEL_NAME (_Reserved) []; +#define CYGMEM_SECTION_Reserved (CYG_LABEL_NAME (_Reserved)) +#define CYGMEM_SECTION_Reserved_SIZE (0x8000 - (size_t) CYG_LABEL_NAME (_Reserved))
--- a/packages/hal/arm/cl7211/current/include/pkgconf/mlt_arm_eb7211_ram.ldi +++ b/packages/hal/arm/cl7211/current/include/pkgconf/mlt_arm_eb7211_ram.ldi @@ -26,26 +26,27 @@ //####COPYRIGHTEND#### //=========================================================================== -// eCos memory layout - Mon May 17 08:04:39 1999 - -// This is a generated file - do not edit - -MEMORY -{ - ram : ORIGIN = 0x8000, LENGTH = 0x00FF8000 -} - -SECTIONS -{ - SECTIONS_BEGIN - SECTION_rom_vectors (ram, 0x8000, LMA_EQ_VMA) - SECTION_text (ram, ALIGN (0x1), LMA_EQ_VMA) - SECTION_fini (ram, ALIGN (0x1), LMA_EQ_VMA) - SECTION_rodata (ram, ALIGN (0x1), LMA_EQ_VMA) - SECTION_rodata1 (ram, ALIGN (0x1), LMA_EQ_VMA) - SECTION_fixup (ram, ALIGN (0x1), LMA_EQ_VMA) - SECTION_gcc_except_table (ram, ALIGN (0x1), LMA_EQ_VMA) - SECTION_data (ram, ALIGN (0x1), LMA_EQ_VMA) - SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) - SECTIONS_END -} +// eCos memory layout - Wed Oct 27 13:28:21 1999 + +// This is a generated file - do not edit + +MEMORY +{ + ram : ORIGIN = 0, LENGTH = 0x1000000 +} + +SECTIONS +{ + SECTIONS_BEGIN + __Reserved = 0; + SECTION_rom_vectors (ram, 0x8000, LMA_EQ_VMA) + SECTION_text (ram, ALIGN (0x1), LMA_EQ_VMA) + SECTION_fini (ram, ALIGN (0x1), LMA_EQ_VMA) + SECTION_rodata (ram, ALIGN (0x1), LMA_EQ_VMA) + SECTION_rodata1 (ram, ALIGN (0x1), LMA_EQ_VMA) + SECTION_fixup (ram, ALIGN (0x1), LMA_EQ_VMA) + SECTION_gcc_except_table (ram, ALIGN (0x1), LMA_EQ_VMA) + SECTION_data (ram, ALIGN (0x1), LMA_EQ_VMA) + SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTIONS_END +}
--- a/packages/hal/arm/cl7211/current/include/pkgconf/mlt_arm_eb7211_ram.mlt +++ b/packages/hal/arm/cl7211/current/include/pkgconf/mlt_arm_eb7211_ram.mlt @@ -1,11 +1,40 @@ -version 0 -region ram 8000 ff8000 0 ! -section rom_vectors 0 1 0 1 1 1 1 1 8000 8000 text text ! -section text 0 1 0 1 0 1 0 1 fini fini ! -section fini 0 1 0 1 0 1 0 1 rodata rodata ! -section rodata 0 1 0 1 0 1 0 1 rodata1 rodata1 ! -section rodata1 0 1 0 1 0 1 0 1 fixup fixup ! -section fixup 0 1 0 1 0 1 0 1 gcc_except_table gcc_except_table ! -section gcc_except_table 0 1 0 1 0 1 0 1 data data ! -section data 0 1 0 1 0 1 0 1 bss bss ! -section bss 0 4 0 1 0 0 0 0 ! +//=========================================================================== +// +// MLT linker script export +// +//=========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Cygnus eCos Public License +// Version 1.0 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://sourceware.cygnus.com/ecos +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Cygnus Operating System, released +// September 30, 1998. +// +// The Initial Developer of the Original Code is Cygnus. Portions created +// by Cygnus are Copyright (C) 1998,1999 Cygnus Solutions. All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//=========================================================================== + +version 0 +region ram 0 1000000 0 !DRAM +section Reserved 0 1 0 0 1 0 1 0 0 0 ! +section rom_vectors 0 1 0 1 1 1 1 1 8000 8000 text text ! +section text 0 1 0 1 0 1 0 1 fini fini ! +section fini 0 1 0 1 0 1 0 1 rodata rodata ! +section rodata 0 1 0 1 0 1 0 1 rodata1 rodata1 ! +section rodata1 0 1 0 1 0 1 0 1 fixup fixup ! +section fixup 0 1 0 1 0 1 0 1 gcc_except_table gcc_except_table ! +section gcc_except_table 0 1 0 1 0 1 0 1 data data ! +section data 0 1 0 1 0 1 0 1 bss bss ! +section bss 0 4 0 1 0 0 0 0 !
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/cl7211/current/include/pkgconf/mlt_arm_eb7211_rom.h @@ -0,0 +1,44 @@ +//=========================================================================== +// +// MLT linker script export +// +//=========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Cygnus eCos Public License +// Version 1.0 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://sourceware.cygnus.com/ecos +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Cygnus Operating System, released +// September 30, 1998. +// +// The Initial Developer of the Original Code is Cygnus. Portions created +// by Cygnus are Copyright (C) 1998,1999 Cygnus Solutions. All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//=========================================================================== + +// eCos memory layout - Wed Oct 27 13:34:16 1999 + +// This is a generated file - do not edit + +#include <cyg/infra/cyg_type.h> +#include <stddef.h> + +#define CYGMEM_REGION_ram (0) +#define CYGMEM_REGION_ram_SIZE (0x1000000) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#define CYGMEM_REGION_rom (0xe0000000) +#define CYGMEM_REGION_rom_SIZE (0x800000) +#define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R) +extern char CYG_LABEL_NAME (_Reserved) []; +#define CYGMEM_SECTION_Reserved (CYG_LABEL_NAME (_Reserved)) +#define CYGMEM_SECTION_Reserved_SIZE (0x1000 - (size_t) CYG_LABEL_NAME (_Reserved))
--- a/packages/hal/arm/cl7211/current/include/pkgconf/mlt_arm_eb7211_rom.ldi +++ b/packages/hal/arm/cl7211/current/include/pkgconf/mlt_arm_eb7211_rom.ldi @@ -26,27 +26,28 @@ //####COPYRIGHTEND#### //=========================================================================== -// eCos memory layout - Tue Jun 15 18:13:06 1999 - -// This is a generated file - do not edit - -MEMORY -{ - ram : ORIGIN = 0x1000, LENGTH = 0x00FFF000 - rom : ORIGIN = 0xe0000000, LENGTH = 0x800000 -} - -SECTIONS -{ - SECTIONS_BEGIN - SECTION_rom_vectors (rom, 0xe0000000, LMA_EQ_VMA) - SECTION_text (rom, ALIGN (0x1), LMA_EQ_VMA) - SECTION_fini (rom, ALIGN (0x1), LMA_EQ_VMA) - SECTION_rodata (rom, ALIGN (0x1), LMA_EQ_VMA) - SECTION_rodata1 (rom, ALIGN (0x1), LMA_EQ_VMA) - SECTION_fixup (rom, ALIGN (0x1), LMA_EQ_VMA) - SECTION_gcc_except_table (rom, ALIGN (0x1), LMA_EQ_VMA) - SECTION_data (ram, 0x1000, FOLLOWING (.gcc_except_table)) - SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) - SECTIONS_END -} +// eCos memory layout - Wed Oct 27 13:34:16 1999 + +// This is a generated file - do not edit + +MEMORY +{ + ram : ORIGIN = 0, LENGTH = 0x1000000 + rom : ORIGIN = 0xe0000000, LENGTH = 0x800000 +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (rom, 0xe0000000, LMA_EQ_VMA) + SECTION_text (rom, ALIGN (0x1), LMA_EQ_VMA) + SECTION_fini (rom, ALIGN (0x1), LMA_EQ_VMA) + SECTION_rodata (rom, ALIGN (0x1), LMA_EQ_VMA) + SECTION_rodata1 (rom, ALIGN (0x1), LMA_EQ_VMA) + SECTION_fixup (rom, ALIGN (0x1), LMA_EQ_VMA) + SECTION_gcc_except_table (rom, ALIGN (0x1), LMA_EQ_VMA) + __Reserved = 0; + SECTION_data (ram, 0x1000, FOLLOWING (.gcc_except_table)) + SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTIONS_END +}
--- a/packages/hal/arm/cl7211/current/include/pkgconf/mlt_arm_eb7211_rom.mlt +++ b/packages/hal/arm/cl7211/current/include/pkgconf/mlt_arm_eb7211_rom.mlt @@ -1,12 +1,41 @@ -version 0 -region ram 1000 fff000 0 ! -region rom e0000000 800000 1 !This is ROM bank 0, physical address 0x00000000.When running eCos, this space is remapped to 0xE0000000. -section data 0 1 1 1 1 1 0 0 1000 bss ! -section bss 0 4 0 1 0 0 0 0 ! -section rom_vectors 0 1 0 1 1 1 1 1 e0000000 e0000000 text text ! -section text 0 1 0 1 0 1 0 1 fini fini ! -section fini 0 1 0 1 0 1 0 1 rodata rodata ! -section rodata 0 1 0 1 0 1 0 1 rodata1 rodata1 ! -section rodata1 0 1 0 1 0 1 0 1 fixup fixup ! -section fixup 0 1 0 1 0 1 0 1 gcc_except_table gcc_except_table ! -section gcc_except_table 0 1 0 1 0 0 0 1 data ! +//=========================================================================== +// +// MLT linker script export +// +//=========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Cygnus eCos Public License +// Version 1.0 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://sourceware.cygnus.com/ecos +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Cygnus Operating System, released +// September 30, 1998. +// +// The Initial Developer of the Original Code is Cygnus. Portions created +// by Cygnus are Copyright (C) 1998,1999 Cygnus Solutions. All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//=========================================================================== + +version 0 +region ram 0 1000000 0 ! +region rom e0000000 800000 1 !This is ROM bank 0, physical address 0x00000000.When running eCos, this space is remapped to 0xE0000000. +section Reserved 0 1 0 0 1 0 1 0 0 0 ! +section data 0 1 1 1 1 1 0 0 1000 bss ! +section bss 0 4 0 1 0 0 0 0 ! +section rom_vectors 0 1 0 1 1 1 1 1 e0000000 e0000000 text text ! +section text 0 1 0 1 0 1 0 1 fini fini ! +section fini 0 1 0 1 0 1 0 1 rodata rodata ! +section rodata 0 1 0 1 0 1 0 1 rodata1 rodata1 ! +section rodata1 0 1 0 1 0 1 0 1 fixup fixup ! +section fixup 0 1 0 1 0 1 0 1 gcc_except_table gcc_except_table ! +section gcc_except_table 0 1 0 1 0 0 0 1 data !
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/cl7211/current/include/pkgconf/mlt_arm_eb7211_stubs.h @@ -0,0 +1,44 @@ +//=========================================================================== +// +// MLT linker script export +// +//=========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Cygnus eCos Public License +// Version 1.0 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://sourceware.cygnus.com/ecos +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Cygnus Operating System, released +// September 30, 1998. +// +// The Initial Developer of the Original Code is Cygnus. Portions created +// by Cygnus are Copyright (C) 1998,1999 Cygnus Solutions. All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//=========================================================================== + +// eCos memory layout - Wed Oct 27 13:37:57 1999 + +// This is a generated file - do not edit + +#include <cyg/infra/cyg_type.h> +#include <stddef.h> + +#define CYGMEM_REGION_ram (0) +#define CYGMEM_REGION_ram_SIZE (0x1000000) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#define CYGMEM_REGION_rom (0xe0000000) +#define CYGMEM_REGION_rom_SIZE (0x800000) +#define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R) +extern char CYG_LABEL_NAME (_Reserved) []; +#define CYGMEM_SECTION_Reserved (CYG_LABEL_NAME (_Reserved)) +#define CYGMEM_SECTION_Reserved_SIZE (0x1000 - (size_t) CYG_LABEL_NAME (_Reserved))
--- a/packages/hal/arm/cl7211/current/include/pkgconf/mlt_arm_eb7211_stubs.ldi +++ b/packages/hal/arm/cl7211/current/include/pkgconf/mlt_arm_eb7211_stubs.ldi @@ -26,27 +26,28 @@ //####COPYRIGHTEND#### //=========================================================================== -// eCos memory layout - Tue Jun 15 18:13:06 1999 - -// This is a generated file - do not edit - -MEMORY -{ - ram : ORIGIN = 0x1000, LENGTH = 0x7000 - rom : ORIGIN = 0xe0000000, LENGTH = 0x800000 -} - -SECTIONS -{ - SECTIONS_BEGIN - SECTION_rom_vectors (rom, 0xe0000000, LMA_EQ_VMA) - SECTION_text (rom, ALIGN (0x1), LMA_EQ_VMA) - SECTION_fini (rom, ALIGN (0x1), LMA_EQ_VMA) - SECTION_rodata (rom, ALIGN (0x1), LMA_EQ_VMA) - SECTION_rodata1 (rom, ALIGN (0x1), LMA_EQ_VMA) - SECTION_fixup (rom, ALIGN (0x1), LMA_EQ_VMA) - SECTION_gcc_except_table (rom, ALIGN (0x1), LMA_EQ_VMA) - SECTION_data (ram, 0x1000, FOLLOWING (.gcc_except_table)) - SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) - SECTIONS_END -} +// eCos memory layout - Wed Oct 27 13:37:57 1999 + +// This is a generated file - do not edit + +MEMORY +{ + ram : ORIGIN = 0, LENGTH = 0x1000000 + rom : ORIGIN = 0xe0000000, LENGTH = 0x800000 +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (rom, 0xe0000000, LMA_EQ_VMA) + SECTION_text (rom, ALIGN (0x1), LMA_EQ_VMA) + SECTION_fini (rom, ALIGN (0x1), LMA_EQ_VMA) + SECTION_rodata (rom, ALIGN (0x1), LMA_EQ_VMA) + SECTION_rodata1 (rom, ALIGN (0x1), LMA_EQ_VMA) + SECTION_fixup (rom, ALIGN (0x1), LMA_EQ_VMA) + SECTION_gcc_except_table (rom, ALIGN (0x1), LMA_EQ_VMA) + __Reserved = 0; + SECTION_data (ram, 0x1000, FOLLOWING (.gcc_except_table)) + SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTIONS_END +}
--- a/packages/hal/arm/cl7211/current/include/pkgconf/mlt_arm_eb7211_stubs.mlt +++ b/packages/hal/arm/cl7211/current/include/pkgconf/mlt_arm_eb7211_stubs.mlt @@ -1,12 +1,41 @@ -version 0 -region ram 1000 7000 0 ! -region rom e0000000 800000 1 !This is ROM bank 0, physical address 0x00000000.When running eCos, this space is remapped to 0xE0000000. -section data 0 1 1 1 1 1 0 0 1000 bss ! -section bss 0 4 0 1 0 0 0 0 ! -section rom_vectors 0 1 0 1 1 1 1 1 e0000000 e0000000 text text ! -section text 0 1 0 1 0 1 0 1 fini fini ! -section fini 0 1 0 1 0 1 0 1 rodata rodata ! -section rodata 0 1 0 1 0 1 0 1 rodata1 rodata1 ! -section rodata1 0 1 0 1 0 1 0 1 fixup fixup ! -section fixup 0 1 0 1 0 1 0 1 gcc_except_table gcc_except_table ! -section gcc_except_table 0 1 0 1 0 0 0 1 data ! +//=========================================================================== +// +// MLT linker script export +// +//=========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Cygnus eCos Public License +// Version 1.0 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://sourceware.cygnus.com/ecos +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Cygnus Operating System, released +// September 30, 1998. +// +// The Initial Developer of the Original Code is Cygnus. Portions created +// by Cygnus are Copyright (C) 1998,1999 Cygnus Solutions. All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//=========================================================================== + +version 0 +region ram 0 1000000 0 ! +region rom e0000000 800000 1 !This is ROM bank 0, physical address 0x00000000.When running eCos, this space is remapped to 0xE0000000. +section Reserved 0 1 0 0 1 0 1 0 0 0 ! +section data 0 1 1 1 1 1 0 0 1000 bss ! +section bss 0 4 0 1 0 0 0 0 ! +section rom_vectors 0 1 0 1 1 1 1 1 e0000000 e0000000 text text ! +section text 0 1 0 1 0 1 0 1 fini fini ! +section fini 0 1 0 1 0 1 0 1 rodata rodata ! +section rodata 0 1 0 1 0 1 0 1 rodata1 rodata1 ! +section rodata1 0 1 0 1 0 1 0 1 fixup fixup ! +section fixup 0 1 0 1 0 1 0 1 gcc_except_table gcc_except_table ! +section gcc_except_table 0 1 0 1 0 0 0 1 data !
--- a/packages/hal/arm/cl7211/current/misc/STUBS_config +++ b/packages/hal/arm/cl7211/current/misc/STUBS_config @@ -1,20 +1,29 @@ #! /bin/sh -# usage: STUBS_config <repository> [cl7211 | cl7111] +# usage: STUBS_config <repository> [eb7211 | cl7111] if [ "$2"x = "x" ]; then - CL7x11="cl7211" + CL7x11="eb7211" else CL7x11=$2 fi -tcl $1/pkgconf.tcl \ +if ( echo | tclsh ) 2>/dev/null ; then + TCL=tclsh +elif ( echo | cygtclsh80 ) 2>/dev/null ; then + TCL=cygtclsh80 +else + echo Could not find TCL interpreter + exit 1 +fi + +$TCL $1/pkgconf.tcl \ --target=arm --platform=${CL7x11} --startup=stubs \ --disable CYGPKG_KERNEL --disable CYGPKG_UITRON \ --disable CYGPKG_LIBC --disable CYGPKG_LIBM \ --disable CYGPKG_ERROR --disable CYGPKG_IO \ --disable CYGPKG_IO_SERIAL --disable CYGPKG_DEVICES_WALLCLOCK \ - --disable CYGPKG_DEVICES_WATCHDOG + --disable CYGPKG_DEVICES_WATCHDOG --disable-cygmon patch <<END_OF_PATCH -p0 --- pkgconf/hal.h~ Thu Jul 8 08:26:44 1999
--- a/packages/hal/arm/cl7211/current/src/cl7211_misc.c +++ b/packages/hal/arm/cl7211/current/src/cl7211_misc.c @@ -91,6 +91,35 @@ void hal_clock_initialize(cyg_uint32 per // This routine is called during a clock interrupt. +#ifdef CYGHWR_HAL_ARM_CL7211_SOFTWARE_DRAM_REFRESH +#define DRAM_START 0x00000000 +#define DRAM_END 0x01000000 +#define DRAM_ROW_SIZE 0x00000400 +#define DRAM_REFRESH (((DRAM_END-DRAM_START)/DRAM_ROW_SIZE)+99)/100 + +static void __inline__ +enable_FIQ(void) +{ + asm volatile ("mrs r0,cpsr;" + "bic r0,r0,#0x40;" + "msr cpsr,r0"); +} + +static void +do_DRAM_refresh(void) +{ + static cyg_uint32 *row_ptr; + volatile cyg_uint32 val; + int i; + enable_FIQ(); // Should be safe here + for (i = 0; i < DRAM_REFRESH; i++) { + val = *row_ptr; + row_ptr += DRAM_ROW_SIZE / sizeof(*row_ptr); + if (row_ptr >= (cyg_uint32 *)DRAM_END) row_ptr = (cyg_uint32 *)DRAM_START; + } +} +#endif // CYGHWR_HAL_ARM_CL7211_SOFTWARE_DRAM_REFRESH + void hal_clock_reset(cyg_uint32 vector, cyg_uint32 period) { volatile cyg_uint32 *tc2d = (volatile cyg_uint32 *)TC2D; @@ -98,6 +127,9 @@ void hal_clock_reset(cyg_uint32 vector, *tc2d = period; _period = period; } +#ifdef CYGHWR_HAL_ARM_CL7211_SOFTWARE_DRAM_REFRESH + do_DRAM_refresh(); +#endif } // Read the current value of the clock, returning the number of hardware "ticks"
--- a/packages/hal/arm/cl7211/current/src/hal_diag.c +++ b/packages/hal/arm/cl7211/current/src/hal_diag.c @@ -51,8 +51,9 @@ #include <cyg/hal/hal_intr.h> // interrupt macros #include <cyg/hal/hal_io.h> // IO macros #include <cyg/hal/hal_diag.h> -#ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS #include <cyg/hal/drv_api.h> +#include <cyg/hal/hal_stub.h> // cyg_hal_gdb_interrupt #endif #include <cyg/hal/hal_cl7211.h> // Hardware definitions @@ -201,7 +202,11 @@ hal_diag_write_char(char c) // receive interrupt will be seen when we re-enable interrupts // later. +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + CYG_HAL_GDB_ENTER_CRITICAL_IO_REGION(old); +#else HAL_DISABLE_INTERRUPTS(old); +#endif while(1) { @@ -251,7 +256,11 @@ hal_diag_write_char(char c) // And re-enable interrupts +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + CYG_HAL_GDB_LEAVE_CRITICAL_IO_REGION(old); +#else HAL_RESTORE_INTERRUPTS(old); +#endif } }
--- a/packages/hal/arm/cl7211/current/support/Makefile +++ b/packages/hal/arm/cl7211/current/support/Makefile @@ -3,12 +3,11 @@ # DL_FILES = dl_7211.o io.o -DOWNLOAD_FILES = download_file.o io.o +ALL := dl_7211 -all: dl_7211 download + +all: $(ALL) dl_7211: $(DL_FILES) $(CC) -o $@ $(DL_FILES) -download: $(DOWNLOAD_FILES) - $(CC) -o $@ $(DOWNLOAD_FILES)
deleted file mode 100644 --- a/packages/hal/arm/cl7211/current/support/download_file.c +++ /dev/null @@ -1,260 +0,0 @@ -//**************************************************************************** -// -// download_file.c - Send a raw data file to the EB72xx board. -// -// Adapted from the Cirrus Logic 'DOWNLOAD.C' program -// -// Copyright (c) 1999 Cirrus Logic, Inc. -// -// Adapted for Linux by Cygnus Solutions, Inc. -// -//**************************************************************************** -#include <stdio.h> -#include "bootcode.h" - -#define DEFAULT_PORT "/dev/ttyS0" -extern char ReceiveChar(long); -extern void SendChar(long, char); -extern void SetBaud(long, long); -extern int CharRead(long port); -extern void WaitForOutputReady(long port); -extern long OpenPort(char *); - -//**************************************************************************** -// -// WaitFor waits until a specific character is read from the comm port. -// -//**************************************************************************** -void -WaitFor(long lPort, char cWaitChar) -{ - char cChar; - - // - // Wait until we read a specific character from the comm port. - // - while(1) - { - // - // Read a character. - // - cChar = ReceiveChar(lPort); - - // - // Stop waiting if we received the character. - // - if(cChar == cWaitChar) - { - break; - } - } -} - -//**************************************************************************** -// -// This program waits for the '<' character from the boot ROM, sends the boot -// code, waits for the '>' from the boot ROM, waits for the '?' from the boot -// code, changes the serial port rate (preferably to 115200), downloads the -// user data file, and then prints out progress status as the boot code writes -// the user data file to the flash. -// -//**************************************************************************** -void -main(int argc, char *argv[]) -{ - long lPort; - long lRate = 38400; - long lFileSize, lIdx; - char cChar, cFirstChar, *pcFile, cRateChar; - FILE *pFile; - - // - // Make sure that a filename was specified. - // - if(argc < 2) - { - fprintf(stderr, "Usage: download <filename> {<baud rate> {<comm port>}}\n"); - return; - } - - // - // If a baud rate was specified, then read it and make sure it is valid. - // - if(argc > 2) - { - lRate = atoi(argv[2]); - if((lRate != 9600) && (lRate != 19200) && (lRate != 28800) && - (lRate != 38400) && (lRate != 57600) && (lRate != 115200)) - { - fprintf(stderr, "Invalid baud rate.\n"); - return; - } - } - - // - // If a comm port was specified, then read it and make sure it is valid. - // - if(argc > 3) - { - lPort = OpenPort(argv[3]); - } else - { - lPort = OpenPort(DEFAULT_PORT); - } - if (lPort < 0) - { - fprintf(stderr, "Can't open port\n"); - return; - } - - // - // Open the file to be downloaded. - // - pFile = fopen(argv[1], "rb"); - if(!pFile) - { - fprintf(stderr, "Could not open file '%s'.\n", argv[1]); - return; - } - - // - // Get the size of the file. - // - fseek(pFile, 0, SEEK_END); - lFileSize = ftell(pFile); - fseek(pFile, 0, SEEK_SET); - - // - // Allocate memory to hold the file contents. - // - pcFile = (char *)malloc(lFileSize); - if(!pcFile) - { - fprintf(stderr, "Failed to allocate memory for the file.\n"); - return; - } - - // - // Read the contents of the file into memory. - // - if(fread(pcFile, 1, lFileSize, pFile) != lFileSize) - { - fprintf(stderr, "Failed to read file '%s'.\n", argv[1]); - return; - } - - // - // Close the file. - // - fclose(pFile); - - // - // Open the port to the desired baud rate. - // - SetBaud(lPort, lRate); - - // - // Empty out the input queue. - // - while(CharReady(lPort)) - { - cChar = ReceiveChar(lPort); - } - - // - // Tell the user to reset the board. - // - fprintf(stderr, "Waiting for the board to wakeup..."); - - // - // Send a '-' character until we receive back a '?' character. - // - while(1) - { - // - // Send a '-' character. - // - SendChar(lPort, '-'); - - // - // Wait a little bit. - // - for(lIdx = 0; lIdx < 1024 * 1024; lIdx++) - { - } - - // - // See if there is a character waiting to be read. - // - if(CharReady(lPort)) - { - // - // Read the character. - // - cChar = ReceiveChar(lPort); - - // - // Quit waiting if this is a '?'. - // - if(cChar == '?') - { - break; - } - } - } - - // - // Empty out the input queue. - // - while(CharReady(lPort)) - { - cChar = ReceiveChar(lPort); - } - - // - // Send the download file "command" - // - SendChar(lPort, 'D'); - - // - // Send the length of the data file. - // - SendChar(lPort, (char)(lFileSize & 0xFF)); - SendChar(lPort, (char)((lFileSize >> 8) & 0xFF)); - SendChar(lPort, (char)((lFileSize >> 16) & 0xFF)); - SendChar(lPort, (char)((lFileSize >> 24) & 0xFF)); - - // - // Tell the user that we are downloading the file data. - // - fprintf(stderr, "\nDownloading file data...( 0%%)"); - - // - // Send the actual data in the file. - // - for(lIdx = 0; lIdx < lFileSize; lIdx++) - { - // - // Send this byte. - // - SendChar(lPort, pcFile[lIdx]); - - // - // Periodically print out our progress. - // - if((lIdx & 127) == 127) - { - fprintf(stderr, "\b\b\b\b\b%3d%%)", ((lIdx + 1) * 100) / lFileSize); - // - // Read a character from the boot code. - // - cChar = ReceiveChar(lPort); - } - } - - // - // Tell the user we are done. - // - fprintf(stderr, "\nSuccessfully downloaded '%s'.\n", argv[1]); -} -
--- a/packages/hal/arm/cl7211/current/tests/PKGconf.mak +++ b/packages/hal/arm/cl7211/current/tests/PKGconf.mak @@ -31,7 +31,7 @@ PACKAGE := hal_arm_cl7211 include ../../../../../pkgconf/pkgconf.mak -TESTS := +TESTS := dram_test include $(COMPONENT_REPOSITORY)/pkgconf/makrules.tst
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/cl7211/current/tests/dram_test.c @@ -0,0 +1,316 @@ +//========================================================================== +// +// dram_test.c +// +// Cirrus EB72xx eval board DRAM test code +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Cygnus eCos Public License +// Version 1.0 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://sourceware.cygnus.com/ecos +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Cygnus Operating System, released +// September 30, 1998. +// +// The Initial Developer of the Original Code is Cygnus. Portions created +// by Cygnus are Copyright (C) 1998,1999 Cygnus Solutions. All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): gthomas +// Contributors: gthomas +// Date: 1999-10-22 +// Description: Tool used to test DRAM on eval boards +//####DESCRIPTIONEND#### + +#include <pkgconf/kernel.h> // Configuration header +#include <cyg/kernel/kapi.h> +#include <cyg/infra/diag.h> + +#include <cyg/hal/hal_cl7211.h> // Board definitions + +#ifndef FALSE +#define FALSE 0 +#define TRUE 1 +#endif + +#define STACK_SIZE 4096 +static char stack[STACK_SIZE]; +static cyg_thread thread_data; +static cyg_handle_t thread_handle; + +extern char _end; +int total_errors; +int run_errors; +int error_count; +#define MAX_ERRORS 5 +#define NUM_RUNS 25 +#define REFRESH_TIME 5 + +int decay_time[] = { 50, 100, 200, 500, 1000 }; +#define NUM_DECAY sizeof(decay_time)/sizeof(decay_time[0]) + +// FUNCTIONS + +static void +cyg_test_exit(void) +{ + while (TRUE) ; +} + +static void +new_test(void) +{ + error_count = 0; +} + +static void +report_error(void *addr, cyg_uint32 actual, cyg_uint32 expected) +{ + total_errors++; + run_errors++; + if (++error_count > MAX_ERRORS) return; + diag_printf(" 0x%08x: expected - 0x%08x, actual - 0x%08x\n", + addr, expected, actual); +} + +// Fill longwords with their own address and verify + +static void +addr_test(cyg_uint32 start, cyg_uint32 end) +{ + cyg_uint32 *mp; + + new_test(); + diag_printf("-- Address test\n"); + for (mp = (cyg_uint32 *)start; mp < (cyg_uint32 *)end; mp++) { + *mp = (cyg_uint32)mp; + } + for (mp = (cyg_uint32 *)start; mp < (cyg_uint32 *)end; mp++) { + if (*mp != (cyg_uint32)mp) { + report_error(mp, *mp, (cyg_uint32)mp); + } + } +} + +// Fill longwords with zeros + +static void +zeros_test(cyg_uint32 start, cyg_uint32 end) +{ + cyg_uint32 *mp; + + new_test(); + diag_printf("-- Zeros test\n"); + for (mp = (cyg_uint32 *)start; mp < (cyg_uint32 *)end; mp++) { + *mp = (cyg_uint32)0; + } + for (mp = (cyg_uint32 *)start; mp < (cyg_uint32 *)end; mp++) { + if (*mp != (cyg_uint32)0) { + report_error(mp, *mp, (cyg_uint32)0); + } + } +} + +// Fill longwords with all ones + +static void +ones_test(cyg_uint32 start, cyg_uint32 end) +{ + cyg_uint32 *mp; + + new_test(); + diag_printf("-- Ones test\n"); + for (mp = (cyg_uint32 *)start; mp < (cyg_uint32 *)end; mp++) { + *mp = (cyg_uint32)0xFFFFFFFF; + } + for (mp = (cyg_uint32 *)start; mp < (cyg_uint32 *)end; mp++) { + if (*mp != (cyg_uint32)0xFFFFFFFF) { + report_error(mp, *mp, (cyg_uint32)0xFFFFFFFF); + } + } +} + +// Fill longwords with a "walking" bit + +static void +walking_bit_test(cyg_uint32 start, cyg_uint32 end) +{ + cyg_uint32 *mp; + cyg_uint32 bit; + + new_test(); + diag_printf("-- Walking test\n"); + bit = 1; + for (mp = (cyg_uint32 *)start; mp < (cyg_uint32 *)end; mp++) { + *mp = (cyg_uint32)bit; + bit <<= 1; + if (bit == 0) bit = 1; + } + bit = 1; + for (mp = (cyg_uint32 *)start; mp < (cyg_uint32 *)end; mp++) { + if (*mp != (cyg_uint32)bit) { + report_error(mp, *mp, (cyg_uint32)bit); + } + bit <<= 1; + if (bit == 0) bit = 1; + } +} + +// Fill longwords with an alternating pattern + +static void +pattern_test(cyg_uint32 start, cyg_uint32 end) +{ + cyg_uint32 *mp; + cyg_uint32 pat; + + new_test(); + diag_printf("-- Pattern test\n"); + pat = 0x55555555; + for (mp = (cyg_uint32 *)start; mp < (cyg_uint32 *)end; mp++) { + *mp = (cyg_uint32)pat; + } + for (mp = (cyg_uint32 *)start; mp < (cyg_uint32 *)end; mp++) { + if (*mp != (cyg_uint32)pat) { + report_error(mp, *mp, (cyg_uint32)pat); + } + } + pat = 0xAAAAAAAA; + for (mp = (cyg_uint32 *)start; mp < (cyg_uint32 *)end; mp++) { + *mp = (cyg_uint32)pat; + } + for (mp = (cyg_uint32 *)start; mp < (cyg_uint32 *)end; mp++) { + if (*mp != (cyg_uint32)pat) { + report_error(mp, *mp, (cyg_uint32)pat); + } + } +} + +// Verify if refresh works + +static void +refresh_test(cyg_uint32 start, cyg_uint32 end) +{ + cyg_uint32 *mp; + cyg_uint32 pat; + + new_test(); + diag_printf("-- Refresh test\n"); + pat = 0x55555555; + for (mp = (cyg_uint32 *)start; mp < (cyg_uint32 *)end; mp++) { + *mp = (cyg_uint32)pat; + } + cyg_thread_delay(REFRESH_TIME*100); + for (mp = (cyg_uint32 *)start; mp < (cyg_uint32 *)end; mp++) { + if (*mp != (cyg_uint32)pat) { + report_error(mp, *mp, (cyg_uint32)pat); + } + } + pat = 0xAAAAAAAA; + for (mp = (cyg_uint32 *)start; mp < (cyg_uint32 *)end; mp++) { + *mp = (cyg_uint32)pat; + } + cyg_thread_delay(REFRESH_TIME*100); + for (mp = (cyg_uint32 *)start; mp < (cyg_uint32 *)end; mp++) { + if (*mp != (cyg_uint32)pat) { + report_error(mp, *mp, (cyg_uint32)pat); + } + } +} + +// See how long we can "sleep" before refresh fails + +static void +decay_test(cyg_uint32 start, cyg_uint32 end) +{ + cyg_uint32 *mp; + cyg_uint32 pat; + int i; + + diag_printf("-- Decay test\n"); + for (i = 0; i < NUM_DECAY; i++) { + diag_printf(" ... %d.%02d sec delay\n", decay_time[i]/100, decay_time[i]%100); + new_test(); + pat = 0x55555555; + for (mp = (cyg_uint32 *)start; mp < (cyg_uint32 *)end; mp++) { + *mp = (cyg_uint32)pat; + } + cyg_thread_delay(decay_time[i]); + for (mp = (cyg_uint32 *)start; mp < (cyg_uint32 *)end; mp++) { + if (*mp != (cyg_uint32)pat) { + report_error(mp, *mp, (cyg_uint32)pat); + } + } + pat = 0xAAAAAAAA; + for (mp = (cyg_uint32 *)start; mp < (cyg_uint32 *)end; mp++) { + *mp = (cyg_uint32)pat; + } + cyg_thread_delay(decay_time[i]); + for (mp = (cyg_uint32 *)start; mp < (cyg_uint32 *)end; mp++) { + if (*mp != (cyg_uint32)pat) { + report_error(mp, *mp, (cyg_uint32)pat); + } + } + diag_printf(" ... %d errors\n", error_count); + } +} + + +static void +dram_exercise(cyg_addrword_t p) +{ + cyg_uint32 start_DRAM, end_DRAM; + int i; + + end_DRAM = 0x01000000; + end_DRAM = 0x00F80000; + start_DRAM = ((cyg_uint32)&_end + 0x0000FFFF) & 0xFFFF0000; + diag_printf("DRAM test - start: 0x%08x, end: 0x%08x\n", start_DRAM, end_DRAM); + + for (i = 0; i < NUM_RUNS; i++) { + diag_printf("\n*** Start run #%d of %d\n", i+1, NUM_RUNS); + run_errors = 0; + addr_test(start_DRAM, end_DRAM); + ones_test(start_DRAM, end_DRAM); + zeros_test(start_DRAM, end_DRAM); + walking_bit_test(start_DRAM, end_DRAM); + pattern_test(start_DRAM, end_DRAM); + refresh_test(start_DRAM, end_DRAM); + decay_test(start_DRAM, end_DRAM); + diag_printf("\n*** End run, %d errors, %d total errors\n", run_errors, total_errors); + } + + diag_printf("All done!\n"); + cyg_test_exit(); +} + +externC void +cyg_start( void ) +{ + // Create a main thread, so we can run the scheduler and have time 'pass' + cyg_thread_create(10, // Priority - just a number + dram_exercise, // entry + 0, // entry parameter + "DRAM test", // Name + &stack[0], // Stack + STACK_SIZE, // Size + &thread_handle, // Handle + &thread_data // Thread data structure + ); + cyg_thread_resume(thread_handle); // Start it + cyg_scheduler_start(); +} // cyg_package_start() +
--- a/packages/hal/arm/cma230/current/ChangeLog +++ b/packages/hal/arm/cma230/current/ChangeLog @@ -1,3 +1,17 @@ +1999-10-28 Jesper Skov <jskov@cygnus.co.uk> + + * misc/PKGconf.mak: Don't strip symbols when making .img. + +1999-10-27 Jesper Skov <jskov@cygnus.co.uk> + + * src/hal_diag.c: Fixed conditional include. + +1999-10-26 Hugo Tyson <hmt@cygnus.co.uk> + + * src/hal_diag.c (hal_diag_write_char): Use new macro + CYG_HAL_GDB_ENTER_CRITICAL_IO_REGION and its mate to control + stepping through gdb $O packet output. + 1999-10-19 Jonathan Larmour <jlarmour@cygnus.co.uk>
new file mode 100644 index 0000000000000000000000000000000000000000..9160fa07ba09717fdb4b59053f16bbe66f25d832 GIT binary patch literal 24101 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
--- a/packages/hal/arm/cma230/current/misc/PKGconf.mak +++ b/packages/hal/arm/cma230/current/misc/PKGconf.mak @@ -42,7 +42,7 @@ include $(COMPONENT_REPOSITORY)/pkgconf/ ifdef CYG_HAL_STARTUP_STUBS gdb_module.img: gdb_module.stamp - $(OBJCOPY) --strip-all gdb_module$(EXEEXT) gdb_module.img.XX + $(OBJCOPY) --strip-debug gdb_module$(EXEEXT) gdb_module.img.XX $(OBJCOPY) --change-addresses=0x10038000 gdb_module.img.XX gdb_module.img $(OBJCOPY) -O binary gdb_module.img gdb_module.bin $(RM) -f gdb_module.img.XX
--- a/packages/hal/arm/cma230/current/misc/STUBS_config +++ b/packages/hal/arm/cma230/current/misc/STUBS_config @@ -1,6 +1,23 @@ #! /bin/sh +# Configure ARM/CMA230 eCos to create CMA230 GDB stubs +# Ensure that PATH include the directory where the ARM tools reside. +# +# Run from an empty temporary directory with one argument: the path to +# the packages directory (i.e., where pkgconf.tcl lives). +# +# Output file is in the directory hal/arm/cma230/<version>/misc. +# gdb_module.bin: suitable for EPROM programming -tcl $1/pkgconf.tcl \ +if ( echo | tclsh ) 2>/dev/null ; then + TCL=tclsh +elif ( echo | cygtclsh80 ) 2>/dev/null ; then + TCL=cygtclsh80 +else + echo Could not find TCL interpreter + exit 1 +fi + +$TCL $1/pkgconf.tcl \ --target=arm --platform=cma230 --startup=stubs \ --disable CYGPKG_KERNEL --disable CYGPKG_UITRON \ --disable CYGPKG_LIBC --disable CYGPKG_LIBM \ @@ -9,20 +26,32 @@ tcl $1/pkgconf.tcl --disable CYGPKG_DEVICES_WATCHDOG patch <<END_OF_PATCH -p0 ---- pkgconf/hal.h~ Wed Mar 10 13:08:58 1999 -+++ pkgconf/hal.h Thu Mar 11 15:53:16 1999 +--- pkgconf/hal.h.orig Fri Oct 22 09:32:14 1999 ++++ pkgconf/hal.h Wed Oct 27 11:15:09 1999 +@@ -110,7 +110,7 @@ + } + + }}CFG_DATA */ +-#define CYGFUN_HAL_COMMON_KERNEL_SUPPORT ++#undef CYGFUN_HAL_COMMON_KERNEL_SUPPORT + + /* {{CFG_DATA + @@ -382,10 +382,10 @@ }}CFG_DATA */ -#undef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS -+#define CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS ++#define CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS #undef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT -#define CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT -#define CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT -+#undef CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT -+#undef CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT ++#undef CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT ++#undef CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT /* * NOTE: END_OF_PATCH + +make +make misc
--- a/packages/hal/arm/cma230/current/src/hal_diag.c +++ b/packages/hal/arm/cma230/current/src/hal_diag.c @@ -51,8 +51,9 @@ #include <cyg/hal/hal_io.h> // IO macros #include <cyg/hal/hal_diag.h> #include <cyg/hal/hal_cma230.h> // Hardware definitions -#ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS #include <cyg/hal/drv_api.h> +#include <cyg/hal/hal_stub.h> // cyg_hal_gdb_interrupt #endif // Assumption: all diagnostic output must be GDB packetized unless this is a ROM (i.e. @@ -288,7 +289,11 @@ hal_diag_write_char(char c) // receive interrupt will be seen when we re-enable interrupts // later. +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + CYG_HAL_GDB_ENTER_CRITICAL_IO_REGION(old); +#else HAL_DISABLE_INTERRUPTS(old); +#endif while(1) { @@ -337,7 +342,11 @@ hal_diag_write_char(char c) pos = 0; // And re-enable interrupts +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + CYG_HAL_GDB_LEAVE_CRITICAL_IO_REGION(old); +#else HAL_RESTORE_INTERRUPTS(old); +#endif } }
--- a/packages/hal/arm/pid/current/ChangeLog +++ b/packages/hal/arm/pid/current/ChangeLog @@ -1,9 +1,63 @@ +1999-10-29 Jesper Skov <jskov@cygnus.co.uk> + + * misc/PKGconf.mak: Also generate stripped .img files. + +1999-10-29 Jesper Skov <jskov@cygnus.co.uk> + + * include/plf_stub.h (HAL_STUB_PLATFORM_RESET): Call stub entry on + GDB kill. But only do it for stubs startup. + +1999-10-28 Jesper Skov <jskov@cygnus.co.uk> + + * misc/PKGconf.mak: Don't strip symbols when making .img. + +1999-10-27 Jesper Skov <jskov@cygnus.co.uk> + + * include/pkgconf/mlt_arm_pid9_stubs.ldi: + * include/pkgconf/mlt_arm_pid9_stubs.mlt: + Added some linker files. + + * misc/Notes: + * misc/STUBS_config: + Updated. + + * src/hal_diag.c: Fixed conditional include. + +1999-10-26 Hugo Tyson <hmt@cygnus.co.uk> + + * src/hal_diag.c (hal_diag_write_char): Use new macro + CYG_HAL_GDB_ENTER_CRITICAL_IO_REGION and its mate to control + stepping through gdb $O packet output. + +1999-10-26 Jesper Skov <jskov@cygnus.co.uk> + * include/hal_platform_setup.h (CYGHWR_LED_MACRO): define. + * include/pkgconf/hal_arm_pid.h: + * src/hal_diag.c: + * include/hal_diag.h: + Added CDL for CYGHWR_HAL_ARM_PID_DIAG_LEDS. + +1999-10-26 Jesper Skov <jskov@cygnus.co.uk> + * include/pkgconf/mlt_arm_pidBE_ram.ldi: + * include/pkgconf/mlt_arm_pidBE_ram.mlt: + * include/pkgconf/mlt_arm_pidBE_rom.ldi: + * include/pkgconf/mlt_arm_pidBE_rom.mlt: + * include/pkgconf/mlt_arm_pidBE_stubs.ldi: + * include/pkgconf/mlt_arm_pidBE_stubs.mlt: + * include/pkgconf/mlt_arm_pid9_ram.ldi: + * include/pkgconf/mlt_arm_pid9_ram.mlt: + * include/pkgconf/mlt_arm_pid9_rom.ldi: + * include/pkgconf/mlt_arm_pid9_rom.mlt: + Added some linker files. + 1999-10-25 Jesper Skov <jskov@cygnus.co.uk> * misc/STUBS_config: Updated. * src/hal_diag.c (hal_diag_led): Added LED diag. * misc/prog_flash.c: Fixed compiler warning. + * misc/prog_flash.c: + * misc/PKGconf.mak: + Add support for programming BE images on LE system. 1999-10-19 Jesper Skov <jskov@cygnus.co.uk>
--- a/packages/hal/arm/pid/current/include/hal_diag.h +++ b/packages/hal/arm/pid/current/include/hal_diag.h @@ -54,6 +54,8 @@ externC void hal_diag_init(void); externC void hal_diag_write_char(char c); externC void hal_diag_read_char(char *c); +externC void hal_diag_led(int n); + /*---------------------------------------------------------------------------*/ #define HAL_DIAG_INIT() hal_diag_init()
--- a/packages/hal/arm/pid/current/include/hal_platform_setup.h +++ b/packages/hal/arm/pid/current/include/hal_platform_setup.h @@ -43,6 +43,19 @@ // //===========================================================================*/ + +// Define macro used to diddle the LEDs during early initialization. +// Can use r0+r1. Argument in \x. +// Control the LEDs PP0-PP3. This requires the jumpers on pins 9-16 to +// be set on LK11 in order to be visible. Otherwise the parallel port +// data pins are diddled instead. +#ifdef CYGHWR_HAL_ARM_PID_DIAG_LEDS +#define CYGHWR_LED_MACRO \ + ldr r0,=0x0d800040 ;\ + mov r1, #((15 & (\x)) << 4) ;\ + strb r1, [r0] ; +#endif + #define MEM_RESET 0x0B000020 // Write to this location to enable RAM #define PLATFORM_SETUP1 \
--- a/packages/hal/arm/pid/current/include/pkgconf/hal_arm_pid.h +++ b/packages/hal/arm/pid/current/include/pkgconf/hal_arm_pid.h @@ -156,6 +156,30 @@ }}CFG_DATA */ #define CYGHWR_HAL_ARM_PID_GDB_BAUD 38400 + +/* --------------------------------------------------------------------- + {{CFG_DATA + cdl_option CYGHWR_HAL_ARM_PID_DIAG_LEDS { + display "Enable use of PPx LEDs" + parent CYGPKG_HAL_ARM_PID + type bool + description " + The PID board has four LEDs labelled PP0-PP3. These can be + controlled by eCos if jumpers 9-16 on LK11 are + shorted. Note that this prevents the parallel port from + being used. See the PID board manual for details. + + Enabling this option causes eCos to flash the LEDs during + early board initialization. See vectors.S for + details. Before calling cyg_start, PP0 is switched on, + PP1-3 are switched off. The application code can use the + function hal_diag_led() to control the LEDs after this + point." + } + + }}CFG_DATA */ +#undef CYGHWR_HAL_ARM_PID_DIAG_LEDS + // Real-time clock/counter specifics #define CYGNUM_HAL_RTC_NUMERATOR 1000000000
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/pid/current/include/pkgconf/mlt_arm_pid9_ram.ldi @@ -0,0 +1,47 @@ +//=========================================================================== +// +// MLT linker script export - Tue Jan 13 10:14:27 1999 +// +//=========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Cygnus eCos Public License +// Version 1.0 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://sourceware.cygnus.com/ecos +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Cygnus Operating System, released +// September 30, 1998. +// +// The Initial Developer of the Original Code is Cygnus. Portions created +// by Cygnus are Copyright (C) 1998,1999 Cygnus Solutions. All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//=========================================================================== + +MEMORY +{ + ram : ORIGIN = 0x00004000, LENGTH = 0x7C000 +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (ram, 0x4000, LMA_EQ_VMA) + SECTION_text (ram, ALIGN (0x1), LMA_EQ_VMA) + SECTION_fini (ram, ALIGN (0x1), LMA_EQ_VMA) + SECTION_rodata (ram, ALIGN (0x1), LMA_EQ_VMA) + SECTION_rodata1 (ram, ALIGN (0x1), LMA_EQ_VMA) + SECTION_fixup (ram, ALIGN (0x1), LMA_EQ_VMA) + SECTION_gcc_except_table (ram, ALIGN (0x1), LMA_EQ_VMA) + SECTION_data (ram, ALIGN (0x1), LMA_EQ_VMA) + SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTIONS_END +}
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/pid/current/include/pkgconf/mlt_arm_pid9_ram.mlt @@ -0,0 +1,11 @@ +version 0 +region ram 4000 7c000 0 ! +section rom_vectors 0 1 0 1 1 1 1 1 4000 4000 text text ! +section text 0 1 0 1 0 1 0 1 fini fini ! +section fini 0 1 0 1 0 1 0 1 rodata rodata ! +section rodata 0 1 0 1 0 1 0 1 rodata1 rodata1 ! +section rodata1 0 1 0 1 0 1 0 1 fixup fixup ! +section fixup 0 1 0 1 0 1 0 1 gcc_except_table gcc_except_table ! +section gcc_except_table 0 1 0 1 0 1 0 1 data data ! +section data 0 1 0 1 0 1 0 1 bss bss ! +section bss 0 4 0 1 0 0 0 0 !
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/pid/current/include/pkgconf/mlt_arm_pid9_rom.ldi @@ -0,0 +1,51 @@ +//=========================================================================== +// +// MLT linker script export - Tue Jan 13 10:14:27 1999 +// +//=========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Cygnus eCos Public License +// Version 1.0 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://sourceware.cygnus.com/ecos +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Cygnus Operating System, released +// September 30, 1998. +// +// The Initial Developer of the Original Code is Cygnus. Portions created +// by Cygnus are Copyright (C) 1998,1999 Cygnus Solutions. All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//=========================================================================== + +// Modified for ARM/PID7T, generic ROM image + +MEMORY +{ + rom : ORIGIN = 0x04000000, LENGTH = 0x80000 + ram : ORIGIN = 0x00000800, LENGTH = 0x7F800 +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (rom, 0x4000000, LMA_EQ_VMA) + SECTION_text (rom, ALIGN (0x1), LMA_EQ_VMA) + SECTION_fini (rom, ALIGN (0x1), LMA_EQ_VMA) + SECTION_rodata (rom, ALIGN (0x1), LMA_EQ_VMA) + SECTION_rodata1 (rom, ALIGN (0x1), LMA_EQ_VMA) + SECTION_fixup (rom, ALIGN (0x1), LMA_EQ_VMA) + SECTION_gcc_except_table (rom, ALIGN (0x1), LMA_EQ_VMA) + SECTION_data (ram, 0x800, FOLLOWING (.gcc_except_table)) + SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTIONS_END +} +
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/pid/current/include/pkgconf/mlt_arm_pid9_rom.mlt @@ -0,0 +1,12 @@ +version 0 +region ram 800 7f800 0 ! +region rom 4000000 80000 1 ! +section data 0 1 1 1 1 1 0 0 800 bss ! +section bss 0 4 0 1 0 0 0 0 ! +section rom_vectors 0 1 0 1 1 1 1 1 4000000 4000000 text text ! +section text 0 1 0 1 0 1 0 1 fini fini ! +section fini 0 1 0 1 0 1 0 1 rodata rodata ! +section rodata 0 1 0 1 0 1 0 1 rodata1 rodata1 ! +section rodata1 0 1 0 1 0 1 0 1 fixup fixup ! +section fixup 0 1 0 1 0 1 0 1 gcc_except_table gcc_except_table ! +section gcc_except_table 0 1 0 1 0 0 0 1 data !
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/pid/current/include/pkgconf/mlt_arm_pid9_stubs.ldi @@ -0,0 +1,50 @@ +//=========================================================================== +// +// MLT linker script export - Tue Jan 13 10:14:27 1999 +// +//=========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Cygnus eCos Public License +// Version 1.0 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://sourceware.cygnus.com/ecos +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Cygnus Operating System, released +// September 30, 1998. +// +// The Initial Developer of the Original Code is Cygnus. Portions created +// by Cygnus are Copyright (C) 1998,1999 Cygnus Solutions. All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//=========================================================================== + +// Modified for ARM/PID7T, GDB/stubs ROM image only + +MEMORY +{ + rom : ORIGIN = 0x04000000, LENGTH = 0x80000 + ram : ORIGIN = 0x00000800, LENGTH = 0x03800 +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (rom, 0x4000000, LMA_EQ_VMA) + SECTION_text (rom, ALIGN (0x1), LMA_EQ_VMA) + SECTION_fini (rom, ALIGN (0x1), LMA_EQ_VMA) + SECTION_rodata (rom, ALIGN (0x1), LMA_EQ_VMA) + SECTION_rodata1 (rom, ALIGN (0x1), LMA_EQ_VMA) + SECTION_fixup (rom, ALIGN (0x1), LMA_EQ_VMA) + SECTION_gcc_except_table (rom, ALIGN (0x1), LMA_EQ_VMA) + SECTION_data (ram, 0x800, FOLLOWING (.gcc_except_table)) + SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTIONS_END +}
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/pid/current/include/pkgconf/mlt_arm_pid9_stubs.mlt @@ -0,0 +1,12 @@ +version 0 +region ram 800 3800 0 ! +region rom 4000000 80000 1 ! +section data 0 1 1 1 1 1 0 0 800 bss ! +section bss 0 4 0 1 0 0 0 0 ! +section rom_vectors 0 1 0 1 1 1 1 1 4000000 4000000 text text ! +section text 0 1 0 1 0 1 0 1 fini fini ! +section fini 0 1 0 1 0 1 0 1 rodata rodata ! +section rodata 0 1 0 1 0 1 0 1 rodata1 rodata1 ! +section rodata1 0 1 0 1 0 1 0 1 fixup fixup ! +section fixup 0 1 0 1 0 1 0 1 gcc_except_table gcc_except_table ! +section gcc_except_table 0 1 0 1 0 0 0 1 data !
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/pid/current/include/pkgconf/mlt_arm_pidBE_ram.ldi @@ -0,0 +1,47 @@ +//=========================================================================== +// +// MLT linker script export - Tue Jan 13 10:14:27 1999 +// +//=========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Cygnus eCos Public License +// Version 1.0 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://sourceware.cygnus.com/ecos +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Cygnus Operating System, released +// September 30, 1998. +// +// The Initial Developer of the Original Code is Cygnus. Portions created +// by Cygnus are Copyright (C) 1998,1999 Cygnus Solutions. All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//=========================================================================== + +MEMORY +{ + ram : ORIGIN = 0x00004000, LENGTH = 0x7C000 +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (ram, 0x4000, LMA_EQ_VMA) + SECTION_text (ram, ALIGN (0x1), LMA_EQ_VMA) + SECTION_fini (ram, ALIGN (0x1), LMA_EQ_VMA) + SECTION_rodata (ram, ALIGN (0x1), LMA_EQ_VMA) + SECTION_rodata1 (ram, ALIGN (0x1), LMA_EQ_VMA) + SECTION_fixup (ram, ALIGN (0x1), LMA_EQ_VMA) + SECTION_gcc_except_table (ram, ALIGN (0x1), LMA_EQ_VMA) + SECTION_data (ram, ALIGN (0x1), LMA_EQ_VMA) + SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTIONS_END +}
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/pid/current/include/pkgconf/mlt_arm_pidBE_ram.mlt @@ -0,0 +1,11 @@ +version 0 +region ram 4000 7c000 0 ! +section rom_vectors 0 1 0 1 1 1 1 1 4000 4000 text text ! +section text 0 1 0 1 0 1 0 1 fini fini ! +section fini 0 1 0 1 0 1 0 1 rodata rodata ! +section rodata 0 1 0 1 0 1 0 1 rodata1 rodata1 ! +section rodata1 0 1 0 1 0 1 0 1 fixup fixup ! +section fixup 0 1 0 1 0 1 0 1 gcc_except_table gcc_except_table ! +section gcc_except_table 0 1 0 1 0 1 0 1 data data ! +section data 0 1 0 1 0 1 0 1 bss bss ! +section bss 0 4 0 1 0 0 0 0 !
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/pid/current/include/pkgconf/mlt_arm_pidBE_rom.ldi @@ -0,0 +1,51 @@ +//=========================================================================== +// +// MLT linker script export - Tue Jan 13 10:14:27 1999 +// +//=========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Cygnus eCos Public License +// Version 1.0 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://sourceware.cygnus.com/ecos +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Cygnus Operating System, released +// September 30, 1998. +// +// The Initial Developer of the Original Code is Cygnus. Portions created +// by Cygnus are Copyright (C) 1998,1999 Cygnus Solutions. All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//=========================================================================== + +// Modified for ARM/PID7T, generic ROM image + +MEMORY +{ + rom : ORIGIN = 0x04000000, LENGTH = 0x80000 + ram : ORIGIN = 0x00000800, LENGTH = 0x7F800 +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (rom, 0x4000000, LMA_EQ_VMA) + SECTION_text (rom, ALIGN (0x1), LMA_EQ_VMA) + SECTION_fini (rom, ALIGN (0x1), LMA_EQ_VMA) + SECTION_rodata (rom, ALIGN (0x1), LMA_EQ_VMA) + SECTION_rodata1 (rom, ALIGN (0x1), LMA_EQ_VMA) + SECTION_fixup (rom, ALIGN (0x1), LMA_EQ_VMA) + SECTION_gcc_except_table (rom, ALIGN (0x1), LMA_EQ_VMA) + SECTION_data (ram, 0x800, FOLLOWING (.gcc_except_table)) + SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTIONS_END +} +
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/pid/current/include/pkgconf/mlt_arm_pidBE_rom.mlt @@ -0,0 +1,12 @@ +version 0 +region ram 800 7f800 0 ! +region rom 4000000 80000 1 ! +section data 0 1 1 1 1 1 0 0 800 bss ! +section bss 0 4 0 1 0 0 0 0 ! +section rom_vectors 0 1 0 1 1 1 1 1 4000000 4000000 text text ! +section text 0 1 0 1 0 1 0 1 fini fini ! +section fini 0 1 0 1 0 1 0 1 rodata rodata ! +section rodata 0 1 0 1 0 1 0 1 rodata1 rodata1 ! +section rodata1 0 1 0 1 0 1 0 1 fixup fixup ! +section fixup 0 1 0 1 0 1 0 1 gcc_except_table gcc_except_table ! +section gcc_except_table 0 1 0 1 0 0 0 1 data !
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/pid/current/include/pkgconf/mlt_arm_pidBE_stubs.ldi @@ -0,0 +1,49 @@ +//=========================================================================== +// +// MLT linker script export - Tue Jan 13 10:14:27 1999 +// +//=========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Cygnus eCos Public License +// Version 1.0 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://sourceware.cygnus.com/ecos +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Cygnus Operating System, released +// September 30, 1998. +// +// The Initial Developer of the Original Code is Cygnus. Portions created +// by Cygnus are Copyright (C) 1998,1999 Cygnus Solutions. All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//=========================================================================== + +// Modified for ARM/PID BigEndian GDB/stubs ROM image only +// Note that .rodata(1) must be merged into the .data section! + +MEMORY +{ + rom : ORIGIN = 0x04000000, LENGTH = 0x80000 + ram : ORIGIN = 0x00000800, LENGTH = 0x03800 +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (rom, 0x4000000, LMA_EQ_VMA) + SECTION_text (rom, ALIGN (0x1), LMA_EQ_VMA) + SECTION_fini (rom, ALIGN (0x1), LMA_EQ_VMA) + SECTION_fixup (rom, ALIGN (0x1), LMA_EQ_VMA) + SECTION_gcc_except_table (rom, ALIGN (0x1), LMA_EQ_VMA) + SECTION_data (ram, 0x800, FOLLOWING (.gcc_except_table)) + SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTIONS_END +}
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/pid/current/include/pkgconf/mlt_arm_pidBE_stubs.mlt @@ -0,0 +1,10 @@ +version 0 +region ram 800 3800 0 ! +region rom 4000000 80000 1 ! +section data 0 1 1 1 1 1 0 0 800 bss ! +section bss 0 4 0 1 0 0 0 0 ! +section rom_vectors 0 1 0 1 1 1 1 1 4000000 4000000 text text ! +section text 0 1 0 1 0 1 0 1 fini fini ! +section fini 0 1 0 1 0 1 0 1 fixup fixup ! +section fixup 0 1 0 1 0 1 0 1 gcc_except_table gcc_except_table ! +section gcc_except_table 0 1 0 1 0 0 0 1 data !
--- a/packages/hal/arm/pid/current/include/plf_stub.h +++ b/packages/hal/arm/pid/current/include/plf_stub.h @@ -73,7 +73,14 @@ extern int hal_pid_interruptible(int); //---------------------------------------------------------------------------- // Reset. -#define HAL_STUB_PLATFORM_RESET() CYG_EMPTY_STATEMENT +#ifdef CYG_HAL_STARTUP_STUBS +// Just call the ROM's entry point. Not as safe as a reset, but the PID +// doesn't have a watchdog, so this'll have to do. +externC void reset_vector(void); +#define HAL_STUB_PLATFORM_RESET() reset_vector() +#else +#define HAL_STUB_PLATFORM_RESET() CYG_EMPTY_STATEMENT +#endif #endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
--- a/packages/hal/arm/pid/current/misc/Notes +++ b/packages/hal/arm/pid/current/misc/Notes @@ -22,25 +22,116 @@ by Cygnus are Copyright (C) 1998,1999 Cy ####COPYRIGHTEND#### =========================================================================== -15 Jan 1999 +27 Oct 1999 How to build and install the GDB module on the PID -1. Configure a minimal eCos system with all packages except 'infra' disabled. -2. Edit <hal/hal.h> to enable GDB: +Make GDB module +~~~~~~~~~~~~~~~ + 1. Configure a minimal eCos system with all packages except 'infra' disabled. + 2. Edit <hal/hal.h> to enable GDB: #define CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS #undef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT #undef CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT -3. make;make -C hal/arm/pid/current/misc -4. Download the image onto the PID board: - arm-elf-gdb -nw hal/arm/pid/current/misc/gdb_module.img - You can connect to the board using either existing GDB stubs or Angel. + 3. make;make -C hal/arm/pid/<version>/misc + + Alternatively run hal/arm/pid/<version>/misc/STUBS_config. + + + GDB image is in the file hal/arm/pid/<version>/misc/gdb_module.img + + +Make FLASH tool +~~~~~~~~~~~~~~~ + 1. Configure a separate eCos system with all packages enabled. + 2. Change diag chanel to port B (in file pkgconf/hal_arm_pid.h): + #define CYGHWR_HAL_ARM_PID_DIAG_PORT 1 + 2. make misc + + FLASH tool is in the file hal/arm/pid/<version>/misc/prog_flash + + +Prepare board for eCos +~~~~~~~~~~~~~~~~~~~~~~ + 1. Set jumper 7-8 on LK6 [using the Angle code in the 16 bit EPROM] + 2. Set jumper 5-6 on LK6 [select 8bit ROM mode] + 3. Set jumper LK18 [ROM remap - this is also required for eCos] + 4. Set S1 to 0-0-1-1 [20MHz operation] + + +Program FLASH +~~~~~~~~~~~~~ + 1. Download the image onto the PID board: + arm-elf-gdb -nw hal/arm/pid/<version>/misc/gdb_module.img + + (gdb) target rdi s=<serial device> + (gdb) load + [...] + (gdb) quit + This will download the stubs onto the board at 0x60000..0x64000 -5. Configure a separate eCos system with all packages enabled. -6. make misc -7. Now download the FLASH programmer tool - arm-elf-gdb -nw hal/arm/pid/current/misc/prog_flash -8. Run the tool. The GDB stubs will now be programmed into the FLASH. + + 2. Now download the FLASH programmer tool + arm-elf-gdb -nw hal/arm/pid/<version>/misc/prog_flash + + (gdb) target rdi s=<serial device> + (gdb) load + [...] + (gdb) cont + + 3. The FLASH tool will output some text on the board serial port B at + 38400 baud: + + ARM eCos + FLASH here! + manuf: 8, device: 40 + Error: Wrong Manufaturer: 08 + ... Please change FLASH jumper + + 4. This text is repeated until you remove the jumper 7-8 on LK6. Then + the output should be: + + manuf: 1F, device: A4 + AT29C040A recognised + About to program FLASH using data at 60000..64000 + *** Press RESET now to abort! + + 5. You have about 10 seconds to abort the operation by pressing + reset. After this timeout, the FLASH programming happens: + + ...Programming FLASH + All done! -eCos GDB stubs should now be installed and set up as the default monitor when you -run from FLASH. + 6. Quit/kill the GDB process which will hang. + + 7. Next time you reset the board, the stub will be in control, communicating + on serial port A at 38400 baud. See documentation for further details + on how to connect with GDB. + + + +Big-Endian operation +~~~~~~~~~~~~~~~~~~~~ + + 1) If the board is to be used in big-endian mode, the stub should be + configured for platform 'pidbe' instead of 'pid'. 'pidbe' can also + be used as a second argument to the STUBS_config script. + + 2a) If a big-endian rom controller is installed on the board, the + programming of a new stub into flash is covered in the ARM PID + manual. + + 2b) If a big-endian rom controller is _not_ used, this is what you + must do: + + 1) Follow the above instructions (including jumper settings) , + but instead of using the 'prog_flash' FLASH tool, use the + 'prog_flash_BE_image_LE_system' FLASH tool. + + 2) Instead of resetting the board after the FLASH has been + programmed, switch off the power and enable jumper LK4. + + If you have to re-program the FLASH later, you can follow the + steps above again, but also disable jumper LK4 when changing the + other jumpers. +
--- a/packages/hal/arm/pid/current/misc/PKGconf.mak +++ b/packages/hal/arm/pid/current/misc/PKGconf.mak @@ -37,17 +37,37 @@ PROGS := gdb_module OTHER_PROGS := gdb_module.img endif ifdef CYG_HAL_STARTUP_RAM -PROGS := flash prog_flash +PROGS := flash prog_flash +OTHER_PROGS := prog_flash.img +# And for BE support +PROGS += prog_flash_BE_image_LE_system +OTHER_PROGS += prog_flash_BE_image_LE_system.img endif WHEREAMI := misc include $(COMPONENT_REPOSITORY)/pkgconf/makrules.prv +ifdef CYG_HAL_STARTUP_RAM +prog_flash.img: prog_flash.stamp + $(OBJCOPY) --strip-debug prog_flash$(EXEEXT) prog_flash.img +endif + ifdef CYG_HAL_STARTUP_STUBS gdb_module.img: gdb_module.stamp - $(OBJCOPY) --strip-all gdb_module$(EXEEXT) gdb_module.img.XX + $(OBJCOPY) --strip-debug gdb_module$(EXEEXT) gdb_module.img.XX $(OBJCOPY) --change-addresses=0xFC060000 gdb_module.img.XX gdb_module.img $(OBJCOPY) -O binary gdb_module.img gdb_module.bin $(RM) -f gdb_module.img.XX endif +ifdef CYG_HAL_STARTUP_RAM +prog_flash_BE_image_LE_system.img: prog_flash_BE_image_LE_system.stamp + $(OBJCOPY) --strip-debug prog_flash_BE_image_LE_system$(EXEEXT) prog_flash_BE_image_LE_system.img + +hal_arm_pid_prog_flash_BE_image_LE_system.o: prog_flash.c + $(CC) -DBE_IMAGE -c $(INCLUDE_PATH) $(CFLAGS) $($(notdir $<)-CFLAGS) -Wp,-MD,$(@:.o=.tmp) -o $@ $< + @echo > $(@:.o=.d) + @echo $@ ':' $< '\' >> $(@:.o=.d) + @$(TAIL) +2 $(@:.o=.tmp) >> $(@:.o=.d) + @$(RM) $(@:.o=.tmp) +endif
--- a/packages/hal/arm/pid/current/misc/STUBS_config +++ b/packages/hal/arm/pid/current/misc/STUBS_config @@ -1,10 +1,35 @@ #! /bin/sh -# Configure ARM/AEB eCos to create PID GDB stubs - +# Configure ARM/PID eCos to create PID GDB stubs +# Ensure that PATH include the directory where the ARM tools reside. +# +# Run from an empty temporary directory with two arguments: the path to +# the packages directory (i.e., where pkgconf.tcl lives), and the platform +# name (pid or pid9). +# If a big-endian stub is required, use the name 'pidBE' +# +# Output files are in the directory hal/arm/pid/<version>/misc. +# gdb_module.img: suitable for programming via GDB stub/Angel +# gdb_module.bin: suitable for programming with an EPROM programmer +# See Notes for details. -tcl $1/pkgconf.tcl \ - --target=arm --platform=pid --startup=stubs \ +if [ "$2"x = "x" ]; then + PID="pid" +else + PID=$2 +fi + +if ( echo | tclsh ) 2>/dev/null ; then + TCL=tclsh +elif ( echo | cygtclsh80 ) 2>/dev/null ; then + TCL=cygtclsh80 +else + echo Could not find TCL interpreter + exit 1 +fi + +$TCL $1/pkgconf.tcl \ + --target=arm --platform=${PID} --startup=stubs \ --disable CYGPKG_KERNEL --disable CYGPKG_UITRON \ --disable CYGPKG_LIBC --disable CYGPKG_LIBM \ --disable CYGPKG_ERROR --disable CYGPKG_IO \ @@ -38,3 +63,6 @@ patch <<END_OF_PATCH -p0 /* * NOTE: END_OF_PATCH + +make +make misc
--- a/packages/hal/arm/pid/current/misc/prog_flash.c +++ b/packages/hal/arm/pid/current/misc/prog_flash.c @@ -62,7 +62,11 @@ void write_sector(int, char *); char *flash_buffer = (char *)0x60000; char *flash_buffer_end = (char *)0x64000; +#ifdef BE_IMAGE +#define BUF(x) buf[x^3] +#else #define BUF(x) buf[x] +#endif // FUNCTIONS
--- a/packages/hal/arm/pid/current/src/hal_diag.c +++ b/packages/hal/arm/pid/current/src/hal_diag.c @@ -50,8 +50,9 @@ #include <cyg/hal/hal_intr.h> // interrupt macros #include <cyg/hal/hal_io.h> // IO macros #include <cyg/hal/hal_diag.h> -#ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS #include <cyg/hal/drv_api.h> +#include <cyg/hal/hal_stub.h> // cyg_hal_gdb_interrupt #endif // Assumption: all diagnostic output must be GDB packetized unless this is a ROM (i.e. @@ -290,7 +291,11 @@ hal_diag_write_char(char c) // receive interrupt will be seen when we re-enable interrupts // later. +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + CYG_HAL_GDB_ENTER_CRITICAL_IO_REGION(old); +#else HAL_DISABLE_INTERRUPTS(old); +#endif while(1) { @@ -339,7 +344,11 @@ hal_diag_write_char(char c) pos = 0; // And re-enable interrupts +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + CYG_HAL_GDB_LEAVE_CRITICAL_IO_REGION(old); +#else HAL_RESTORE_INTERRUPTS(old); +#endif } } @@ -347,7 +356,8 @@ hal_diag_write_char(char c) /*---------------------------------------------------------------------------*/ -// Control the LEDs PP0-PP3. this requires the jumpers on pins 1-8 to +#ifdef CYGHWR_HAL_ARM_PID_DIAG_LEDS +// Control the LEDs PP0-PP3. This requires the jumpers on pins 9-16 to // be set on LK11, thus preventing the use of the parallel port. #define CYG_DEVICE_PARALLEL_DATA 0x0d800040 @@ -357,6 +367,6 @@ hal_diag_led(int n) { HAL_WRITE_UINT8(CYG_DEVICE_PARALLEL_DATA, (n & 0xf) << 4); } - +#endif // CYGHWR_HAL_ARM_PID_DIAG_LEDS /*---------------------------------------------------------------------------*/ /* End of hal_diag.c */
--- a/packages/hal/arm/pid/current/src/pid_misc.c +++ b/packages/hal/arm/pid/current/src/pid_misc.c @@ -197,6 +197,6 @@ void hal_show_IRQ(int vector, int data, { // diag_printf("IRQ - vector: %x, data: %x, handler: %x\n", vector, data, handler); } - + /*---------------------------------------------------------------------------*/ /* End of hal_misc.c */
--- a/packages/hal/common/current/ChangeLog +++ b/packages/hal/common/current/ChangeLog @@ -1,3 +1,40 @@ +1999-10-29 Gary Thomas <gthomas@cygnus.co.uk> + + * tests/PKGconf.mak: Add cache tests for Cirrus Logic boards. + +1999-10-29 Jesper Skov <jskov@cygnus.co.uk> + + * tests/cache.c: Made safe for targets with no cache. + + * tests/PKGconf.mak: Don't build cache test for ARM unless + explicitly enabled. + +1999-10-28 Jesper Skov <jskov@cygnus.co.uk> + + * tests/cache.c: Fix array size. + +1999-10-27 Hugo Tyson <hmt@cygnus.co.uk> + + * src/hal_stub.c (cyg_hal_gdb_interrupt): Bugfix to previous: ^Cs + were being ignored when received by the diag output code, because + there was already a break in place. Solution is to let + cyg_hal_gdb_interrupt() override any previous break, and tidy up + state of course. + +1999-10-26 Hugo Tyson <hmt@cygnus.co.uk> + + * include/hal_stub.h (CYG_HAL_GDB_ENTER_CRITICAL_IO_REGION): Place + the break at the address of a label within the calling context + [normally hal_diag_write_char()]; this is neater and more + portable; it's supported for more targets. Also use + cyg_hal_place_break() to place it, define that, &c. + + * src/hal_stub.c (cyg_hal_gdb_place_break): New routine to + specially handle the inline breakpoint. It basically does the + same as cyg_hal_gdb_interrupt(), except on some platforms where + you must do different things to set a bp from a non-interrupt + context. + 1999-10-22 Hugo Tyson <hmt@cygnus.co.uk> * include/hal_stub.h (CYG_HAL_GDB_ENTER_CRITICAL_IO_REGION):
--- a/packages/hal/common/current/include/hal_stub.h +++ b/packages/hal/common/current/include/hal_stub.h @@ -151,8 +151,13 @@ extern void CYG_LABEL_NAME(breakinst) (v extern unsigned long __break_opcode (void); #ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT +// This one may assume a valid saved interrupt context on some platforms extern void cyg_hal_gdb_interrupt (target_register_t pc); +// This one does not; use from CRITICAL_IO_REGION macros below. +extern void cyg_hal_gdb_place_break (target_register_t pc); +// Remove a break from either above - or not if cyg_hal_gdb_running_step extern int cyg_hal_gdb_remove_break (target_register_t pc); +// Bool: is such a breakpoint set? extern int cyg_hal_gdb_break_is_set (void); /* This is used so that the generic stub can tell @@ -166,10 +171,27 @@ extern volatile int cyg_hal_gdb_running_ // NB they require __builtin_return_address() to work: if your platform // does not support this, use HAL_DISABLE_INTERRUPTS &c instead. +#if 1 // Can use the address of a label: this is more portable + #define CYG_HAL_GDB_ENTER_CRITICAL_IO_REGION( _old_ ) \ do { \ HAL_DISABLE_INTERRUPTS(_old_); \ - cyg_hal_gdb_interrupt((target_register_t)__builtin_return_address(0)); \ + cyg_hal_gdb_place_break( &&cyg_hal_gdb_break_place ); \ +} while ( 0 ) + +#define CYG_HAL_GDB_LEAVE_CRITICAL_IO_REGION( _old_ ) \ +do { \ + cyg_hal_gdb_remove_break( &&cyg_hal_gdb_break_place ); \ + HAL_RESTORE_INTERRUPTS(_old_); \ +cyg_hal_gdb_break_place: \ +} while ( 0 ) + +#else // use __builtin_return_address instead. + +#define CYG_HAL_GDB_ENTER_CRITICAL_IO_REGION( _old_ ) \ +do { \ + HAL_DISABLE_INTERRUPTS(_old_); \ + cyg_hal_place_break((target_register_t)__builtin_return_address(0)); \ } while ( 0 ) #define CYG_HAL_GDB_LEAVE_CRITICAL_IO_REGION( _old_ ) \ @@ -178,6 +200,8 @@ do { HAL_RESTORE_INTERRUPTS(_old_); \ } while ( 0 ) +#endif + #else // NO debug_gdb_break_support // so define these just to do interrupts:
--- a/packages/hal/common/current/src/hal_stub.c +++ b/packages/hal/common/current/src/hal_stub.c @@ -43,6 +43,9 @@ //============================================================================= #include <pkgconf/hal.h> +#ifdef CYGPKG_CYGMON +#include <pkgconf/cygmon.h> +#endif #ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS @@ -139,11 +142,20 @@ static instrBuffer break_buffer; volatile int cyg_hal_gdb_running_step = 0; void +cyg_hal_gdb_place_break (target_register_t pc) +{ + cyg_hal_gdb_interrupt( pc ); // Let's hope this becomes a drop-through: +} + +void cyg_hal_gdb_interrupt (target_register_t pc) { - // Clear this regardless + // Clear flag that we Continued instead of Stepping cyg_hal_gdb_running_step = 0; - // so that a call to set a BP because of a ^C will take effect + // and override existing break? So that a ^C takes effect... + if (NULL != break_buffer.targetAddr) + cyg_hal_gdb_remove_break( (target_register_t)break_buffer.targetAddr ); + if (NULL == break_buffer.targetAddr) { break_buffer.targetAddr = (t_inst*) pc; break_buffer.savedInstr = *(t_inst*)pc;
--- a/packages/hal/common/current/tests/PKGconf.mak +++ b/packages/hal/common/current/tests/PKGconf.mak @@ -33,8 +33,19 @@ include ../../../../pkgconf/pkgconf.mak include ../../../../pkgconf/system.mak TESTS := intr context -ifndef CYG_HAL_ARM_AEB -TESTS += cache + +ifndef CYGPKG_HAL_ARM +TESTS += cache +endif + +# Must be CYG_ - if CYGPKG_ would also match revision B +ifdef CYG_HAL_ARM_AEBC +TESTS += cache +endif + + +ifdef CYGPKG_HAL_ARM_CL7211 +TESTS += cache endif include $(COMPONENT_REPOSITORY)/pkgconf/makrules.tst
--- a/packages/hal/common/current/tests/cache.c +++ b/packages/hal/common/current/tests/cache.c @@ -43,6 +43,8 @@ #include <cyg/hal/hal_intr.h> #include <cyg/infra/diag.h> +#if (HAL_DCACHE_SIZE > 0) + // ------------------------------------------------------------------------- // If the HAL does not supply this, we supply our own version @@ -69,14 +71,12 @@ CYG_MACRO_END // ------------------------------------------------------------------------- -#define MAXSIZE 1<<18 - -volatile char m[MAXSIZE]; - #ifndef MAX_STRIDE #define MAX_STRIDE 64 #endif +volatile char m[(HAL_DCACHE_SIZE/HAL_DCACHE_LINE_SIZE)*MAX_STRIDE]; + // ------------------------------------------------------------------------- static void time0(register cyg_uint32 stride) @@ -209,5 +209,18 @@ cyg_start( void ) cache_main(); } +#else // (HAL_DCACHE_SIZE > 0) +#define N_A_MSG "No cache" +#endif // (HAL_DCACHE_SIZE > 0) + +#ifdef N_A_MSG +externC void +cyg_start( void ) +{ + CYG_TEST_INIT(); + CYG_TEST_NA( N_A_MSG ); +} +#endif // N_A_MSG + // ------------------------------------------------------------------------- /* EOF cache.c */
--- a/packages/hal/mips/arch/current/ChangeLog +++ b/packages/hal/mips/arch/current/ChangeLog @@ -1,3 +1,28 @@ +1999-10-29 Nick Garnett <nickg@cygnus.co.uk> + + * include/pkgconf/hal_mips.h: Added condition to set a + MIPS-private option (CYGDBG_HAL_MIPS_DEBUG_GDB_CTRLC_SUPPORT) if + either CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT or + CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT are defined. In the MIPS HAL + these are implmented with the same code. + + * src/hal_misc.c: Changed CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT to + CYGDBG_HAL_MIPS_DEBUG_GDB_CTRLC_SUPPORT. + + * src/vectors.S: Space for old SP after switching to interrupt + stack must be 8 bytes to preserve alignment of SP. Otherwise any + nested interrupts or exceptions will get an address error + exception if the FP regs are saved, which then recurses. + Changed CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT to + CYGDBG_HAL_MIPS_DEBUG_GDB_CTRLC_SUPPORT. + + * src/mips-stub.c (__is_breakpoint_function): Fixed comparison + between PC register and label. On 64 bit CPUs these are both 32 + bit values in 64 bit types, but the way that they are generated, + the PC is zero extended and the label is sign extended. This + caused them to always differ. Fixed by casting label to unsigned + long before widening. + 1999-10-22 Nick Garnett <nickg@cygnus.co.uk> * src/vectors.S: Replaced ifdef with call to hal_intc_translate
--- a/packages/hal/mips/arch/current/include/pkgconf/hal_mips.h +++ b/packages/hal/mips/arch/current/include/pkgconf/hal_mips.h @@ -81,5 +81,19 @@ #define CYGHWR_HAL_MIPS_CPU_FREQ 50 /* -------------------------------------------------------------------*/ +/* If either the CTRLC or BREAK support options in hal.h are set */ +/* then set our own option to turn on shared generic support for */ +/* control C handling. */ + + +#if defined(CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT) || \ + defined(CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT) + +#define CYGDBG_HAL_MIPS_DEBUG_GDB_CTRLC_SUPPORT + +#endif + + +/* -------------------------------------------------------------------*/ #endif /* CYGONCE_PKGCONF_HAL_MIPS_H */ /* EOF hal_mips.h */
--- a/packages/hal/mips/arch/current/src/hal_misc.c +++ b/packages/hal/mips/arch/current/src/hal_misc.c @@ -125,7 +125,7 @@ externC cyg_uint32 cyg_hal_exception_han externC cyg_uint32 hal_default_isr(CYG_ADDRWORD vector, CYG_ADDRWORD data) { -#if defined(CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT) && \ +#if defined(CYGDBG_HAL_MIPS_DEBUG_GDB_CTRLC_SUPPORT) && \ defined(CYGHWR_HAL_GDB_PORT_VECTOR) && \ defined(HAL_CTRLC_ISR)
--- a/packages/hal/mips/arch/current/src/mips-stub.c +++ b/packages/hal/mips/arch/current/src/mips-stub.c @@ -332,7 +332,7 @@ void __clear_breakpoints (void) int __is_breakpoint_function () { - return get_register (PC) == (target_register_t)&CYG_LABEL_NAME(breakinst); + return get_register (PC) == (target_register_t)(unsigned long)&CYG_LABEL_NAME(breakinst); }
--- a/packages/hal/mips/arch/current/src/vectors.S +++ b/packages/hal/mips/arch/current/src/vectors.S @@ -488,7 +488,8 @@ FUNC_START(__default_interrupt_vsr) 1: move sp,a0 # switch to istack 8: - addi sp,sp,-4 # space for old SP + addi sp,sp,-8 # space for old SP + # (8 to keep dword alignment!) sw s0,0(sp) # save old SP on stack #endif @@ -522,7 +523,7 @@ 8: move a2,s2 # a2 = interrupt number #endif -#if defined(CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT) +#if defined(CYGDBG_HAL_MIPS_DEBUG_GDB_CTRLC_SUPPORT) # If we are supporting Ctrl-C interrupts from GDB, we must squirrel # away a pointer to the save interrupt state here so that we can # plant a breakpoint at some later time.
--- a/packages/hal/mips/jmr3904/current/ChangeLog +++ b/packages/hal/mips/jmr3904/current/ChangeLog @@ -1,3 +1,10 @@ +1999-10-29 Nick Garnett <nickg@cygnus.co.uk> + + * include/plf_intr.h: + * src/plf_misc.c: + Changed CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT to + CYGDBG_HAL_MIPS_DEBUG_GDB_CTRLC_SUPPORT. + 1999-08-25 Nick Garnett <nickg@cygnus.co.uk> * include/platform.inc: Rearranged code a little to avoid
--- a/packages/hal/mips/jmr3904/current/include/plf_intr.h +++ b/packages/hal/mips/jmr3904/current/include/plf_intr.h @@ -56,7 +56,7 @@ //-------------------------------------------------------------------------- // Control-C support. -#if defined(CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT) +#if defined(CYGDBG_HAL_MIPS_DEBUG_GDB_CTRLC_SUPPORT) # define CYGHWR_HAL_GDB_PORT_VECTOR CYGNUM_HAL_INTERRUPT_SIO_0
--- a/packages/hal/mips/jmr3904/current/src/plf_misc.c +++ b/packages/hal/mips/jmr3904/current/src/plf_misc.c @@ -76,7 +76,7 @@ void hal_platform_init(void) #endif -#if defined(CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT) +#if defined(CYGDBG_HAL_MIPS_DEBUG_GDB_CTRLC_SUPPORT) { void hal_ctrlc_isr_init(void); hal_ctrlc_isr_init(); @@ -147,7 +147,7 @@ void cyg_hal_user_break( CYG_ADDRWORD *r /*------------------------------------------------------------------------*/ /* Control C ISR support */ -#if defined(CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT) +#if defined(CYGDBG_HAL_MIPS_DEBUG_GDB_CTRLC_SUPPORT) #define DIAG_BASE 0xfffff300 #define DIAG_SLCR (DIAG_BASE+0x00)
--- a/packages/hal/mips/tx39/current/ChangeLog +++ b/packages/hal/mips/tx39/current/ChangeLog @@ -1,3 +1,8 @@ +1999-10-26 Nick Garnett <nickg@cygnus.co.uk> + + * include/variant.inc: Added implementations of hal_intc_translate + macro. + 1999-10-06 Jonathan Larmour <jlarmour@cygnus.co.uk> * src/PKGconf.mak: Don't create extras.o here any more
--- a/packages/hal/mips/tx39/current/include/variant.inc +++ b/packages/hal/mips/tx39/current/include/variant.inc @@ -213,6 +213,17 @@ lb \vnum,0(v0) # load it .endm +#ifndef CYGPKG_HAL_MIPS_INTC_TRANSLATE_DEFINED +#ifdef CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN + .macro hal_intc_translate inum,vnum + move \vnum,zero # Just vector zero is supported + .endm +#else + .macro hal_intc_translate inum,vnum + move \vnum,\inum # Vector == interrupt number + .endm +#endif +#endif # This table translates from the 6 bit value supplied in the IP bits # of the cause register into a 0..16 offset into the ISR tables.
--- a/packages/hal/powerpc/cogent/current/misc/STUBS_config +++ b/packages/hal/powerpc/cogent/current/misc/STUBS_config @@ -8,7 +8,16 @@ # Output will be ./stubrom.bin which is suitable for burning into ROM. # Remember to be careful with byte-endianess in the ROM programmer. -tcl $1/pkgconf.tcl \ +if ( echo | tclsh ) 2>/dev/null ; then + TCL=tclsh +elif ( echo | cygtclsh80 ) 2>/dev/null ; then + TCL=cygtclsh80 +else + echo Could not find TCL interpreter + exit 1 +fi + +$TCL $1/pkgconf.tcl \ --target=powerpc --platform=cogent --startup=stubs \ --disable CYGPKG_KERNEL --disable CYGPKG_UITRON \ --disable CYGPKG_LIBC --disable CYGPKG_LIBM \
--- a/packages/io/serial/current/ChangeLog +++ b/packages/io/serial/current/ChangeLog @@ -1,3 +1,10 @@ +1999-10-26 Jesper Skov <jskov@cygnus.co.uk> + + * src/arm/pid_serial.h: Added BE support. + + * src/PKGconf.mak: Use CYGPKG_<> instead of CYG_<> to control what + needs to be compiled. + 1999-10-25 Gary Thomas <gthomas@cygnus.co.uk> * src/arm/pid_serial.h (ISR_RxTO): Define - character received but
--- a/packages/io/serial/current/src/PKGconf.mak +++ b/packages/io/serial/current/src/PKGconf.mak @@ -34,31 +34,31 @@ include ../../../../pkgconf/system.mak LIBRARY := libtarget.a EXTRAS_COMPILE := common/serial.c common/tty.c common/haldiag.c -ifdef CYG_HAL_ARM_PID +ifdef CYGPKG_HAL_ARM_PID EXTRAS_COMPILE += arm/pid_serial_with_ints.c endif -ifdef CYG_HAL_ARM_AEB +ifdef CYGPKG_HAL_ARM_AEB EXTRAS_COMPILE += arm/aeb_serial.c endif -ifdef CYG_HAL_ARM_EB7211 +ifdef CYGPKG_HAL_ARM_CL7211 EXTRAS_COMPILE += arm/cl7211_serial.c endif -ifdef CYG_HAL_ARM_CMA230 +ifdef CYGPKG_HAL_ARM_CMA230 EXTRAS_COMPILE += arm/cma230_serial.c endif -ifdef CYG_HAL_MN10300_AM31 +ifdef CYGPKG_HAL_MN10300_AM31 EXTRAS_COMPILE += mn10300/mn10300_serial.c endif -ifdef CYG_HAL_MIPS_TX39 +ifdef CYGPKG_HAL_MIPS_TX39 EXTRAS_COMPILE += mips/tx3904_serial.c endif -ifdef CYG_HAL_POWERPC_COGENT +ifdef CYGPKG_HAL_POWERPC_COGENT EXTRAS_COMPILE += powerpc/cogent_serial_with_ints.c endif ifdef CYGPKG_HAL_QUICC EXTRAS_COMPILE += powerpc/quicc_smc_serial.c endif -ifdef CYG_HAL_SPARCLITE_SLEB +ifdef CYGPKG_HAL_SPARCLITE_SLEB EXTRAS_COMPILE += sparclite/sleb_sdtr.c endif OTHER_OBJS :=
--- a/packages/io/serial/current/src/arm/pid_serial.h +++ b/packages/io/serial/current/src/arm/pid_serial.h @@ -48,8 +48,17 @@ struct serial_port { unsigned char _byte[32]; }; +// Little-endian version +#if (CYG_BYTEORDER == CYG_LSBFIRST) + #define reg(n) _byte[n*4] +#else // Big-endian version + +#define reg(n) _byte[(n*4)^3] + +#endif + // Receive control registers #define rhr reg(0) // Receive holding register #define isr reg(2) // Interrupt status register
--- a/packages/kernel/current/ChangeLog +++ b/packages/kernel/current/ChangeLog @@ -1,3 +1,7 @@ +1999-10-29 Gary Thomas <gthomas@cygnus.co.uk> + + * tests/PKGconf.mak: Enable cache tests for Cirrus Logic boards. + 1999-10-08 Jesper Skov <jskov@cygnus.co.uk> * tests/kcache1.c: Fix array size.
--- a/packages/kernel/current/tests/PKGconf.mak +++ b/packages/kernel/current/tests/PKGconf.mak @@ -46,6 +46,10 @@ TESTS += kcache1 kcache2 endif +ifdef CYGPKG_HAL_ARM_CL7211 +TESTS += kcache1 kcache2 +endif + ifndef CYGPKG_HAL_ARM_AEB TESTS += stress_threads endif
--- a/packages/targets +++ b/packages/targets @@ -250,6 +250,24 @@ target arm { LDLANGFLAGS "-Wl,--gc-sections -Wl,-static" } } + + platform pidBE { + alias { "ARM PID7 development board in big-endian mode" } + startup { ram rom stubs } + packages { + CYGPKG_HAL_ARM_PID + } + base_platform pid + cflags { + ARCHFLAGS "-mcpu=arm7tdmi -mbig-endian" + ERRFLAGS "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef" + CXXERRFLAGS "-Woverloaded-virtual" + DBGFLAGS "-g -O2" + LANGFLAGS "-ffunction-sections -fdata-sections" + CXXLANGFLAGS "-fno-rtti -fno-exceptions -fvtable-gc -finit-priority" + LDLANGFLAGS "-Wl,--gc-sections -Wl,-static" + } + } platform aeb { alias { "ARM Eval Board (AEB)" } startup { ram rom stubs }
