Mercurial > ecos-v3_0-branch
changeset 54:f10165814f1e ecos-sw-1999-11-19
Merge from eCos master repository on 1999-11-19-22:24:39-GMT
line wrap: on
line diff
--- a/packages/ChangeLog +++ b/packages/ChangeLog @@ -1,3 +1,7 @@ +1999-11-16 Gary Thomas <gthomas@cygnus.co.uk> + + * targets: Add aliases for Cirrus Logic platforms. + 1999-10-27 Jesper Skov <jskov@cygnus.co.uk> * targets: Reenabled stubs startup for pid9.
--- a/packages/compat/uitron/current/ChangeLog +++ b/packages/compat/uitron/current/ChangeLog @@ -1,3 +1,8 @@ +1999-11-09 Jonathan Larmour <jlarmour@cygnus.co.uk> + + * src/uit_objs.cxx: Make the stack size failsafe be tested against + the minimum stack size, not the typical one. + 1999-09-06 Jonathan Larmour <jlarmour@cygnus.co.uk> * include/uit_objs.hxx (CYG_UITRON_OBJS_INIT_PRIORITY): Revert the
--- a/packages/compat/uitron/current/src/uit_objs.cxx +++ b/packages/compat/uitron/current/src/uit_objs.cxx @@ -141,17 +141,17 @@ Cyg_Counting_Semaphore2 *CYG_UITRON_DECL (cyg_ucount32)(_ss_) ) #endif -#ifdef CYGNUM_HAL_STACK_SIZE_TYPICAL +#ifdef CYGNUM_HAL_STACK_SIZE_MINIMUM # ifdef CYGNUM_UITRON_STACK_SIZE -# if CYGNUM_UITRON_STACK_SIZE < CYGNUM_HAL_STACK_SIZE_TYPICAL +# if CYGNUM_UITRON_STACK_SIZE < CYGNUM_HAL_STACK_SIZE_MINIMUM // then override the configured stack size # undef CYGNUM_UITRON_STACK_SIZE -# define CYGNUM_UITRON_STACK_SIZE CYGNUM_HAL_STACK_SIZE_TYPICAL +# define CYGNUM_UITRON_STACK_SIZE CYGNUM_HAL_STACK_SIZE_MINIMUM -# endif // CYGNUM_UITRON_STACK_SIZE < CYGNUM_HAL_STACK_SIZE_TYPICAL +# endif // CYGNUM_UITRON_STACK_SIZE < CYGNUM_HAL_STACK_SIZE_MINIMUM # endif // CYGNUM_UITRON_STACK_SIZE -#endif // CYGNUM_HAL_STACK_SIZE_TYPICAL +#endif // CYGNUM_HAL_STACK_SIZE_MINIMUM // declare the symbols used in the initializer CYGDAT_UITRON_TASK_EXTERNS
--- a/packages/hal/arm/aeb/current/ChangeLog +++ b/packages/hal/arm/aeb/current/ChangeLog @@ -1,3 +1,21 @@ +1999-11-09 Gary Thomas <gthomas@cygnus.co.uk> + + * include/pkgconf/mlt_arm_aebC_ram.h: + * include/pkgconf/mlt_arm_aebC_rom.h: + * include/pkgconf/mlt_arm_aeb_ram.h: + * include/pkgconf/mlt_arm_aeb_rom.h: New files. + + * include/pkgconf/mlt_arm_aebC_ram.ldi: + * include/pkgconf/mlt_arm_aebC_ram.mlt: + * include/pkgconf/mlt_arm_aebC_rom.ldi: + * include/pkgconf/mlt_arm_aebC_rom.mlt: + * include/pkgconf/mlt_arm_aeb_ram.ldi: + * include/pkgconf/mlt_arm_aeb_ram.mlt: + * include/pkgconf/mlt_arm_aeb_rom.ldi: + * include/pkgconf/mlt_arm_aeb_rom.mlt: Correct memory layout. + + * src/hal_diag.c: Honor GDB_DISABLE option. + 1999-10-28 Jesper Skov <jskov@cygnus.co.uk> * misc/PKGconf.mak: Don't strip symbols when making .img.
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/aeb/current/include/pkgconf/mlt_arm_aebC_ram.h @@ -0,0 +1,19 @@ +// eCos memory layout - Tue Nov 09 07:03:07 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 (0x48000) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +extern char CYG_LABEL_NAME (_reserved_vectors) []; +#define CYGMEM_SECTION_reserved_vectors (CYG_LABEL_NAME (_reserved_vectors)) +#define CYGMEM_SECTION_reserved_vectors_SIZE (0x1000) +extern char CYG_LABEL_NAME (_reserved_not_mapped) []; +#define CYGMEM_SECTION_reserved_not_mapped (CYG_LABEL_NAME (_reserved_not_mapped)) +#define CYGMEM_SECTION_reserved_not_mapped_SIZE (0x7000) +extern char CYG_LABEL_NAME (_reserved_rom_usage) []; +#define CYGMEM_SECTION_reserved_rom_usage (CYG_LABEL_NAME (_reserved_rom_usage)) +#define CYGMEM_SECTION_reserved_rom_usage_SIZE (0x4000)
--- a/packages/hal/arm/aeb/current/include/pkgconf/mlt_arm_aebC_ram.ldi +++ b/packages/hal/arm/aeb/current/include/pkgconf/mlt_arm_aebC_ram.ldi @@ -1,40 +1,19 @@ -//=========================================================================== -// -// 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 - Tue Nov 09 07:03:07 1999 + +// This is a generated file - do not edit MEMORY { - ram : ORIGIN = 0xc000, LENGTH = 0x3c000 + ram : ORIGIN = 0, LENGTH = 0x48000 } SECTIONS { SECTIONS_BEGIN - SECTION_rom_vectors (ram, 0xc000, LMA_EQ_VMA) + __reserved_vectors = 0; . = __reserved_vectors + 0x1000; + __reserved_not_mapped = ALIGN (0x1); . = __reserved_not_mapped + 0x7000; + __reserved_rom_usage = ALIGN (0x1); . = __reserved_rom_usage + 0x4000; + SECTION_rom_vectors (ram, ALIGN (0x1), 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)
--- a/packages/hal/arm/aeb/current/include/pkgconf/mlt_arm_aebC_ram.mlt +++ b/packages/hal/arm/aeb/current/include/pkgconf/mlt_arm_aebC_ram.mlt @@ -1,6 +1,9 @@ version 0 -region ram c000 3c000 0 ! -section rom_vectors 0 1 0 1 1 1 1 1 c000 c000 text text ! +region ram 0 48000 0 ! +section reserved_vectors 1000 1 0 0 1 1 1 1 0 0 reserved_not_mapped reserved_not_mapped ! +section reserved_not_mapped 7000 1 0 0 0 1 0 1 reserved_rom_usage reserved_rom_usage ! +section reserved_rom_usage 4000 1 0 0 0 1 0 1 rom_vectors rom_vectors ! +section rom_vectors 0 1 0 1 0 1 0 1 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 !
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/aeb/current/include/pkgconf/mlt_arm_aebC_rom.h @@ -0,0 +1,19 @@ +// eCos memory layout - Mon Nov 08 10:19:24 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 (0x48000) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#define CYGMEM_REGION_rom (0x4018000) +#define CYGMEM_REGION_rom_SIZE (0x8000) +#define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R) +extern char CYG_LABEL_NAME (_reserved_vectors) []; +#define CYGMEM_SECTION_reserved_vectors (CYG_LABEL_NAME (_reserved_vectors)) +#define CYGMEM_SECTION_reserved_vectors_SIZE (0x1000) +extern char CYG_LABEL_NAME (_reserved_not_mapped) []; +#define CYGMEM_SECTION_reserved_not_mapped (CYG_LABEL_NAME (_reserved_not_mapped)) +#define CYGMEM_SECTION_reserved_not_mapped_SIZE (0x7000)
--- a/packages/hal/arm/aeb/current/include/pkgconf/mlt_arm_aebC_rom.ldi +++ b/packages/hal/arm/aeb/current/include/pkgconf/mlt_arm_aebC_rom.ldi @@ -1,35 +1,11 @@ -//=========================================================================== -// -// 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 - Mon Nov 08 10:19:24 1999 + +// This is a generated file - do not edit MEMORY { - rom : ORIGIN = 0x04018000, LENGTH = 0x08000 - ram : ORIGIN = 0x00008000, LENGTH = 0x40000 + ram : ORIGIN = 0, LENGTH = 0x48000 + rom : ORIGIN = 0x4018000, LENGTH = 0x8000 } SECTIONS @@ -42,7 +18,9 @@ SECTIONS 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, 0x8000, FOLLOWING (.gcc_except_table)) + __reserved_vectors = 0; . = __reserved_vectors + 0x1000; + SECTION_data (ram, ALIGN (0x1), FOLLOWING (.gcc_except_table)) SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + __reserved_not_mapped = ALIGN (0x1); . = __reserved_not_mapped + 0x7000; SECTIONS_END }
--- a/packages/hal/arm/aeb/current/include/pkgconf/mlt_arm_aebC_rom.mlt +++ b/packages/hal/arm/aeb/current/include/pkgconf/mlt_arm_aebC_rom.mlt @@ -1,8 +1,10 @@ version 0 -region ram 8000 40000 0 ! +region ram 0 48000 0 ! region rom 4018000 8000 1 ! -section data 0 1 1 1 1 1 0 0 8000 bss ! +section reserved_vectors 1000 1 0 0 1 1 1 1 0 0 reserved_not_mapped reserved_not_mapped ! +section data 0 1 1 1 0 1 0 0 bss ! section bss 0 4 0 1 0 0 0 0 ! +section reserved_not_mapped 7000 1 0 0 0 1 0 0 data ! section rom_vectors 0 1 0 1 1 1 1 1 4018000 4018000 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 !
--- a/packages/hal/arm/aeb/current/include/pkgconf/mlt_arm_aebC_stubs.mlt +++ b/packages/hal/arm/aeb/current/include/pkgconf/mlt_arm_aebC_stubs.mlt @@ -1,4 +1,4 @@ -version 0 +!version 0 region ram 8000 4000 0 ! region rom 4018000 8000 1 ! section data 0 1 1 1 1 1 0 0 8000 bss !
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/aeb/current/include/pkgconf/mlt_arm_aeb_ram.h @@ -0,0 +1,19 @@ +// eCos memory layout - Mon Nov 08 07:44:09 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 (0x28000) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +extern char CYG_LABEL_NAME (_reserved_vectors) []; +#define CYGMEM_SECTION_reserved_vectors (CYG_LABEL_NAME (_reserved_vectors)) +#define CYGMEM_SECTION_reserved_vectors_SIZE (0x1000) +extern char CYG_LABEL_NAME (_reserved_not_mapped) []; +#define CYGMEM_SECTION_reserved_not_mapped (CYG_LABEL_NAME (_reserved_not_mapped)) +#define CYGMEM_SECTION_reserved_not_mapped_SIZE (0x7000) +extern char CYG_LABEL_NAME (_reserved_for_rom) []; +#define CYGMEM_SECTION_reserved_for_rom (CYG_LABEL_NAME (_reserved_for_rom)) +#define CYGMEM_SECTION_reserved_for_rom_SIZE (0x4000)
--- a/packages/hal/arm/aeb/current/include/pkgconf/mlt_arm_aeb_ram.ldi +++ b/packages/hal/arm/aeb/current/include/pkgconf/mlt_arm_aeb_ram.ldi @@ -1,40 +1,19 @@ -//=========================================================================== -// -// 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 - Mon Nov 08 07:44:09 1999 + +// This is a generated file - do not edit MEMORY { - ram : ORIGIN = 0xc000, LENGTH = 0x1c000 + ram : ORIGIN = 0, LENGTH = 0x28000 } SECTIONS { SECTIONS_BEGIN - SECTION_rom_vectors (ram, 0xc000, LMA_EQ_VMA) + __reserved_vectors = 0; . = __reserved_vectors + 0x1000; + __reserved_not_mapped = ALIGN (0x1); . = __reserved_not_mapped + 0x7000; + __reserved_for_rom = ALIGN (0x1); . = __reserved_for_rom + 0x4000; + SECTION_rom_vectors (ram, ALIGN (0x1), 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)
--- a/packages/hal/arm/aeb/current/include/pkgconf/mlt_arm_aeb_ram.mlt +++ b/packages/hal/arm/aeb/current/include/pkgconf/mlt_arm_aeb_ram.mlt @@ -1,6 +1,9 @@ version 0 -region ram c000 1c000 0 ! -section rom_vectors 0 1 0 1 1 1 1 1 c000 c000 text text ! +region ram 0 28000 0 ! +section reserved_vectors 1000 1 0 0 1 1 1 1 0 0 reserved_not_mapped reserved_not_mapped ! +section reserved_not_mapped 7000 1 0 0 0 1 0 1 reserved_for_rom reserved_for_rom ! +section reserved_for_rom 4000 1 0 0 0 1 0 1 rom_vectors rom_vectors ! +section rom_vectors 0 1 0 1 0 1 0 1 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 !
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/aeb/current/include/pkgconf/mlt_arm_aeb_rom.h @@ -0,0 +1,19 @@ +// eCos memory layout - Mon Nov 08 07:49:32 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 (0x28000) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#define CYGMEM_REGION_rom (0x4018000) +#define CYGMEM_REGION_rom_SIZE (0x8000) +#define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R) +extern char CYG_LABEL_NAME (_reserved_vectors) []; +#define CYGMEM_SECTION_reserved_vectors (CYG_LABEL_NAME (_reserved_vectors)) +#define CYGMEM_SECTION_reserved_vectors_SIZE (0x1000) +extern char CYG_LABEL_NAME (_reserved_not_mapped) []; +#define CYGMEM_SECTION_reserved_not_mapped (CYG_LABEL_NAME (_reserved_not_mapped)) +#define CYGMEM_SECTION_reserved_not_mapped_SIZE (0x7000)
--- a/packages/hal/arm/aeb/current/include/pkgconf/mlt_arm_aeb_rom.ldi +++ b/packages/hal/arm/aeb/current/include/pkgconf/mlt_arm_aeb_rom.ldi @@ -1,35 +1,11 @@ -//=========================================================================== -// -// 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 - Mon Nov 08 07:49:32 1999 + +// This is a generated file - do not edit MEMORY { - rom : ORIGIN = 0x04018000, LENGTH = 0x08000 - ram : ORIGIN = 0x00008000, LENGTH = 0x20000 + ram : ORIGIN = 0, LENGTH = 0x28000 + rom : ORIGIN = 0x4018000, LENGTH = 0x8000 } SECTIONS @@ -42,7 +18,9 @@ SECTIONS 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, 0x8000, FOLLOWING (.gcc_except_table)) + __reserved_vectors = 0; . = __reserved_vectors + 0x1000; + SECTION_data (ram, ALIGN (0x1), FOLLOWING (.gcc_except_table)) SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + __reserved_not_mapped = ALIGN (0x1); . = __reserved_not_mapped + 0x7000; SECTIONS_END }
--- a/packages/hal/arm/aeb/current/include/pkgconf/mlt_arm_aeb_rom.mlt +++ b/packages/hal/arm/aeb/current/include/pkgconf/mlt_arm_aeb_rom.mlt @@ -1,8 +1,10 @@ version 0 -region ram 8000 20000 0 ! +region ram 0 28000 0 ! region rom 4018000 8000 1 ! -section data 0 1 1 1 1 1 0 0 8000 bss ! +section reserved_vectors 1000 1 0 0 1 1 1 1 0 0 reserved_not_mapped reserved_not_mapped ! +section data 0 1 1 1 0 1 0 0 bss ! section bss 0 4 0 1 0 0 0 0 ! +section reserved_not_mapped 7000 1 0 0 0 1 0 0 data ! section rom_vectors 0 1 0 1 1 1 1 1 4018000 4018000 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 !
--- a/packages/hal/arm/aeb/current/src/hal_diag.c +++ b/packages/hal/arm/aeb/current/src/hal_diag.c @@ -57,7 +57,7 @@ // Assumption: all diagnostic output must be GDB packetized unless this is a ROM (i.e. // totally stand-alone) system. -#ifdef CYG_HAL_STARTUP_ROM +#if defined(CYG_HAL_STARTUP_ROM) || defined(CYGDBG_HAL_DIAG_DISABLE_GDB_PROTOCOL) #define HAL_DIAG_USES_HARDWARE #endif
--- a/packages/hal/arm/arch/current/ChangeLog +++ b/packages/hal/arm/arch/current/ChangeLog @@ -1,3 +1,8 @@ +1999-11-12 Gary Thomas <gthomas@cygnus.co.uk> + + * src/vectors.S (reset_platform): New function used to reset board + in the absense of real hardware reset (not possible on all boards). + 1999-11-01 Jonathan Larmour <jlarmour@cygnus.co.uk> * src/hal_misc.c (exception_handler): Check for CYGDAT_CYGMON_ENABLE
--- a/packages/hal/arm/arch/current/src/arm.ld +++ b/packages/hal/arm/arch/current/src/arm.ld @@ -85,8 +85,8 @@ OUTPUT_FORMAT(elf32-bigarm) .text _vma_ : _lma_ \ { stext = ABSOLUTE(.); \ PROVIDE (__stext = ABSOLUTE(.)); \ - *(.text*) *(.gnu.warning) *(.gnu.linkonce*) *(.init) }\ - > _region_ \ + *(.text*) *(.gnu.warning) *(.gnu.linkonce*) *(.init) \ + } > _region_ \ etext = .; PROVIDE (__etext = .); #define SECTION_fini(_region_, _vma_, _lma_) \
--- a/packages/hal/arm/arch/current/src/arm_stub.c +++ b/packages/hal/arm/arch/current/src/arm_stub.c @@ -85,10 +85,8 @@ void set_pc (target_register_t pc) This may be done by setting breakpoints or setting a single step flag in the saved user registers, for example. */ -#define NULL_PTR (unsigned long *)0 -static unsigned long *ss_saved_pc = NULL_PTR; -static unsigned long ss_saved_instr; - +static unsigned long ss_saved_pc = 0; +static unsigned long ss_saved_instr; #define FIXME() {diag_printf("FIXME - %s\n", __FUNCTION__); } @@ -349,29 +347,32 @@ target_ins(unsigned long *pc, unsigned l } } + void __single_step (void) { - unsigned long *pc = (unsigned long *)get_register(PC); - unsigned long curins = *pc; - if (ins_will_execute(curins)) { - // Decode instruction to decide what the next PC will be - ss_saved_pc = target_ins(pc, curins); - } else { - // The current instruction will not execute (the conditions don't hold) - ss_saved_pc = (pc+1); - } - // For now - ss_saved_instr = *ss_saved_pc; - *ss_saved_pc = 0xE7FFDEFF; // As used by ARM + unsigned long pc = get_register(PC); + unsigned long curins = *(unsigned long*)pc; + if (ins_will_execute(curins)) { + // Decode instruction to decide what the next PC will be + ss_saved_pc = (unsigned long) target_ins((unsigned long*)pc, + curins); + } else { + // The current instruction will not execute (the conditions + // don't hold) + ss_saved_pc = pc+4; + } + ss_saved_instr = *(unsigned long*)ss_saved_pc; + *(unsigned long*)ss_saved_pc = HAL_BREAKINST_ARM; } /* Clear the single-step state. */ void __clear_single_step (void) { - if (ss_saved_pc != NULL_PTR) { - *ss_saved_pc = ss_saved_instr; - ss_saved_pc = NULL_PTR; + if (ss_saved_pc != 0) { + // ARM instruction + *(unsigned long*)ss_saved_pc = ss_saved_instr; + ss_saved_pc = 0; } } @@ -401,7 +402,10 @@ int void __skipinst (void) { - put_register (PC, get_register (PC) + 4); + unsigned long pc = get_register(PC); + pc += 4; + + put_register(PC, pc); }
--- a/packages/hal/arm/arch/current/src/vectors.S +++ b/packages/hal/arm/arch/current/src/vectors.S @@ -139,6 +139,9 @@ reset_vector: // which can set DRAM size at 0x40 // see <cyg/hal/hal_platform_setup.h> + // Come here to reset board +warm_reset: + #if defined(CYG_HAL_STARTUP_RAM) && \ !defined(CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS) mrs r7,cpsr // move back to IRQ mode @@ -225,6 +228,11 @@ 10: LED 4 #if defined(CYG_HAL_STARTUP_ROM) || defined(CYG_HAL_STARTUP_STUBS) + // Set up reset vector + ldr r2,[r1,#0x00] // reset vector intstruction + str r2,[r0,#0x00] + ldr r2,=warm_reset + str r2,[r0,#0x20] // Relocate [copy] data from ROM to RAM ldr r3,.__rom_data_start ldr r4,.__ram_data_start @@ -310,6 +318,19 @@ 2: _start_hang: b _start_hang .code 32 + + .global reset_platform + .type reset_platform,function +reset_platform: +#ifdef CYG_HAL_STARTUP_STUBS + // initialize CPSR (machine state register) + mov r0,#(CPSR_IRQ_DISABLE|CPSR_FIQ_DISABLE|CPSR_SUPERVISOR_MODE) + msr cpsr,r0 + b warm_reset +#else + mov r0,#0 + mov pc,r0 // Jump to reset vector +#endif init_done: .long 0xDEADB00B @@ -321,7 +342,6 @@ init_done: .code 32 undefined_instruction: ldr sp,.__undef_exception_stack // get good stack - sub lr,lr,#4 // PC at time of interrupt stmfd sp!,{r0,fp,ip,lr} mrs r0,spsr stmfd sp!,{r0} @@ -346,6 +366,7 @@ 10: sub sp,sp,#ARMREG_SIZE // make space for frame stmea sp,{r0-r10,fp} // save immediately visible registers ldmfd ip,{r0-r4} // saved registers + sub r4,r4,#4 // PC at time of interrupt str r0,[sp,#armreg_cpsr] // CPSR at time of interrupt str r1,[sp,#armreg_r0] // saved R0 str r2,[sp,#armreg_fp] // saved FP @@ -364,7 +385,6 @@ 10: .code 32 software_interrupt: ldr sp,.__startup_stack // get good stack - sub lr,lr,#4 // PC at time of interrupt stmfd sp!,{r0,ip,lr} mrs r0,spsr stmfd sp!,{r0} @@ -379,6 +399,7 @@ software_interrupt: sub sp,sp,#ARMREG_SIZE+16 // make space for frame stmea sp,{r0-r10,fp} // save immediately visible registers ldmfd ip,{r0-r3} // saved registers + sub r3,r3,#4 // PC at time of interrupt str r0,[sp,#armreg_cpsr] // CPSR at time of interrupt str r1,[sp,#armreg_r0] // saved R0 str r2,[sp,#armreg_ip] // saved IP
deleted file mode 100644 --- a/packages/hal/arm/cl7211/current/ChangeLog +++ /dev/null @@ -1,249 +0,0 @@ -1999-11-03 Gary Thomas <gthomas@cygnus.co.uk> - - * include/pkgconf/hal_arm_cl7211.h: Change default clock speed - to 36MHz with no software DRAM refresh (hardware is stable with - this combo). - -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. - -1999-09-15 Gary Thomas <gthomas@cygnus.co.uk> - - * misc/nand_test.c (nand_exercise): Check "read ID" function. - - * misc/lcd_panel_support.c (lcd_panel_server): Reorg sampling - loop to use a weighted average (try and avoid bad results). - - * misc/kbd_test.c (kbd_exercise): Use new kbd_getc() function. - - * misc/kbd_support.c (kbd_getc): New function. - - * misc/lcd_support.c: Add simple printf() code. - -1999-09-13 Gary Thomas <gthomas@cygnus.co.uk> - - * include/pkgconf/mlt_arm_eb7211_ram.ldi: - * include/pkgconf/mlt_arm_eb7211_ram.mlt: Fix DRAM limits. - -1999-09-12 Gary Thomas <gthomas@cygnus.co.uk> - - * misc/kbd_support.c: New file. Also change to more or less - ignore interrupts since they don't work for many keys! - - * misc/kbd_test.c: Move keyboard support routines to separate - file. - -1999-09-10 Gary Thomas <gthomas@cygnus.co.uk> - - * include/hal_platform_setup.h: Fix spelling error. - -1999-09-08 Gary Thomas <gthomas@cygnus.co.uk> - - * misc/panel_test.c: Trick for these interrupts is that they - only happen when the drive is 0x70. - - * misc/kbd_test.c: Found trick to get interrupts - need to leave - columns hot! - - * include/pkgconf/mlt_arm_eb7211_rom.mlt: - * include/pkgconf/mlt_arm_eb7211_rom.ldi: Change RAM layout. - - * include/hal_platform_setup.h: Made ROM segment #1 non-cacheable. - - * misc/kbd_test.c: New test for ASCII keyboard. Interrupts - not yet working. - - * misc/panel_test.c: Fix panel driving code. Can now read - panel samples, but no interrupts. - - * src/cl7211_misc.c: Add missing clear for keyboard interrupt. - -1999-09-06 Gary Thomas <gthomas@cygnus.co.uk> - - * misc/PKGconf.mak (PROGS): Add new test. - - * misc/panel_test.c: New file. Test code for LCD touch panel. - - * misc/lcd_support.c: New file. - - * misc/lcd_test.c: Move LCD driving code to 'lcd_support.c' so it - can be shared. - -1999-09-03 Gary Thomas <gthomas@cygnus.co.uk> - - * misc/lcd_test.c (lcd_drawc): Correct drawing of larger characters. - - * misc/PKGconf.mak: Make LCD test program for all platforms. - - * include/pkgconf/mlt_arm_cl7211_rom.mlt: - * include/pkgconf/mlt_arm_cl7211_rom.ldi: - * include/pkgconf/mlt_arm_cl7211_ram.mlt: - * include/pkgconf/mlt_arm_cl7211_ram.ldi: 72xx has 16M by default. - - * misc/PKGconf.mak: Remove extra [left over] step in make. - -1999-09-02 Jonathan Larmour <jlarmour@cygnus.co.uk> - - * misc/PKGconf.mak: Use correct EXEEXT for gdb_module program. - -1999-09-02 Gary Thomas <gthomas@cygnus.co.uk> - - * support/io.c (uspin): Change timing - ugly. - - * src/cl7211_misc.c: Disable out BATLOW testing code. - - * include/hal_platform_setup.h: Better setup when LCD is installed. - - * include/pkgconf/hal_arm_cl7211.h: Make LCD installed by default. - - * misc/lcd_test.c: Rework for larger ALPS unit. Also make characters - twice as big (so there's a chance at seeing them!) - -1999-08-16 John Dallaway <jld@cygnus.co.uk> - - * include/pkgconf/hal_arm_cl7211.h: - - Proper case various display strings. - -1999-07-28 Gary Thomas <gthomas@cygnus.co.uk> - - * misc/STUBS_config: Update for latest hal.h. Also add way to - specify platform (second parameter). - -1999-07-14 Hugo Tyson <hmt@cygnus.co.uk> - - * include/hal_cache.h (HAL_UCACHE_LINE_SIZE): Correct the comment - and the value: this is supposed to be in bytes. - -1999-06-22 Gary Thomas <gthomas@cygnus.co.uk> - - * src/cl7211_misc.c (hal_IRQ_handler): Remove some debug code. - Add simple handler for battery low to test FIQ support. - -1999-06-18 Gary Thomas <gthomas@cygnus.co.uk> - - * src/plf_stub.c: - * src/hal_diag.c: Use pkgconf derived platform include file. - - * src/cl7211_misc.c (hal_hardware_init): - * include/pkgconf/hal_arm_cl7211.h: Add configuration control for - CPU processor speed. Default to 73.728 MHz. - -1999-06-17 Gary Thomas <gthomas@cygnus.co.uk> - - * include/hal_platform_setup.h (MAP_DRAM): 16M layout was wrong. - -1999-06-16 Gary Thomas <gthomas@cygnus.co.uk> - - * src/hal_diag.c: Clean up. - - * include/hal_platform_setup.h (PLATFORM_SETUP1): - Better MMU initialization for IO segments. - (PLATFORM_SETUP1): Add mappings for expansion I/O. - - * src/cl7211_misc.c (hal_hardware_init): Turn on DIAG LED. - - * include/hal_cl7211.h: Add LED flasher definitions. - -1999-06-15 Gary Thomas <gthomas@cygnus.co.uk> - - * misc/prog_flash.c: Massive rewrite/upgrade to handle Intel - parts that are on the 7211, as well as the ATMEL parts on 7111. - This program should work for either and gives a good example - of how to access/program/erase the FLASH. - - * include/hal_platform_setup.h (CYGHWR_HAL_ARM_HAS_MMU): Define. - - * misc/PKGconf.mak (gdb_module.img): - * include/pkgconf/mlt_arm_cl7211_stubs.mlt: - * include/pkgconf/mlt_arm_cl7211_stubs.ldi: Support to allow - stubs to be the startup application (GDB on board). - -1999-06-14 Gary Thomas <gthomas@cygnus.co.uk> - - * include/hal_cache.h: Turn on FLUSH macros. - -1999-06-11 Gary Thomas <gthomas@cygnus.co.uk> - - * include/hal_cache.h: Update with new unified cache support. - -1999-06-09 Gary Thomas <gthomas@cygnus.co.uk> - - * include/hal_platform_setup.h (PLATFORM_SETUP1): Remove debug code. - - * include/pkgconf/hal_arm_cl7211.h: Add new configuration options. - DRAM size (currently 2M and 16M supported). - LCD installed? - - * include/hal_platform_setup.h: Reorganize to support configuration - of DRAM size and LCD installed. - -1999-05-21 Gary Thomas <gthomas@cygnus.co.uk> - - * include/pkgconf/hal_arm_cl7211.h: New configury to support - multiple versions of CLxx11. - -1999-05-20 Gary Thomas <gthomas@cygnus.co.uk> - - * include/pkgconf/hal_arm_cl7211.h: Move RTC setup here. - -//=========================================================================== -//####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#### -//===========================================================================
deleted file mode 100644 index c351918bfd42489822bc4a76d77b6bed0941b2e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc$@<O00001
deleted file mode 100644 index 5e1c5b52d9d67547ac347786cb61d1febcbac39a..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc$@<O00001
deleted file mode 100644 --- a/packages/hal/arm/cl7211/current/include/hal_cache.h +++ /dev/null @@ -1,307 +0,0 @@ -#ifndef CYGONCE_HAL_CACHE_H -#define CYGONCE_HAL_CACHE_H - -//============================================================================= -// -// hal_cache.h -// -// HAL cache control API -// -//============================================================================= -//####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): nickg, gthomas -// Contributors: nickg, gthomas -// Date: 1998-09-28 -// Purpose: Cache control API -// Description: The macros defined here provide the HAL APIs for handling -// cache control operations. -// Usage: -// #include <cyg/hal/hal_cache.h> -// ... -// -// -//####DESCRIPTIONEND#### -// -//============================================================================= - -#include <cyg/infra/cyg_type.h> -#include <cyg/hal/hal_mmu.h> - -//----------------------------------------------------------------------------- -// Cache dimensions - -#define HAL_UCACHE_SIZE 0x2000 // Size of data cache in bytes -#define HAL_UCACHE_LINE_SIZE 16 // Size of a data cache line -#define HAL_UCACHE_WAYS 4 // Associativity of the cache -#define HAL_UCACHE_SETS (HAL_UCACHE_SIZE/(HAL_UCACHE_LINE_SIZE*HAL_UCACHE_WAYS)) - -#define HAL_CACHE_UNIFIED // Let programs know the caches are combined - -//----------------------------------------------------------------------------- -// Global control of caches - -// Note: the 'mrc' doesn't seem to work. -#if 0 -// Enable the data cache -// mrc MMU_CP,0,r1,MMU_Control,c0 -// orr r1,r1,#MMU_Control_C|MMU_Control_B -// mcr MMU_CP,0,r1,MMU_Control,c0 - -#define HAL_UCACHE_ENABLE() \ -{ \ - asm volatile ("mrc p15,0,r1,c1,c0;" \ - "orr r1,r1,#0x000C;" \ - "mcr p15,0,r1,c1,c0;" \ - : \ - : \ - : "r1" /* Clobber list */ \ - ); \ - \ -} - -// Disable the data cache -#define HAL_UCACHE_DISABLE() \ -{ \ - asm volatile ("mrc p15,0,r1,c1,c0;" \ - "bic r1,r1,#0x000C;" \ - "mcr p15,0,r1,c1,c0;" \ - : \ - : \ - : "r1" /* Clobber list */ \ - ); \ - \ -} -#else -#define HAL_UCACHE_ENABLE() \ -{ \ - asm volatile ("mov r1,#0x7D;" \ - "mcr p15,0,r1,c1,c0;" \ - : \ - : \ - : "r1" /* Clobber list */ \ - ); \ - \ -} - -// Disable the data cache -#define HAL_UCACHE_DISABLE() \ -{ \ - asm volatile ("mov r1,#0x71;" \ - "mcr p15,0,r1,c1,c0;" \ - : \ - : \ - : "r1" /* Clobber list */ \ - ); \ - \ -} -#endif - -// Is the cache turned on? -#define HAL_UCACHE_IS_ENABLED(_state_) _state_ = 1; - -// Invalidate the entire cache -// mcr MMU_CP,0,r1,MMU_InvalidateCache,c0 -#define HAL_UCACHE_INVALIDATE_ALL() \ -{ \ - asm volatile ("mcr p15,0,r1,c7,c0,0;" ); \ - \ -} - -// Synchronize the contents of the cache with memory. -#define HAL_UCACHE_SYNC() \ -{ \ - cyg_uint32 *ROM = (cyg_uint32 *)0xE0000000; \ - int i; \ - volatile cyg_uint32 val; \ - for (i = 0; i < HAL_UCACHE_SETS; i++) { \ - val = *ROM; \ - ROM += HAL_UCACHE_LINE_SIZE; \ - } \ -} - -// Purge contents of data cache -#define HAL_UCACHE_PURGE_ALL() HAL_UCACHE_INVALIDATE_ALL() - -// Set the data cache refill burst size -//#define HAL_UCACHE_BURST_SIZE(_size_) - -// Set the data cache write mode -//#define HAL_UCACHE_WRITE_MODE( _mode_ ) - -//#define HAL_UCACHE_WRITETHRU_MODE 0 -//#define HAL_UCACHE_WRITEBACK_MODE 1 - -// Load the contents of the given address range into the data cache -// and then lock the cache so that it stays there. -//#define HAL_UCACHE_LOCK(_base_, _size_) - -// Undo a previous lock operation -//#define HAL_UCACHE_UNLOCK(_base_, _size_) - -// Unlock entire cache -//#define HAL_UCACHE_UNLOCK_ALL() - -//----------------------------------------------------------------------------- -// Data cache line control - -// Allocate cache lines for the given address range without reading its -// contents from memory. -//#define HAL_UCACHE_ALLOCATE( _base_ , _size_ ) - -// Write dirty cache lines to memory and invalidate the cache entries -// for the given address range. -#define HAL_UCACHE_FLUSH( _base_ , _size_ ) HAL_UCACHE_SYNC() - -// Invalidate cache lines in the given range without writing to memory. -//#define HAL_UCACHE_INVALIDATE( _base_ , _size_ ) - -// Write dirty cache lines to memory for the given address range. -#define HAL_UCACHE_STORE( _base_ , _size_ ) HAL_UCACHE_SYNC() - -// Preread the given range into the cache with the intention of reading -// from it later. -//#define HAL_UCACHE_READ_HINT( _base_ , _size_ ) - -// Preread the given range into the cache with the intention of writing -// to it later. -//#define HAL_UCACHE_WRITE_HINT( _base_ , _size_ ) - -// Allocate and zero the cache lines associated with the given range. -//#define HAL_UCACHE_ZERO( _base_ , _size_ ) - -//----------------------------------------------------------------------------- -// Global control of data cache - -#define HAL_DCACHE_SIZE HAL_UCACHE_SIZE -#define HAL_DCACHE_LINE_SIZE HAL_UCACHE_LINE_SIZE -#define HAL_DCACHE_WAYS HAL_UCACHE_WAYS -#define HAL_DCACHE_SETS HAL_UCACHE_SETS - -// Enable the data cache -#define HAL_DCACHE_ENABLE() HAL_UCACHE_ENABLE() - -// Disable the data cache -#define HAL_DCACHE_DISABLE() HAL_UCACHE_DISABLE() - -// Invalidate the entire cache -#define HAL_DCACHE_INVALIDATE_ALL() HAL_UCACHE_INVALIDATE_ALL() - -// Synchronize the contents of the cache with memory. -#define HAL_DCACHE_SYNC() HAL_UCACHE_SYNC() - -// Query the state of the data cache -#define HAL_DCACHE_IS_ENABLED(_state_) HAL_UCACHE_IS_ENABLED(_state_) - -// Set the data cache refill burst size -//#define HAL_DCACHE_BURST_SIZE(_size_) - -// Set the data cache write mode -//#define HAL_DCACHE_WRITE_MODE( _mode_ ) - -//#define HAL_DCACHE_WRITETHRU_MODE 0 -//#define HAL_DCACHE_WRITEBACK_MODE 1 - -// Load the contents of the given address range into the data cache -// and then lock the cache so that it stays there. -//#define HAL_DCACHE_LOCK(_base_, _size_) - -// Undo a previous lock operation -//#define HAL_DCACHE_UNLOCK(_base_, _size_) - -// Unlock entire cache -//#define HAL_DCACHE_UNLOCK_ALL() - -//----------------------------------------------------------------------------- -// Data cache line control - -// Allocate cache lines for the given address range without reading its -// contents from memory. -//#define HAL_DCACHE_ALLOCATE( _base_ , _size_ ) - -// Write dirty cache lines to memory and invalidate the cache entries -// for the given address range. -#define HAL_DCACHE_FLUSH( _base_ , _size_ ) HAL_UCACHE_FLUSH( _base_ , _size_ ) - -// Invalidate cache lines in the given range without writing to memory. -//#define HAL_DCACHE_INVALIDATE( _base_ , _size_ ) - -// Write dirty cache lines to memory for the given address range. -#define HAL_DCACHE_STORE( _base_ , _size_ ) HAL_UCACHE_STORE( _base_ , _size_ ) - -// Preread the given range into the cache with the intention of reading -// from it later. -//#define HAL_DCACHE_READ_HINT( _base_ , _size_ ) - -// Preread the given range into the cache with the intention of writing -// to it later. -//#define HAL_DCACHE_WRITE_HINT( _base_ , _size_ ) - -// Allocate and zero the cache lines associated with the given range. -//#define HAL_DCACHE_ZERO( _base_ , _size_ ) - -//----------------------------------------------------------------------------- -// Global control of Instruction cache - use Data cache controls since they -// are not separatable. - -#define HAL_ICACHE_SIZE HAL_UCACHE_SIZE -#define HAL_ICACHE_LINE_SIZE HAL_UCACHE_LINE_SIZE -#define HAL_ICACHE_WAYS HAL_UCACHE_WAYS -#define HAL_ICACHE_SETS HAL_UCACHE_SETS - -// Enable the instruction cache -#define HAL_ICACHE_ENABLE() HAL_UCACHE_ENABLE() - -// Disable the instruction cache -#define HAL_ICACHE_DISABLE() HAL_UCACHE_DISABLE() - -// Invalidate the entire cache -#define HAL_ICACHE_INVALIDATE_ALL() HAL_UCACHE_INVALIDATE_ALL() - -// Synchronize the contents of the cache with memory. -#define HAL_ICACHE_SYNC() HAL_UCACHE_SYNC() - -// Set the instruction cache refill burst size -//#define HAL_ICACHE_BURST_SIZE(_size_) - -// Load the contents of the given address range into the instruction cache -// and then lock the cache so that it stays there. -//#define HAL_ICACHE_LOCK(_base_, _size_) - -// Undo a previous lock operation -//#define HAL_ICACHE_UNLOCK(_base_, _size_) - -// Unlock entire cache -//#define HAL_ICACHE_UNLOCK_ALL() - -//----------------------------------------------------------------------------- -// Instruction cache line control - -// Invalidate cache lines in the given range without writing to memory. -//#define HAL_ICACHE_INVALIDATE( _base_ , _size_ ) - -//----------------------------------------------------------------------------- -#endif // ifndef CYGONCE_HAL_CACHE_H -// End of hal_cache.h
deleted file mode 100644 --- a/packages/hal/arm/cl7211/current/include/hal_cl7211.h +++ /dev/null @@ -1,260 +0,0 @@ -#ifndef CYGONCE_HAL_CL7211_H -#define CYGONCE_HAL_CL7211_H - -/*============================================================================= -// -// hal_cl7211.h -// -// HAL Support for Kernel Diagnostic Routines -// -//============================================================================= -//####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-04-19 -// Purpose: Cirrus Logic CL7211 hardware description -// Description: -// Usage: #include <cyg/hal/hal_cl7211.h> -// -//####DESCRIPTIONEND#### -// -//===========================================================================*/ - -// Note: these defintions match the documentation, thus no attempt is made -// to sanitize (mangle) the names. Also, care should be taken to keep this -// clean for use in assembly code (no "C" constructs). - -#define PADR 0x80000000 // Port A data register -#define PBDR 0x80000001 // Port B data register -#define PDDR 0x80000003 // Port D data register -#define PADDR 0x80000040 // Port A data direction register -#define PBDDR 0x80000041 // Port B data direction register -#define PDDDR 0x80000043 // Port D data direction register -#define PEDR 0x80000080 // Port E data register -#define PEDDR 0x800000C0 // Port E data direction register - -#define SYSCON1 0x80000100 // System control register #1 -#define SYSCON1_KBD_CTL 0xF // Keyboard scan - mask -#define SYSCON1_KBD_HIGH 0 // Keyboard scan - all columns high -#define SYSCON1_KBD_LOW 1 // Keyboard scan - all columns low -#define SYSCON1_KBD_TRISTATE 2 // Keyboard scan - all columns tri-state -#define SYSCON1_KBD_COL(n) (n+8)// Keyboard scan - select column 'n' -#define SYSCON1_TC1M (1<<4) // Timer/counter #1 - prescale mode -#define SYSCON1_TC1S (1<<5) // Timer/counter #1 - source (1=512KHz,0=2KHz) -#define SYSCON1_TC2M (1<<6) // Timer/counter #2 - prescale mode -#define SYSCON1_TC2S (1<<7) // Timer/counter #2 - source (1=512KHz,0=2KHz) -#define SYSCON1_UART1EN (1<<8) // UART #1 enable -#define SYSCON1_BZTOG (1<<9) // Buzzer bit -#define SYSCON1_BZMOD (1<<10) // Buzzer mode (0=direct,1=TC1) -#define SYSCON1_DBGEN (1<<11) // Enable debug mode -#define SYSCON1_LCDEN (1<<12) // Enable LCD -#define SYSCON1_CDENTX (1<<13) // Enable Tx on CODEC -#define SYSCON1_CDENRX (1<<14) // Enable Rx on CODEC -#define SYSCON1_SIREN (1<<15) // Enable SIR protocol on UART #1 -#define SYSCON1_ADCKSEL (3<<16) // Microwire clock -#define SYSCON1_ADC_CLOCK_4kHZ (0<<16) -#define SYSCON1_ADC_CLOCK_16kHZ (1<<16) -#define SYSCON1_ADC_CLOCK_64kHZ (2<<16) -#define SYSCON1_ADC_CLOCK_128kHZ (3<<16) -#define SYSCON1_EXCKEN (1<<18) // External expansion clock enable -#define SYSCON1_WAKEDIS (1<<19) // Disable wakeup from snooze (do not disturb) -#define SYSCON1_IRTXM (1<<20) // IrDA Tx mode - -#define SYSCON2 0x80001100 // System control register #2 -#define SYSCON2_SERSEL (1<<0) // 0=master/slave SSI, 1=CODEC -#define SYSCON2_KBD6 (1<<1) // 0=8 bit keyboard, 1=6 bit -#define SYSCON2_DRAMSZ (1<<2) // DRAM width 0=32, 1=16 -#define SYSCON2_KBWEN (1<<3) // 1=allow wake up from keyboard -#define SYSCON2_SS2TXEN (1<<4) // Enable Tx on SS2 -#define SYSCON2_PCMCIA1 (1<<5) // Enable PCMCIA slot #1 -#define SYSCON2_PCMCIA2 (1<<6) // Enable PCMCIA slot #2 -#define SYSCON2_SS2RXEN (1<<7) // Enable Rx on SS2 -#define SYSCON2_UART2EN (1<<8) // Enable UART #2 -#define SYSCON2_SS2MAEN (1<<9) // Enable master mode on SS2 -#define SYSCON2_SNZPOL (1<<10) // Polarity of LCD during snooze -#define SYSCON2_LCDSNZE (1<<11) -#define SYSCON2_OSTB (1<<12) // Operating system timing 0=512KHz, 1=500KHz -#define SYSCON2_CLKENSL (1<<13) // Source of run/clken signal 0=CLKEN, 1=RUN -#define SYSCON2_BUZFREQ (1<<14) // Buzzer frequency 0=timer, 1=fixed PLL/xtal - -#define SYSCON3 0x80002200 // System control #3 -#define SYSCON3_ADCCON (1<<0) // ADC enable -#define SYSCON3_CLKCTL(n) (n<<1) // Processor block speed ((n+1)*18.432)MHz - -#define SYSFLG1 0x80000140 // System flags #1 -#define SYSFLG1_MCDR (1<<0) // Media changed - direct read -#define SYSFLG1_DCDET (1<<1) // 0=mains power, 1=battery -#define SYSFLG1_WUDR (1<<2) // Wakeup direct -#define SYSFLG1_WUON (1<<3) // Woken up -#define SYSFLG1_DID (0xF<<4) // Display ID -#define SYSFLG1_CTS (1<<8) // UART1 CTS -#define SYSFLG1_DSR (1<<9) // UART1 DSR -#define SYSFLG1_DCD (1<<10) // UART1 DCD -#define SYSFLG1_UBUSY1 (1<<11) // UART1 Tx busy -#define SYSFLG1_NBFLG (1<<12) // New battery flag -#define SYSFLG1_RSTFLG (1<<13) // Reset (button) flag -#define SYSFLG1_PFFLG (1<<14) // Power fail flag -#define SYSFLG1_CLDFLG (1<<15) // Cold start flag -#define SYSFLG1_RTCDIV (0x3F<<16) // Real time clock divider (counter) -#define SYSFLG1_URXFE1 (1<<22) // UART1 Rx FIFO empty -#define SYSFLG1_UTXFF1 (1<<23) // UART1 Tx FIFO full -#define SYSFLG1_CRXFE (1<<24) // CODEC Rx FIFO empty -#define SYSFLG1_CTXFF (1<<25) // CODEC Tx FIFO full -#define SYSFLG1_SSIBUSY (1<<26) // Synchronous serial interface busy -#define SYSFLG1_BOOTBITS (3<<27) // Boot mode (0=32,1=8,2=16,3=XX) -#define SYSFLG1_ID (1<<29) // ID=1 -#define SYSFLG1_VERID (3<<30) // Board version - -#define SYSFLG2 0x80001140 // System flags #2 - -#define INTSR1 0x80000240 // Interrupt status register #1 -#define INTSR1_EXTFIQ (1<<0) // External fast interrupt -#define INTSR1_BLINT (1<<1) // Battery low interrupt -#define INTSR1_WEINT (1<<2) // Watchdog expired interrupt -#define INTSR1_MCINT (1<<3) // Media changed interrupt -#define INTSR1_CSINT (1<<4) // CODEC sound interrupt -#define INTSR1_EINT1 (1<<5) // External interrupt #1 -#define INTSR1_EINT2 (1<<6) // External interrupt #2 -#define INTSR1_EINT3 (1<<7) // External interrupt #3 -#define INTSR1_TC1OI (1<<8) // Timer/counter #1 underflow -#define INTSR1_TC2OI (1<<9) // Timer/counter #2 underflow -#define INTSR1_RTCMI (1<<10) // Real time clock match -#define INTSR1_TINT (1<<11) // 64Hz tick -#define INTSR1_UTXINT1 (1<<12) // UART1 Tx interrupt -#define INTSR1_URXINT1 (1<<13) // UART1 Rx interrupt -#define INTSR1_UMSINT (1<<14) // UART1 modem line change -#define INTSR1_SSEOTI (1<<15) // Synchronous serial end of transfer -#define INTMR1 0x80000280 // Interrupt mask register #1 - -#define INTSR2 0x80001240 // Interrupt status #2 -#define INTSR2_KBDINT (1<<0) // Keyboard interrupt -#define INTSR2_SS2RX (1<<1) // Synchronous serial #2 Rx -#define INTSR2_SS2TX (1<<2) // Synchronous serial #2 Tx -#define INTSR2_UTXINT2 (1<<12) // UART #2 Tx interrupt -#define INTSR2_URXINT2 (1<<13) // UART #2 Rx interrupt -#define INTMR2 0x80001280 // Interrupt mask #2 - -#define INTSR3 0x80002240 // Interrupt status #3 -#if defined(__CL7211) -#define INTSR3_MCPINT (1<<0) // MCP interrupt -#endif -#define INTMR3 0x80002280 // Interrupt mask #3 - -#define UARTDR1 0x80000480 // UART #1 data register -#define UARTDR2 0x80001480 // UART #2 data register -#define UBLCR1 0x800004C0 // UART #1 baud rate / line control -#define UBLCR2 0x800014C0 // UART #2 baud rate / line control -#define UBLCR_BRDV 0xFFF // Baud rate -#define UBLCR_BREAK (1<<12) // Generate break signal -#define UBLCR_PRTEN (1<<13) // Enable parity -#define UBLCR_EVENPRT (1<<14) // 1=even parity, 0=odd -#define UBLCR_XSTOP (1<<15) // 0=1 stop bit, 1=2 stop bits -#define UBLCR_FIFOEN (1<<16) // Enable Tx/Rx FIFOs -#define UBLCR_WRDLEN (3<<17) // Word (character) length field -#define UBLCR_WRDLEN5 (0<<17) -#define UBLCR_WRDLEN6 (1<<17) -#define UBLCR_WRDLEN7 (2<<17) -#define UBLCR_WRDLEN8 (3<<17) -#define UART_DIVISOR 230400 -#define UART_BITRATE(baud) ((UART_DIVISOR/(baud))-1) - -#define MEMCFG1 0x80000180 // Memory configuration register #1 -#define MEMCFG2 0x800001C0 // Memory configuration register #2 - -#define DRFPR 0x80000200 // DRAM refresh period - -#define LCDCON 0x800002C0 // LDC control -#define LCDCON_BUFSIZ 0x00001FFF // Video buffer size -#define LCDCON_BUFSIZ_S 0 // Position of buffer size -#define LCDCON_LINE_LENGTH 0x0007E000 // Line length -#define LCDCON_LINE_LENGTH_S 13 // Position of line length -#define LCDCON_PIX_PRESCALE 0x01F80000 // Pixel prescale value -#define LCDCON_PIX_PRESCALE_S 19 // Position of prescale value -#define LCDCON_AC_PRESCALE 0x3E000000 // LCD AC bias frequency -#define LCDCON_AC_PRESCALE_S 25 // Position to AC bias -#define LCDCON_GSEN 0x40000000 // Enable greyscale -#define LCDCON_GSMD 0x80000000 // Greyscale mode - // 00 - 1bpp, 01 - 2bpp, 11 - 4 bpp - -#define TC1D 0x80000300 // Timer/Counter #1 register -#define TC2D 0x80000340 // Timer/Counter #2 register -#define RTCDR 0x80000380 // Real time clock data register -#define RTCMR 0x800003C0 // Real time clock match register - -#define PMPCON 0x80000400 // DC-DC pump control - -#define CODR 0x80000440 // CODEC data register - -#define SYNCIO 0x80000500 // Synchronous I/O data register - -#define PALLSW 0x80000540 // LCD palette - LSW (Pixel values 0..7) -#define PALMSW 0x80000580 // LCD palette - MSW (Pixel values 8..15) - -#define STFCLR 0x800005C0 // Clear startup reason flags -#define BLEOI 0x80000600 // Clear battery low interrupt -#define MCEOI 0x80000640 // Clear media changed interrupt -#define TEOI 0x80000680 // Clear tick/watchdog interrupt -#define TC1EOI 0x800006C0 // Clear timer/counter #1 interrupt -#define TC2EOI 0x80000700 // Clear timer/counter #2 interrupt -#define RTCEOI 0x80000740 // Clear real time clock interrupt -#define UMSEOI 0x80000780 // Clear UART modem status change interrupt -#define COEOI 0x800007C0 // Clear CODEC sound interrupt - -#define HALT 0x80000800 // Enter 'idle' state -#define STDBY 0x80000840 // Enter 'standby' state - -#define FRBADDR 0x80001000 // LCD frame buffer start - -#define SNZDISP 0x800012C0 // Snooze display size - -#define SS2DR 0x80001500 // Master/slave SSI2 register - -#define SRXEOF 0x80001600 // Clear Rx FIFO overflow flag -#define SS2POP 0x800016C0 // Pop SSI2 residual byte into FIFO - -#define KBDEOI 0x80001700 // Clear keyboard interrupt - -#define SNOOZE 0x80001800 // Enter 'snooze' state - -#if defined(__CL7211) -#define MCCR 0x80002000 // MCP control register -#define MCDR0 0x80002040 // MCP data register #0 -#define MCDR1 0x80002080 // MCP data register #1 -#define MCDR2 0x800020C0 // MCP data register #2 -#define MCSR 0x80002100 // MCP status register -#endif - - -#define LEDFLSH 0x800022C0 // LED flash control -#define LEDFLSH_ENABLE (1<<6) // LED enabled -#define LEDFLSH_DUTY(n) ((n-1)<<2) // LED on ratio -#define LEDFLSH_PERIOD(n) (n-1) // LED active time (1..4) - -#define KBD_PORT 0x30010000 // Extra 8 bits of keyboard data - -/*---------------------------------------------------------------------------*/ -/* end of hal_cl7211.h */ -#endif /* CYGONCE_HAL_CL7211_H */
deleted file mode 100644 --- a/packages/hal/arm/cl7211/current/include/hal_diag.h +++ /dev/null @@ -1,67 +0,0 @@ -#ifndef CYGONCE_HAL_DIAG_H -#define CYGONCE_HAL_DIAG_H - -/*============================================================================= -// -// hal_diag.h -// -// HAL Support for Kernel Diagnostic Routines -// -//============================================================================= -//####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): nickg, gthomas -// Contributors: nickg, gthomas -// Date: 1998-09-11 -// Purpose: HAL Support for Kernel Diagnostic Routines -// Description: Diagnostic routines for use during kernel development. -// Usage: #include <cyg/hal/hal_diag.h> -// -//####DESCRIPTIONEND#### -// -//===========================================================================*/ - -#include <pkgconf/hal.h> - -#include <cyg/infra/cyg_type.h> - -/*---------------------------------------------------------------------------*/ -/* functions implemented in hal_diag.c */ - -externC void hal_diag_init(void); -externC void hal_diag_write_char(char c); -externC void hal_diag_read_char(char *c); - -/*---------------------------------------------------------------------------*/ - -#define HAL_DIAG_INIT() hal_diag_init() - -#define HAL_DIAG_WRITE_CHAR(_c_) hal_diag_write_char(_c_) - -#define HAL_DIAG_READ_CHAR(_c_) hal_diag_read_char(&_c_) - -/*---------------------------------------------------------------------------*/ -/* end of hal_diag.h */ -#endif /* CYGONCE_HAL_DIAG_H */
deleted file mode 100644 --- a/packages/hal/arm/cl7211/current/include/hal_platform_ints.h +++ /dev/null @@ -1,85 +0,0 @@ -#ifndef CYGONCE_HAL_PLATFORM_INTS_H -#define CYGONCE_HAL_PLATFORM_INTS_H -//========================================================================== -// -// hal_platform_ints.h -// -// HAL Interrupt and clock support -// -//========================================================================== -//####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-04-21 -// Purpose: Define Interrupt support -// Description: The interrupt details for the CL7xxx are defined here. -// Usage: -// #include <cyg/hal/hal_platform_ints.h> -// ... -// -// -//####DESCRIPTIONEND#### -// -//========================================================================== - -#define CYGNUM_HAL_INTERRUPT_unused 0 -#define CYGNUM_HAL_INTERRUPT_EXTFIQ 1 -#define CYGNUM_HAL_INTERRUPT_BLINT 2 -#define CYGNUM_HAL_INTERRUPT_WEINT 3 -#define CYGNUM_HAL_INTERRUPT_MCINT 4 -#define CYGNUM_HAL_INTERRUPT_CSINT 5 -#define CYGNUM_HAL_INTERRUPT_EINT1 6 -#define CYGNUM_HAL_INTERRUPT_EINT2 7 -#define CYGNUM_HAL_INTERRUPT_EINT3 8 -#define CYGNUM_HAL_INTERRUPT_TC1OI 9 -#define CYGNUM_HAL_INTERRUPT_TC2OI 10 -#define CYGNUM_HAL_INTERRUPT_RTCMI 11 -#define CYGNUM_HAL_INTERRUPT_TINT 12 -#define CYGNUM_HAL_INTERRUPT_UTXINT1 13 -#define CYGNUM_HAL_INTERRUPT_URXINT1 14 -#define CYGNUM_HAL_INTERRUPT_UMSINT 15 -#define CYGNUM_HAL_INTERRUPT_SSEOTI 16 -#define CYGNUM_HAL_INTERRUPT_KBDINT 17 -#define CYGNUM_HAL_INTERRUPT_SS2RX 18 -#define CYGNUM_HAL_INTERRUPT_SS2TX 19 -#define CYGNUM_HAL_INTERRUPT_UTXINT2 20 -#define CYGNUM_HAL_INTERRUPT_URXINT2 21 -#if defined(__CL7211) -#define CYGNUM_HAL_INTERRUPT_MCPINT 22 -#endif - -#define CYGNUM_HAL_ISR_MIN 0 -#if defined(__CL7111) -#define CYGNUM_HAL_ISR_MAX 21 -#else -#define CYGNUM_HAL_ISR_MAX 22 -#endif -#define CYGNUM_HAL_ISR_COUNT (CYGNUM_HAL_ISR_MAX+1) - -// The vector used by the Real time clock -#define CYGNUM_HAL_INTERRUPT_RTC CYGNUM_HAL_INTERRUPT_TC2OI - -#endif // CYGONCE_HAL_PLATFORM_INTS_H
deleted file mode 100644 --- a/packages/hal/arm/cl7211/current/include/hal_platform_setup.h +++ /dev/null @@ -1,421 +0,0 @@ -#ifndef CYGONCE_HAL_PLATFORM_SETUP_H -#define CYGONCE_HAL_PLATFORM_SETUP_H - -/*============================================================================= -// -// hal_platform_setup.h -// -// Platform specific support for HAL (assembly 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-04-21 -// Purpose: Cirrus CL7211 platform specific support routines -// Description: -// Usage: #include <cyg/hal/hal_platform_setup.h> -// -//####DESCRIPTIONEND#### -// -//===========================================================================*/ - -#include <pkgconf/system.h> // System-wide configuration info -#include CYGBLD_HAL_PLATFORM_H // Platform specific configuration -#include <cyg/hal/hal_cl7211.h> // Platform specific hardware definitions -#include <cyg/hal/hal_mmu.h> // MMU definitions - -#define CYGHWR_HAL_ARM_HAS_MMU // This processor has an MMU - -#if defined(CYG_HAL_STARTUP_ROM) || defined(CYG_HAL_STARTUP_STUBS) - -// -// Memory map - set up by ROM (GDB stubs) -// -// Region Logical Address Physical Address -// DRAM 0x00000000..0x00xFFFFF 0xC00x0000 (see below) -// Expansion 2 0x20000000 0x20000000 -// Expansion 3 0x30000000 0x30000000 -// PCMCIA 0 0x40000000 0x40000000 -// PCMCIA 1 0x50000000 0x50000000 -// SRAM 0x60000000..0x600007FF 0x60000000 -// I/O 0x80000000 0x80000000 -// MMU Tables 0xC00y0000 -// LCD buffer 0xC0000000..0xC001FFFF 0xC0000000 -// ROM 0xE0000000..0xEFFFFFFF 0x00000000 -// ROM 0xF0000000..0xFFFFFFFF 0x10000000 - -#ifdef CYGHWR_HAL_ARM_CL7211_LCD_INSTALLED -#define LCD_BUFFER_SIZE 0x00020000 -#else -#define LCD_BUFFER_SIZE 0x00000000 -#endif -#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 -#elif (CYGHWR_HAL_ARM_CL7211_DRAM_SIZE == 16) -#define MMU_TABLES_SIZE 0x4000+0x4000+0x1000 // RAM used for PTE entries -#define DRAM_LA_END 0x01000000-MMU_TABLES_SIZE -#endif -#define DRAM_LA_START 0x00000000 -#define DRAM_PA MMU_BASE+MMU_TABLES_SIZE -#define LCD_LA_START 0xC0000000 -#define LCD_LA_END 0xC0020000 -#define LCD_PA 0xC0000000 -#define ROM0_LA_START 0xE0000000 -#define ROM0_PA 0x00000000 -#define ROM0_LA_END 0xF0000000 -#define ROM1_LA_START 0xF0000000 -#define ROM1_LA_END 0x00000000 -#define ROM1_PA 0x10000000 -#define EXPANSION2_LA_START 0x20000000 -#define EXPANSION2_PA 0x20000000 -#define EXPANSION3_LA_START 0x30000000 -#define EXPANSION3_PA 0x30000000 -#define PCMCIA0_LA_START 0x40000000 -#define PCMCIA0_PA 0x40000000 -#define PCMCIA1_LA_START 0x50000000 -#define PCMCIA1_PA 0x50000000 -#define SRAM_LA_START 0x60000000 -#define SRAM_LA_END 0x60001000 -#define SRAM_PA 0x60000000 -#define IO_LA_START 0x80000000 -#define IO_LA_END 0x80003000 -#define IO_PA 0x80000000 - -#if (CYGHWR_HAL_ARM_CL7211_DRAM_SIZE == 2) -// Note: The DRAM on this board is very irregular in that every -// other 256K piece is missing. E.g. only these [physical] -// addresses are valid: -// 0xC0000000..0xC003FFFF -// 0xC0080000..0xC00BFFFF -// 0xC0200000..0xC023FFFF Note the additional GAP! -// etc. -// 0xC0800000..0xC083FFFF Note the additional GAP! -// 0xC0880000..0xC08CFFFF -// 0xC0A00000..0xC0A3FFFF -// etc. -// The MMU mapping code takes this into consideration and creates -// a continuous logical map for the DRAM. -#define MAP_DRAM \ -/* Map DRAM */ ;\ - ldr r3,=DRAM_LA_START ;\ - ldr r4,=DRAM_LA_END ;\ - ldr r5,=DRAM_PA ;\ -/* 0x00000000..0x000FFFFF */ ;\ - mov r6,r2 /* Set up page table descriptor */ ;\ - ldr r7,=MMU_L1_TYPE_Page ;\ - orr r6,r6,r7 ;\ - str r6,[r1],#4 /* Store PTE, update pointer */ ;\ -10: mov r6,r5 /* Build page table entry */ ;\ - ldr r7,=MMU_L2_TYPE_Small|MMU_AP_Any|MMU_Bufferable|MMU_Cacheable ;\ - orr r6,r6,r7 ;\ - ldr r7,=MMU_PAGE_SIZE ;\ - str r6,[r2],#4 /* Next page */ ;\ - add r3,r3,r7 ;\ - add r5,r5,r7 ;\ - ldr r8,=DRAM_LA_START+MMU_SECTION_SIZE ;\ - cmp r3,r8 /* Done with first 1M? */ ;\ - beq 20f ;\ - ldr r7,=0x40000 /* Special check for 256K boundary */ ;\ - and r7,r7,r5 ;\ - cmp r7,#0 ;\ - beq 10b ;\ - add r5,r5,r7 /* Skip 256K hole */ ;\ - ldr r7,=0x100000 ;\ - and r7,r5,r7 ;\ - beq 10b ;\ - add r5,r5,r7 /* Nothing at 0xC0100000 */ ;\ - ldr r7,=0x400000 /* Also nothing at 0xC0400000 */ ;\ - and r7,r5,r7 ;\ - beq 10b ;\ - add r5,r5,r7 ;\ - b 10b ;\ -20: ;\ -/* 0x00100000..0x001FFFFF */ ;\ - mov r6,r2 /* Set up page table descriptor */ ;\ - ldr r7,=MMU_L1_TYPE_Page ;\ - orr r6,r6,r7 ;\ - str r6,[r1],#4 /* Store PTE, update pointer */ ;\ -10: mov r6,r5 /* Build page table entry */ ;\ - ldr r7,=MMU_L2_TYPE_Small|MMU_AP_Any|MMU_Bufferable|MMU_Cacheable ;\ - orr r6,r6,r7 ;\ - ldr r7,=MMU_PAGE_SIZE ;\ - str r6,[r2],#4 /* Next page */ ;\ - add r3,r3,r7 ;\ - cmp r3,r4 /* Done with first DRAM? */ ;\ - beq 20f ;\ - add r5,r5,r7 ;\ - ldr r7,=0x40000 /* Special check for 256K boundary */ ;\ - and r7,r7,r5 ;\ - cmp r7,#0 ;\ - beq 10b ;\ - add r5,r5,r7 /* Skip 256K hole */ ;\ - ldr r7,=0x100000 ;\ - and r7,r5,r7 ;\ - beq 10b ;\ - add r5,r5,r7 /* Nothing at 0xC0300000 */ ;\ - ldr r7,=0x400000 /* Also nothing at 0xC0400000 */ ;\ - and r7,r5,r7 ;\ - beq 10b ;\ - add r5,r5,r7 ;\ - b 10b ;\ -20: ; -#elif (CYGHWR_HAL_ARM_CL7211_DRAM_SIZE == 16) -// The 16M board is arranged as: -// 0xC0000000..0xC07FFFFF -// 0xC1000000..0xC17FFFFF -#define MAP_DRAM \ -/* Map DRAM */ ;\ - ldr r3,=DRAM_LA_START ;\ - ldr r4,=DRAM_LA_END ;\ - ldr r5,=DRAM_PA ;\ -/* 0xXXX00000..0xXXXFFFFF */ ;\ -10: mov r6,r2 /* Set up page table descriptor */ ;\ - ldr r7,=MMU_L1_TYPE_Page ;\ - orr r6,r6,r7 ;\ - str r6,[r1],#4 /* Store PTE, update pointer */ ;\ - ldr r8,=MMU_SECTION_SIZE/MMU_PAGE_SIZE ;\ - ldr r9,=DRAM_PA_START+0x00800000 /* Need to skip at 8M boundary */ ;\ -12: cmp r5,r9 ;\ - bne 15f ;\ - 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 ;\ - ldr r7,=MMU_PAGE_SIZE ;\ - str r6,[r2],#4 /* Next page */ ;\ - add r3,r3,r7 ;\ - add r5,r5,r7 ;\ - cmp r3,r4 /* End of DRAM? */ ;\ - beq 20f ;\ - sub r8,r8,#1 /* End of 1M section? */ ;\ - cmp r8,#0 ;\ - bne 12b /* Next page */ ;\ - b 10b /* Next section */ ;\ -20: -#else -#err Invalid DRAM size selected -#endif - -#ifdef CYG_HAL_ARM_CL7111 // CL7111, 710 processor -#define MMU_INITIALIZE \ - ldr r1,=MMU_Control_Init ;\ - mcr MMU_CP,0,r1,MMU_Control,c0 /* MMU off */ ;\ - ldr r1,=MMU_BASE ;\ - mcr MMU_CP,0,r1,MMU_Base,c0 ;\ - mcr MMU_CP,0,r1,MMU_FlushTLB,c0,0 /* Invalidate TLB */ ;\ - mcr MMU_CP,0,r1,MMU_FlushIDC,c0,0 /* Invalidate Caches */ ;\ - ldr r1,=0xFFFFFFFF ;\ - mcr MMU_CP,0,r1,MMU_DomainAccess,c0 ;\ - ldr r2,=10f ;\ - ldr r1,=MMU_Control_Init|MMU_Control_M ;\ - mcr MMU_CP,0,r1,MMU_Control,c0 ;\ - mov pc,r2 /* Change address spaces */ ;\ - nop ;\ - nop ;\ - nop ;\ -10: -#else // EP7211, 720T processor -#define MMU_INITIALIZE ;\ - ldr r1,=MMU_Control_Init ;\ - mcr MMU_CP,0,r1,MMU_Control,c0 /* MMU off */ ;\ - ldr r1,=MMU_BASE ;\ - mcr MMU_CP,0,r1,MMU_Base,c0 ;\ - mcr MMU_CP,0,r1,MMU_TLB,c7,0 /* Invalidate TLB - 720 style */ ;\ - mcr MMU_CP,0,r1,MMU_FlushIDC,c0,0 /* Invalidate Caches */ ;\ - ldr r1,=0xFFFFFFFF ;\ - mcr MMU_CP,0,r1,MMU_DomainAccess,c0 ;\ - ldr r2,=10f ;\ - ldr r3,=__exception_handlers ;\ - sub r2,r2,r3 ;\ - ldr r3,=ROM0_LA_START ;\ - add r2,r2,r3 ;\ - ldr r1,=MMU_Control_Init|MMU_Control_M ;\ - mcr MMU_CP,0,r1,MMU_Control,c0 ;\ - mov pc,r2 /* Change address spaces */ ;\ - nop ;\ - nop ;\ - nop ;\ -10: -#endif - -#define PLATFORM_SETUP1 \ -/* Initialize memory configuration */ ;\ - ldr r1,=MEMCFG1 ;\ - ldr r2,=0x8200A080 /* FIXME - what is this? */ ;\ - str r2,[r1] ;\ - ldr r1,=MEMCFG2 ;\ - ldr r2,=0xFEFC0000 ;\ - str r2,[r1] ;\ - ldr r1,=DRFPR ;\ - ldr r2,=0x81 /* DRAM refresh = 64KHz */ ;\ - strb r2,[r1] ;\ -/* Initialize MMU to create new memory map */ ;\ - ldr r1,=MMU_BASE ;\ - ldr r2,=PTE_BASE ;\ - MAP_DRAM ;\ -/* Nothing until PCMCIA0 */ ;\ - ldr r3,=0x3FF /* Page tables need 2K boundary */ ;\ - add r2,r2,r3 ;\ - ldr r3,=~0x3FF ;\ - and r2,r2,r3 ;\ - ldr r3,=(DRAM_LA_END+0x000FFFFF)&0xFFF00000 ;\ - ldr r4,=EXPANSION2_LA_START ;\ - ldr r5,=MMU_L1_TYPE_Fault ;\ - ldr r7,=MMU_SECTION_SIZE ;\ -10: str r5,[r1],#4 ;\ - add r3,r3,r7 ;\ - cmp r3,r4 ;\ - bne 10b ;\ -/* EXPANSION2, EXPANSION3, PCMCIA0, PCMCIA1 */ ;\ - ldr r3,=EXPANSION2_LA_START ;\ - ldr r4,=SRAM_LA_START ;\ - ldr r5,=EXPANSION2_PA ;\ - ldr r6,=MMU_L1_TYPE_Section|MMU_AP_Any ;\ - ldr r7,=MMU_SECTION_SIZE ;\ -10: orr r0,r5,r6 ;\ - str r0,[r1],#4 ;\ - add r5,r5,r7 ;\ - add r3,r3,r7 ;\ - cmp r3,r4 ;\ - bne 10b ;\ -/* SRAM */ ;\ - ldr r3,=SRAM_LA_START ;\ - ldr r4,=MMU_L1_TYPE_Page|MMU_DOMAIN(0) ;\ - orr r4,r4,r2 ;\ - str r4,[r1],#4 ;\ - ldr r4,=MMU_L2_TYPE_Small|MMU_AP_Any|MMU_Bufferable|MMU_Cacheable ;\ - orr r4,r3,r4 ;\ - str r4,[r2],#4 ;\ - ldr r3,=SRAM_LA_START+MMU_PAGE_SIZE ;\ - ldr r4,=SRAM_LA_START+MMU_SECTION_SIZE ;\ - ldr r5,=MMU_L2_TYPE_Fault ;\ - ldr r7,=MMU_PAGE_SIZE ;\ -10: str r5,[r2],#4 ;\ - add r3,r3,r7 ;\ - cmp r3,r4 ;\ - bne 10b ;\ - ldr r4,=IO_LA_START ;\ - ldr r5,=MMU_L1_TYPE_Fault ;\ - ldr r7,=MMU_SECTION_SIZE ;\ -20: str r5,[r1],#4 ;\ - add r3,r3,r7 ;\ - cmp r3,r4 ;\ - bne 20b ;\ -/* I/O */ ;\ - ldr r3,=0x3FF /* Page tables need 2K boundary */ ;\ - add r2,r2,r3 ;\ - ldr r3,=~0x3FF ;\ - and r2,r2,r3 ;\ - ldr r4,=MMU_L1_TYPE_Page|MMU_DOMAIN(0) ;\ - orr r4,r4,r2 ;\ - str r4,[r1],#4 ;\ - ldr r3,=IO_LA_START ;\ - ldr r4,=IO_LA_END ;\ - ldr r7,=MMU_PAGE_SIZE ;\ - ldr r5,=IO_PA|MMU_L2_TYPE_Small|MMU_AP_All ;\ -10: str r5,[r2],#4 ;\ - add r5,r5,r7 ;\ - add r3,r3,r7 ;\ - cmp r3,r4 ;\ - bne 10b ;\ - ldr r4,=IO_LA_START+MMU_SECTION_SIZE ;\ - ldr r5,=MMU_L2_TYPE_Fault ;\ - ldr r7,=MMU_PAGE_SIZE ;\ -10: str r5,[r2],#4 ;\ - add r3,r3,r7 ;\ - cmp r3,r4 ;\ - bne 10b ;\ - ldr r4,=LCD_LA_START ;\ - ldr r5,=MMU_L1_TYPE_Fault ;\ - ldr r7,=MMU_SECTION_SIZE ;\ -20: str r5,[r1],#4 ;\ - add r3,r3,r7 ;\ - cmp r3,r4 ;\ - bne 20b ;\ -/* LCD Buffer & Unmapped DRAM (holes and all) */ ;\ - ldr r3,=LCD_LA_START ;\ - ldr r4,=ROM0_LA_START ;\ - ldr r5,=LCD_PA ;\ - ldr r6,=MMU_L1_TYPE_Section|MMU_AP_Any|MMU_Bufferable|MMU_Cacheable ;\ - ldr r7,=MMU_SECTION_SIZE ;\ -10: orr r0,r5,r6 ;\ - str r0,[r1],#4 ;\ - add r5,r5,r7 ;\ - add r3,r3,r7 ;\ - cmp r3,r4 ;\ - bne 10b ;\ -/* ROM0 */ ;\ - ldr r3,=ROM0_LA_START ;\ - ldr r4,=ROM0_LA_END ;\ - ldr r5,=ROM0_PA ;\ - ldr r6,=MMU_L1_TYPE_Section|MMU_AP_Any|MMU_Cacheable ;\ - ldr r7,=MMU_SECTION_SIZE ;\ -10: orr r0,r5,r6 ;\ - str r0,[r1],#4 ;\ - add r5,r5,r7 ;\ - add r3,r3,r7 ;\ - cmp r3,r4 ;\ - bne 10b ;\ -/* ROM1 */ ;\ - ldr r3,=ROM1_LA_START ;\ - ldr r4,=ROM1_LA_END ;\ - ldr r5,=ROM1_PA ;\ - ldr r6,=MMU_L1_TYPE_Section|MMU_AP_Any ;\ - ldr r7,=MMU_SECTION_SIZE ;\ -10: orr r0,r5,r6 ;\ - str r0,[r1],#4 ;\ - add r5,r5,r7 ;\ - add r3,r3,r7 ;\ - 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 ;\ -20: - -#else - -#define PLATFORM_SETUP1 -#endif - - -/*---------------------------------------------------------------------------*/ -/* end of hal_platform_setup.h */ -#endif /* CYGONCE_HAL_PLATFORM_SETUP_H */
deleted file mode 100644 --- a/packages/hal/arm/cl7211/current/include/pkgconf/hal_arm_cl7211.h +++ /dev/null @@ -1,226 +0,0 @@ -#ifndef CYGONCE_PKGCONF_HAL_ARM_CL7211_H -#define CYGONCE_PKGCONF_HAL_ARM_CL7211_H -// ==================================================================== -// -// pkgconf/hal_arm_cl7211.h -// -// HAL configuration file -// -// ==================================================================== -//####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-04-21 -// Purpose: To allow the user to edit HAL configuration options. -// Description: -// -//####DESCRIPTIONEND#### -// -// ==================================================================== - - -/* --------------------------------------------------------------------- - {{CFG_DATA - - cdl_package CYGPKG_HAL_ARM_CL7211 { - display "Cirrus Logic CLxx11 evaluation boards" - type radio - parent CYGPKG_HAL_ARM - description " - The CLxx11 HAL package provides the support needed to run - eCos on a Cirrus Logic CLxx11-1 eval board." - } - - cdl_option CYGHWR_HAL_ARM_CLxx11_CL7111 { - display "CL7111-1 variant" - parent CYGPKG_HAL_ARM_CL7211 - platform cl7111 - type radio - description " - Cirrus Logic CL7111 board with ARM710C processor." - } - - cdl_option CYGHWR_HAL_ARM_CLxx11_EB7211 { - display "EB7211-1 variant" - parent CYGPKG_HAL_ARM_CL7211 - platform eb7211 - type radio - description " - Cirrus Logic EB7211 board with CL7211 (ARM720) processor." - } - - cdl_option CYGHWR_HAL_ARM_CL7211_STARTUP { - display "Startup type" - parent CYGPKG_HAL_ARM_CL7211 - type enum - legal_values ram rom stubs - startup - description " - When targetting the CLxx11 eval boards it is possible to build - the system for either RAM bootstrap or ROM bootstrap(s). Select - 'ram' when building programs to load into RAM using onboard - debug software such as Angel or eCos GDB stubs. Select 'rom' - when building a stand-alone application which will be put - into ROM. Selection of 'stubs' is for the special case of - building the eCos GDB stubs themselves." - } - - }}CFG_DATA */ - -#define CYGHWR_HAL_ARM_CL7211_STARTUP ram - -/* --------------------------------------------------------------------- - {{CFG_DATA - cdl_option CYGHWR_HAL_ARM_CL7211_DIAG_PORT { - display "Diagnostic serial port" - parent CYGPKG_HAL_ARM_CL7211 - type enum - legal_values 0 1 - description " - The CLxx11 boards have two separate serial ports. This option - chooses which of these ports will be used." - } - - }}CFG_DATA */ -#define CYGHWR_HAL_ARM_CL7211_DIAG_PORT 0 - -/* --------------------------------------------------------------------- - {{CFG_DATA - cdl_option CYGHWR_HAL_ARM_CL7211_DIAG_BAUD { - display "Diagnostic serial port baud rate" - parent CYGPKG_HAL_ARM_CL7211 - type enum - legal_values 9600 19200 38400 115200 - description " - This option selects the baud rate used for the diagnostic port. - Note: this should match the value chosen for the GDB port if the - diagnostic and GDB port are the same." - } - - }}CFG_DATA */ -#define CYGHWR_HAL_ARM_CL7211_DIAG_BAUD 38400 - -/* --------------------------------------------------------------------- - {{CFG_DATA - cdl_option CYGHWR_HAL_ARM_CL7211_GDB_PORT { - display "GDB serial port" - parent CYGPKG_HAL_ARM_CL7211 - type enum - legal_values 0 1 - description " - The CLxx11 boards have two separate serial ports. This option - chooses which of these ports will be used to connect to a host - running GDB." - } - - }}CFG_DATA */ -#define CYGHWR_HAL_ARM_CL7211_GDB_PORT 0 - -/* --------------------------------------------------------------------- - {{CFG_DATA - cdl_option CYGHWR_HAL_ARM_CL7211_GDB_BAUD { - display "GDB serial port baud rate" - parent CYGPKG_HAL_ARM_CL7211 - type enum - legal_values 9600 19200 38400 115200 - description " - This option controls the baud rate used for the GDB connection." - } - - }}CFG_DATA */ -#define CYGHWR_HAL_ARM_CL7211_GDB_BAUD 38400 - -/* --------------------------------------------------------------------- - {{CFG_DATA - cdl_option CYGHWR_HAL_ARM_CL7211_PROCESSOR_CLOCK { - display "Processor clock rate" - parent CYGPKG_HAL_ARM_CL7211 - type enum - legal_values 18432 36864 49152 73728 - description " - The processor on the CL7211 can run at various frequencies." - } - - }}CFG_DATA */ -#define CYGHWR_HAL_ARM_CL7211_PROCESSOR_CLOCK 36864 - -/* --------------------------------------------------------------------- - {{CFG_DATA - cdl_option CYGHWR_HAL_ARM_CL7211_DRAM_SIZE { - display "DRAM size" - parent CYGPKG_HAL_ARM_CL7211 - type enum - legal_values 2 16 - description " - The CLxx11 boards can have various amounts of DRAM installed. - The machine needs to be initialized differently, depending - upon the amount installed." - } - - }}CFG_DATA */ -#define CYGHWR_HAL_ARM_CL7211_DRAM_SIZE 16 - -/* ---------------------------------------------------------------------------- - {{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 */ - -#undef CYGHWR_HAL_ARM_CL7211_SOFTWARE_DRAM_REFRESH - -/* ---------------------------------------------------------------------------- - {{CFG_DATA - - cdl_option CYGHWR_HAL_ARM_CL7211_LCD_INSTALLED { - display "LCD panel" - type bool - parent CYGPKG_HAL_ARM_CL7211 - description " - If an LCD panel is installed, 128K of DRAM will be dedicated to the - LCD buffer by the system intialization." - } - - }}CFG_DATA */ -#define CYGHWR_HAL_ARM_CL7211_LCD_INSTALLED - -// Real-time clock/counter specifics - -#define CYGNUM_HAL_RTC_NUMERATOR 1000000000 -#define CYGNUM_HAL_RTC_DENOMINATOR 100 -#define CYGNUM_HAL_RTC_PERIOD 5120 // Assumes 512KHz clock - -/* -------------------------------------------------------------------*/ -#endif /* CYGONCE_PKGCONF_HAL_ARM_CL7211_H */ -/* EOF hal_arm_cl7211.h */
deleted file mode 100644 --- a/packages/hal/arm/cl7211/current/include/pkgconf/mlt_arm_cl7111_ram.ldi +++ /dev/null @@ -1,51 +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#### -//=========================================================================== - -// eCos memory layout - Mon May 17 08:04:39 1999 - -// This is a generated file - do not edit - -MEMORY -{ - ram : ORIGIN = 0x8000, LENGTH = 0x1b8000 -} - -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 -}
deleted file mode 100644 --- a/packages/hal/arm/cl7211/current/include/pkgconf/mlt_arm_cl7111_ram.mlt +++ /dev/null @@ -1,11 +0,0 @@ -version 0 -region ram 8000 1b8000 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 !
deleted file mode 100644 --- a/packages/hal/arm/cl7211/current/include/pkgconf/mlt_arm_cl7111_rom.ldi +++ /dev/null @@ -1,53 +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#### -//=========================================================================== - - -// eCos memory layout - Mon May 17 08:14:13 1999 - -// This is a generated file - do not edit - -MEMORY -{ - ram : ORIGIN = 0xc0000000, LENGTH = 0x200000 - rom : ORIGIN = 0xe0000000, LENGTH = 0x40000 -} - -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, 0xc0000000, FOLLOWING (.gcc_except_table)) - SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) - SECTIONS_END -}
deleted file mode 100644 --- a/packages/hal/arm/cl7211/current/include/pkgconf/mlt_arm_cl7111_rom.mlt +++ /dev/null @@ -1,12 +0,0 @@ -version 0 -region ram c0000000 200000 0 ! -region rom e0000000 40000 1 ! -section data 0 1 1 1 1 1 0 0 c0000000 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 !
deleted file mode 100644 --- a/packages/hal/arm/cl7211/current/include/pkgconf/mlt_arm_cl7111_stubs.ldi +++ /dev/null @@ -1,52 +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#### -//=========================================================================== - -// eCos memory layout - Mon May 17 08:06:28 1999 - -// This is a generated file - do not edit - -MEMORY -{ - ram : ORIGIN = 0x1000, LENGTH = 0x7000 - rom : ORIGIN = 0xf0028000, LENGTH = 0x40000 -} - -SECTIONS -{ - SECTIONS_BEGIN - SECTION_rom_vectors (rom, 0xf0028000, 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 -}
deleted file mode 100644 --- a/packages/hal/arm/cl7211/current/include/pkgconf/mlt_arm_cl7111_stubs.mlt +++ /dev/null @@ -1,12 +0,0 @@ -version 0 -region ram 1000 7000 0 ! -region rom f0028000 40000 1 ! -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 f0028000 f0028000 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 !
deleted file mode 100644 --- a/packages/hal/arm/cl7211/current/include/pkgconf/mlt_arm_eb7211_ram.h +++ /dev/null @@ -1,41 +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#### -//=========================================================================== - -// 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))
deleted file mode 100644 --- a/packages/hal/arm/cl7211/current/include/pkgconf/mlt_arm_eb7211_ram.ldi +++ /dev/null @@ -1,52 +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#### -//=========================================================================== - -// 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 -}
deleted file mode 100644 --- a/packages/hal/arm/cl7211/current/include/pkgconf/mlt_arm_eb7211_ram.mlt +++ /dev/null @@ -1,40 +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 !
deleted file mode 100644 --- a/packages/hal/arm/cl7211/current/include/pkgconf/mlt_arm_eb7211_rom.h +++ /dev/null @@ -1,44 +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#### -//=========================================================================== - -// 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))
deleted file mode 100644 --- a/packages/hal/arm/cl7211/current/include/pkgconf/mlt_arm_eb7211_rom.ldi +++ /dev/null @@ -1,53 +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#### -//=========================================================================== - -// 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 -}
deleted file mode 100644 --- a/packages/hal/arm/cl7211/current/include/pkgconf/mlt_arm_eb7211_rom.mlt +++ /dev/null @@ -1,41 +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 ! -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 !
deleted file mode 100644 --- a/packages/hal/arm/cl7211/current/include/pkgconf/mlt_arm_eb7211_stubs.h +++ /dev/null @@ -1,44 +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#### -//=========================================================================== - -// 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))
deleted file mode 100644 --- a/packages/hal/arm/cl7211/current/include/pkgconf/mlt_arm_eb7211_stubs.ldi +++ /dev/null @@ -1,53 +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#### -//=========================================================================== - -// 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 -}
deleted file mode 100644 --- a/packages/hal/arm/cl7211/current/include/pkgconf/mlt_arm_eb7211_stubs.mlt +++ /dev/null @@ -1,41 +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 ! -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 !
deleted file mode 100644 --- a/packages/hal/arm/cl7211/current/include/plf_stub.h +++ /dev/null @@ -1,82 +0,0 @@ -#ifndef CYGONCE_HAL_PLF_STUB_H -#define CYGONCE_HAL_PLF_STUB_H - -//============================================================================= -// -// plf_stub.h -// -// Platform header for GDB stub support. -// -//============================================================================= -//####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): jskov -// Contributors:jskov, gthomas -// Date: 1999-04-21 -// Purpose: Platform HAL stub support for Cirrus CL7211 boards. -// Usage: #include <cyg/hal/plf_stub.h> -// -//####DESCRIPTIONEND#### -// -//============================================================================= - -#include <pkgconf/hal.h> -#include <pkgconf/hal_arm_cl7211.h> - -#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS - -#include <cyg/infra/cyg_type.h> // CYG_UNUSED_PARAM - -#include <cyg/hal/arm_stub.h> // architecture stub support - -//---------------------------------------------------------------------------- -// Define serial stuff. - -extern void hal_cl7211_init_serial(void); -extern int hal_cl7211_get_char(void); -extern void hal_cl7211_put_char(int c); -extern int hal_cl7211_interruptible(int); - -#define HAL_STUB_PLATFORM_INIT_SERIAL() hal_cl7211_init_serial() -#define HAL_STUB_PLATFORM_GET_CHAR() hal_cl7211_get_char() -#define HAL_STUB_PLATFORM_PUT_CHAR(c) hal_cl7211_put_char((c)) -#define HAL_STUB_PLATFORM_SET_BAUD_RATE(baud) CYG_UNUSED_PARAM(int, (baud)) -#define HAL_STUB_PLATFORM_INTERRUPTIBLE (&hal_cl7211_interruptible) -#define HAL_STUB_PLATFORM_INIT_BREAK_IRQ() CYG_EMPTY_STATEMENT - -//---------------------------------------------------------------------------- -// Stub initializer. -#define HAL_STUB_PLATFORM_STUBS_INIT() CYG_EMPTY_STATEMENT - -//---------------------------------------------------------------------------- -// Reset. -#define HAL_STUB_PLATFORM_RESET() CYG_EMPTY_STATEMENT - -#endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS - -//----------------------------------------------------------------------------- -#endif // CYGONCE_HAL_PLF_STUB_H -// End of plf_stub.h
deleted file mode 100644 --- a/packages/hal/arm/cl7211/current/misc/PKGconf.mak +++ /dev/null @@ -1,55 +0,0 @@ -#=============================================================================== -# -# makefile -# -# hal/arm/cl7211/misc -# -#=============================================================================== -#####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#### -#=============================================================================== - -PACKAGE := hal_arm_cl7211 -include ../../../../../pkgconf/pkgconf.mak -include ../../../../../pkgconf/system.mak - -ifdef CYG_HAL_STARTUP_STUBS -PROGS := gdb_module -OTHER_PROGS := gdb_module.bin -endif -ifdef CYG_HAL_STARTUP_RAM -PROGS := prog_flash -PROGS += lcd_test panel_test kbd_test -endif -WHEREAMI := misc - -include $(COMPONENT_REPOSITORY)/pkgconf/makrules.prv - -ifdef CYG_HAL_STARTUP_STUBS -gdb_module.bin: gdb_module.stamp - $(OBJCOPY) -O binary gdb_module$(EXEEXT) gdb_module.bin -endif - - - - -
deleted file mode 100644 --- a/packages/hal/arm/cl7211/current/misc/STUBS_config +++ /dev/null @@ -1,45 +0,0 @@ -#! /bin/sh - -# usage: STUBS_config <repository> [eb7211 | cl7111] - -if [ "$2"x = "x" ]; then - CL7x11="eb7211" -else - CL7x11=$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=${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-cygmon - -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 @@ - - }}CFG_DATA */ - --#undef 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 - - /* - * NOTE: -END_OF_PATCH
deleted file mode 100644 --- a/packages/hal/arm/cl7211/current/misc/gdb_module.c +++ /dev/null @@ -1,64 +0,0 @@ -//========================================================================== -// -// gdb_module.c -// -// Cirrus CL7211 eval board GDB stubs (module wrapper) -// -//========================================================================== -//####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-05-11 -// Description: Cirrus CL7211 FLASH module for eCos GDB stubs -//####DESCRIPTIONEND#### - -// -// This is the module 'wrapper' for the GDB stubs -// - -#include <pkgconf/hal.h> -#include <cyg/infra/cyg_type.h> -#include <cyg/hal/hal_stub.h> - -#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS - -void cyg_start (void) -{ - for(;;) breakpoint(); -} -#else - -#include <cyg/infra/testcase.h> - -void cyg_start (void) -{ - CYG_TEST_INIT(); - CYG_TEST_PASS_FINISH("N/A: Stand-alone GDB stubs only"); -} -#endif - - -
deleted file mode 100644 --- a/packages/hal/arm/cl7211/current/misc/kbd_support.c +++ /dev/null @@ -1,455 +0,0 @@ -//========================================================================== -// -// kbd_support.c -// -// Cirrus CL72xx eval board ASCII keyboard support functions -// -//========================================================================== -//####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-05-15 -// Description: Functions used to support ASCII keyboard -//####DESCRIPTIONEND#### - -static char kbd_server_stack[STACK_SIZE]; -static cyg_thread kbd_server_thread_data; -static cyg_handle_t kbd_server_thread_handle; - -static cyg_interrupt kbd_interrupt; -static cyg_handle_t kbd_interrupt_handle; - -static cyg_mbox kbd_events_mbox; -static cyg_handle_t kbd_events_mbox_handle; -static cyg_sem_t kbd_sem; - -static cyg_uint8 col_state[8]; -static cyg_uint8 ext_state[8]; - -static void -kbd_delay(void) -{ - volatile int i; - for (i = 0; i < 250; i++) ; -} - -static void -kbd_scan(void) -{ - int i; - cyg_uint8 port_data, ext_data; - // Turn off drive (de-select) all columns - *(volatile cyg_uint32 *)SYSCON1 = (*(volatile cyg_uint32 *)SYSCON1 & ~SYSCON1_KBD_CTL) | - SYSCON1_KBD_LOW; - for (i = 0; i < 8; i++) { - // Select column 'i' - *(volatile cyg_uint32 *)SYSCON1 = (*(volatile cyg_uint32 *)SYSCON1 & ~SYSCON1_KBD_CTL) | - SYSCON1_KBD_COL(i); - // Small pause to let the wires charge up :-) - kbd_delay(); - // Grab the data - col_state[i] = port_data = *(volatile cyg_uint8 *)PADR; - ext_state[i] = ext_data = *(volatile cyg_uint8 *)KBD_PORT; - // De-Select column 'i' - *(volatile cyg_uint32 *)SYSCON1 = (*(volatile cyg_uint32 *)SYSCON1 & ~SYSCON1_KBD_CTL) | - SYSCON1_KBD_TRISTATE; - // Allow line to gl slack - kbd_delay(); - } - // Turn on drive (select) all columns - necessary to see interrupts - *(volatile cyg_uint32 *)SYSCON1 = (*(volatile cyg_uint32 *)SYSCON1 & ~SYSCON1_KBD_CTL) | - SYSCON1_KBD_HIGH; -} - -static cyg_uint8 kbd_state[128]; // Known state of each key -static cyg_uint8 kbd_new_state[128]; // Current state of each key - -// Row #1 -#define KBD_Escape 0x00 -#define KBD_F1 0x01 -#define KBD_F2 0x02 -#define KBD_F3 0x03 -#define KBD_F4 0x04 -#define KBD_F5 0x05 -#define KBD_F6 0x06 -#define KBD_F7 0x07 -#define KBD_F8 0x08 -#define KBD_F9 0x09 -#define KBD_F10 0x0A -#define KBD_NumLock 0x0B -#define KBD_SysReq 0x0C -#define KBD_ScrlLock 0x0D -#define KBD_Break 0x0E -// Row #2 -#define KBD_1 0x10 -#define KBD_2 0x11 -#define KBD_3 0x12 -#define KBD_4 0x13 -#define KBD_5 0x14 -#define KBD_6 0x15 -#define KBD_7 0x16 -#define KBD_8 0x17 -#define KBD_9 0x18 -#define KBD_0 0x19 -#define KBD_Hyphen 0x1A -#define KBD_Equals 0x1B -#define KBD_BackSpace 0x1C -#define KBD_Home 0x1D -// Row #3 -#define KBD_Tab 0x20 -#define KBD_Q 0x21 -#define KBD_W 0x22 -#define KBD_E 0x23 -#define KBD_R 0x24 -#define KBD_T 0x25 -#define KBD_Y 0x26 -#define KBD_U 0x27 -#define KBD_I 0x28 -#define KBD_O 0x29 -#define KBD_P 0x2A -#define KBD_LeftBrkt 0x2B -#define KBD_RightBrkt 0x2C -#define KBD_BackSlash 0x2D -#define KBD_PageUp 0x2E -// Row #4 -#define KBD_CapsLock 0x30 -#define KBD_A 0x31 -#define KBD_S 0x32 -#define KBD_D 0x33 -#define KBD_F 0x34 -#define KBD_G 0x35 -#define KBD_H 0x36 -#define KBD_J 0x37 -#define KBD_K 0x38 -#define KBD_L 0x39 -#define KBD_SemiColon 0x3A -#define KBD_Quote 0x3B -#define KBD_Enter 0x3C -#define KBD_PageDown 0x3D -// Row #5 -#define KBD_LeftShift 0x40 -#define KBD_Z 0x41 -#define KBD_X 0x42 -#define KBD_C 0x43 -#define KBD_V 0x44 -#define KBD_B 0x45 -#define KBD_N 0x46 -#define KBD_M 0x47 -#define KBD_Comma 0x48 -#define KBD_Period 0x49 -#define KBD_Slash 0x4A -#define KBD_RightShift 0x4B -#define KBD_UpArrow 0x4C -#define KBD_End 0x4D -// Row #6 -#define KBD_Ctrl 0x50 -#define KBD_Function 0x51 -#define KBD_LeftAlt 0x52 -#define KBD_Accent 0x53 -#define KBD_Space 0x54 -#define KBD_RightAlt 0x55 -#define KBD_Ins 0x56 -#define KBD_Del 0x57 -#define KBD_LeftArrow 0x58 -#define KBD_DownArrow 0x59 -#define KBD_RightArrow 0x5A - -#define KBD_Press 0x80 // Event has this bit when the key is pressed -#define KBD_Empty 0xFF - -// Map column, bit -> keycode -static cyg_uint32 kbd_map[8][16] = { - // Column #0 - {KBD_Escape, KBD_1, KBD_Tab, KBD_CapsLock, - KBD_BackSlash, KBD_Space, KBD_LeftArrow, KBD_UpArrow, - KBD_DownArrow, KBD_RightArrow, KBD_LeftShift, KBD_Ctrl, - KBD_Function, KBD_LeftAlt, KBD_RightAlt, KBD_RightShift }, - // Column #1 - {KBD_F5, KBD_6, KBD_T, KBD_G, - KBD_B, KBD_Slash, KBD_SemiColon, KBD_P, - KBD_Hyphen, KBD_F10, KBD_Empty, KBD_Empty, - KBD_Empty, KBD_Empty, KBD_Empty, KBD_Empty }, - // Column #2 - {KBD_F4, KBD_5, KBD_R, KBD_F, - KBD_V, KBD_Del, KBD_Quote, KBD_LeftBrkt, - KBD_Equals, KBD_NumLock, KBD_Empty, KBD_Empty, - KBD_Empty, KBD_Empty, KBD_Empty, KBD_Empty }, - // Column #3 - {KBD_F3, KBD_4, KBD_E, KBD_D, - KBD_C, KBD_Ins, KBD_Empty, KBD_RightBrkt, - KBD_BackSpace, KBD_SysReq, KBD_Empty, KBD_Empty, - KBD_Empty, KBD_Empty, KBD_Empty, KBD_Empty }, - // Column #4 - {KBD_F2, KBD_3, KBD_W, KBD_S, - KBD_X, KBD_Empty, KBD_Enter, KBD_Empty, - KBD_Empty, KBD_ScrlLock, KBD_Empty, KBD_Empty, - KBD_Empty, KBD_Empty, KBD_Empty, KBD_Empty }, - // Column #5 - {KBD_F1, KBD_2, KBD_Q, KBD_A, - KBD_Z, KBD_End, KBD_PageDown, KBD_PageUp, - KBD_Home, KBD_Break, KBD_Empty, KBD_Empty, - KBD_Empty, KBD_Empty, KBD_Empty, KBD_Empty }, - // Column #6 - {KBD_F6, KBD_7, KBD_Y, KBD_H, - KBD_N, KBD_Period, KBD_L, KBD_O, - KBD_0, KBD_F9, KBD_Empty, KBD_Empty, - KBD_Empty, KBD_Empty, KBD_Empty, KBD_Empty }, - // Column #7 - {KBD_F7, KBD_8, KBD_U, KBD_J, - KBD_M, KBD_Comma, KBD_K, KBD_I, - KBD_9, KBD_F8, KBD_Empty, KBD_Empty, - KBD_Empty, KBD_Empty, KBD_Empty, KBD_Empty }, -}; - -static cyg_uint8 kbd_chars[96] = { - /* 0x00 - 0x0F */ - 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 0x10 - 0x1F */ - '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=', 0x08, 0x00, 0x00, 0x00, - /* 0x20 - 0x2F */ - '\t', 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', '[', ']', '\\', 0x00, 0x00, - /* 0x30 - 0x3F */ - 0x00, 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', ';', '\'', 0x0D, 0x00, 0x00, 0x00, - /* 0x40 - 0x4F */ - 0x00, 'z', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '/', 0x00, 0x00, 0x00, 0x00, 0x00, - /* 0x50 - 0x5F */ - 0x00, 0x00, 0x00, 0x00, ' ', 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; - -static cyg_uint8 kbd_shifted_chars[96] = { - /* 0x00 - 0x0F */ - '\b', 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 0x10 - 0x1F */ - '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+', 0x08, 0x00, 0x00, 0x00, - /* 0x20 - 0x2F */ - '\t', 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', '{', '}', '|', 0x00, 0x00, - /* 0x30 - 0x3F */ - 0x00, 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', ':', '"', 0x0D, 0x00, 0x00, 0x00, - /* 0x40 - 0x4F */ - 0x00, 'Z', 'X', 'C', 'V', 'B', 'N', 'M', '<', '>', '?', 0x00, 0x00, 0x00, 0x00, 0x00, - /* 0x50 - 0x5F */ - 0x00, 0x00, 0x00, 0x00, ' ', 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; - -// This ISR is called when the keyboard interrupt occurs -static int -keyboard_isr(cyg_vector_t vector, cyg_addrword_t data, HAL_SavedRegisters *regs) -{ - cyg_drv_interrupt_mask(CYGNUM_HAL_INTERRUPT_KBDINT); - return (CYG_ISR_HANDLED|CYG_ISR_CALL_DSR); // Run the DSR -} - -// This DSR handles the keyboard [logical] processing -static void -keyboard_dsr(cyg_vector_t vector, cyg_ucount32 count, cyg_addrword_t data) -{ - // Tell the keyboard processing thread to give it a shot - cyg_semaphore_post(&kbd_sem); -} - -static void -kbd_server(cyg_addrword_t p) -{ - int col, bit, key, event, timeout; - diag_printf("KBD server here\n"); - while (TRUE) { - cyg_semaphore_wait(&kbd_sem); - // As long as keys are pressed, scan and update - timeout = 0; - while (TRUE) { - // Wait for 20ms - time to debounce keyboard - cyg_thread_delay(2); - // Scan keyboard - kbd_scan(); - // Reset state - for (key = 0; key < sizeof(kbd_new_state); key++) { - kbd_new_state[key] = 0; - } - // Check state of all keys and send events for those that change - for (col = 0; col < 8; col++) { - for (bit = 0; bit < 8; bit++) { - if (col_state[col] & (1<<bit)) { - key = kbd_map[col][bit]; - if (key != KBD_Empty) { - kbd_new_state[key] = 1; - } - } - if (ext_state[col] & (1<<bit)) { - key = kbd_map[col][bit+8]; - if (key != KBD_Empty) { - kbd_new_state[key] = 1; - } - } - } - } - // Compare new and old (known) states, generate events for changes - // Send events for modifier keys first. - for (key = 0; key < sizeof(kbd_new_state); key++) { - if (kbd_state[key] != kbd_new_state[key]) { - event = 0xFF; - switch (key) { - case KBD_LeftShift: - case KBD_RightShift: - case KBD_Ctrl: - case KBD_LeftAlt: - case KBD_RightAlt: - case KBD_Function: - case KBD_CapsLock: - if (kbd_state[key]) { - // Key going up - event = key; - } else { - // Key going down - event = key + KBD_Press; - } - kbd_state[key] = kbd_new_state[key]; - } - if (event != 0xFF) { - if (!cyg_mbox_tryput(kbd_events_mbox_handle, (void *)event)) { - diag_printf("KBD event lost: %x\n", event); - } - } - } - } - // First key up events - for (key = 0; key < sizeof(kbd_new_state); key++) { - if (kbd_state[key] != kbd_new_state[key]) { - if (kbd_state[key]) { - // Key going up - event = key; - } else { - // Key going down - event = key + KBD_Press; - } - if (!cyg_mbox_tryput(kbd_events_mbox_handle, (void *)event)) { - diag_printf("KBD event lost: %x\n", event); - } - } - kbd_state[key] = kbd_new_state[key]; - } - // Clear interrupt (true when keys are pressed) - cyg_drv_interrupt_acknowledge(CYGNUM_HAL_INTERRUPT_KBDINT); -#if 0 - if (*(volatile cyg_uint32 *)INTSR2 & INTSR2_KBDINT) { - timeout = 0; - } else if (++timeout == 5) { - // No keys for 100ms - break; - } -#endif - } - // Allow interrupts to happen again - cyg_drv_interrupt_acknowledge(CYGNUM_HAL_INTERRUPT_KBDINT); - cyg_drv_interrupt_unmask(CYGNUM_HAL_INTERRUPT_KBDINT); - } -} - -void -kbd_init(void) -{ - // Initialize environment, setup interrupt handler - cyg_drv_interrupt_create(CYGNUM_HAL_INTERRUPT_KBDINT, - 99, // Priority - what goes here? - 0, // Data item passed to interrupt handler - (cyg_ISR_t *)keyboard_isr, - (cyg_DSR_t *)keyboard_dsr, - &kbd_interrupt_handle, - &kbd_interrupt); - cyg_drv_interrupt_attach(kbd_interrupt_handle); - cyg_drv_interrupt_acknowledge(CYGNUM_HAL_INTERRUPT_KBDINT); - cyg_drv_interrupt_unmask(CYGNUM_HAL_INTERRUPT_KBDINT); - // Set up the mbox for keyboard data - cyg_mbox_create(&kbd_events_mbox_handle, &kbd_events_mbox); - // This semaphore is set when there is a keypress - cyg_semaphore_init(&kbd_sem, 0); - // Create a thread whose job it is to de-bounce the keyboard and - // actually process the input, turning it into a series of events - cyg_thread_create(10, // Priority - just a number - kbd_server, // entry - 0, // initial parameter - "KBD_server", // Name - &kbd_server_stack[0], // Stack - STACK_SIZE, // Size - &kbd_server_thread_handle, // Handle - &kbd_server_thread_data // Thread data structure - ); - cyg_thread_resume(kbd_server_thread_handle); // Start it -} - -#define MOD_Shift 0x40 -#define MOD_Ctrl 0x20 -#define MOD_CapsLock 0x10 -static cyg_uint32 kbd_modifiers; - -cyg_uint8 -kbd_getc(void) -{ - cyg_uint8 ch; - cyg_uint32 kbd_event; - while (TRUE) { - kbd_event = (cyg_uint32)cyg_mbox_get(kbd_events_mbox_handle); - switch (kbd_event & 0x7F) { - case KBD_LeftShift: - case KBD_RightShift: - if (kbd_event & KBD_Press) { - kbd_modifiers |= MOD_Shift; - } else { - kbd_modifiers &= ~MOD_Shift; - } - break; - case KBD_Ctrl: - if (kbd_event & KBD_Press) { - kbd_modifiers |= MOD_Ctrl; - } else { - kbd_modifiers &= ~MOD_Ctrl; - } - break; - case KBD_CapsLock: - if (kbd_event & KBD_Press) { - kbd_modifiers ^= MOD_CapsLock; - } - break; - case KBD_LeftAlt: - case KBD_RightAlt: - case KBD_Function: - default: - } - // Return character [if one has arrived] - if (kbd_event & KBD_Press) { - if (kbd_modifiers & (MOD_Shift|MOD_CapsLock)) { - ch = kbd_shifted_chars[kbd_event & 0x7F]; - } else { - ch = kbd_chars[kbd_event & 0x7F]; - } - if (kbd_modifiers & MOD_Ctrl) { - ch &= 0x1F; - } - if (ch) { - return (ch); - } - } - } -}
deleted file mode 100644 --- a/packages/hal/arm/cl7211/current/misc/kbd_test.c +++ /dev/null @@ -1,106 +0,0 @@ -//========================================================================== -// -// kbd_test.c -// -// Cirrus CL72xx eval board ASCII keyboard test -// -//========================================================================== -//####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-05-15 -// Description: Tool used to test ASCII keyboard -//####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 - -#include <cyg/hal/hal_io.h> // IO macros -#include <cyg/hal/hal_arch.h> // Register state info -#include <cyg/hal/hal_diag.h> -#include <cyg/hal/hal_intr.h> // HAL interrupt macros -#include <cyg/hal/drv_api.h> // HAL ISR support - -#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; - -#include "lcd_support.c" -#include "kbd_support.c" - -// FUNCTIONS - -static void -cyg_test_exit(void) -{ - while (TRUE) ; -} - -static void -kbd_exercise(cyg_addrword_t p) -{ - cyg_uint8 ch; - diag_printf("KBD test here!\n"); - - // Initialize keyboard driver - kbd_init(); - - while (TRUE) { - ch = kbd_getc(); - diag_printf("CH = 0x%x:'%c'\n", ch, ch); - } - - 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(11, // Priority - just a number - kbd_exercise, // entry - 0, // initial parameter - "KBD_thread", // Name - &stack[0], // Stack - STACK_SIZE, // Size - &thread_handle, // Handle - &thread_data // Thread data structure - ); - cyg_thread_resume(thread_handle); // Start it - // Let 'em fly... - cyg_scheduler_start(); -} // cyg_package_start() -
deleted file mode 100644 --- a/packages/hal/arm/cl7211/current/misc/lcd_panel_support.c +++ /dev/null @@ -1,213 +0,0 @@ -//========================================================================== -// -// panel_support.c -// -// Cirrus CL72xx eval board LCD touch panel support 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-09-13 -// Description: Tool used to support the LCD touch panel -//####DESCRIPTIONEND#### - -static char lcd_panel_server_stack[STACK_SIZE]; -static cyg_thread lcd_panel_server_thread_data; -static cyg_handle_t lcd_panel_server_thread_handle; - -static cyg_interrupt lcd_panel_interrupt; -static cyg_handle_t lcd_panel_interrupt_handle; - -static cyg_mbox lcd_panel_events_mbox; -static cyg_handle_t lcd_panel_events_mbox_handle; -static cyg_sem_t lcd_panel_sem; - -#define SYNCIO_TXFRMEN (1<<14) -#define SYNCIO_FRAMELEN(n) (n<<8) -#define ADC_START (1<<7) -#define ADC_CHAN(n) (n<<4) -#define ADC_UNIPOLAR (1<<3) -#define ADC_SINGLE (1<<2) -#define ADC_EXT_CLOCK (3<<0) -#define TOUCH_CTL KBD_PORT - -// FUNCTIONS - -static cyg_uint32 -adc_sample(int chan) -{ - cyg_uint32 val; - *(volatile cyg_uint32 *)SYNCIO = SYNCIO_TXFRMEN | SYNCIO_FRAMELEN(24) | - ADC_START | ADC_CHAN(chan) | ADC_UNIPOLAR | ADC_SINGLE | ADC_EXT_CLOCK; - while (*(volatile cyg_uint32 *)SYSFLG1 & SYSFLG1_SSIBUSY) ; - val = *(volatile cyg_uint32 *)SYNCIO; - return (val & 0xFFFF); -} - -static void -panel_delay(void) -{ - volatile int i; - for (i = 0; i < 800; i++) ; -} - -// This ISR is called when the touch panel interrupt occurs -static int -lcd_panel_isr(cyg_vector_t vector, cyg_addrword_t data, HAL_SavedRegisters *regs) -{ - cyg_drv_interrupt_mask(CYGNUM_HAL_INTERRUPT_EINT2); - return (CYG_ISR_HANDLED|CYG_ISR_CALL_DSR); // Run the DSR -} - -// This DSR starts up the touch panel [logical] processing -static void -lcd_panel_dsr(cyg_vector_t vector, cyg_ucount32 count, cyg_addrword_t data) -{ - // Tell the panel processing thread to give it a shot - cyg_semaphore_post(&lcd_panel_sem); -} - -// Assumption: if the keypress vanishes for 5*20 ms, it probably isn't there -#define LCD_PANEL_TIMEOUT 5 - -static __inline__ int -abs(int x) -{ - if (x < 0) return -x; - return x; -} - -static void -lcd_panel_server(cyg_addrword_t p) -{ - int iX, iY, newX, newY, diffX, diffY, timeout, samples; - cyg_uint32 event; - diag_printf("LCD panel server here\n"); - while (TRUE) { - cyg_semaphore_wait(&lcd_panel_sem); - samples = 0; iX = 0; iY = 0; - // Wait for press to go away (no drag support) - timeout = 0; - while (timeout < LCD_PANEL_TIMEOUT) { - *(volatile cyg_uint8 *)TOUCH_CTL = 0x00; // Disable drives - while (*(volatile cyg_uint32 *)INTSR1 & INTSR1_EINT2) ; - *(volatile cyg_uint8 *)TOUCH_CTL = 0x70; // Idle state (so interrupt works) - cyg_thread_delay(2); // Wait 20 ms - if (*(volatile cyg_uint32 *)INTSR1 & INTSR1_EINT2) { - // Still pressed - // Drive TSPY, ground TSMY, and disconnect TSPX and TSMX - *(volatile cyg_uint8 *)TOUCH_CTL = 0x50; - panel_delay(); - newY = adc_sample(2); - // Drive TSPX, ground TSMX, and disconnect TSPY and TSMY - *(volatile cyg_uint8 *)TOUCH_CTL = 0xA0; - panel_delay(); - newX = adc_sample(7); -#if 0 - diag_printf("timeout: %d, ISR: %x, newX: %d, newY: %d\n", - timeout, *(volatile cyg_uint32 *)INTSR1, newX, newY); -#endif - // See if this sample makes any sense - if (samples) { - diffX = abs(iX/samples - newX); - diffY = abs(iY/samples - newY); - if ((diffX <= ((iX/samples)/4)) && - (diffY <= ((iY/samples)/4))) { - samples++; - iX += newX; - iY += newY; - } else { -#if 0 - diag_printf("Discard - newX: %d, X: %d, newY: %d, Y: %d\n", - newX, iX/samples, newY, iY/samples); -#endif - break; - } - } else { - iX = newX; - iY = newY; - samples = 1; - } - timeout = 0; - } else { - timeout++; - } - } - if (samples) { - // Send event to user level - event = (iX/samples)<<16 | (iY/samples); - if (!cyg_mbox_tryput(lcd_panel_events_mbox_handle, (void *)event)) { - diag_printf("LCD event lost: %x\n", event); - } - } - *(volatile cyg_uint8 *)TOUCH_CTL = 0x00; // Disable drives - while (*(volatile cyg_uint32 *)INTSR1 & INTSR1_EINT2) ; - *(volatile cyg_uint8 *)TOUCH_CTL = 0x70; // Idle state (so interrupt works) - cyg_thread_delay(10); - cyg_drv_interrupt_unmask(CYGNUM_HAL_INTERRUPT_EINT2); - } -} - -static void -lcd_panel_init(void) -{ - // Enable touch panel - *(volatile cyg_uint8 *)PEDR |= 0x04; - - // Idle state (so interrupt works) - *(volatile cyg_uint8 *)TOUCH_CTL = 0x70; - - // Enable ADC machinery - *(volatile cyg_uint32 *)SYSCON1 |= SYSCON1_ADC_CLOCK_128kHZ; - - cyg_drv_interrupt_create(CYGNUM_HAL_INTERRUPT_EINT2, - 99, // Priority - what goes here? - 0, // Data item passed to interrupt handler - lcd_panel_isr, - lcd_panel_dsr, - &lcd_panel_interrupt_handle, - &lcd_panel_interrupt); - cyg_drv_interrupt_attach(lcd_panel_interrupt_handle); - cyg_drv_interrupt_acknowledge(CYGNUM_HAL_INTERRUPT_EINT2); - cyg_drv_interrupt_unmask(CYGNUM_HAL_INTERRUPT_EINT2); - // Set up the mbox for panel data - cyg_mbox_create(&lcd_panel_events_mbox_handle, &lcd_panel_events_mbox); - // This semaphore is set when there is a touch - cyg_semaphore_init(&lcd_panel_sem, 0); - // Create a thread whose job it is to de-bounce the keyboard and - // actually process the input, turning it into a series of events - cyg_thread_create(10, // Priority - just a number - lcd_panel_server, // entry - 0, // initial parameter - "LCD_PANEL_server", // Name - &lcd_panel_server_stack[0], // Stack - STACK_SIZE, // Size - &lcd_panel_server_thread_handle, // Handle - &lcd_panel_server_thread_data // Thread data structure - ); - cyg_thread_resume(lcd_panel_server_thread_handle); // Start it -}
deleted file mode 100644 --- a/packages/hal/arm/cl7211/current/misc/lcd_support.c +++ /dev/null @@ -1,499 +0,0 @@ -//========================================================================== -// -// lcd_support.c -// -// Cirrus CL72xx eval board LCD support 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-09-01 -// Description: Functions to drive LCD display -//####DESCRIPTIONEND#### - -// 8x8 Font - from Helios - -#define FIRST_CHAR 0x20 -#define LAST_CHAR 0x7E -#define FONT_HEIGHT 8 -#define FONT_WIDTH 8 -#define CURSOR_ON 0x5F -#define CURSOR_OFF 0x20 -static char font_table[LAST_CHAR-FIRST_CHAR+1][8] = -{ - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* */ - { 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x00 }, /* ! */ - { 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* " */ - { 0x6C, 0x6C, 0xFE, 0x6C, 0xFE, 0x6C, 0x6C, 0x00 }, /* # */ - { 0x30, 0xFC, 0x16, 0x7C, 0xD0, 0x7E, 0x18, 0x00 }, /* $ */ - { 0x06, 0x66, 0x30, 0x18, 0x0C, 0x66, 0x60, 0x00 }, /* % */ - { 0x1C, 0x36, 0x36, 0x1C, 0xB6, 0x66, 0xDC, 0x00 }, /* & */ - { 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* ' */ - { 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x18, 0x30, 0x00 }, /* ( */ - { 0x0C, 0x18, 0x30, 0x30, 0x30, 0x18, 0x0C, 0x00 }, /* ) */ - { 0x00, 0x18, 0x7E, 0x3C, 0x7E, 0x18, 0x00, 0x00 }, /* * */ - { 0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00 }, /* + */ - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x0C }, /* , */ - { 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00 }, /* - */ - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00 }, /* . */ - { 0x00, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x00, 0x00 }, /* / */ - { 0x3C, 0x66, 0x76, 0x7E, 0x6E, 0x66, 0x3C, 0x00 }, /* 0 */ - { 0x18, 0x1C, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x00 }, /* 1 */ - { 0x3C, 0x66, 0x60, 0x30, 0x18, 0x0C, 0x7E, 0x00 }, /* 2 */ - { 0x3C, 0x66, 0x60, 0x38, 0x60, 0x66, 0x3C, 0x00 }, /* 3 */ - { 0x30, 0x38, 0x3C, 0x36, 0x7E, 0x30, 0x30, 0x00 }, /* 4 */ - { 0x7E, 0x06, 0x3E, 0x60, 0x60, 0x66, 0x3C, 0x00 }, /* 5 */ - { 0x38, 0x0C, 0x06, 0x3E, 0x66, 0x66, 0x3C, 0x00 }, /* 6 */ - { 0x7E, 0x60, 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x00 }, /* 7 */ - { 0x3C, 0x66, 0x66, 0x3C, 0x66, 0x66, 0x3C, 0x00 }, /* 8 */ - { 0x3C, 0x66, 0x66, 0x7C, 0x60, 0x30, 0x1C, 0x00 }, /* 9 */ - { 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00 }, /* : */ - { 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x0C }, /* ; */ - { 0x30, 0x18, 0x0C, 0x06, 0x0C, 0x18, 0x30, 0x00 }, /* < */ - { 0x00, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x00, 0x00 }, /* = */ - { 0x0C, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0C, 0x00 }, /* > */ - { 0x3C, 0x66, 0x30, 0x18, 0x18, 0x00, 0x18, 0x00 }, /* ? */ - { 0x3C, 0x66, 0x76, 0x56, 0x76, 0x06, 0x3C, 0x00 }, /* @ */ - { 0x3C, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x66, 0x00 }, /* A */ - { 0x3E, 0x66, 0x66, 0x3E, 0x66, 0x66, 0x3E, 0x00 }, /* B */ - { 0x3C, 0x66, 0x06, 0x06, 0x06, 0x66, 0x3C, 0x00 }, /* C */ - { 0x1E, 0x36, 0x66, 0x66, 0x66, 0x36, 0x1E, 0x00 }, /* D */ - { 0x7E, 0x06, 0x06, 0x3E, 0x06, 0x06, 0x7E, 0x00 }, /* E */ - { 0x7E, 0x06, 0x06, 0x3E, 0x06, 0x06, 0x06, 0x00 }, /* F */ - { 0x3C, 0x66, 0x06, 0x76, 0x66, 0x66, 0x3C, 0x00 }, /* G */ - { 0x66, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x66, 0x00 }, /* H */ - { 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x00 }, /* I */ - { 0x7C, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1C, 0x00 }, /* J */ - { 0x66, 0x36, 0x1E, 0x0E, 0x1E, 0x36, 0x66, 0x00 }, /* K */ - { 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x7E, 0x00 }, /* L */ - { 0xC6, 0xEE, 0xFE, 0xD6, 0xD6, 0xC6, 0xC6, 0x00 }, /* M */ - { 0x66, 0x66, 0x6E, 0x7E, 0x76, 0x66, 0x66, 0x00 }, /* N */ - { 0x3C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00 }, /* O */ - { 0x3E, 0x66, 0x66, 0x3E, 0x06, 0x06, 0x06, 0x00 }, /* P */ - { 0x3C, 0x66, 0x66, 0x66, 0x56, 0x36, 0x6C, 0x00 }, /* Q */ - { 0x3E, 0x66, 0x66, 0x3E, 0x36, 0x66, 0x66, 0x00 }, /* R */ - { 0x3C, 0x66, 0x06, 0x3C, 0x60, 0x66, 0x3C, 0x00 }, /* S */ - { 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00 }, /* T */ - { 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00 }, /* U */ - { 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x00 }, /* V */ - { 0xC6, 0xC6, 0xD6, 0xD6, 0xFE, 0xEE, 0xC6, 0x00 }, /* W */ - { 0x66, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0x66, 0x00 }, /* X */ - { 0x66, 0x66, 0x66, 0x3C, 0x18, 0x18, 0x18, 0x00 }, /* Y */ - { 0x7E, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x7E, 0x00 }, /* Z */ - { 0x3E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x3E, 0x00 }, /* [ */ - { 0x00, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x00, 0x00 }, /* \ */ - { 0x7C, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7C, 0x00 }, /* ] */ - { 0x3C, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* ^ */ - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF }, /* _ */ - { 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* ` */ - { 0x00, 0x00, 0x3C, 0x60, 0x7C, 0x66, 0x7C, 0x00 }, /* a */ - { 0x06, 0x06, 0x3E, 0x66, 0x66, 0x66, 0x3E, 0x00 }, /* b */ - { 0x00, 0x00, 0x3C, 0x66, 0x06, 0x66, 0x3C, 0x00 }, /* c */ - { 0x60, 0x60, 0x7C, 0x66, 0x66, 0x66, 0x7C, 0x00 }, /* d */ - { 0x00, 0x00, 0x3C, 0x66, 0x7E, 0x06, 0x3C, 0x00 }, /* e */ - { 0x38, 0x0C, 0x0C, 0x3E, 0x0C, 0x0C, 0x0C, 0x00 }, /* f */ - { 0x00, 0x00, 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x3C }, /* g */ - { 0x06, 0x06, 0x3E, 0x66, 0x66, 0x66, 0x66, 0x00 }, /* h */ - { 0x18, 0x00, 0x1C, 0x18, 0x18, 0x18, 0x3C, 0x00 }, /* i */ - { 0x18, 0x00, 0x1C, 0x18, 0x18, 0x18, 0x18, 0x0E }, /* j */ - { 0x06, 0x06, 0x66, 0x36, 0x1E, 0x36, 0x66, 0x00 }, /* k */ - { 0x1C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00 }, /* l */ - { 0x00, 0x00, 0x6C, 0xFE, 0xD6, 0xD6, 0xC6, 0x00 }, /* m */ - { 0x00, 0x00, 0x3E, 0x66, 0x66, 0x66, 0x66, 0x00 }, /* n */ - { 0x00, 0x00, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00 }, /* o */ - { 0x00, 0x00, 0x3E, 0x66, 0x66, 0x3E, 0x06, 0x06 }, /* p */ - { 0x00, 0x00, 0x7C, 0x66, 0x66, 0x7C, 0x60, 0xE0 }, /* q */ - { 0x00, 0x00, 0x36, 0x6E, 0x06, 0x06, 0x06, 0x00 }, /* r */ - { 0x00, 0x00, 0x7C, 0x06, 0x3C, 0x60, 0x3E, 0x00 }, /* s */ - { 0x0C, 0x0C, 0x3E, 0x0C, 0x0C, 0x0C, 0x38, 0x00 }, /* t */ - { 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x7C, 0x00 }, /* u */ - { 0x00, 0x00, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x00 }, /* v */ - { 0x00, 0x00, 0xC6, 0xD6, 0xD6, 0xFE, 0x6C, 0x00 }, /* w */ - { 0x00, 0x00, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0x00 }, /* x */ - { 0x00, 0x00, 0x66, 0x66, 0x66, 0x7C, 0x60, 0x3C }, /* y */ - { 0x00, 0x00, 0x7E, 0x30, 0x18, 0x0C, 0x7E, 0x00 }, /* z */ - { 0x30, 0x18, 0x18, 0x0E, 0x18, 0x18, 0x30, 0x00 }, /* { */ - { 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00 }, /* | */ - { 0x0C, 0x18, 0x18, 0x70, 0x18, 0x18, 0x0C, 0x00 }, /* } */ - { 0x8C, 0xD6, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00 } /* ~ */ -}; - -#define ALPS_LH -#ifdef ALPS_LH -#define LCD_WIDTH 640 -#define LCD_HEIGHT 240 -#else -#define LCD_WIDTH 320 -#define LCD_HEIGHT 240 -#endif -// This can be 1 or 2 -#define SCREEN_SCALE 2 -#define NIBBLES_PER_PIXEL (1*SCREEN_SCALE) -#define PIXELS_PER_BYTE (2/NIBBLES_PER_PIXEL) -#define PIXEL_MASK ((1<<PIXELS_PER_BYTE)-1) - -// Physical screen info -static int lcd_depth; // Should be 1, 2, or 4 -static int lcd_width = LCD_WIDTH; -static int lcd_height = LCD_HEIGHT; -static cyg_uint8 *lcd_base = (cyg_uint8 *)0xC0000000; - -// Virtual screen info -static int curX = 0; // Last used position -static int curY = 0; -static int width = LCD_WIDTH / (FONT_WIDTH*NIBBLES_PER_PIXEL); -static int height = LCD_HEIGHT / (FONT_HEIGHT*SCREEN_SCALE); -static int fg = 0x0F; -static int bg = 0x00; - -// Functions -static void lcd_drawc(cyg_int8 c, int x, int y); - -void -lcd_on(int depth) -{ - cyg_int32 ctl_word = 0; - lcd_depth = depth; - switch (depth) { - case 1: - *(volatile cyg_int32 *)PALLSW = 0xF0F0F0F0; - *(volatile cyg_int32 *)PALMSW = 0xF0F0F0F0; - ctl_word = 0; - break; - case 2: - *(volatile cyg_int32 *)PALLSW = 0xFA50FA50; - *(volatile cyg_int32 *)PALMSW = 0xFA50FA50; - ctl_word = LCDCON_GSEN; - break; - case 4: - *(volatile cyg_int32 *)PALLSW = 0x76543210; - *(volatile cyg_int32 *)PALMSW = 0xFEDCBA98; - ctl_word = LCDCON_GSEN | LCDCON_GSMD; - break; - } - // Video buffer size - ctl_word |= ((lcd_width * lcd_height * lcd_depth) / 128 - 1) << LCDCON_BUFSIZ_S; - // Line length - ctl_word |= ((lcd_width / 16) - 1) << LCDCON_LINE_LENGTH_S; - // Pixel prescale - ctl_word |= ((526628 / (lcd_height * lcd_width)) - 1) << LCDCON_PIX_PRESCALE_S; - // AC frequency bias - ctl_word |= 0 << LCDCON_AC_PRESCALE_S; - *(volatile cyg_int32 *)LCDCON = ctl_word; - diag_printf("Depth: %d, ctl: %x\n", depth, ctl_word); - -#ifdef ALPS_LH -#define LCD_DCDC 0x02 -#define LCD_ENABLE 0x04 -#define LCD_BACKLIGHT 0x08 -#define LCD_INIT (LCD_DCDC|LCD_ENABLE|LCD_BACKLIGHT) - *(volatile cyg_uint8 *)PDDDR = 0x40; // 1's are inputs (backwards from A/B/E) - *(volatile cyg_uint8 *)PDDR = LCD_INIT; // Enable video + backlight + DC-DC converter -#else -#ifdef _CL7111 - *(volatile cyg_uint8 *)PDDR = 0x20; // Enable video - *(volatile cyg_uint8 *)PEDDR = 0x0F; // Register E data direction - *(volatile cyg_uint8 *)PEDR |= 0x01; // Enable PE2 - - *(volatile cyg_uint32 *)PMPCON = 0x500; // Enable DC-to-DC pump #1 -#endif -#endif - - *(volatile cyg_uint8 *)FRBADDR = 0x0C; // Highest order nibble of LCD frame address - - *(volatile cyg_uint32 *)SYSCON1 |= SYSCON1_LCDEN; -} - -// Clear screen -void -lcd_clear(void) -{ - cyg_int8 *ptr = lcd_base; - int i; - for (i = 0; i < (lcd_width*lcd_height*lcd_depth)/8; i++) { - *ptr++ = 0; - } - curX = 0; curY = 0; - lcd_drawc(CURSOR_ON, curX, curY); -} - -// Position cursor -void -lcd_moveto(int X, int Y) -{ - lcd_drawc(CURSOR_OFF, curX, curY); - if (X < 0) X = 0; - if (X >= width) X = width-1; - curX = X; - if (Y < 0) Y = 0; - if (Y >= height) Y = height-1; - curY = Y; - lcd_drawc(CURSOR_ON, curX, curY); -} - -// Render a character at position (X,Y) with current background/foreground -static void -lcd_drawc(cyg_int8 c, int x, int y) -{ - // Note: this only works for fonts which are a multiple of 8 bits wide! - cyg_uint8 *bufptr, bits; - int l, p, w; - switch (lcd_depth) { - case 1: - bufptr = lcd_base + ((y * FONT_HEIGHT * (lcd_width*lcd_depth)) + (x * FONT_WIDTH)) / 8; - for (l = 0; l < FONT_HEIGHT; l++) { - *bufptr = font_table[c][l]; - bufptr += (lcd_width*lcd_depth)/8; - } - break; - case 2: - diag_printf("Depth 2 not implemented\n"); - break; - case 4: - bufptr = lcd_base + ((y * (FONT_HEIGHT*SCREEN_SCALE) * (lcd_width*lcd_depth)) - + (x * (FONT_WIDTH*SCREEN_SCALE) * lcd_depth)) / 8; - for (l = 0; l < FONT_HEIGHT; l++) { - for (w = 0; w < SCREEN_SCALE; w++) { - bits = font_table[c-FIRST_CHAR][l]; - for (p = 0; p < 8; p += PIXELS_PER_BYTE) { - switch (bits & PIXEL_MASK) { - case 0: - *bufptr++ = (bg << 4) | bg; - break; - case 1: -#if SCREEN_SCALE == 1 - *bufptr++ = (bg << 4) | fg; -#else - *bufptr++ = (fg << 4) | fg; -#endif - break; -#if SCREEN_SCALE == 1 - case 2: - *bufptr++ = (fg << 4) | bg; - break; - case 3: - *bufptr++ = (fg << 4) | fg; - break; -#endif - } - bits >>= PIXELS_PER_BYTE; - } - bufptr += (lcd_width*lcd_depth)/8 - (8/PIXELS_PER_BYTE); - } - } - break; - } -} - -// Draw one character at the current position -void -lcd_putc(cyg_int8 c) -{ - lcd_drawc(CURSOR_OFF, curX, curY); - switch (c) { - case '\r': - curX = 0; - break; - case '\n': - curY++; - break; - case '\b': - curX--; - if (curX < 0) { - curY--; - if (curY < 0) curY = 0; - curX = width-1; - } - break; - default: - lcd_drawc(c, curX, curY); - curX++; - if (curX == width) { - curY++; - curX = 0; - } - } - lcd_drawc(CURSOR_ON, curX, curY); -} - -// Basic LCD 'printf()' support - -#ifndef FALSE -#define FALSE 0 -#define TRUE 1 -#endif - -#include <stdarg.h> - -#define is_digit(c) ((c >= '0') && (c <= '9')) - -static int -_cvt(unsigned long val, char *buf, long radix, char *digits) -{ - char temp[80]; - char *cp = temp; - int length = 0; - if (val == 0) { - /* Special case */ - *cp++ = '0'; - } else { - while (val) { - *cp++ = digits[val % radix]; - val /= radix; - } - } - while (cp != temp) { - *buf++ = *--cp; - length++; - } - *buf = '\0'; - return (length); -} - -int -lcd_vprintf(void (*putc)(cyg_int8), const char *fmt0, va_list ap) -{ - char c, sign, *cp; - int left_prec, right_prec, zero_fill, length, pad, pad_on_right; - char buf[32]; - long val; - while ((c = *fmt0++)) { - cp = buf; - length = 0; - if (c == '%') { - c = *fmt0++; - left_prec = right_prec = pad_on_right = 0; - if (c == '-') { - c = *fmt0++; - pad_on_right++; - } - if (c == '0') { - zero_fill = TRUE; - c = *fmt0++; - } else { - zero_fill = FALSE; - } - while (is_digit(c)) { - left_prec = (left_prec * 10) + (c - '0'); - c = *fmt0++; - } - if (c == '.') { - c = *fmt0++; - zero_fill++; - while (is_digit(c)) { - right_prec = (right_prec * 10) + (c - '0'); - c = *fmt0++; - } - } else { - right_prec = left_prec; - } - sign = '\0'; - switch (c) { - case 'd': - case 'x': - case 'X': - val = va_arg(ap, long); - switch (c) { - case 'd': - if (val < 0) { - sign = '-'; - val = -val; - } - length = _cvt(val, buf, 10, "0123456789"); - break; - case 'x': - length = _cvt(val, buf, 16, "0123456789abcdef"); - break; - case 'X': - length = _cvt(val, buf, 16, "0123456789ABCDEF"); - break; - } - break; - case 's': - cp = va_arg(ap, char *); - length = strlen(cp); - break; - case 'c': - c = va_arg(ap, long /*char*/); - (*putc)(c); - continue; - default: - (*putc)('?'); - } - pad = left_prec - length; - if (sign != '\0') { - pad--; - } - if (zero_fill) { - c = '0'; - if (sign != '\0') { - (*putc)(sign); - sign = '\0'; - } - } else { - c = ' '; - } - if (!pad_on_right) { - while (pad-- > 0) { - (*putc)(c); - } - } - if (sign != '\0') { - (*putc)(sign); - } - while (length-- > 0) { - (*putc)(c = *cp++); - if (c == '\n') { - (*putc)('\r'); - } - } - if (pad_on_right) { - while (pad-- > 0) { - (*putc)(' '); - } - } - } else { - (*putc)(c); - if (c == '\n') { - (*putc)('\r'); - } - } - } -} - -int -lcd_printf(char const *fmt, ...) -{ - int ret; - va_list ap; - - va_start(ap, fmt); - ret = lcd_vprintf(lcd_putc, fmt, ap); - va_end(ap); - return (ret); -} -
deleted file mode 100644 --- a/packages/hal/arm/cl7211/current/misc/lcd_test.c +++ /dev/null @@ -1,116 +0,0 @@ -//========================================================================== -// -// lcd_test.c -// -// Cirrus CL7211 eval board LCD 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-09-01 -// Description: Tool used to test LCD controller -//####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; - -#include "lcd_support.c" - -// FUNCTIONS - -static void -cyg_test_exit(void) -{ - while (TRUE) ; -} - -static void -lcd_test(int depth) -{ - int i, j; - diag_printf("Set depth %d\n", depth); - lcd_on(depth); - lcd_clear(); - for (j = 0; j < 5; j++) { - for (i = 0; i < width; i++) { - lcd_putc('A'); - } - } - lcd_putc('\n'); - lcd_putc('\n'); - cyg_thread_delay(5*100); - for (j = 0; j < 5; j++) { - for (i = FIRST_CHAR; i <= LAST_CHAR; i++) { - lcd_putc(i); - } - } - cyg_thread_delay(5*100); -} - -static void -lcd_exercise(cyg_addrword_t p) -{ - diag_printf("LCD test here!\n"); - -// lcd_test(1); -// lcd_test(2); - lcd_test(4); - - 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 - lcd_exercise, // entry - 0, // entry parameter - "LCD_test_thread", // 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() -
deleted file mode 100644 --- a/packages/hal/arm/cl7211/current/misc/panel_test.c +++ /dev/null @@ -1,107 +0,0 @@ -//========================================================================== -// -// panel_test.c -// -// Cirrus CL72xx eval board LCD touch panel 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-09-06 -// Description: Tool used to test LCD touch panel -//####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 - -#include <cyg/hal/hal_io.h> // IO macros -#include <cyg/hal/hal_arch.h> // Register state info -#include <cyg/hal/hal_diag.h> -#include <cyg/hal/hal_intr.h> // HAL interrupt macros -#include <cyg/hal/drv_api.h> // HAL ISR support - -#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; - -#include "lcd_support.c" -#include "lcd_panel_support.c" - -// FUNCTIONS - -static void -cyg_test_exit(void) -{ - while (TRUE) ; -} - -static void -panel_exercise(cyg_addrword_t p) -{ - int i; - cyg_uint32 val; - - diag_printf("LCD touch panel test here!\n"); - - lcd_panel_init(); - - for (i = 0; i < 50; i++) { - diag_printf("Please touch screen now:\n"); - val = (cyg_uint32)cyg_mbox_get(lcd_panel_events_mbox_handle); - diag_printf("val = %x, X = %d, Y = %d\n", val, (val>>16), val & 0xFFFF); - } - - 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 - panel_exercise, // entry - 0, // initial parameter - "LCD_panel_thread", // 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() -
deleted file mode 100644 --- a/packages/hal/arm/cl7211/current/misc/prog_flash.c +++ /dev/null @@ -1,312 +0,0 @@ -//========================================================================== -// -// prog_flash.c -// -// Cirrus CL7211 eval board FLASH program tool -// -//========================================================================== -//####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-05-12 -// Description: Tool used to program onboard FLASH image -//####DESCRIPTIONEND#### - -// -// This program will program the FLASH on the CL7211 board from a fixed buffer -// - -#include <pkgconf/kernel.h> // Configuration header -#include <cyg/kernel/kapi.h> -#include <cyg/infra/diag.h> -#include <cyg/hal/hal_cache.h> - -#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; - -void identify_FLASH(void); -int write_flash(long *data, volatile long *mem); -int erase_sector(volatile long *mem); - -// Note: these are mapped addresses -// 0xE0000000 = ROM Bank 0 -// 0xF0000000 = ROM Bank 1 -volatile unsigned long *FLASH = (volatile unsigned long *)0xE0000000; - -long *flash_buffer = (long *)0x60000; -long *flash_buffer_end = (long *)0x64000; -long *ROM_address = (long *)0xE07E0000; - -// Adapted from Cirrus sample code -#define ATMEL_SEQ_ADD1 0x00015554>>2 -#define ATMEL_SEQ_ADD2 0x0000AAA8>>2 -#define ATMEL_START_CMD1 0xAAAAAAAA -#define ATMEL_START_CMD2 0x55555555 -#define ATMEL_ID_CMD 0x90909090 -#define ATMEL_PROG_CMD 0xA0A0A0A0 -#define ATMEL_ERASE_CMD 0x80808080 -#define ATMEL_SECTOR_ERASE_CMD 0x30303030 -#define ATMEL_STOP_CMD 0xF0F0F0F0 -#define ATMEL_BUSY_TOGGLE 0x00400040 -#define ATMEL_ERASE_TOGGLE 0x00440044 - -#define ATMEL_MANUF 0x1F -#define ATMEL_AT29C040_ID 0X5B -#define ATMEL_AT29C040A_ID 0XA4 -#define ATMEL_AT29C1024_ID 0X25 -#define ATMEL_SECTOR_SIZE 256 -#define ATMEL_MAX_SECTORS 2048 - -#define INTEL_MANUF 0x0089 -#define INTEL_STOP_CMD 0x00FF00FF -#define INTEL_PROG_CMD 0x00400040 -#define INTEL_ERASE_CMD 0x00200020 -#define INTEL_ERASE_CONFIRM 0x00D000D0 -#define INTEL_READ_STATUS 0x00700070 -#define INTEL_CLEAR_STATUS 0x00500050 -#define INTEL_SB_WSMS 0x00800080 // Write state machine = ready -#define INTEL_SB_ERASE_ERROR 0x00200020 // Erase failure -#define INTEL_SB_PROG_ERROR 0x00100010 // Programming failure - -#define ERASE_TIMEOUT 10 // seconds - -int manuf_code, device_code, sector_size, max_no_of_sectors, word_mode; - -// FUNCTIONS - -static void -cyg_test_exit(void) -{ - while (TRUE) ; -} - -static void -program_flash(void) -{ - diag_printf("PROGRAM FLASH here!\n"); - HAL_UCACHE_SYNC(); // ROM space is marked cacheable which causes problems! - HAL_UCACHE_DISABLE(); // So, just disable caches. - identify_FLASH(); - diag_printf("About to program FLASH using data at %x..%x\n", flash_buffer, flash_buffer_end); - diag_printf("*** Press RESET now to abort!\n"); - cyg_thread_delay(5*100); - diag_printf("\n"); - diag_printf("... Erase sector\n"); - if (erase_sector(ROM_address)) { - diag_printf("... Programming FLASH\n"); - while (flash_buffer < flash_buffer_end) { - if (!write_flash(flash_buffer++, ROM_address++)) break; - } - } - - // Exit Program Mode - switch (manuf_code) { - case ATMEL_MANUF: - FLASH[ATMEL_SEQ_ADD1] = ATMEL_START_CMD1; - FLASH[ATMEL_SEQ_ADD2] = ATMEL_START_CMD2; - FLASH[ATMEL_SEQ_ADD1] = ATMEL_STOP_CMD; - break; - case INTEL_MANUF: - FLASH[0] = INTEL_STOP_CMD; - break; - } - diag_printf("All done!\n"); - cyg_test_exit(); -} - -void -identify_FLASH(void ) -{ - // Enter Software Product Identification Mode - FLASH[ATMEL_SEQ_ADD1] = ATMEL_START_CMD1; - FLASH[ATMEL_SEQ_ADD2] = ATMEL_START_CMD2; - FLASH[ATMEL_SEQ_ADD1] = ATMEL_ID_CMD; - - // Wait at least 10ms - cyg_thread_delay(2); - - // Read Manufacturer and device code from the device - manuf_code = FLASH[0] >> 16; - device_code = FLASH[1] >> 16; - - diag_printf("manufacturer: 0x%04x, device: 0x%04x\n", manuf_code, device_code); - - // Exit Software Product Identification Mode - switch (manuf_code) { - case ATMEL_MANUF: - FLASH[ATMEL_SEQ_ADD1] = ATMEL_START_CMD1; - FLASH[ATMEL_SEQ_ADD2] = ATMEL_START_CMD2; - FLASH[ATMEL_SEQ_ADD1] = ATMEL_STOP_CMD; - break; - case INTEL_MANUF: - FLASH[0] = INTEL_STOP_CMD; - break; - default: - diag_printf("Unrecognized FLASH manufacturer - I give up!\n"); - cyg_test_exit(); - } -} - -void -spin(void) -{ - volatile int i; - for (i = 0; i < 100; i++) ; -} - -int -write_flash(long *data, volatile long *mem) -{ - long data1, data2; - long status; - int timer; - switch (manuf_code) { - case ATMEL_MANUF: - // Enter Program Mode - FLASH[ATMEL_SEQ_ADD1] = ATMEL_START_CMD1; - FLASH[ATMEL_SEQ_ADD2] = ATMEL_START_CMD2; - FLASH[ATMEL_SEQ_ADD1] = ATMEL_PROG_CMD; - // Send data to selected address - *mem = *data; - while (TRUE) { - data1 = *mem; // Read cell back twice - data2 = *mem; - // Bit 6 toggles between reads while programming in progress - if ((data1 & ATMEL_BUSY_TOGGLE) == (data2 & ATMEL_BUSY_TOGGLE)) break; - } - break; - case INTEL_MANUF: - // Clear current errors - FLASH[0] = INTEL_CLEAR_STATUS; - // Issue program command - FLASH[0] = INTEL_PROG_CMD; - // Send data to selected address - *mem = *data; - timer = 10000; - // Read the status register to wait for programming complete - do { - spin(); - status = FLASH[0]; - } while (((status & INTEL_SB_WSMS) != INTEL_SB_WSMS) && - (--timer > 0)); - // Check for errors - if (timer == 0) { - diag_printf("Programming at 0x%08x timed out - status: 0x%08x\n", mem, status); - } - if ((status & INTEL_SB_PROG_ERROR) != 0) { - diag_printf("Device reports programming error at 0x%08x - status: 0x%08x\n", mem, status); - } - // Exit program mode - FLASH[0] = INTEL_STOP_CMD; - break; - } - if (*mem != *data) { - diag_printf("Programming failed at 0x%08x - write: 0x%08x, read: 0x%08x\n", - mem, *data, *mem); - return (FALSE); - } - return (TRUE); -} - -int -erase_sector(volatile long *mem) -{ - long data1, data2; - long status; - int timer; - switch (manuf_code) { - case ATMEL_MANUF: - // Erase sector command - FLASH[ATMEL_SEQ_ADD1] = ATMEL_START_CMD1; - FLASH[ATMEL_SEQ_ADD2] = ATMEL_START_CMD2; - FLASH[ATMEL_SEQ_ADD1] = ATMEL_ERASE_CMD; - FLASH[ATMEL_SEQ_ADD1] = ATMEL_START_CMD1; - FLASH[ATMEL_SEQ_ADD2] = ATMEL_START_CMD2; - *mem = ATMEL_SECTOR_ERASE_CMD; - while (TRUE) { - data1 = *mem; // Read cell back twice - data2 = *mem; - // Bits 6+2 toggle between reads while programming in progress - if ((data1 & ATMEL_ERASE_TOGGLE) == (data2 & ATMEL_ERASE_TOGGLE)) break; - } - break; - case INTEL_MANUF: - // Clear current errors - FLASH[0] = INTEL_CLEAR_STATUS; - // Issue erase block command - FLASH[0] = INTEL_ERASE_CMD; - *mem = INTEL_ERASE_CONFIRM; - timer = ERASE_TIMEOUT*50; - // Read the status register while erase in progress - do { - cyg_thread_delay(2); - status = FLASH[0]; - } while (((status & INTEL_SB_WSMS) != INTEL_SB_WSMS) && - (--timer > 0)); - // Check for errors - if (timer == 0) { - diag_printf("Erase not complete after %d seconds - status: 0x%08x\n", - ERASE_TIMEOUT, status); - } - if ((status & INTEL_SB_ERASE_ERROR) != 0) { - diag_printf("Device reports erase error - status: 0x%08x\n", status); - } - // Exit erase mode - FLASH[0] = INTEL_STOP_CMD; - break; - } - if (*mem != 0xFFFFFFFF) { - diag_printf("Erase failed at 0x%08x - read: 0x%08x\n", - mem, *mem); - return (FALSE); - } - return (TRUE); -} - -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 - program_flash, // entry - 1, // index - "program_thread", // 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() -
deleted file mode 100644 --- a/packages/hal/arm/cl7211/current/src/PKGconf.mak +++ /dev/null @@ -1,42 +0,0 @@ -#============================================================================== -# -# makefile -# -# hal/arm/cl7211/src -# -#============================================================================== -#####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#### -#============================================================================== - -PACKAGE := hal_arm_cl7211 -include ../../../../../pkgconf/system.mak -include ../../../../../pkgconf/pkgconf.mak - -LIBRARY := libtarget.a -COMPILE := hal_diag.c plf_stub.c cl7211_misc.c -OTHER_OBJS := -OTHER_TARGETS := -OTHER_CLEAN := -OTHER_DEPS := - -include $(COMPONENT_REPOSITORY)/pkgconf/makrules.src
deleted file mode 100644 --- a/packages/hal/arm/cl7211/current/src/cl7211_misc.c +++ /dev/null @@ -1,371 +0,0 @@ -//========================================================================== -// -// cl7211_misc.c -// -// HAL misc board support code for ARM CL7211-1 -// -//========================================================================== -//####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-02-20 -// Purpose: HAL board support -// Description: Implementations of HAL board interfaces -// -//####DESCRIPTIONEND#### -// -//========================================================================*/ - -#include <pkgconf/hal.h> -#include <pkgconf/system.h> -#include CYGBLD_HAL_PLATFORM_H - -#include <cyg/infra/cyg_type.h> // base types -#include <cyg/infra/cyg_trac.h> // tracing macros -#include <cyg/infra/cyg_ass.h> // assertion macros - -#include <cyg/hal/hal_io.h> // IO macros -#include <cyg/hal/hal_arch.h> // Register state info -#include <cyg/hal/hal_diag.h> -#include <cyg/hal/hal_intr.h> // Interrupt names -#include <cyg/hal/hal_cache.h> -#include <cyg/hal/hal_cl7211.h> // Hardware definitions - -// #define CYGHWR_HAL_ARM_CL7211_BATLOW -#ifdef CYGHWR_HAL_ARM_CL7211_BATLOW -#include <cyg/hal/hal_intr.h> // HAL interrupt macros -#include <cyg/hal/drv_api.h> // HAL ISR support -static cyg_interrupt batlow_interrupt; -static cyg_handle_t batlow_interrupt_handle; -#endif - -#if (CYGHWR_HAL_ARM_CL7211_PROCESSOR_CLOCK == 18432) -#define CPU_CLOCK 0 -#elif (CYGHWR_HAL_ARM_CL7211_PROCESSOR_CLOCK == 36864) -#define CPU_CLOCK 1 -#elif (CYGHWR_HAL_ARM_CL7211_PROCESSOR_CLOCK == 49152) -#define CPU_CLOCK 2 -#elif (CYGHWR_HAL_ARM_CL7211_PROCESSOR_CLOCK == 73728) -#define CPU_CLOCK 3 -#else -#err Invalid CPU clock frequency -#endif - -static cyg_uint32 _period; - -// Use Timer/Counter #2 for system clock - -void hal_clock_initialize(cyg_uint32 period) -{ - volatile cyg_uint32 *syscon1 = (volatile cyg_uint32 *)SYSCON1; - volatile cyg_uint32 *tc2d = (volatile cyg_uint32 *)TC2D; - // Set timer to 512KHz, prescale mode - *syscon1 = (*syscon1 & ~(SYSCON1_TC2M|SYSCON1_TC2S)) | SYSCON1_TC2S | SYSCON1_TC2M; - // Initialize counter - *tc2d = period; - _period = period; -} - -// 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; - if (period != _period) { - *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" -// that have occurred (i.e. how far away the current value is from the start) - -void hal_clock_read(cyg_uint32 *pvalue) -{ - volatile cyg_int32 *tc2d = (volatile cyg_int32 *)TC2D; - static cyg_int32 clock_val; - clock_val = *tc2d & 0x0000FFFF; // Register has only 16 bits - if (clock_val & 0x00008000) clock_val |= 0xFFFF8000; // Extend sign bit - *pvalue = (cyg_uint32)(_period - clock_val); // 'clock_val' counts down and wraps -} - -// These tables map the various [soft] interrupt numbers onto the hardware - -static cyg_uint32 hal_interrupt_bitmap[] = { - 0, // CYGNUM_HAL_INTERRUPT_unused 0 - INTSR1_EXTFIQ, // CYGNUM_HAL_INTERRUPT_EXTFIQ 1 - INTSR1_BLINT, // CYGNUM_HAL_INTERRUPT_BLINT 2 - INTSR1_WEINT, // CYGNUM_HAL_INTERRUPT_WEINT 3 - INTSR1_MCINT, // CYGNUM_HAL_INTERRUPT_MCINT 4 - INTSR1_CSINT, // CYGNUM_HAL_INTERRUPT_CSINT 5 - INTSR1_EINT1, // CYGNUM_HAL_INTERRUPT_EINT1 6 - INTSR1_EINT2, // CYGNUM_HAL_INTERRUPT_EINT2 7 - INTSR1_EINT3, // CYGNUM_HAL_INTERRUPT_EINT3 8 - INTSR1_TC1OI, // CYGNUM_HAL_INTERRUPT_TC1OI 9 - INTSR1_TC2OI, // CYGNUM_HAL_INTERRUPT_TC2OI 10 - INTSR1_RTCMI, // CYGNUM_HAL_INTERRUPT_RTCMI 11 - INTSR1_TINT, // CYGNUM_HAL_INTERRUPT_TINT 12 - INTSR1_UTXINT1, // CYGNUM_HAL_INTERRUPT_UTXINT1 13 - INTSR1_URXINT1, // CYGNUM_HAL_INTERRUPT_URXINT1 14 - INTSR1_UMSINT, // CYGNUM_HAL_INTERRUPT_UMSINT 15 - INTSR1_SSEOTI, // CYGNUM_HAL_INTERRUPT_SSEOTI 16 - INTSR2_KBDINT, // CYGNUM_HAL_INTERRUPT_KBDINT 17 - INTSR2_SS2RX, // CYGNUM_HAL_INTERRUPT_SS2RX 18 - INTSR2_SS2TX, // CYGNUM_HAL_INTERRUPT_SS2TX 19 - INTSR2_UTXINT2, // CYGNUM_HAL_INTERRUPT_UTXINT2 20 - INTSR2_URXINT2, // CYGNUM_HAL_INTERRUPT_URXINT2 21 -#if defined(__CL7211) - INTSR3_MCPINT // CYGNUM_HAL_INTERRUPT_MCPINT 22 -#endif -}; - -static cyg_uint32 hal_interrupt_mask_regmap[] = { - 0, // CYGNUM_HAL_INTERRUPT_unused 0 - INTMR1, // CYGNUM_HAL_INTERRUPT_EXTFIQ 1 - INTMR1, // CYGNUM_HAL_INTERRUPT_BLINT 2 - INTMR1, // CYGNUM_HAL_INTERRUPT_WEINT 3 - INTMR1, // CYGNUM_HAL_INTERRUPT_MCINT 4 - INTMR1, // CYGNUM_HAL_INTERRUPT_CSINT 5 - INTMR1, // CYGNUM_HAL_INTERRUPT_EINT1 6 - INTMR1, // CYGNUM_HAL_INTERRUPT_EINT2 7 - INTMR1, // CYGNUM_HAL_INTERRUPT_EINT3 8 - INTMR1, // CYGNUM_HAL_INTERRUPT_TC1OI 9 - INTMR1, // CYGNUM_HAL_INTERRUPT_TC2OI 10 - INTMR1, // CYGNUM_HAL_INTERRUPT_RTCMI 11 - INTMR1, // CYGNUM_HAL_INTERRUPT_TINT 12 - INTMR1, // CYGNUM_HAL_INTERRUPT_UTXINT1 13 - INTMR1, // CYGNUM_HAL_INTERRUPT_URXINT1 14 - INTMR1, // CYGNUM_HAL_INTERRUPT_UMSINT 15 - INTMR1, // CYGNUM_HAL_INTERRUPT_SSEOTI 16 - INTMR2, // CYGNUM_HAL_INTERRUPT_KBDINT 17 - INTMR2, // CYGNUM_HAL_INTERRUPT_SS2RX 18 - INTMR2, // CYGNUM_HAL_INTERRUPT_SS2TX 19 - INTMR2, // CYGNUM_HAL_INTERRUPT_UTXINT2 20 - INTMR2, // CYGNUM_HAL_INTERRUPT_URXINT2 21 -#if defined(__CL7211) - INTMR3, // CYGNUM_HAL_INTERRUPT_MCPINT 22 -#endif -}; - -static cyg_uint32 hal_interrupt_clear_map[] = { - 0, // CYGNUM_HAL_INTERRUPT_unused 0 - 0, // CYGNUM_HAL_INTERRUPT_EXTFIQ 1 - BLEOI, // CYGNUM_HAL_INTERRUPT_BLINT 2 - TEOI, // CYGNUM_HAL_INTERRUPT_WEINT 3 - MCEOI, // CYGNUM_HAL_INTERRUPT_MCINT 4 - COEOI, // CYGNUM_HAL_INTERRUPT_CSINT 5 - 0, // CYGNUM_HAL_INTERRUPT_EINT1 6 - 0, // CYGNUM_HAL_INTERRUPT_EINT2 7 - 0, // CYGNUM_HAL_INTERRUPT_EINT3 8 - TC1EOI, // CYGNUM_HAL_INTERRUPT_TC1OI 9 - TC2EOI, // CYGNUM_HAL_INTERRUPT_TC2OI 10 - RTCEOI, // CYGNUM_HAL_INTERRUPT_RTCMI 11 - TEOI, // CYGNUM_HAL_INTERRUPT_TINT 12 - 0, // CYGNUM_HAL_INTERRUPT_UTXINT1 13 - 0, // CYGNUM_HAL_INTERRUPT_URXINT1 14 - UMSEOI, // CYGNUM_HAL_INTERRUPT_UMSINT 15 - 0, // CYGNUM_HAL_INTERRUPT_SSEOTI 16 - KBDEOI, // CYGNUM_HAL_INTERRUPT_KBDINT 17 - 0, // CYGNUM_HAL_INTERRUPT_SS2RX 18 - 0, // CYGNUM_HAL_INTERRUPT_SS2TX 19 - 0, // CYGNUM_HAL_INTERRUPT_UTXINT2 20 - 0, // CYGNUM_HAL_INTERRUPT_URXINT2 21 -#if defined(__CL7211) - 0, // CYGNUM_HAL_INTERRUPT_MCPINT 22 -#endif -}; - -static struct regmap { - int first_int, last_int; - cyg_uint32 stat_reg, mask_reg; -} hal_interrupt_status_regmap[] = { - { CYGNUM_HAL_INTERRUPT_EXTFIQ, CYGNUM_HAL_INTERRUPT_SSEOTI, INTSR1, INTMR1}, - { CYGNUM_HAL_INTERRUPT_KBDINT, CYGNUM_HAL_INTERRUPT_URXINT2, INTSR2, INTMR2}, -#if defined(__CL7211) - { CYGNUM_HAL_INTERRUPT_MCPINT, CYGNUM_HAL_INTERRUPT_MCPINT, INTSR3, INTMR3}, -#endif - { 0, 0, 0} -}; - -#ifdef CYGHWR_HAL_ARM_CL7211_BATLOW -// This ISR is called when the battery low interrupt occurs -int -cyg_hal_batlow_isr(cyg_vector_t vector, cyg_addrword_t data, HAL_SavedRegisters *regs) -{ - diag_printf("Battery low\n"); - cyg_drv_interrupt_mask(CYGNUM_HAL_INTERRUPT_BLINT); - // Presumably, one would leave this masked until the battery changed - cyg_drv_interrupt_acknowledge(CYGNUM_HAL_INTERRUPT_BLINT); - return 0; // No need to run DSR -} -#endif - -// -// Early stage hardware initialization -// Some initialization has already been done before we get here. For now -// just set up the interrupt environment. - -void hal_hardware_init(void) -{ - volatile cyg_uint32 *icr; - int vector; - // Clear and initialize instruction cache - HAL_ICACHE_INVALIDATE_ALL(); - HAL_ICACHE_ENABLE(); - // Any hardware/platform initialization that needs to be done. - *(volatile cyg_uint32 *)INTMR1 = 0; - *(volatile cyg_uint32 *)INTMR2 = 0; -#if !defined(__CL7111) - *(volatile cyg_uint32 *)INTMR3 = 0; - *(volatile cyg_uint8 *)SYSCON3 = SYSCON3_CLKCTL(CPU_CLOCK); -#endif -#if 0 - diag_printf("IMR1: %04x, IMR2: %04x\n", - *(volatile cyg_uint32 *)INTMR1, - *(volatile cyg_uint32 *)INTMR2); - diag_printf("Memcfg1: %08x, Memcfg2: %08x, DRAM refresh: %08x\n", - *(volatile cyg_uint32 *)MEMCFG1, - *(volatile cyg_uint32 *)MEMCFG2, - *(volatile cyg_uint8 *)DRFPR); -#endif - // Reset all interrupt masks (disable all interrupt sources) - for (vector = CYGNUM_HAL_ISR_MIN; vector < CYGNUM_HAL_ISR_COUNT; vector++) { - icr = (volatile cyg_uint32 *)hal_interrupt_clear_map[vector]; - if (icr) *icr = 0; // Just a write clears the latch - } - // Turn on the DIAG LED to let the world know the board is alive - *(volatile unsigned char *)LEDFLSH = LEDFLSH_ENABLE|LEDFLSH_DUTY(16)|LEDFLSH_PERIOD(1); -#ifdef CYGHWR_HAL_ARM_CL7211_BATLOW - cyg_drv_interrupt_create(CYGNUM_HAL_INTERRUPT_BLINT, - 99, // Priority - what goes here? - 0, // Data item passed to interrupt handler - cyg_hal_batlow_isr, - 0, - &batlow_interrupt_handle, - &batlow_interrupt); - cyg_drv_interrupt_attach(batlow_interrupt_handle); - cyg_drv_interrupt_unmask(CYGNUM_HAL_INTERRUPT_BLINT); -#endif -} - -// -// This routine is called to respond to a hardware interrupt (IRQ). It -// should interrogate the hardware and return the IRQ vector number. - -// This code is a little convoluted to keep it general while still avoiding -// reading the hardware a lot, since the interrupt status is split across -// three separate registers. - -int hal_spurious_ints; - -int hal_IRQ_handler(void) -{ - struct regmap *map = hal_interrupt_status_regmap; - cyg_uint32 stat; - int vector; - while (map->first_int) { - stat = *(volatile cyg_uint32 *)map->stat_reg & *(volatile cyg_uint32 *)map->mask_reg; - for (vector = map->first_int; vector <= map->last_int; vector++) { - if (stat & hal_interrupt_bitmap[vector]) return vector; - } - map++; // Next interrupt status register - } - hal_spurious_ints++; - return CYGNUM_HAL_INTERRUPT_unused; // This shouldn't happen! -} - -// -// Interrupt control -// - -void hal_interrupt_mask(int vector) -{ - volatile cyg_uint32 *imr; - imr = (volatile cyg_uint32 *)hal_interrupt_mask_regmap[vector]; - *imr &= ~hal_interrupt_bitmap[vector]; -} - -void hal_interrupt_unmask(int vector) -{ - volatile cyg_uint32 *imr; - imr = (volatile cyg_uint32 *)hal_interrupt_mask_regmap[vector]; - *imr |= hal_interrupt_bitmap[vector]; -} - -void hal_interrupt_acknowledge(int vector) -{ - // Some interrupt sources have a register for this. - volatile cyg_uint8 *icr; - icr = (volatile cyg_uint32 *)hal_interrupt_clear_map[vector]; - if (icr) { - *icr = 0; // Any data clears interrupt - } -} - -void hal_interrupt_configure(int vector, int level, int up) -{ - // No interrupts are configurable on this hardware -} - -void hal_interrupt_set_level(int vector, int level) -{ - // No interrupts are configurable on this hardware -} - -/*------------------------------------------------------------------------*/ -// EOF hal_misc.c
deleted file mode 100644 --- a/packages/hal/arm/cl7211/current/src/hal_diag.c +++ /dev/null @@ -1,270 +0,0 @@ -/*============================================================================= -// -// hal_diag.c -// -// HAL diagnostic output 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): nickg, gthomas -// Contributors:nickg, gthomas -// Date: 1998-03-02 -// Purpose: HAL diagnostic output -// Description: Implementations of HAL diagnostic output support. -// -//####DESCRIPTIONEND#### -// -//===========================================================================*/ - -#include <pkgconf/hal.h> -#include <pkgconf/system.h> -#include CYGBLD_HAL_PLATFORM_H - -#include <cyg/infra/cyg_type.h> // base types -#include <cyg/infra/cyg_trac.h> // tracing macros -#include <cyg/infra/cyg_ass.h> // assertion macros - -#include <cyg/hal/hal_arch.h> // basic machine info -#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_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 - -#if CYGHWR_HAL_ARM_CL7211_DIAG_PORT == 0 -#define CYG_DIAG_DEV_DATA UARTDR1 -#define CYG_DIAG_DEV_BLCR UBLCR1 -#define CYG_DIAG_DEV_STAT SYSFLG1 -#define CYG_DIAG_DEV_CTRL SYSCON1 -#define CYG_DIAG_DEV_INT CYGNUM_HAL_INTERRUPT_URXINT1 -#else -#define CYG_DIAG_DEV_DATA UARTDR2 -#define CYG_DIAG_DEV_STAT SYSFLG2 -#define CYG_DIAG_DEV_CTRL SYSCON2 -#define CYG_DIAG_DEV_BLCR UBLCR2 -#define CYG_DIAG_DEV_INT CYGNUM_HAL_INTERRUPT_URXINT2 -#endif - -// Assumption: all diagnostic output must be GDB packetized unless this is a ROM (i.e. -// totally stand-alone) system. - -#ifdef CYG_HAL_STARTUP_STUBS -#define CYG_HAL_STARTUP_ROM -#undef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS -#endif - -#if defined(CYG_HAL_STARTUP_ROM) && !defined(CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS) -#define HAL_DIAG_USES_HARDWARE -#else -#if CYGHWR_HAL_ARM_CL7211_DIAG_PORT != CYGHWR_HAL_ARM_CL7211_GDB_PORT -#define HAL_DIAG_USES_HARDWARE -#endif -#endif - -/*---------------------------------------------------------------------------*/ -// CL7211 Serial Port (UARTx) for Debug - -// Actually send character down the wire -static void -hal_diag_write_char_serial(char c) -{ - cyg_uint32 stat; - // Wait for Tx FIFO not full - do { - stat = *(volatile cyg_uint32 *)CYG_DIAG_DEV_STAT; - } while ((stat & SYSFLG1_UTXFF1) != 0) ; - *(volatile cyg_uint8 *)CYG_DIAG_DEV_DATA = c; -} - -static bool -hal_diag_read_serial(char *c) -{ - long timeout = 1000000000; // A long time... - cyg_uint32 stat, val; - - do { - stat = *(volatile cyg_uint32 *)CYG_DIAG_DEV_STAT; - if (--timeout == 0) return false; - } while ((stat & SYSFLG1_URXFE1) != 0); - // Need to read 32 bits - val = *(volatile cyg_uint32 *)CYG_DIAG_DEV_DATA & 0xFF; - *c = val; - return true; -} - -#ifdef HAL_DIAG_USES_HARDWARE - -void hal_diag_init(void) -{ - static int init = 0; -#ifndef CYG_HAL_STARTUP_ROM - char *msg = "\n\rRAM CL7211 eCos\n\r"; -#endif - if (init++) return; - - // Enable port - *(volatile cyg_uint32 *)CYG_DIAG_DEV_CTRL |= SYSCON1_UART1EN; - // Configure - *(volatile cyg_uint32 *)CYG_DIAG_DEV_BLCR = - UART_BITRATE(CYGHWR_HAL_ARM_CL7211_DIAG_BAUD) | - UBLCR_FIFOEN | UBLCR_WRDLEN8; -#ifndef CYG_HAL_STARTUP_ROM - while (*msg) hal_diag_write_char(*msg++); -#endif -} - -#ifndef CYG_HAL_STARTUP_ROM -#define DIAG_BUFSIZE 2048 -static char diag_buffer[DIAG_BUFSIZE]; -static int diag_bp = 0; -#endif - -void hal_diag_write_char(char c) -{ - hal_diag_init(); -#ifndef CYG_HAL_STARTUP_ROM - diag_buffer[diag_bp++] = c; - if (diag_bp == sizeof(diag_buffer)) diag_bp = 0; -#endif - hal_diag_write_char_serial(c); -} - -void hal_diag_read_char(char *c) -{ - while (!hal_diag_read_serial(c)) ; -} - -#else // HAL_DIAG relies on GDB - -// Initialize diag port -void hal_diag_init(void) -{ -#if 0 // Assume port is already setup - // Enable port - *(volatile cyg_uint32 *)CYG_DIAG_DEV_CTRL |= SYSCON1_UART1EN; - // Configure - *(volatile cyg_uint32 *)CYG_DIAG_DEV_BLCR = - UART_BITRATE(CYGHWR_HAL_ARM_CL7211_DIAG_BAUD) | - UBLCR_FIFOEN | UBLCR_WRDLEN8; -#endif -} - -void -hal_diag_read_char(char *c) -{ - while (!hal_diag_read_serial(c)) ; -} - -void -hal_diag_write_char(char c) -{ - static char line[100]; - static int pos = 0; - - // No need to send CRs - if( c == '\r' ) return; - - line[pos++] = c; - - if( c == '\n' || pos == sizeof(line) ) - { - - CYG_INTERRUPT_STATE old; - - // Disable interrupts. This prevents GDB trying to interrupt us - // while we are in the middle of sending a packet. The serial - // 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) - { - static char hex[] = "0123456789ABCDEF"; - cyg_uint8 csum = 0; - int i; - char c1; - - hal_diag_write_char_serial('$'); - hal_diag_write_char_serial('O'); - csum += 'O'; - for( i = 0; i < pos; i++ ) - { - char ch = line[i]; - char h = hex[(ch>>4)&0xF]; - char l = hex[ch&0xF]; - hal_diag_write_char_serial(h); - hal_diag_write_char_serial(l); - csum += h; - csum += l; - } - hal_diag_write_char_serial('#'); - hal_diag_write_char_serial(hex[(csum>>4)&0xF]); - hal_diag_write_char_serial(hex[csum&0xF]); - - // Wait for the ACK character '+' from GDB here and handle - // receiving a ^C instead. This is the reason for this clause - // being a loop. - if (!hal_diag_read_serial(&c1)) - continue; // No response - try sending packet again - - if( c1 == '+' ) - break; // a good acknowledge - -#ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT - cyg_drv_interrupt_acknowledge(CYG_DIAG_DEV_INT); - if( c1 == 3 ) { - // Ctrl-C: breakpoint. - cyg_hal_gdb_interrupt (__builtin_return_address(0)); - break; - } -#endif - // otherwise, loop round again - } - - 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 - - } -} -#endif - -/*---------------------------------------------------------------------------*/ -/* End of hal_diag.c */
deleted file mode 100644 --- a/packages/hal/arm/cl7211/current/src/plf_stub.c +++ /dev/null @@ -1,157 +0,0 @@ -//============================================================================= -// -// plf_stub.c -// -// Platform specific code for GDB stub support. -// -//============================================================================= -//####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, jskov -// Date: 1999-04-21 -// Purpose: Platform specific code for GDB stub support. -// -//####DESCRIPTIONEND#### -// -//============================================================================= - -#include <pkgconf/hal.h> -#include <pkgconf/system.h> -#include CYGBLD_HAL_PLATFORM_H - -#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS - -#include <cyg/hal/hal_stub.h> - -#include <cyg/hal/hal_io.h> // HAL IO macros -#include <cyg/hal/hal_cl7211.h> // Hardware definitions -#ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT -#include <cyg/hal/hal_intr.h> // HAL interrupt macros -#include <cyg/hal/drv_api.h> // HAL ISR support -#endif - -#if CYGHWR_HAL_ARM_CL7211_GDB_PORT == 0 -#define CYG_GDB_DEV_DATA UARTDR1 -#define CYG_GDB_DEV_BLCR UBLCR1 -#define CYG_GDB_DEV_STAT SYSFLG1 -#define CYG_GDB_DEV_CTRL SYSCON1 -#define CYG_GDB_DEV_INT CYGNUM_HAL_INTERRUPT_URXINT1 -#else -#define CYG_GDB_DEV_DATA UARTDR2 -#define CYG_GDB_DEV_STAT SYSFLG2 -#define CYG_GDB_DEV_CTRL SYSCON2 -#define CYG_GDB_DEV_BLCR UBLCR2 -#define CYG_GDB_DEV_INT CYGNUM_HAL_INTERRUPT_URXINT2 -#endif - -#ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT -static cyg_interrupt gdb_interrupt; -static cyg_handle_t gdb_interrupt_handle; -#endif - -//----------------------------------------------------------------------------- -#ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT - -// This ISR is called only for serial receive interrupts. -int -cyg_hal_gdb_isr(cyg_vector_t vector, cyg_addrword_t data, HAL_SavedRegisters *regs) -{ - cyg_uint8 c; - - c = hal_cl7211_get_char(); // Fetch the character - if( 3 == c ) { // ^C - // Ctrl-C: set a breakpoint at PC so GDB will display the - // correct program context when stopping rather than the - // interrupt handler. - cyg_hal_gdb_interrupt (regs->pc); - cyg_drv_interrupt_acknowledge(CYG_GDB_DEV_INT); - } - return 0; // No need to run DSR -} - -int -hal_cl7211_interruptible(int state) -{ - if (state) { - cyg_drv_interrupt_unmask(CYG_GDB_DEV_INT); - } else { - cyg_drv_interrupt_mask(CYG_GDB_DEV_INT); - } - - return 0; -} -#endif - -// Initialize the current serial port. -void hal_cl7211_init_serial(void) -{ - // Enable port - *(volatile cyg_uint32 *)CYG_GDB_DEV_CTRL |= SYSCON1_UART1EN; - // Configure - *(volatile cyg_uint32 *)CYG_GDB_DEV_BLCR = - UART_BITRATE(CYGHWR_HAL_ARM_CL7211_GDB_BAUD) | - UBLCR_FIFOEN | UBLCR_WRDLEN8; - -#ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT - cyg_drv_interrupt_create(CYG_GDB_DEV_INT, - 99, // Priority - what goes here? - 0, // Data item passed to interrupt handler - cyg_hal_gdb_isr, - 0, - &gdb_interrupt_handle, - &gdb_interrupt); - cyg_drv_interrupt_attach(gdb_interrupt_handle); - cyg_drv_interrupt_unmask(CYG_GDB_DEV_INT); -#endif -} - -// Write C to the current serial port. -void hal_cl7211_put_char(int c) -{ - cyg_uint32 stat; - // Wait for Tx FIFO not full - do { - stat = *(volatile cyg_uint32 *)CYG_GDB_DEV_STAT; - } while ((stat & SYSFLG1_UTXFF1) != 0) ; - *(volatile cyg_uint32 *)CYG_GDB_DEV_DATA = c; -} - -// Read one character from the current serial port. -int hal_cl7211_get_char(void) -{ - cyg_uint32 stat, val; - do { - stat = *(volatile cyg_uint32 *)CYG_GDB_DEV_STAT; - } while ((stat & SYSFLG1_URXFE1) != 0); - // Need to read 32 bits - val = *(volatile cyg_uint32 *)CYG_GDB_DEV_DATA & 0xFF; - return val; -} - -#endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS -//----------------------------------------------------------------------------- -// End of plf_stub.c
deleted file mode 100644 --- a/packages/hal/arm/cl7211/current/support/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -# -# eCos support tools for EP7211 -# - -DL_FILES = dl_7211.o io.o -ALL := dl_7211 - - -all: $(ALL) - -dl_7211: $(DL_FILES) - $(CC) -o $@ $(DL_FILES) -
deleted file mode 100644 --- a/packages/hal/arm/cl7211/current/support/bootcode.h +++ /dev/null @@ -1,131 +0,0 @@ -// THIS IS A GENERATED FILE...DO NOT EDIT! -char pcBoot[2048] = { - 20, 208, 159, 229, 1, 0, 160, 227, 203, 0, 0, 235, 180, 0, 0, 235, - 2, 1, 160, 227, 64, 8, 128, 229, 252, 255, 255, 234, 0, 8, 0, 16, - 2, 1, 160, 227, 4, 0, 45, 229, 0, 0, 157, 229, 64, 1, 144, 229, - 1, 5, 16, 227, 3, 0, 0, 10, 0, 0, 157, 229, 64, 1, 144, 229, - 1, 5, 16, 227, 251, 255, 255, 26, 0, 0, 157, 229, 128, 4, 144, 229, -255, 0, 0, 226, 4, 208, 141, 226, 14, 240, 160, 225, 255, 0, 0, 226, - 2, 17, 160, 227, 4, 16, 45, 229, 0, 16, 157, 229, 64, 17, 145, 229, - 2, 5, 17, 227, 3, 0, 0, 10, 0, 16, 157, 229, 64, 17, 145, 229, - 2, 5, 17, 227, 251, 255, 255, 26, 0, 16, 157, 229, 4, 208, 141, 226, -128, 4, 161, 229, 14, 240, 160, 225, 13, 192, 160, 225, 0, 216, 45, 233, - 4, 176, 76, 226, 2, 1, 160, 227, 4, 0, 45, 229, 219, 255, 255, 235, - 48, 0, 64, 226, 5, 0, 80, 227, 0, 241, 143, 144, 23, 0, 0, 234, - 6, 0, 0, 234, 8, 0, 0, 234, 10, 0, 0, 234, 12, 0, 0, 234, - 14, 0, 0, 234, 7, 8, 160, 227, 1, 0, 128, 226, 13, 0, 0, 234, - 23, 0, 160, 227, 7, 8, 128, 226, 10, 0, 0, 234, 11, 0, 160, 227, - 7, 8, 128, 226, 7, 0, 0, 234, 7, 0, 160, 227, 7, 8, 128, 226, - 4, 0, 0, 234, 5, 0, 160, 227, 7, 8, 128, 226, 1, 0, 0, 234, - 7, 8, 160, 227, 3, 0, 128, 226, 0, 16, 157, 229, 192, 4, 161, 229, -190, 255, 255, 235, 45, 0, 80, 227, 252, 255, 255, 26, 0, 168, 27, 233, - 13, 192, 160, 225, 0, 216, 45, 233, 4, 176, 76, 226, 183, 255, 255, 235, - 0, 16, 160, 225, 181, 255, 255, 235, 0, 20, 129, 225, 179, 255, 255, 235, - 0, 24, 129, 225, 177, 255, 255, 235, 0, 12, 129, 225, 0, 32, 144, 229, -255, 0, 2, 226, 188, 255, 255, 235, 255, 48, 160, 227, 34, 4, 3, 224, -185, 255, 255, 235, 34, 8, 3, 224, 183, 255, 255, 235, 34, 12, 160, 225, - 0, 104, 27, 233, 180, 255, 255, 234, 13, 192, 160, 225, 0, 216, 45, 233, - 4, 176, 76, 226, 161, 255, 255, 235, 0, 16, 160, 225, 159, 255, 255, 235, - 0, 20, 129, 225, 157, 255, 255, 235, 0, 24, 129, 225, 155, 255, 255, 235, - 0, 28, 129, 225, 153, 255, 255, 235, 0, 32, 160, 225, 151, 255, 255, 235, - 0, 36, 130, 225, 149, 255, 255, 235, 0, 40, 130, 225, 147, 255, 255, 235, - 0, 12, 130, 225, 0, 0, 129, 229, 0, 168, 27, 233, 13, 192, 160, 225, -240, 223, 45, 233, 4, 176, 76, 226, 8, 208, 77, 226, 3, 129, 160, 227, -138, 255, 255, 235, 0, 16, 160, 225, 136, 255, 255, 235, 0, 20, 129, 225, -134, 255, 255, 235, 0, 24, 129, 225, 132, 255, 255, 235, 0, 28, 129, 225, -130, 255, 255, 235, 0, 32, 160, 225, 128, 255, 255, 235, 0, 36, 130, 225, -126, 255, 255, 235, 0, 40, 130, 225, 124, 255, 255, 235, 0, 76, 130, 225, - 0, 32, 160, 227, 0, 0, 84, 227, 4, 0, 0, 154, 119, 255, 255, 235, - 2, 0, 200, 231, 1, 32, 130, 226, 4, 0, 82, 225, 250, 255, 255, 58, - 15, 34, 1, 226, 7, 114, 98, 226, 15, 98, 193, 227, 92, 0, 0, 235, - 0, 80, 160, 225, 0, 0, 80, 227, 15, 0, 0, 154, 4, 144, 134, 224, - 1, 0, 69, 226, 0, 160, 160, 225, 13, 32, 160, 225, 4, 16, 141, 226, - 85, 0, 0, 235, 4, 16, 157, 229, 1, 0, 89, 225, 3, 0, 0, 58, - 7, 0, 160, 225, 137, 0, 0, 235, 48, 0, 133, 226, 110, 255, 255, 235, - 10, 80, 160, 225, 0, 0, 90, 227, 240, 255, 255, 138, 0, 80, 160, 227, - 0, 0, 84, 227, 9, 0, 0, 154, 5, 32, 136, 224, 5, 16, 134, 224, - 7, 0, 160, 225, 1, 59, 160, 227, 147, 0, 0, 235, 44, 0, 160, 227, - 97, 255, 255, 235, 1, 91, 133, 226, 4, 0, 85, 225, 245, 255, 255, 58, -240, 175, 27, 233, 13, 192, 160, 225, 0, 216, 45, 233, 4, 176, 76, 226, - 63, 0, 160, 227, 88, 255, 255, 235, 72, 255, 255, 235, 66, 0, 80, 227, - 7, 0, 0, 10, 70, 0, 80, 227, 9, 0, 0, 10, 82, 0, 80, 227, - 5, 0, 0, 10, 87, 0, 80, 227, 244, 255, 255, 26, 153, 255, 255, 235, -242, 255, 255, 234, 91, 255, 255, 235, 240, 255, 255, 234, 127, 255, 255, 235, -238, 255, 255, 234, 168, 255, 255, 235, 236, 255, 255, 234, 2, 17, 160, 227, - 0, 32, 160, 227, 2, 49, 160, 227, 1, 58, 131, 226, 128, 34, 129, 229, -128, 34, 131, 229, 128, 35, 129, 229, 192, 35, 129, 229, 128, 192, 160, 227, - 2, 201, 140, 226, 128, 193, 129, 229, 129, 192, 160, 227, 0, 0, 80, 227, - 64, 39, 129, 229, 0, 194, 129, 229, 2, 5, 160, 3, 0, 1, 145, 21, -255, 4, 192, 19, 127, 8, 192, 19, 254, 12, 192, 19, 255, 0, 192, 19, - 0, 1, 129, 229, 5, 0, 160, 227, 0, 1, 163, 229, 64, 32, 193, 229, -254, 0, 160, 227, 65, 0, 193, 229, 67, 32, 193, 229, 15, 0, 160, 227, -192, 0, 193, 229, 1, 32, 193, 5, 1, 0, 209, 21, 4, 0, 0, 18, - 1, 0, 193, 21, 3, 32, 193, 229, 2, 0, 160, 227, 128, 0, 193, 229, - 14, 240, 160, 225, 71, 0, 160, 227, 14, 240, 160, 225, 0, 0, 80, 227, - 1, 0, 0, 186, 71, 0, 80, 227, 1, 0, 0, 186, 0, 0, 160, 227, - 14, 240, 160, 225, 8, 0, 80, 227, 0, 7, 160, 177, 0, 0, 129, 181, - 1, 9, 160, 179, 4, 0, 0, 186, 242, 56, 160, 227, 255, 52, 131, 226, -128, 8, 131, 224, 0, 0, 129, 229, 2, 8, 160, 227, 0, 0, 130, 229, - 1, 0, 160, 227, 14, 240, 160, 225, 4, 0, 45, 229, 128, 16, 160, 227, - 2, 21, 129, 226, 0, 0, 157, 229, 0, 0, 144, 229, 255, 4, 192, 227, -127, 8, 192, 227, 255, 12, 192, 227, 127, 0, 192, 227, 1, 0, 80, 225, -247, 255, 255, 26, 80, 16, 160, 227, 5, 22, 129, 226, 0, 0, 157, 229, - 4, 208, 141, 226, 0, 16, 128, 229, 14, 240, 160, 225, 13, 192, 160, 225, - 48, 216, 45, 233, 4, 176, 76, 226, 0, 64, 160, 225, 8, 208, 77, 226, - 0, 80, 160, 227, 210, 255, 255, 235, 0, 0, 80, 227, 10, 0, 0, 218, - 13, 32, 160, 225, 4, 16, 141, 226, 5, 0, 160, 225, 206, 255, 255, 235, - 4, 0, 160, 225, 4, 16, 157, 229, 4, 0, 0, 235, 1, 80, 133, 226, -199, 255, 255, 235, 5, 0, 80, 225, 244, 255, 255, 202, 48, 168, 27, 233, - 13, 192, 160, 225, 0, 216, 45, 233, 4, 176, 76, 226, 4, 0, 45, 229, - 0, 0, 81, 227, 15, 0, 0, 186, 2, 5, 81, 227, 13, 0, 0, 170, - 32, 48, 160, 227, 2, 54, 131, 226, 65, 17, 160, 225, 0, 32, 157, 229, - 1, 49, 130, 231, 208, 32, 160, 227, 13, 38, 130, 226, 0, 48, 157, 229, - 1, 33, 131, 231, 199, 255, 255, 235, 255, 0, 160, 227, 255, 8, 128, 226, - 0, 16, 157, 229, 0, 0, 129, 229, 0, 168, 27, 233, 13, 192, 160, 225, -240, 216, 45, 233, 4, 176, 76, 226, 0, 80, 160, 225, 1, 64, 160, 225, - 4, 0, 45, 229, 0, 0, 84, 227, 4, 0, 0, 186, 2, 5, 84, 227, - 2, 0, 0, 170, 3, 0, 132, 224, 2, 5, 80, 227, 0, 0, 0, 218, -240, 168, 27, 233, 0, 96, 160, 227, 0, 0, 83, 227, 13, 0, 0, 218, - 64, 112, 160, 227, 1, 117, 135, 226, 0, 0, 157, 229, 0, 112, 128, 229, - 6, 16, 146, 231, 6, 0, 132, 224, 64, 193, 160, 225, 0, 0, 157, 229, - 12, 17, 128, 231, 5, 0, 160, 225, 166, 255, 255, 235, 4, 96, 134, 226, - 3, 0, 86, 225, 243, 255, 255, 186, 255, 16, 160, 227, 255, 24, 129, 226, - 0, 0, 157, 229, 0, 16, 128, 229, 232, 255, 255, 234, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -};
deleted file mode 100644 --- a/packages/hal/arm/cl7211/current/support/dl_7211.c +++ /dev/null @@ -1,410 +0,0 @@ -//**************************************************************************** -// -// DOWNLOAD.C - Automates the download of code into the flash on the -// CL-PS7111-DK-D2 board. -// -// Copyright (c) 1999 Cirrus Logic, Inc. -// -// Adapted for Linux by Cygnus Solutions, Inc. -// -//**************************************************************************** -#include <stdio.h> -#include "bootcode.h" - -#define DEFAULT_PORT "/dev/ttyS1" -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); - - // - // Get the baud rate divisor for the given baud rate. - // - SetBaud(lPort, 9600); - switch(lRate) - { - case 9600: - { - cRateChar = '0'; - break; - } - - case 19200: - { - cRateChar = '1'; - break; - } - - case 28800: - { - cRateChar = '2'; - break; - } - - case 38400: - { - cRateChar = '3'; - break; - } - - case 57600: - { - cRateChar = '4'; - break; - } - - case 115200: - { - cRateChar = '5'; - break; - } - } - - // - // 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..."); - - // - // Wait until we read a '<' from the comm port. - // - WaitFor(lPort, '<'); - - // - // Tell the user that we are downloading the boot code. - // - fprintf(stderr, "\nDownloading boot code...( 0%%)"); - - // - // Write the boot code to the comm port. - // - for(lIdx = 0; lIdx < 2048; lIdx++) - { - // - // Write this character. - // - SendChar(lPort, pcBoot[lIdx]); - - // - // Periodically print out our progress. - // - if((lIdx & 127) == 127) - { - fprintf(stderr, "\b\b\b\b\b%3d%%)", ((lIdx + 1) * 100) / 2048); - } - } - - // - // Wait until we read a '>' from the comm port. - // - WaitFor(lPort, '>'); - - // - // Wait until we read a '?' from the comm port. - // - WaitFor(lPort, '?'); - - // - // Tell the boot code to switch to the desired baud rate. - // - SendChar(lPort, 'B'); - SendChar(lPort, cRateChar); - - // - // Wait until the output buffer is empty. - // - WaitForOutputEmpty(); - - // - // Switch our baud rate to the desired rate. - // - SetBaud(lPort, lRate); - - // - // 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 program flash command. - // - SendChar(lPort, 'F'); - - // - // We always program the flash at location 0. - // - SendChar(lPort, 0); - SendChar(lPort, 0); - SendChar(lPort, 0); - SendChar(lPort, 0); - - // - // 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); - } - } - - // - // Tell the user that we are erasing the flash. - // - fprintf(stderr, "\nErasing the flash...( 0%%)"); - - // - // Wait until the flash has been erased. - // - cFirstChar = cChar = ReceiveChar(lPort); - while(cChar != '1') - { - // - // Print out our progress. - // - fprintf(stderr, "\b\b\b\b\b%3d%%)", - ((cFirstChar - cChar + 1) * 100) / (cFirstChar - '0')); - - // - // Read a character from the boot code. - // - cChar = ReceiveChar(lPort); - } - - // - // Tell the user that we are programming the flash. - // - fprintf(stderr, "\nProgramming the flash...( 0%%)"); - - // - // Wait until the flash has been programmed. - // - lIdx = 0; - while(1) - { - // - // Read a character from the boot code. - // - cChar = ReceiveChar(lPort); - - // - // If the character is a '?', then we are done. - // - if(cChar == '?') - { - break; - } - - // - // Print out our progress. - // - fprintf(stderr, "\b\b\b\b\b%3d%%)", - (++lIdx * 100) / ((lFileSize + 1023) / 1024)); - } - - // - // Tell the user we are done. - // - fprintf(stderr, "\nSuccessfully downloaded '%s'.\n", argv[1]); -} -
deleted file mode 100644 --- a/packages/hal/arm/cl7211/current/support/io.c +++ /dev/null @@ -1,151 +0,0 @@ -//========================================================================== -// -// io.c -// -// Linux I/O support for Cirrus CL7211 eval board tools -// -//========================================================================== -//####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-06-16 -// Description: Linux I/O support for Cirrus CL7211 FLASH tools -//####DESCRIPTIONEND#### - -// -// io.c - I/O functions -// - -#include <stdio.h> -#include <sys/ioctl.h> -#include <fcntl.h> -#include <termios.h> - -char ReceiveChar(long port) -{ - char buf; - int res; - // Port is in non-blocking mode, this needs to have a loop - do { - res = read(port, &buf, 1); - } while (res < 0); -// printf("Read: %c\n", buf); - return buf; -} - -static void -uspin(int len) -{ - volatile int cnt; - while (--len >= 0) { - for (cnt = 1; cnt < 2000; cnt++) ; - } -} - -void SendChar(long port, char ch) -{ - char buf = ch; - write(port, &buf, 1); -// printf("Send: %x\n", ch); -// usleep(100); - uspin(100); -} - -void SetBaud(long port, long reqRate) -{ - struct termios buf; - int rate; - - // Get original configuration - if (tcgetattr(port, &buf)) { - fprintf(stderr, "Can't get port config\n"); - return; - } - - // Reset to raw. - buf.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP - |INLCR|IGNCR|ICRNL|IXON); - buf.c_oflag &= ~OPOST; - buf.c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN); - buf.c_cflag &= ~(CSIZE|PARENB); - buf.c_cflag |= CS8; - - // Set baud rate. - switch (reqRate) { - case 9600: - rate = B9600; - break; - case 38400: - rate = B38400; - break; - case 57600: - rate = B57600; - break; - case 115200: - rate = B115200; - break; - } - cfsetispeed(&buf, rate); - cfsetospeed(&buf, rate); - - // Set data bits. - buf.c_cflag &= ~CSIZE; - buf.c_cflag |= CS8; - - // Set stop bits. - buf.c_cflag &= ~CSTOPB; // One stop - - // Set parity. - buf.c_cflag &= ~(PARENB | PARODD); // no parity. - - // Set the new settings - if (tcsetattr(port, TCSADRAIN, &buf)) { - fprintf(stderr, "Error: tcsetattr\n"); - return; - } - - tcdrain(port); - usleep(1000000/10*2); -} - -int CharReady(long port) -{ - int n, res; - res = ioctl(port, FIONREAD, &n); - return n; // Non-zero if characters ready to read -} - -void WaitForOutputEmpty(long port) -{ - usleep(2000000); -} - -long OpenPort(char *name) -{ - int fd; - fd = open(name, O_RDWR|O_NONBLOCK); - return fd; -}
deleted file mode 100644 --- a/packages/hal/arm/cl7211/current/tests/PKGconf.mak +++ /dev/null @@ -1,39 +0,0 @@ -#=============================================================================== -# -# makefile -# -# kernel/tests -# -#=============================================================================== -#####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#### -#=============================================================================== - -PACKAGE := hal_arm_cl7211 -include ../../../../../pkgconf/pkgconf.mak - -TESTS := dram_test - -include $(COMPONENT_REPOSITORY)/pkgconf/makrules.tst - - -
deleted file mode 100644 --- a/packages/hal/arm/cl7211/current/tests/dram_test.c +++ /dev/null @@ -1,316 +0,0 @@ -//========================================================================== -// -// 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,25 @@ +1999-11-09 Gary Thomas <gthomas@cygnus.co.uk> + + * include/pkgconf/mlt_arm_cma230T_ram.h: + * include/pkgconf/mlt_arm_cma230T_rom.h: + * include/pkgconf/mlt_arm_cma230_ram.h: + * include/pkgconf/mlt_arm_cma230_rom.h: New files. + + * include/pkgconf/mlt_arm_cma230T_ram.ldi: + * include/pkgconf/mlt_arm_cma230T_ram.ldi: + * include/pkgconf/mlt_arm_cma230_rom.ldi: + * include/pkgconf/mlt_arm_cma230_rom.mlt: Update with correct memory layout. + +1999-11-09 John Dallaway <jld@cygnus.co.uk> + + * include/pkgconf/hal_arm_cma230.h: + + Add platform attribute to CYGPKG_HAL_ARM_CMA230. + +1999-11-09 Gary Thomas <gthomas@cygnus.co.uk> + + * src/hal_diag.c: Honor GDB_DISABLE option. + 1999-10-28 Jesper Skov <jskov@cygnus.co.uk> * misc/PKGconf.mak: Don't strip symbols when making .img. @@ -52,10 +74,6 @@ 1999-06-04 Gary Thomas <gthomas@cygnus back properly, so a memory shadow is necessary. -1999-05-20 Gary Thomas <gthomas@cygnus.co.uk> - - * include/pkgconf/hal_arm_cl7211.h: Move RTC setup here. - //=========================================================================== //####COPYRIGHTBEGIN#### //
deleted file mode 100644 index 9160fa07ba09717fdb4b59053f16bbe66f25d832..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc$@<O00001
deleted file mode 100644 index 126508e4a77503e02e90638998955b3b9709f364..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc$@<O00001
--- a/packages/hal/arm/cma230/current/include/pkgconf/hal_arm_cma230.h +++ b/packages/hal/arm/cma230/current/include/pkgconf/hal_arm_cma230.h @@ -47,6 +47,7 @@ cdl_package CYGPKG_HAL_ARM_CMA230 { display "Cogent Computer Systems CMA230 board" + platform cma230 type radio parent CYGPKG_HAL_ARM description "
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/cma230/current/include/pkgconf/mlt_arm_cma230_ram.h @@ -0,0 +1,13 @@ +// eCos memory layout - Tue Nov 09 08:15:25 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 (0x200000) +#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)
--- a/packages/hal/arm/cma230/current/include/pkgconf/mlt_arm_cma230_ram.ldi +++ b/packages/hal/arm/cma230/current/include/pkgconf/mlt_arm_cma230_ram.ldi @@ -1,44 +1,17 @@ -//=========================================================================== -// -// 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 - Mon May 17 08:04:39 1999 +// eCos memory layout - Tue Nov 09 08:15:25 1999 // This is a generated file - do not edit MEMORY { - ram : ORIGIN = 0x8000, LENGTH = 0x1b8000 + ram : ORIGIN = 0, LENGTH = 0x200000 } SECTIONS { SECTIONS_BEGIN - SECTION_rom_vectors (ram, 0x8000, LMA_EQ_VMA) + __reserved = 0; . = __reserved + 0x8000; + SECTION_rom_vectors (ram, ALIGN (0x1), 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)
--- a/packages/hal/arm/cma230/current/include/pkgconf/mlt_arm_cma230_ram.mlt +++ b/packages/hal/arm/cma230/current/include/pkgconf/mlt_arm_cma230_ram.mlt @@ -1,6 +1,7 @@ version 0 -region ram 8000 1b8000 0 ! -section rom_vectors 0 1 0 1 1 1 1 1 8000 8000 text text ! +region ram 0 200000 0 ! +section reserved 8000 1 0 0 1 1 1 1 0 0 rom_vectors rom_vectors ! +section rom_vectors 0 1 0 1 0 1 0 1 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 !
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/cma230/current/include/pkgconf/mlt_arm_cma230_rom.h @@ -0,0 +1,16 @@ +// eCos memory layout - Tue Nov 09 08:31:08 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 (0x200000) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#define CYGMEM_REGION_rom (0xe000000) +#define CYGMEM_REGION_rom_SIZE (0x40000) +#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)
--- a/packages/hal/arm/cma230/current/include/pkgconf/mlt_arm_cma230_rom.ldi +++ b/packages/hal/arm/cma230/current/include/pkgconf/mlt_arm_cma230_rom.ldi @@ -1,39 +1,10 @@ -//=========================================================================== -// -// 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 - Thu May 20 11:04:13 1999 +// eCos memory layout - Tue Nov 09 08:31:08 1999 // This is a generated file - do not edit MEMORY { - ram : ORIGIN = 0x400, LENGTH = 0x200000 + ram : ORIGIN = 0, LENGTH = 0x200000 rom : ORIGIN = 0xe000000, LENGTH = 0x40000 } @@ -47,7 +18,8 @@ SECTIONS 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, 0x400, FOLLOWING (.gcc_except_table)) + __reserved = 0; . = __reserved + 0x1000; + SECTION_data (ram, ALIGN (0x1), FOLLOWING (.gcc_except_table)) SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) SECTIONS_END }
--- a/packages/hal/arm/cma230/current/include/pkgconf/mlt_arm_cma230_rom.mlt +++ b/packages/hal/arm/cma230/current/include/pkgconf/mlt_arm_cma230_rom.mlt @@ -1,7 +1,8 @@ version 0 -region ram 400 200000 0 ! +region ram 0 200000 0 ! region rom e000000 40000 1 ! -section data 0 1 1 1 1 1 0 0 400 bss ! +section reserved 1000 1 0 0 1 1 1 0 0 0 data ! +section data 0 1 1 1 0 1 0 0 bss ! section bss 0 4 0 1 0 0 0 0 ! section rom_vectors 0 1 0 1 1 1 1 1 e000000 e000000 text text ! section text 0 1 0 1 0 1 0 1 fini fini !
--- a/packages/hal/arm/cma230/current/src/hal_diag.c +++ b/packages/hal/arm/cma230/current/src/hal_diag.c @@ -59,7 +59,7 @@ // Assumption: all diagnostic output must be GDB packetized unless this is a ROM (i.e. // totally stand-alone) system. -#ifdef CYG_HAL_STARTUP_ROM +#if defined(CYG_HAL_STARTUP_ROM) || defined(CYGDBG_HAL_DIAG_DISABLE_GDB_PROTOCOL) #define HAL_DIAG_USES_HARDWARE #endif
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/edb7xxx/current/ChangeLog @@ -0,0 +1,304 @@ +1999-11-19 Gary Thomas <gthomas@cygnus.co.uk> + + * include/pkgconf/hal_arm_edb7xxx.h: Fix bogus comment. + + * misc/STUBS_config: Change variable name to reflect usage. + EDB7x11 => EDB7xxx. + +1999-11-18 Gary Thomas <gthomas@cygnus.co.uk> + + * include/pkgconf/mlt_arm_cl7111_rom.mlt: + * include/pkgconf/mlt_arm_cl7111_rom.ldi: + * include/pkgconf/mlt_arm_cl7111_ram.mlt: + * include/pkgconf/mlt_arm_cl7111_ram.ldi: New [more complete] layout. + + * include/pkgconf/mlt_arm_cl7111_rom.h: + * include/pkgconf/mlt_arm_cl7111_ram.h: New file(s). + +1999-11-15 Gary Thomas <gthomas@cygnus.co.uk> + + The great renaming. All platform references are now EDB7xxx, except + for CL7111 (archaic) which remains. This required renaming of the + whole directory, along with many internal files. + +1999-11-12 Gary Thomas <gthomas@cygnus.co.uk> + + * tests/dram_test.c: Make more generic (no platform dependencies). + + * src/cl7211_misc.c (hal_clock_reset): Implement "bus idle" code + which helps with DRAM refresh problem. + + * include/plf_stub.h (HAL_STUB_PLATFORM_RESET): Add reset support. + +1999-11-11 Gary Thomas <gthomas@cygnus.co.uk> + + * tests/dram_test.c (dram_exercise): Use MLT constants to define + set of memory to be tested. Make stack size HAL defined. + This test is nearly ready to be promoted to a system-wide test. + + * include/hal_platform_setup.h (DRAM_LA_END): Adjust to accurately + convey end of usable RAM (leave out MMU tables, etc). + +1999-11-09 Gary Thomas <gthomas@cygnus.co.uk> + + * src/hal_diag.c: Fix stupid CPP error. + + * include/pkgconf/mlt_arm_eb7211_ram.ldi: + * include/pkgconf/mlt_arm_eb7211_ram.mlt: + * include/pkgconf/mlt_arm_eb7211_rom.ldi: + * include/pkgconf/mlt_arm_eb7211_rom.mlt: Correct memory layout. + +1999-11-05 Gary Thomas <gthomas@cygnus.co.uk> + + * src/hal_diag.c: Incorporate option to force raw diagnostic + I/O (no GDB protocol). + +1999-11-03 Gary Thomas <gthomas@cygnus.co.uk> + + * include/pkgconf/hal_arm_cl7211.h: Change default clock speed + to 36MHz with no software DRAM refresh (hardware is stable with + this combo). + +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> + * src/cl7211_misc.c (hal_hardware_init): Update hardware timings. + + * include/hal_platform_setup.h: Allow ROM applications to be linked + at "ram" addresses and be automatically relocated at startup time. + +1999-09-15 Gary Thomas <gthomas@cygnus.co.uk> + + * misc/lcd_panel_support.c (lcd_panel_server): Reorg sampling + loop to use a weighted average (try and avoid bad results). + + * misc/kbd_test.c (kbd_exercise): Use new kbd_getc() function. + + * misc/kbd_support.c (kbd_getc): New function. + + * misc/lcd_support.c: Add simple printf() code. + +1999-09-13 Gary Thomas <gthomas@cygnus.co.uk> + + * include/pkgconf/mlt_arm_eb7211_ram.ldi: + * include/pkgconf/mlt_arm_eb7211_ram.mlt: Fix DRAM limits. + +1999-09-12 Gary Thomas <gthomas@cygnus.co.uk> + + * misc/kbd_support.c: New file. Also change to more or less + ignore interrupts since they don't work for many keys! + + * misc/kbd_test.c: Move keyboard support routines to separate + file. + +1999-09-10 Gary Thomas <gthomas@cygnus.co.uk> + + * include/hal_platform_setup.h: Fix spelling error. + +1999-09-08 Gary Thomas <gthomas@cygnus.co.uk> + + * misc/panel_test.c: Trick for these interrupts is that they + only happen when the drive is 0x70. + + * misc/kbd_test.c: Found trick to get interrupts - need to leave + columns hot! + + * include/pkgconf/mlt_arm_eb7211_rom.mlt: + * include/pkgconf/mlt_arm_eb7211_rom.ldi: Change RAM layout. + + * include/hal_platform_setup.h: Made ROM segment #1 non-cacheable. + + * misc/kbd_test.c: New test for ASCII keyboard. Interrupts + not yet working. + + * misc/panel_test.c: Fix panel driving code. Can now read + panel samples, but no interrupts. + + * src/cl7211_misc.c: Add missing clear for keyboard interrupt. + +1999-09-06 Gary Thomas <gthomas@cygnus.co.uk> + + * misc/PKGconf.mak (PROGS): Add new test. + + * misc/panel_test.c: New file. Test code for LCD touch panel. + + * misc/lcd_support.c: New file. + + * misc/lcd_test.c: Move LCD driving code to 'lcd_support.c' so it + can be shared. + +1999-09-03 Gary Thomas <gthomas@cygnus.co.uk> + + * misc/lcd_test.c (lcd_drawc): Correct drawing of larger characters. + + * misc/PKGconf.mak: Make LCD test program for all platforms. + + * include/pkgconf/mlt_arm_cl7211_rom.mlt: + * include/pkgconf/mlt_arm_cl7211_rom.ldi: + * include/pkgconf/mlt_arm_cl7211_ram.mlt: + * include/pkgconf/mlt_arm_cl7211_ram.ldi: 72xx has 16M by default. + + * misc/PKGconf.mak: Remove extra [left over] step in make. + +1999-09-02 Jonathan Larmour <jlarmour@cygnus.co.uk> + + * misc/PKGconf.mak: Use correct EXEEXT for gdb_module program. + +1999-09-02 Gary Thomas <gthomas@cygnus.co.uk> + + * support/io.c (uspin): Change timing - ugly. + + * src/cl7211_misc.c: Disable out BATLOW testing code. + + * include/hal_platform_setup.h: Better setup when LCD is installed. + + * include/pkgconf/hal_arm_cl7211.h: Make LCD installed by default. + + * misc/lcd_test.c: Rework for larger ALPS unit. Also make characters + twice as big (so there's a chance at seeing them!) + +1999-08-16 John Dallaway <jld@cygnus.co.uk> + + * include/pkgconf/hal_arm_cl7211.h: + + Proper case various display strings. + +1999-07-28 Gary Thomas <gthomas@cygnus.co.uk> + + * misc/STUBS_config: Update for latest hal.h. Also add way to + specify platform (second parameter). + +1999-07-14 Hugo Tyson <hmt@cygnus.co.uk> + + * include/hal_cache.h (HAL_UCACHE_LINE_SIZE): Correct the comment + and the value: this is supposed to be in bytes. + +1999-06-22 Gary Thomas <gthomas@cygnus.co.uk> + + * src/cl7211_misc.c (hal_IRQ_handler): Remove some debug code. + Add simple handler for battery low to test FIQ support. + +1999-06-18 Gary Thomas <gthomas@cygnus.co.uk> + + * src/plf_stub.c: + * src/hal_diag.c: Use pkgconf derived platform include file. + + * src/cl7211_misc.c (hal_hardware_init): + * include/pkgconf/hal_arm_cl7211.h: Add configuration control for + CPU processor speed. Default to 73.728 MHz. + +1999-06-17 Gary Thomas <gthomas@cygnus.co.uk> + + * include/hal_platform_setup.h (MAP_DRAM): 16M layout was wrong. + +1999-06-16 Gary Thomas <gthomas@cygnus.co.uk> + + * src/hal_diag.c: Clean up. + + * include/hal_platform_setup.h (PLATFORM_SETUP1): + Better MMU initialization for IO segments. + (PLATFORM_SETUP1): Add mappings for expansion I/O. + + * src/cl7211_misc.c (hal_hardware_init): Turn on DIAG LED. + + * include/hal_cl7211.h: Add LED flasher definitions. + +1999-06-15 Gary Thomas <gthomas@cygnus.co.uk> + + * misc/prog_flash.c: Massive rewrite/upgrade to handle Intel + parts that are on the 7211, as well as the ATMEL parts on 7111. + This program should work for either and gives a good example + of how to access/program/erase the FLASH. + + * include/hal_platform_setup.h (CYGHWR_HAL_ARM_HAS_MMU): Define. + + * misc/PKGconf.mak (gdb_module.img): + * include/pkgconf/mlt_arm_cl7211_stubs.mlt: + * include/pkgconf/mlt_arm_cl7211_stubs.ldi: Support to allow + stubs to be the startup application (GDB on board). + +1999-06-14 Gary Thomas <gthomas@cygnus.co.uk> + + * include/hal_cache.h: Turn on FLUSH macros. + +1999-06-11 Gary Thomas <gthomas@cygnus.co.uk> + + * include/hal_cache.h: Update with new unified cache support. + +1999-06-09 Gary Thomas <gthomas@cygnus.co.uk> + + * include/hal_platform_setup.h (PLATFORM_SETUP1): Remove debug code. + + * include/pkgconf/hal_arm_cl7211.h: Add new configuration options. + DRAM size (currently 2M and 16M supported). + LCD installed? + + * include/hal_platform_setup.h: Reorganize to support configuration + of DRAM size and LCD installed. + +1999-05-21 Gary Thomas <gthomas@cygnus.co.uk> + + * include/pkgconf/hal_arm_cl7211.h: New configury to support + multiple versions of CLxx11. + +1999-05-20 Gary Thomas <gthomas@cygnus.co.uk> + + * include/pkgconf/hal_arm_cl7211.h: Move RTC setup here. + +//=========================================================================== +//####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#### +//===========================================================================
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/edb7xxx/current/include/hal_cache.h @@ -0,0 +1,307 @@ +#ifndef CYGONCE_HAL_CACHE_H +#define CYGONCE_HAL_CACHE_H + +//============================================================================= +// +// hal_cache.h +// +// HAL cache control API +// +//============================================================================= +//####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): nickg, gthomas +// Contributors: nickg, gthomas +// Date: 1998-09-28 +// Purpose: Cache control API +// Description: The macros defined here provide the HAL APIs for handling +// cache control operations. +// Usage: +// #include <cyg/hal/hal_cache.h> +// ... +// +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include <cyg/infra/cyg_type.h> +#include <cyg/hal/hal_mmu.h> + +//----------------------------------------------------------------------------- +// Cache dimensions + +#define HAL_UCACHE_SIZE 0x2000 // Size of data cache in bytes +#define HAL_UCACHE_LINE_SIZE 16 // Size of a data cache line +#define HAL_UCACHE_WAYS 4 // Associativity of the cache +#define HAL_UCACHE_SETS (HAL_UCACHE_SIZE/(HAL_UCACHE_LINE_SIZE*HAL_UCACHE_WAYS)) + +#define HAL_CACHE_UNIFIED // Let programs know the caches are combined + +//----------------------------------------------------------------------------- +// Global control of caches + +// Note: the 'mrc' doesn't seem to work. +#if 0 +// Enable the data cache +// mrc MMU_CP,0,r1,MMU_Control,c0 +// orr r1,r1,#MMU_Control_C|MMU_Control_B +// mcr MMU_CP,0,r1,MMU_Control,c0 + +#define HAL_UCACHE_ENABLE() \ +{ \ + asm volatile ("mrc p15,0,r1,c1,c0;" \ + "orr r1,r1,#0x000C;" \ + "mcr p15,0,r1,c1,c0;" \ + : \ + : \ + : "r1" /* Clobber list */ \ + ); \ + \ +} + +// Disable the data cache +#define HAL_UCACHE_DISABLE() \ +{ \ + asm volatile ("mrc p15,0,r1,c1,c0;" \ + "bic r1,r1,#0x000C;" \ + "mcr p15,0,r1,c1,c0;" \ + : \ + : \ + : "r1" /* Clobber list */ \ + ); \ + \ +} +#else +#define HAL_UCACHE_ENABLE() \ +{ \ + asm volatile ("mov r1,#0x7D;" \ + "mcr p15,0,r1,c1,c0;" \ + : \ + : \ + : "r1" /* Clobber list */ \ + ); \ + \ +} + +// Disable the data cache +#define HAL_UCACHE_DISABLE() \ +{ \ + asm volatile ("mov r1,#0x71;" \ + "mcr p15,0,r1,c1,c0;" \ + : \ + : \ + : "r1" /* Clobber list */ \ + ); \ + \ +} +#endif + +// Is the cache turned on? +#define HAL_UCACHE_IS_ENABLED(_state_) _state_ = 1; + +// Invalidate the entire cache +// mcr MMU_CP,0,r1,MMU_InvalidateCache,c0 +#define HAL_UCACHE_INVALIDATE_ALL() \ +{ \ + asm volatile ("mcr p15,0,r1,c7,c0,0;" ); \ + \ +} + +// Synchronize the contents of the cache with memory. +#define HAL_UCACHE_SYNC() \ +{ \ + cyg_uint32 *ROM = (cyg_uint32 *)0xE0000000; \ + int i; \ + volatile cyg_uint32 val; \ + for (i = 0; i < HAL_UCACHE_SETS; i++) { \ + val = *ROM; \ + ROM += HAL_UCACHE_LINE_SIZE; \ + } \ +} + +// Purge contents of data cache +#define HAL_UCACHE_PURGE_ALL() HAL_UCACHE_INVALIDATE_ALL() + +// Set the data cache refill burst size +//#define HAL_UCACHE_BURST_SIZE(_size_) + +// Set the data cache write mode +//#define HAL_UCACHE_WRITE_MODE( _mode_ ) + +//#define HAL_UCACHE_WRITETHRU_MODE 0 +//#define HAL_UCACHE_WRITEBACK_MODE 1 + +// Load the contents of the given address range into the data cache +// and then lock the cache so that it stays there. +//#define HAL_UCACHE_LOCK(_base_, _size_) + +// Undo a previous lock operation +//#define HAL_UCACHE_UNLOCK(_base_, _size_) + +// Unlock entire cache +//#define HAL_UCACHE_UNLOCK_ALL() + +//----------------------------------------------------------------------------- +// Data cache line control + +// Allocate cache lines for the given address range without reading its +// contents from memory. +//#define HAL_UCACHE_ALLOCATE( _base_ , _size_ ) + +// Write dirty cache lines to memory and invalidate the cache entries +// for the given address range. +#define HAL_UCACHE_FLUSH( _base_ , _size_ ) HAL_UCACHE_SYNC() + +// Invalidate cache lines in the given range without writing to memory. +//#define HAL_UCACHE_INVALIDATE( _base_ , _size_ ) + +// Write dirty cache lines to memory for the given address range. +#define HAL_UCACHE_STORE( _base_ , _size_ ) HAL_UCACHE_SYNC() + +// Preread the given range into the cache with the intention of reading +// from it later. +//#define HAL_UCACHE_READ_HINT( _base_ , _size_ ) + +// Preread the given range into the cache with the intention of writing +// to it later. +//#define HAL_UCACHE_WRITE_HINT( _base_ , _size_ ) + +// Allocate and zero the cache lines associated with the given range. +//#define HAL_UCACHE_ZERO( _base_ , _size_ ) + +//----------------------------------------------------------------------------- +// Global control of data cache + +#define HAL_DCACHE_SIZE HAL_UCACHE_SIZE +#define HAL_DCACHE_LINE_SIZE HAL_UCACHE_LINE_SIZE +#define HAL_DCACHE_WAYS HAL_UCACHE_WAYS +#define HAL_DCACHE_SETS HAL_UCACHE_SETS + +// Enable the data cache +#define HAL_DCACHE_ENABLE() HAL_UCACHE_ENABLE() + +// Disable the data cache +#define HAL_DCACHE_DISABLE() HAL_UCACHE_DISABLE() + +// Invalidate the entire cache +#define HAL_DCACHE_INVALIDATE_ALL() HAL_UCACHE_INVALIDATE_ALL() + +// Synchronize the contents of the cache with memory. +#define HAL_DCACHE_SYNC() HAL_UCACHE_SYNC() + +// Query the state of the data cache +#define HAL_DCACHE_IS_ENABLED(_state_) HAL_UCACHE_IS_ENABLED(_state_) + +// Set the data cache refill burst size +//#define HAL_DCACHE_BURST_SIZE(_size_) + +// Set the data cache write mode +//#define HAL_DCACHE_WRITE_MODE( _mode_ ) + +//#define HAL_DCACHE_WRITETHRU_MODE 0 +//#define HAL_DCACHE_WRITEBACK_MODE 1 + +// Load the contents of the given address range into the data cache +// and then lock the cache so that it stays there. +//#define HAL_DCACHE_LOCK(_base_, _size_) + +// Undo a previous lock operation +//#define HAL_DCACHE_UNLOCK(_base_, _size_) + +// Unlock entire cache +//#define HAL_DCACHE_UNLOCK_ALL() + +//----------------------------------------------------------------------------- +// Data cache line control + +// Allocate cache lines for the given address range without reading its +// contents from memory. +//#define HAL_DCACHE_ALLOCATE( _base_ , _size_ ) + +// Write dirty cache lines to memory and invalidate the cache entries +// for the given address range. +#define HAL_DCACHE_FLUSH( _base_ , _size_ ) HAL_UCACHE_FLUSH( _base_ , _size_ ) + +// Invalidate cache lines in the given range without writing to memory. +//#define HAL_DCACHE_INVALIDATE( _base_ , _size_ ) + +// Write dirty cache lines to memory for the given address range. +#define HAL_DCACHE_STORE( _base_ , _size_ ) HAL_UCACHE_STORE( _base_ , _size_ ) + +// Preread the given range into the cache with the intention of reading +// from it later. +//#define HAL_DCACHE_READ_HINT( _base_ , _size_ ) + +// Preread the given range into the cache with the intention of writing +// to it later. +//#define HAL_DCACHE_WRITE_HINT( _base_ , _size_ ) + +// Allocate and zero the cache lines associated with the given range. +//#define HAL_DCACHE_ZERO( _base_ , _size_ ) + +//----------------------------------------------------------------------------- +// Global control of Instruction cache - use Data cache controls since they +// are not separatable. + +#define HAL_ICACHE_SIZE HAL_UCACHE_SIZE +#define HAL_ICACHE_LINE_SIZE HAL_UCACHE_LINE_SIZE +#define HAL_ICACHE_WAYS HAL_UCACHE_WAYS +#define HAL_ICACHE_SETS HAL_UCACHE_SETS + +// Enable the instruction cache +#define HAL_ICACHE_ENABLE() HAL_UCACHE_ENABLE() + +// Disable the instruction cache +#define HAL_ICACHE_DISABLE() HAL_UCACHE_DISABLE() + +// Invalidate the entire cache +#define HAL_ICACHE_INVALIDATE_ALL() HAL_UCACHE_INVALIDATE_ALL() + +// Synchronize the contents of the cache with memory. +#define HAL_ICACHE_SYNC() HAL_UCACHE_SYNC() + +// Set the instruction cache refill burst size +//#define HAL_ICACHE_BURST_SIZE(_size_) + +// Load the contents of the given address range into the instruction cache +// and then lock the cache so that it stays there. +//#define HAL_ICACHE_LOCK(_base_, _size_) + +// Undo a previous lock operation +//#define HAL_ICACHE_UNLOCK(_base_, _size_) + +// Unlock entire cache +//#define HAL_ICACHE_UNLOCK_ALL() + +//----------------------------------------------------------------------------- +// Instruction cache line control + +// Invalidate cache lines in the given range without writing to memory. +//#define HAL_ICACHE_INVALIDATE( _base_ , _size_ ) + +//----------------------------------------------------------------------------- +#endif // ifndef CYGONCE_HAL_CACHE_H +// End of hal_cache.h
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/edb7xxx/current/include/hal_diag.h @@ -0,0 +1,67 @@ +#ifndef CYGONCE_HAL_DIAG_H +#define CYGONCE_HAL_DIAG_H + +/*============================================================================= +// +// hal_diag.h +// +// HAL Support for Kernel Diagnostic Routines +// +//============================================================================= +//####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): nickg, gthomas +// Contributors: nickg, gthomas +// Date: 1998-09-11 +// Purpose: HAL Support for Kernel Diagnostic Routines +// Description: Diagnostic routines for use during kernel development. +// Usage: #include <cyg/hal/hal_diag.h> +// +//####DESCRIPTIONEND#### +// +//===========================================================================*/ + +#include <pkgconf/hal.h> + +#include <cyg/infra/cyg_type.h> + +/*---------------------------------------------------------------------------*/ +/* functions implemented in hal_diag.c */ + +externC void hal_diag_init(void); +externC void hal_diag_write_char(char c); +externC void hal_diag_read_char(char *c); + +/*---------------------------------------------------------------------------*/ + +#define HAL_DIAG_INIT() hal_diag_init() + +#define HAL_DIAG_WRITE_CHAR(_c_) hal_diag_write_char(_c_) + +#define HAL_DIAG_READ_CHAR(_c_) hal_diag_read_char(&_c_) + +/*---------------------------------------------------------------------------*/ +/* end of hal_diag.h */ +#endif /* CYGONCE_HAL_DIAG_H */
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/edb7xxx/current/include/hal_edb7xxx.h @@ -0,0 +1,260 @@ +#ifndef CYGONCE_HAL_EDB7XXX_H +#define CYGONCE_HAL_EDB7XXX_H + +/*============================================================================= +// +// hal_edb7xxx.h +// +// HAL Support for Kernel Diagnostic Routines +// +//============================================================================= +//####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-04-19 +// Purpose: Cirrus Logic EDB7XXX hardware description +// Description: +// Usage: #include <cyg/hal/hal_edb7xxx.h> +// +//####DESCRIPTIONEND#### +// +//===========================================================================*/ + +// Note: these defintions match the documentation, thus no attempt is made +// to sanitize (mangle) the names. Also, care should be taken to keep this +// clean for use in assembly code (no "C" constructs). + +#define PADR 0x80000000 // Port A data register +#define PBDR 0x80000001 // Port B data register +#define PDDR 0x80000003 // Port D data register +#define PADDR 0x80000040 // Port A data direction register +#define PBDDR 0x80000041 // Port B data direction register +#define PDDDR 0x80000043 // Port D data direction register +#define PEDR 0x80000080 // Port E data register +#define PEDDR 0x800000C0 // Port E data direction register + +#define SYSCON1 0x80000100 // System control register #1 +#define SYSCON1_KBD_CTL 0xF // Keyboard scan - mask +#define SYSCON1_KBD_HIGH 0 // Keyboard scan - all columns high +#define SYSCON1_KBD_LOW 1 // Keyboard scan - all columns low +#define SYSCON1_KBD_TRISTATE 2 // Keyboard scan - all columns tri-state +#define SYSCON1_KBD_COL(n) (n+8)// Keyboard scan - select column 'n' +#define SYSCON1_TC1M (1<<4) // Timer/counter #1 - prescale mode +#define SYSCON1_TC1S (1<<5) // Timer/counter #1 - source (1=512KHz,0=2KHz) +#define SYSCON1_TC2M (1<<6) // Timer/counter #2 - prescale mode +#define SYSCON1_TC2S (1<<7) // Timer/counter #2 - source (1=512KHz,0=2KHz) +#define SYSCON1_UART1EN (1<<8) // UART #1 enable +#define SYSCON1_BZTOG (1<<9) // Buzzer bit +#define SYSCON1_BZMOD (1<<10) // Buzzer mode (0=direct,1=TC1) +#define SYSCON1_DBGEN (1<<11) // Enable debug mode +#define SYSCON1_LCDEN (1<<12) // Enable LCD +#define SYSCON1_CDENTX (1<<13) // Enable Tx on CODEC +#define SYSCON1_CDENRX (1<<14) // Enable Rx on CODEC +#define SYSCON1_SIREN (1<<15) // Enable SIR protocol on UART #1 +#define SYSCON1_ADCKSEL (3<<16) // Microwire clock +#define SYSCON1_ADC_CLOCK_4kHZ (0<<16) +#define SYSCON1_ADC_CLOCK_16kHZ (1<<16) +#define SYSCON1_ADC_CLOCK_64kHZ (2<<16) +#define SYSCON1_ADC_CLOCK_128kHZ (3<<16) +#define SYSCON1_EXCKEN (1<<18) // External expansion clock enable +#define SYSCON1_WAKEDIS (1<<19) // Disable wakeup from snooze (do not disturb) +#define SYSCON1_IRTXM (1<<20) // IrDA Tx mode + +#define SYSCON2 0x80001100 // System control register #2 +#define SYSCON2_SERSEL (1<<0) // 0=master/slave SSI, 1=CODEC +#define SYSCON2_KBD6 (1<<1) // 0=8 bit keyboard, 1=6 bit +#define SYSCON2_DRAMSZ (1<<2) // DRAM width 0=32, 1=16 +#define SYSCON2_KBWEN (1<<3) // 1=allow wake up from keyboard +#define SYSCON2_SS2TXEN (1<<4) // Enable Tx on SS2 +#define SYSCON2_PCMCIA1 (1<<5) // Enable PCMCIA slot #1 +#define SYSCON2_PCMCIA2 (1<<6) // Enable PCMCIA slot #2 +#define SYSCON2_SS2RXEN (1<<7) // Enable Rx on SS2 +#define SYSCON2_UART2EN (1<<8) // Enable UART #2 +#define SYSCON2_SS2MAEN (1<<9) // Enable master mode on SS2 +#define SYSCON2_SNZPOL (1<<10) // Polarity of LCD during snooze +#define SYSCON2_LCDSNZE (1<<11) +#define SYSCON2_OSTB (1<<12) // Operating system timing 0=512KHz, 1=500KHz +#define SYSCON2_CLKENSL (1<<13) // Source of run/clken signal 0=CLKEN, 1=RUN +#define SYSCON2_BUZFREQ (1<<14) // Buzzer frequency 0=timer, 1=fixed PLL/xtal + +#define SYSCON3 0x80002200 // System control #3 +#define SYSCON3_ADCCON (1<<0) // ADC enable +#define SYSCON3_CLKCTL(n) (n<<1) // Processor block speed ((n+1)*18.432)MHz + +#define SYSFLG1 0x80000140 // System flags #1 +#define SYSFLG1_MCDR (1<<0) // Media changed - direct read +#define SYSFLG1_DCDET (1<<1) // 0=mains power, 1=battery +#define SYSFLG1_WUDR (1<<2) // Wakeup direct +#define SYSFLG1_WUON (1<<3) // Woken up +#define SYSFLG1_DID (0xF<<4) // Display ID +#define SYSFLG1_CTS (1<<8) // UART1 CTS +#define SYSFLG1_DSR (1<<9) // UART1 DSR +#define SYSFLG1_DCD (1<<10) // UART1 DCD +#define SYSFLG1_UBUSY1 (1<<11) // UART1 Tx busy +#define SYSFLG1_NBFLG (1<<12) // New battery flag +#define SYSFLG1_RSTFLG (1<<13) // Reset (button) flag +#define SYSFLG1_PFFLG (1<<14) // Power fail flag +#define SYSFLG1_CLDFLG (1<<15) // Cold start flag +#define SYSFLG1_RTCDIV (0x3F<<16) // Real time clock divider (counter) +#define SYSFLG1_URXFE1 (1<<22) // UART1 Rx FIFO empty +#define SYSFLG1_UTXFF1 (1<<23) // UART1 Tx FIFO full +#define SYSFLG1_CRXFE (1<<24) // CODEC Rx FIFO empty +#define SYSFLG1_CTXFF (1<<25) // CODEC Tx FIFO full +#define SYSFLG1_SSIBUSY (1<<26) // Synchronous serial interface busy +#define SYSFLG1_BOOTBITS (3<<27) // Boot mode (0=32,1=8,2=16,3=XX) +#define SYSFLG1_ID (1<<29) // ID=1 +#define SYSFLG1_VERID (3<<30) // Board version + +#define SYSFLG2 0x80001140 // System flags #2 + +#define INTSR1 0x80000240 // Interrupt status register #1 +#define INTSR1_EXTFIQ (1<<0) // External fast interrupt +#define INTSR1_BLINT (1<<1) // Battery low interrupt +#define INTSR1_WEINT (1<<2) // Watchdog expired interrupt +#define INTSR1_MCINT (1<<3) // Media changed interrupt +#define INTSR1_CSINT (1<<4) // CODEC sound interrupt +#define INTSR1_EINT1 (1<<5) // External interrupt #1 +#define INTSR1_EINT2 (1<<6) // External interrupt #2 +#define INTSR1_EINT3 (1<<7) // External interrupt #3 +#define INTSR1_TC1OI (1<<8) // Timer/counter #1 underflow +#define INTSR1_TC2OI (1<<9) // Timer/counter #2 underflow +#define INTSR1_RTCMI (1<<10) // Real time clock match +#define INTSR1_TINT (1<<11) // 64Hz tick +#define INTSR1_UTXINT1 (1<<12) // UART1 Tx interrupt +#define INTSR1_URXINT1 (1<<13) // UART1 Rx interrupt +#define INTSR1_UMSINT (1<<14) // UART1 modem line change +#define INTSR1_SSEOTI (1<<15) // Synchronous serial end of transfer +#define INTMR1 0x80000280 // Interrupt mask register #1 + +#define INTSR2 0x80001240 // Interrupt status #2 +#define INTSR2_KBDINT (1<<0) // Keyboard interrupt +#define INTSR2_SS2RX (1<<1) // Synchronous serial #2 Rx +#define INTSR2_SS2TX (1<<2) // Synchronous serial #2 Tx +#define INTSR2_UTXINT2 (1<<12) // UART #2 Tx interrupt +#define INTSR2_URXINT2 (1<<13) // UART #2 Rx interrupt +#define INTMR2 0x80001280 // Interrupt mask #2 + +#define INTSR3 0x80002240 // Interrupt status #3 +#if defined(__EDB7211) +#define INTSR3_MCPINT (1<<0) // MCP interrupt +#endif +#define INTMR3 0x80002280 // Interrupt mask #3 + +#define UARTDR1 0x80000480 // UART #1 data register +#define UARTDR2 0x80001480 // UART #2 data register +#define UBLCR1 0x800004C0 // UART #1 baud rate / line control +#define UBLCR2 0x800014C0 // UART #2 baud rate / line control +#define UBLCR_BRDV 0xFFF // Baud rate +#define UBLCR_BREAK (1<<12) // Generate break signal +#define UBLCR_PRTEN (1<<13) // Enable parity +#define UBLCR_EVENPRT (1<<14) // 1=even parity, 0=odd +#define UBLCR_XSTOP (1<<15) // 0=1 stop bit, 1=2 stop bits +#define UBLCR_FIFOEN (1<<16) // Enable Tx/Rx FIFOs +#define UBLCR_WRDLEN (3<<17) // Word (character) length field +#define UBLCR_WRDLEN5 (0<<17) +#define UBLCR_WRDLEN6 (1<<17) +#define UBLCR_WRDLEN7 (2<<17) +#define UBLCR_WRDLEN8 (3<<17) +#define UART_DIVISOR 230400 +#define UART_BITRATE(baud) ((UART_DIVISOR/(baud))-1) + +#define MEMCFG1 0x80000180 // Memory configuration register #1 +#define MEMCFG2 0x800001C0 // Memory configuration register #2 + +#define DRFPR 0x80000200 // DRAM refresh period + +#define LCDCON 0x800002C0 // LDC control +#define LCDCON_BUFSIZ 0x00001FFF // Video buffer size +#define LCDCON_BUFSIZ_S 0 // Position of buffer size +#define LCDCON_LINE_LENGTH 0x0007E000 // Line length +#define LCDCON_LINE_LENGTH_S 13 // Position of line length +#define LCDCON_PIX_PRESCALE 0x01F80000 // Pixel prescale value +#define LCDCON_PIX_PRESCALE_S 19 // Position of prescale value +#define LCDCON_AC_PRESCALE 0x3E000000 // LCD AC bias frequency +#define LCDCON_AC_PRESCALE_S 25 // Position to AC bias +#define LCDCON_GSEN 0x40000000 // Enable greyscale +#define LCDCON_GSMD 0x80000000 // Greyscale mode + // 00 - 1bpp, 01 - 2bpp, 11 - 4 bpp + +#define TC1D 0x80000300 // Timer/Counter #1 register +#define TC2D 0x80000340 // Timer/Counter #2 register +#define RTCDR 0x80000380 // Real time clock data register +#define RTCMR 0x800003C0 // Real time clock match register + +#define PMPCON 0x80000400 // DC-DC pump control + +#define CODR 0x80000440 // CODEC data register + +#define SYNCIO 0x80000500 // Synchronous I/O data register + +#define PALLSW 0x80000540 // LCD palette - LSW (Pixel values 0..7) +#define PALMSW 0x80000580 // LCD palette - MSW (Pixel values 8..15) + +#define STFCLR 0x800005C0 // Clear startup reason flags +#define BLEOI 0x80000600 // Clear battery low interrupt +#define MCEOI 0x80000640 // Clear media changed interrupt +#define TEOI 0x80000680 // Clear tick/watchdog interrupt +#define TC1EOI 0x800006C0 // Clear timer/counter #1 interrupt +#define TC2EOI 0x80000700 // Clear timer/counter #2 interrupt +#define RTCEOI 0x80000740 // Clear real time clock interrupt +#define UMSEOI 0x80000780 // Clear UART modem status change interrupt +#define COEOI 0x800007C0 // Clear CODEC sound interrupt + +#define HALT 0x80000800 // Enter 'idle' state +#define STDBY 0x80000840 // Enter 'standby' state + +#define FRBADDR 0x80001000 // LCD frame buffer start + +#define SNZDISP 0x800012C0 // Snooze display size + +#define SS2DR 0x80001500 // Master/slave SSI2 register + +#define SRXEOF 0x80001600 // Clear Rx FIFO overflow flag +#define SS2POP 0x800016C0 // Pop SSI2 residual byte into FIFO + +#define KBDEOI 0x80001700 // Clear keyboard interrupt + +#define SNOOZE 0x80001800 // Enter 'snooze' state + +#if defined(__EDB7211) +#define MCCR 0x80002000 // MCP control register +#define MCDR0 0x80002040 // MCP data register #0 +#define MCDR1 0x80002080 // MCP data register #1 +#define MCDR2 0x800020C0 // MCP data register #2 +#define MCSR 0x80002100 // MCP status register +#endif + + +#define LEDFLSH 0x800022C0 // LED flash control +#define LEDFLSH_ENABLE (1<<6) // LED enabled +#define LEDFLSH_DUTY(n) ((n-1)<<2) // LED on ratio +#define LEDFLSH_PERIOD(n) (n-1) // LED active time (1..4) + +#define KBD_PORT 0x30010000 // Extra 8 bits of keyboard data + +/*---------------------------------------------------------------------------*/ +/* end of hal_edb7xxx.h */ +#endif /* CYGONCE_HAL_EDB7XXX_H */
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/edb7xxx/current/include/hal_platform_ints.h @@ -0,0 +1,85 @@ +#ifndef CYGONCE_HAL_PLATFORM_INTS_H +#define CYGONCE_HAL_PLATFORM_INTS_H +//========================================================================== +// +// hal_platform_ints.h +// +// HAL Interrupt and clock support +// +//========================================================================== +//####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-04-21 +// Purpose: Define Interrupt support +// Description: The interrupt details for the CL7xxx are defined here. +// Usage: +// #include <cyg/hal/hal_platform_ints.h> +// ... +// +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#define CYGNUM_HAL_INTERRUPT_unused 0 +#define CYGNUM_HAL_INTERRUPT_EXTFIQ 1 +#define CYGNUM_HAL_INTERRUPT_BLINT 2 +#define CYGNUM_HAL_INTERRUPT_WEINT 3 +#define CYGNUM_HAL_INTERRUPT_MCINT 4 +#define CYGNUM_HAL_INTERRUPT_CSINT 5 +#define CYGNUM_HAL_INTERRUPT_EINT1 6 +#define CYGNUM_HAL_INTERRUPT_EINT2 7 +#define CYGNUM_HAL_INTERRUPT_EINT3 8 +#define CYGNUM_HAL_INTERRUPT_TC1OI 9 +#define CYGNUM_HAL_INTERRUPT_TC2OI 10 +#define CYGNUM_HAL_INTERRUPT_RTCMI 11 +#define CYGNUM_HAL_INTERRUPT_TINT 12 +#define CYGNUM_HAL_INTERRUPT_UTXINT1 13 +#define CYGNUM_HAL_INTERRUPT_URXINT1 14 +#define CYGNUM_HAL_INTERRUPT_UMSINT 15 +#define CYGNUM_HAL_INTERRUPT_SSEOTI 16 +#define CYGNUM_HAL_INTERRUPT_KBDINT 17 +#define CYGNUM_HAL_INTERRUPT_SS2RX 18 +#define CYGNUM_HAL_INTERRUPT_SS2TX 19 +#define CYGNUM_HAL_INTERRUPT_UTXINT2 20 +#define CYGNUM_HAL_INTERRUPT_URXINT2 21 +#if defined(__EDB7211) +#define CYGNUM_HAL_INTERRUPT_MCPINT 22 +#endif + +#define CYGNUM_HAL_ISR_MIN 0 +#if defined(__CL7111) +#define CYGNUM_HAL_ISR_MAX 21 +#else +#define CYGNUM_HAL_ISR_MAX 22 +#endif +#define CYGNUM_HAL_ISR_COUNT (CYGNUM_HAL_ISR_MAX+1) + +// The vector used by the Real time clock +#define CYGNUM_HAL_INTERRUPT_RTC CYGNUM_HAL_INTERRUPT_TC2OI + +#endif // CYGONCE_HAL_PLATFORM_INTS_H
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/edb7xxx/current/include/hal_platform_setup.h @@ -0,0 +1,422 @@ +#ifndef CYGONCE_HAL_PLATFORM_SETUP_H +#define CYGONCE_HAL_PLATFORM_SETUP_H + +/*============================================================================= +// +// hal_platform_setup.h +// +// Platform specific support for HAL (assembly 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-04-21 +// Purpose: Cirrus EDB7XXX platform specific support routines +// Description: +// Usage: #include <cyg/hal/hal_platform_setup.h> +// +//####DESCRIPTIONEND#### +// +//===========================================================================*/ + +#include <pkgconf/system.h> // System-wide configuration info +#include CYGBLD_HAL_PLATFORM_H // Platform specific configuration +#include <cyg/hal/hal_edb7xxx.h> // Platform specific hardware definitions +#include <cyg/hal/hal_mmu.h> // MMU definitions + +#define CYGHWR_HAL_ARM_HAS_MMU // This processor has an MMU + +// +// Memory map - set up by ROM (GDB stubs) +// +// Region Logical Address Physical Address +// DRAM 0x00000000..0x00xFFFFF 0xC00x0000 (see below) +// Expansion 2 0x20000000 0x20000000 +// Expansion 3 0x30000000 0x30000000 +// PCMCIA 0 0x40000000 0x40000000 +// PCMCIA 1 0x50000000 0x50000000 +// SRAM 0x60000000..0x600007FF 0x60000000 +// I/O 0x80000000 0x80000000 +// MMU Tables 0xC00y0000 +// LCD buffer 0xC0000000..0xC001FFFF 0xC0000000 +// ROM 0xE0000000..0xEFFFFFFF 0x00000000 +// ROM 0xF0000000..0xFFFFFFFF 0x10000000 + +#ifdef CYGHWR_HAL_ARM_EDB7XXX_LCD_INSTALLED +#define LCD_BUFFER_SIZE 0x00020000 +#else +#define LCD_BUFFER_SIZE 0x00000000 +#endif +#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_EDB7XXX_DRAM_SIZE == 2) +#define MMU_TABLES_SIZE (0x4000+0x1000+0x1000) // RAM used for PTE entries +#define DRAM_LA_END (0x00200000-MMU_TABLES_SIZE-LCD_BUFFER_SIZE) +#elif (CYGHWR_HAL_ARM_EDB7XXX_DRAM_SIZE == 16) +#define MMU_TABLES_SIZE (0x4000+0x4000+0x1000) // RAM used for PTE entries +#define DRAM_LA_END (0x01000000-MMU_TABLES_SIZE-LCD_BUFFER_SIZE) +#endif +#define DRAM_LA_START 0x00000000 +#define DRAM_PA MMU_BASE+MMU_TABLES_SIZE +#define LCD_LA_START 0xC0000000 +#define LCD_LA_END 0xC0020000 +#define LCD_PA 0xC0000000 +#define ROM0_LA_START 0xE0000000 +#define ROM0_PA 0x00000000 +#define ROM0_LA_END 0xF0000000 +#define ROM1_LA_START 0xF0000000 +#define ROM1_LA_END 0x00000000 +#define ROM1_PA 0x10000000 +#define EXPANSION2_LA_START 0x20000000 +#define EXPANSION2_PA 0x20000000 +#define EXPANSION3_LA_START 0x30000000 +#define EXPANSION3_PA 0x30000000 +#define PCMCIA0_LA_START 0x40000000 +#define PCMCIA0_PA 0x40000000 +#define PCMCIA1_LA_START 0x50000000 +#define PCMCIA1_PA 0x50000000 +#define SRAM_LA_START 0x60000000 +#define SRAM_LA_END 0x60001000 +#define SRAM_PA 0x60000000 +#define IO_LA_START 0x80000000 +#define IO_LA_END 0x80003000 +#define IO_PA 0x80000000 + +// Define startup code [macros] +#if defined(CYG_HAL_STARTUP_ROM) || defined(CYG_HAL_STARTUP_STUBS) + +#if (CYGHWR_HAL_ARM_EDB7XXX_DRAM_SIZE == 2) +// Note: The DRAM on this board is very irregular in that every +// other 256K piece is missing. E.g. only these [physical] +// addresses are valid: +// 0xC0000000..0xC003FFFF +// 0xC0080000..0xC00BFFFF +// 0xC0200000..0xC023FFFF Note the additional GAP! +// etc. +// 0xC0800000..0xC083FFFF Note the additional GAP! +// 0xC0880000..0xC08CFFFF +// 0xC0A00000..0xC0A3FFFF +// etc. +// The MMU mapping code takes this into consideration and creates +// a continuous logical map for the DRAM. +#define MAP_DRAM \ +/* Map DRAM */ ;\ + ldr r3,=DRAM_LA_START ;\ + ldr r4,=DRAM_LA_END ;\ + ldr r5,=DRAM_PA ;\ +/* 0x00000000..0x000FFFFF */ ;\ + mov r6,r2 /* Set up page table descriptor */ ;\ + ldr r7,=MMU_L1_TYPE_Page ;\ + orr r6,r6,r7 ;\ + str r6,[r1],#4 /* Store PTE, update pointer */ ;\ +10: mov r6,r5 /* Build page table entry */ ;\ + ldr r7,=MMU_L2_TYPE_Small|MMU_AP_Any|MMU_Bufferable|MMU_Cacheable ;\ + orr r6,r6,r7 ;\ + ldr r7,=MMU_PAGE_SIZE ;\ + str r6,[r2],#4 /* Next page */ ;\ + add r3,r3,r7 ;\ + add r5,r5,r7 ;\ + ldr r8,=DRAM_LA_START+MMU_SECTION_SIZE ;\ + cmp r3,r8 /* Done with first 1M? */ ;\ + beq 20f ;\ + ldr r7,=0x40000 /* Special check for 256K boundary */ ;\ + and r7,r7,r5 ;\ + cmp r7,#0 ;\ + beq 10b ;\ + add r5,r5,r7 /* Skip 256K hole */ ;\ + ldr r7,=0x100000 ;\ + and r7,r5,r7 ;\ + beq 10b ;\ + add r5,r5,r7 /* Nothing at 0xC0100000 */ ;\ + ldr r7,=0x400000 /* Also nothing at 0xC0400000 */ ;\ + and r7,r5,r7 ;\ + beq 10b ;\ + add r5,r5,r7 ;\ + b 10b ;\ +20: ;\ +/* 0x00100000..0x001FFFFF */ ;\ + mov r6,r2 /* Set up page table descriptor */ ;\ + ldr r7,=MMU_L1_TYPE_Page ;\ + orr r6,r6,r7 ;\ + str r6,[r1],#4 /* Store PTE, update pointer */ ;\ +10: mov r6,r5 /* Build page table entry */ ;\ + ldr r7,=MMU_L2_TYPE_Small|MMU_AP_Any|MMU_Bufferable|MMU_Cacheable ;\ + orr r6,r6,r7 ;\ + ldr r7,=MMU_PAGE_SIZE ;\ + str r6,[r2],#4 /* Next page */ ;\ + add r3,r3,r7 ;\ + cmp r3,r4 /* Done with first DRAM? */ ;\ + beq 20f ;\ + add r5,r5,r7 ;\ + ldr r7,=0x40000 /* Special check for 256K boundary */ ;\ + and r7,r7,r5 ;\ + cmp r7,#0 ;\ + beq 10b ;\ + add r5,r5,r7 /* Skip 256K hole */ ;\ + ldr r7,=0x100000 ;\ + and r7,r5,r7 ;\ + beq 10b ;\ + add r5,r5,r7 /* Nothing at 0xC0300000 */ ;\ + ldr r7,=0x400000 /* Also nothing at 0xC0400000 */ ;\ + and r7,r5,r7 ;\ + beq 10b ;\ + add r5,r5,r7 ;\ + b 10b ;\ +20: ; +#elif (CYGHWR_HAL_ARM_EDB7XXX_DRAM_SIZE == 16) +// The 16M board is arranged as: +// 0xC0000000..0xC07FFFFF +// 0xC1000000..0xC17FFFFF +#define MAP_DRAM \ +/* Map DRAM */ ;\ + ldr r3,=DRAM_LA_START ;\ + ldr r4,=DRAM_LA_END ;\ + ldr r5,=DRAM_PA ;\ +/* 0xXXX00000..0xXXXFFFFF */ ;\ +10: mov r6,r2 /* Set up page table descriptor */ ;\ + ldr r7,=MMU_L1_TYPE_Page ;\ + orr r6,r6,r7 ;\ + str r6,[r1],#4 /* Store PTE, update pointer */ ;\ + ldr r8,=MMU_SECTION_SIZE/MMU_PAGE_SIZE ;\ + ldr r9,=DRAM_PA_START+0x00800000 /* Need to skip at 8M boundary */ ;\ +12: cmp r5,r9 ;\ + bne 15f ;\ + 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 ;\ + ldr r7,=MMU_PAGE_SIZE ;\ + str r6,[r2],#4 /* Next page */ ;\ + add r3,r3,r7 ;\ + add r5,r5,r7 ;\ + cmp r3,r4 /* End of DRAM? */ ;\ + beq 20f ;\ + sub r8,r8,#1 /* End of 1M section? */ ;\ + cmp r8,#0 ;\ + bne 12b /* Next page */ ;\ + b 10b /* Next section */ ;\ +20: +#else +#err Invalid DRAM size selected +#endif + +#ifdef CYG_HAL_ARM_CL7111 // CL7111, 710 processor +#define MMU_INITIALIZE \ + ldr r1,=MMU_Control_Init ;\ + mcr MMU_CP,0,r1,MMU_Control,c0 /* MMU off */ ;\ + ldr r1,=MMU_BASE ;\ + mcr MMU_CP,0,r1,MMU_Base,c0 ;\ + mcr MMU_CP,0,r1,MMU_FlushTLB,c0,0 /* Invalidate TLB */ ;\ + mcr MMU_CP,0,r1,MMU_FlushIDC,c0,0 /* Invalidate Caches */ ;\ + ldr r1,=0xFFFFFFFF ;\ + mcr MMU_CP,0,r1,MMU_DomainAccess,c0 ;\ + ldr r2,=10f ;\ + ldr r1,=MMU_Control_Init|MMU_Control_M ;\ + mcr MMU_CP,0,r1,MMU_Control,c0 ;\ + mov pc,r2 /* Change address spaces */ ;\ + nop ;\ + nop ;\ + nop ;\ +10: +#else // EP7211, 720T processor +#define MMU_INITIALIZE ;\ + ldr r1,=MMU_Control_Init ;\ + mcr MMU_CP,0,r1,MMU_Control,c0 /* MMU off */ ;\ + ldr r1,=MMU_BASE ;\ + mcr MMU_CP,0,r1,MMU_Base,c0 ;\ + mcr MMU_CP,0,r1,MMU_TLB,c7,0 /* Invalidate TLB - 720 style */ ;\ + mcr MMU_CP,0,r1,MMU_FlushIDC,c0,0 /* Invalidate Caches */ ;\ + ldr r1,=0xFFFFFFFF ;\ + mcr MMU_CP,0,r1,MMU_DomainAccess,c0 ;\ + ldr r2,=10f ;\ + ldr r3,=__exception_handlers ;\ + sub r2,r2,r3 ;\ + ldr r3,=ROM0_LA_START ;\ + add r2,r2,r3 ;\ + ldr r1,=MMU_Control_Init|MMU_Control_M ;\ + mcr MMU_CP,0,r1,MMU_Control,c0 ;\ + mov pc,r2 /* Change address spaces */ ;\ + nop ;\ + nop ;\ + nop ;\ +10: +#endif + +#define PLATFORM_SETUP1 \ +/* Initialize memory configuration */ ;\ + ldr r1,=MEMCFG1 ;\ + ldr r2,=0x8200A080 /* FIXME - what is this? */ ;\ + str r2,[r1] ;\ + ldr r1,=MEMCFG2 ;\ + ldr r2,=0xFEFC0000 ;\ + str r2,[r1] ;\ + ldr r1,=DRFPR ;\ + ldr r2,=0x81 /* DRAM refresh = 64KHz */ ;\ + strb r2,[r1] ;\ +/* Initialize MMU to create new memory map */ ;\ + ldr r1,=MMU_BASE ;\ + ldr r2,=PTE_BASE ;\ + MAP_DRAM ;\ +/* Nothing until PCMCIA0 */ ;\ + ldr r3,=0x3FF /* Page tables need 2K boundary */ ;\ + add r2,r2,r3 ;\ + ldr r3,=~0x3FF ;\ + and r2,r2,r3 ;\ + ldr r3,=(DRAM_LA_END+0x000FFFFF)&0xFFF00000 ;\ + ldr r4,=EXPANSION2_LA_START ;\ + ldr r5,=MMU_L1_TYPE_Fault ;\ + ldr r7,=MMU_SECTION_SIZE ;\ +10: str r5,[r1],#4 ;\ + add r3,r3,r7 ;\ + cmp r3,r4 ;\ + bne 10b ;\ +/* EXPANSION2, EXPANSION3, PCMCIA0, PCMCIA1 */ ;\ + ldr r3,=EXPANSION2_LA_START ;\ + ldr r4,=SRAM_LA_START ;\ + ldr r5,=EXPANSION2_PA ;\ + ldr r6,=MMU_L1_TYPE_Section|MMU_AP_Any ;\ + ldr r7,=MMU_SECTION_SIZE ;\ +10: orr r0,r5,r6 ;\ + str r0,[r1],#4 ;\ + add r5,r5,r7 ;\ + add r3,r3,r7 ;\ + cmp r3,r4 ;\ + bne 10b ;\ +/* SRAM */ ;\ + ldr r3,=SRAM_LA_START ;\ + ldr r4,=MMU_L1_TYPE_Page|MMU_DOMAIN(0) ;\ + orr r4,r4,r2 ;\ + str r4,[r1],#4 ;\ + ldr r4,=MMU_L2_TYPE_Small|MMU_AP_Any|MMU_Bufferable|MMU_Cacheable ;\ + orr r4,r3,r4 ;\ + str r4,[r2],#4 ;\ + ldr r3,=SRAM_LA_START+MMU_PAGE_SIZE ;\ + ldr r4,=SRAM_LA_START+MMU_SECTION_SIZE ;\ + ldr r5,=MMU_L2_TYPE_Fault ;\ + ldr r7,=MMU_PAGE_SIZE ;\ +10: str r5,[r2],#4 ;\ + add r3,r3,r7 ;\ + cmp r3,r4 ;\ + bne 10b ;\ + ldr r4,=IO_LA_START ;\ + ldr r5,=MMU_L1_TYPE_Fault ;\ + ldr r7,=MMU_SECTION_SIZE ;\ +20: str r5,[r1],#4 ;\ + add r3,r3,r7 ;\ + cmp r3,r4 ;\ + bne 20b ;\ +/* I/O */ ;\ + ldr r3,=0x3FF /* Page tables need 2K boundary */ ;\ + add r2,r2,r3 ;\ + ldr r3,=~0x3FF ;\ + and r2,r2,r3 ;\ + ldr r4,=MMU_L1_TYPE_Page|MMU_DOMAIN(0) ;\ + orr r4,r4,r2 ;\ + str r4,[r1],#4 ;\ + ldr r3,=IO_LA_START ;\ + ldr r4,=IO_LA_END ;\ + ldr r7,=MMU_PAGE_SIZE ;\ + ldr r5,=IO_PA|MMU_L2_TYPE_Small|MMU_AP_All ;\ +10: str r5,[r2],#4 ;\ + add r5,r5,r7 ;\ + add r3,r3,r7 ;\ + cmp r3,r4 ;\ + bne 10b ;\ + ldr r4,=IO_LA_START+MMU_SECTION_SIZE ;\ + ldr r5,=MMU_L2_TYPE_Fault ;\ + ldr r7,=MMU_PAGE_SIZE ;\ +10: str r5,[r2],#4 ;\ + add r3,r3,r7 ;\ + cmp r3,r4 ;\ + bne 10b ;\ + ldr r4,=LCD_LA_START ;\ + ldr r5,=MMU_L1_TYPE_Fault ;\ + ldr r7,=MMU_SECTION_SIZE ;\ +20: str r5,[r1],#4 ;\ + add r3,r3,r7 ;\ + cmp r3,r4 ;\ + bne 20b ;\ +/* LCD Buffer & Unmapped DRAM (holes and all) */ ;\ + ldr r3,=LCD_LA_START ;\ + ldr r4,=ROM0_LA_START ;\ + ldr r5,=LCD_PA ;\ + ldr r6,=MMU_L1_TYPE_Section|MMU_AP_Any|MMU_Bufferable|MMU_Cacheable ;\ + ldr r7,=MMU_SECTION_SIZE ;\ +10: orr r0,r5,r6 ;\ + str r0,[r1],#4 ;\ + add r5,r5,r7 ;\ + add r3,r3,r7 ;\ + cmp r3,r4 ;\ + bne 10b ;\ +/* ROM0 */ ;\ + ldr r3,=ROM0_LA_START ;\ + ldr r4,=ROM0_LA_END ;\ + ldr r5,=ROM0_PA ;\ + ldr r6,=MMU_L1_TYPE_Section|MMU_AP_Any|MMU_Cacheable ;\ + ldr r7,=MMU_SECTION_SIZE ;\ +10: orr r0,r5,r6 ;\ + str r0,[r1],#4 ;\ + add r5,r5,r7 ;\ + add r3,r3,r7 ;\ + cmp r3,r4 ;\ + bne 10b ;\ +/* ROM1 */ ;\ + ldr r3,=ROM1_LA_START ;\ + ldr r4,=ROM1_LA_END ;\ + ldr r5,=ROM1_PA ;\ + ldr r6,=MMU_L1_TYPE_Section|MMU_AP_Any ;\ + ldr r7,=MMU_SECTION_SIZE ;\ +10: orr r0,r5,r6 ;\ + str r0,[r1],#4 ;\ + add r5,r5,r7 ;\ + add r3,r3,r7 ;\ + 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 ;\ +20: + +#else + +#define PLATFORM_SETUP1 +#endif + + +/*---------------------------------------------------------------------------*/ +/* end of hal_platform_setup.h */ +#endif /* CYGONCE_HAL_PLATFORM_SETUP_H */
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/edb7xxx/current/include/pkgconf/hal_arm_edb7xxx.h @@ -0,0 +1,227 @@ +#ifndef CYGONCE_PKGCONF_HAL_ARM_EDB7XXX_H +#define CYGONCE_PKGCONF_HAL_ARM_EDB7XXX_H +// ==================================================================== +// +// pkgconf/hal_arm_edb7xxx.h +// +// HAL configuration file +// +// ==================================================================== +//####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-04-21 +// Purpose: To allow the user to edit HAL configuration options. +// Description: +// +//####DESCRIPTIONEND#### +// +// ==================================================================== + + +/* --------------------------------------------------------------------- + {{CFG_DATA + + cdl_package CYGPKG_HAL_ARM_EDB7XXX { + display "Cirrus Logic EDB7XXX evaluation boards" + type radio + parent CYGPKG_HAL_ARM + description " + The EDB7XXX HAL package provides the support needed to run + eCos on a Cirrus Logic EDB7XXX eval boards." + } + + cdl_option CYGHWR_HAL_ARM_EDB7XXX_CL7111 { + display "CL7111-1 variant" + parent CYGPKG_HAL_ARM_EDB7XXX + platform cl7111 + type radio + description " + Cirrus Logic CL7111 board with ARM710C processor." + } + + cdl_option CYGHWR_HAL_ARM_EDB7XXX_EDB7211 { + display "EDB7211-1 variant" + parent CYGPKG_HAL_ARM_EDB7XXX + platform edb7211 + type radio + description " + Cirrus Logic EDB7211 board with EDB7XXX (ARM720) processor." + } + + cdl_option CYGHWR_HAL_ARM_EDB7XXX_STARTUP { + display "Startup type" + parent CYGPKG_HAL_ARM_EDB7XXX + type enum + legal_values ram rom stubs + startup + description " + When targetting the EDB7XXX eval boards it is possible to build + the system for either RAM bootstrap or ROM bootstrap(s). Select + 'ram' when building programs to load into RAM using onboard + debug software such as Angel or eCos GDB stubs. Select 'rom' + when building a stand-alone application which will be put + into ROM. Selection of 'stubs' is for the special case of + building the eCos GDB stubs themselves." + } + + }}CFG_DATA */ + +#define CYGHWR_HAL_ARM_EDB7XXX_STARTUP ram + + +/* --------------------------------------------------------------------- + {{CFG_DATA + cdl_option CYGHWR_HAL_ARM_EDB7XXX_DIAG_PORT { + display "Diagnostic serial port" + parent CYGPKG_HAL_ARM_EDB7XXX + type enum + legal_values 0 1 + description " + The EDB7XXX boards have two separate serial ports. This option + chooses which of these ports will be used." + } + + }}CFG_DATA */ +#define CYGHWR_HAL_ARM_EDB7XXX_DIAG_PORT 0 + +/* --------------------------------------------------------------------- + {{CFG_DATA + cdl_option CYGHWR_HAL_ARM_EDB7XXX_DIAG_BAUD { + display "Diagnostic serial port baud rate" + parent CYGPKG_HAL_ARM_EDB7XXX + type enum + legal_values 9600 19200 38400 115200 + description " + This option selects the baud rate used for the diagnostic port. + Note: this should match the value chosen for the GDB port if the + diagnostic and GDB port are the same." + } + + }}CFG_DATA */ +#define CYGHWR_HAL_ARM_EDB7XXX_DIAG_BAUD 38400 + +/* --------------------------------------------------------------------- + {{CFG_DATA + cdl_option CYGHWR_HAL_ARM_EDB7XXX_GDB_PORT { + display "GDB serial port" + parent CYGPKG_HAL_ARM_EDB7XXX + type enum + legal_values 0 1 + description " + The EDB7XXX boards have two separate serial ports. This option + chooses which of these ports will be used to connect to a host + running GDB." + } + + }}CFG_DATA */ +#define CYGHWR_HAL_ARM_EDB7XXX_GDB_PORT 0 + +/* --------------------------------------------------------------------- + {{CFG_DATA + cdl_option CYGHWR_HAL_ARM_EDB7XXX_GDB_BAUD { + display "GDB serial port baud rate" + parent CYGPKG_HAL_ARM_EDB7XXX + type enum + legal_values 9600 19200 38400 115200 + description " + This option controls the baud rate used for the GDB connection." + } + + }}CFG_DATA */ +#define CYGHWR_HAL_ARM_EDB7XXX_GDB_BAUD 38400 + +/* --------------------------------------------------------------------- + {{CFG_DATA + cdl_option CYGHWR_HAL_ARM_EDB7XXX_PROCESSOR_CLOCK { + display "Processor clock rate" + parent CYGPKG_HAL_ARM_EDB7XXX + type enum + legal_values 18432 36864 49152 73728 + description " + The processor on the EDB7XXX can run at various frequencies." + } + + }}CFG_DATA */ +#define CYGHWR_HAL_ARM_EDB7XXX_PROCESSOR_CLOCK 73728 + +/* --------------------------------------------------------------------- + {{CFG_DATA + cdl_option CYGHWR_HAL_ARM_EDB7XXX_DRAM_SIZE { + display "DRAM size" + parent CYGPKG_HAL_ARM_EDB7XXX + type enum + legal_values 2 16 + description " + The EDB7XXX boards can have various amounts of DRAM installed. + The machine needs to be initialized differently, depending + upon the amount installed." + } + + }}CFG_DATA */ +#define CYGHWR_HAL_ARM_EDB7XXX_DRAM_SIZE 16 + +/* ---------------------------------------------------------------------------- + {{CFG_DATA + + cdl_option CYGHWR_HAL_ARM_EDB7XXX_SOFTWARE_DRAM_REFRESH { + display "Perform DRAM refresh in software" + type bool + parent CYGPKG_HAL_ARM_EDB7XXX + description " + This option will add code that refreshes the DRAM by + touching all of DRAM during the system clock interrupt + processing." + } + + }}CFG_DATA */ + +#undef CYGHWR_HAL_ARM_EDB7XXX_SOFTWARE_DRAM_REFRESH + +/* ---------------------------------------------------------------------------- + {{CFG_DATA + + cdl_option CYGHWR_HAL_ARM_EDB7XXX_LCD_INSTALLED { + display "LCD panel" + type bool + parent CYGPKG_HAL_ARM_EDB7XXX + description " + If an LCD panel is installed, 128K of DRAM will be dedicated to the + LCD buffer by the system intialization." + } + + }}CFG_DATA */ +#define CYGHWR_HAL_ARM_EDB7XXX_LCD_INSTALLED + +// Real-time clock/counter specifics + +#define CYGNUM_HAL_RTC_NUMERATOR 1000000000 +#define CYGNUM_HAL_RTC_DENOMINATOR 100 +#define CYGNUM_HAL_RTC_PERIOD 5120 // Assumes 512KHz clock + +/* -------------------------------------------------------------------*/ +#endif /* CYGONCE_PKGCONF_HAL_ARM_EDB7XXX_H */ +/* EOF hal_arm_edb7xxx.h */
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_cl7111_ram.h @@ -0,0 +1,13 @@ +// eCos memory layout - Wed Nov 17 08:08:48 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 (0x1c0000) +#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)
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_cl7111_ram.ldi @@ -0,0 +1,24 @@ +// eCos memory layout - Wed Nov 17 08:08:48 1999 + +// This is a generated file - do not edit + +MEMORY +{ + ram : ORIGIN = 0, LENGTH = 0x1c0000 +} + +SECTIONS +{ + SECTIONS_BEGIN + __reserved = 0; . = __reserved + 0x8000; + SECTION_rom_vectors (ram, ALIGN (0x1), 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/edb7xxx/current/include/pkgconf/mlt_arm_cl7111_ram.mlt @@ -0,0 +1,12 @@ +version 0 +region ram 0 1c0000 0 ! +section reserved 8000 1 0 0 1 1 1 1 0 0 rom_vectors rom_vectors ! +section rom_vectors 0 1 0 1 0 1 0 1 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/edb7xxx/current/include/pkgconf/mlt_arm_cl7111_rom.h @@ -0,0 +1,16 @@ +// eCos memory layout - Wed Nov 17 08:10:54 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 (0x1c0000) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#define CYGMEM_REGION_rom (0xe0000000) +#define CYGMEM_REGION_rom_SIZE (0x40000) +#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)
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_cl7111_rom.ldi @@ -0,0 +1,25 @@ +// eCos memory layout - Wed Nov 17 08:10:54 1999 + +// This is a generated file - do not edit + +MEMORY +{ + ram : ORIGIN = 0, LENGTH = 0x1c0000 + rom : ORIGIN = 0xe0000000, LENGTH = 0x40000 +} + +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; . = __reserved + 0x1000; + SECTION_data (ram, ALIGN (0x1), FOLLOWING (.gcc_except_table)) + SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTIONS_END +}
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_cl7111_rom.mlt @@ -0,0 +1,13 @@ +version 0 +region ram 0 1c0000 0 ! +region rom e0000000 40000 1 ! +section reserved 1000 1 0 0 1 1 1 0 0 0 data ! +section data 0 1 1 1 0 1 0 0 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/edb7xxx/current/include/pkgconf/mlt_arm_cl7111_stubs.ldi @@ -0,0 +1,52 @@ +//=========================================================================== +// +// 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 - Mon May 17 08:06:28 1999 + +// This is a generated file - do not edit + +MEMORY +{ + ram : ORIGIN = 0x1000, LENGTH = 0x7000 + rom : ORIGIN = 0xf0028000, LENGTH = 0x40000 +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (rom, 0xf0028000, 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 +}
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_cl7111_stubs.mlt @@ -0,0 +1,12 @@ +version 0 +region ram 1000 7000 0 ! +region rom f0028000 40000 1 ! +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 f0028000 f0028000 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/edb7xxx/current/include/pkgconf/mlt_arm_edb7211_ram.h @@ -0,0 +1,13 @@ +// 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 (0x00FD7000) +#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))
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_edb7211_ram.ldi @@ -0,0 +1,24 @@ +// eCos memory layout - Wed Oct 27 13:28:21 1999 + +// This is a generated file - do not edit + +MEMORY +{ + ram : ORIGIN = 0, LENGTH = 0x00FD7000 +} + +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 +}
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_edb7211_ram.mlt @@ -0,0 +1,12 @@ +version 0 +region ram 0 fd9000 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/edb7xxx/current/include/pkgconf/mlt_arm_edb7211_rom.h @@ -0,0 +1,16 @@ +// 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 (0x00FD7000) +#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))
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_edb7211_rom.ldi @@ -0,0 +1,25 @@ +// eCos memory layout - Wed Oct 27 13:34:16 1999 + +// This is a generated file - do not edit + +MEMORY +{ + ram : ORIGIN = 0, LENGTH = 0x00FD7000 + 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 +}
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_edb7211_rom.mlt @@ -0,0 +1,13 @@ +version 0 +region ram 0 fd7000 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/edb7xxx/current/include/pkgconf/mlt_arm_edb7211_stubs.h @@ -0,0 +1,16 @@ +// 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 (0x00FD7000) +#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))
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_edb7211_stubs.ldi @@ -0,0 +1,25 @@ +// eCos memory layout - Wed Oct 27 13:37:57 1999 + +// This is a generated file - do not edit + +MEMORY +{ + ram : ORIGIN = 0, LENGTH = 0x00FD7000 + 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 +}
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_edb7211_stubs.mlt @@ -0,0 +1,13 @@ +version 0 +region ram 0 fd7000 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/edb7xxx/current/include/plf_stub.h @@ -0,0 +1,86 @@ +#ifndef CYGONCE_HAL_PLF_STUB_H +#define CYGONCE_HAL_PLF_STUB_H + +//============================================================================= +// +// plf_stub.h +// +// Platform header for GDB stub support. +// +//============================================================================= +//####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): jskov +// Contributors:jskov, gthomas +// Date: 1999-04-21 +// Purpose: Platform HAL stub support for Cirrus EDB7XXX boards. +// Usage: #include <cyg/hal/plf_stub.h> +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include <pkgconf/hal.h> +#include <pkgconf/hal_arm_edb7xxx.h> + +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +#include <cyg/infra/cyg_type.h> // CYG_UNUSED_PARAM + +#include <cyg/hal/arm_stub.h> // architecture stub support + +//---------------------------------------------------------------------------- +// Define serial stuff. + +extern void hal_edb7xxx_init_serial(void); +extern int hal_edb7xxx_get_char(void); +extern void hal_edb7xxx_put_char(int c); +extern int hal_edb7xxx_interruptible(int); + +#define HAL_STUB_PLATFORM_INIT_SERIAL() hal_edb7xxx_init_serial() +#define HAL_STUB_PLATFORM_GET_CHAR() hal_edb7xxx_get_char() +#define HAL_STUB_PLATFORM_PUT_CHAR(c) hal_edb7xxx_put_char((c)) +#define HAL_STUB_PLATFORM_SET_BAUD_RATE(baud) CYG_UNUSED_PARAM(int, (baud)) +#define HAL_STUB_PLATFORM_INTERRUPTIBLE (&hal_edb7xxx_interruptible) +#define HAL_STUB_PLATFORM_INIT_BREAK_IRQ() CYG_EMPTY_STATEMENT + +//---------------------------------------------------------------------------- +// Stub initializer. +#define HAL_STUB_PLATFORM_STUBS_INIT() CYG_EMPTY_STATEMENT + +//---------------------------------------------------------------------------- +// Reset. + +// Try and force the board into a reset state. Since this hardware requires +// a "wakeup" signal, we can't just use a watchdog/reset approach. +externC void reset_platform(void); +#define HAL_STUB_PLATFORM_RESET() reset_platform() + +#endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +//----------------------------------------------------------------------------- +#endif // CYGONCE_HAL_PLF_STUB_H +// End of plf_stub.h
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/edb7xxx/current/misc/PKGconf.mak @@ -0,0 +1,54 @@ +#=============================================================================== +# +# makefile +# +# hal/arm/edb7xxx/misc +# +#=============================================================================== +#####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#### +#=============================================================================== + +PACKAGE := hal_arm_edb7xxx +include ../../../../../pkgconf/pkgconf.mak +include ../../../../../pkgconf/system.mak + +ifdef CYG_HAL_STARTUP_STUBS +PROGS := gdb_module +OTHER_PROGS := gdb_module.bin +endif +ifdef CYG_HAL_STARTUP_RAM +PROGS := prog_flash +endif +WHEREAMI := misc + +include $(COMPONENT_REPOSITORY)/pkgconf/makrules.prv + +ifdef CYG_HAL_STARTUP_STUBS +gdb_module.bin: gdb_module.stamp + $(OBJCOPY) -O binary gdb_module$(EXEEXT) gdb_module.bin +endif + + + + +
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/edb7xxx/current/misc/STUBS_config @@ -0,0 +1,45 @@ +#! /bin/sh + +# usage: STUBS_config <repository> [edb7211 | cl7111] + +if [ "$2"x = "x" ]; then + EDB7xxx="edb7211" +else + EDB7xxx=$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=${EDB7xxx} --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-cygmon + +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 @@ + + }}CFG_DATA */ + +-#undef 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 + + /* + * NOTE: +END_OF_PATCH
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/edb7xxx/current/misc/gdb_module.c @@ -0,0 +1,64 @@ +//========================================================================== +// +// gdb_module.c +// +// Cirrus Logic EDB7XXX eval board GDB stubs (module wrapper) +// +//========================================================================== +//####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-05-11 +// Description: Cirrus Logic EDB7XXX FLASH module for eCos GDB stubs +//####DESCRIPTIONEND#### + +// +// This is the module 'wrapper' for the GDB stubs +// + +#include <pkgconf/hal.h> +#include <cyg/infra/cyg_type.h> +#include <cyg/hal/hal_stub.h> + +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +void cyg_start (void) +{ + for(;;) breakpoint(); +} +#else + +#include <cyg/infra/testcase.h> + +void cyg_start (void) +{ + CYG_TEST_INIT(); + CYG_TEST_PASS_FINISH("N/A: Stand-alone GDB stubs only"); +} +#endif + + +
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/edb7xxx/current/misc/prog_flash.c @@ -0,0 +1,312 @@ +//========================================================================== +// +// prog_flash.c +// +// Cirrus CL7211 eval board FLASH program tool +// +//========================================================================== +//####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-05-12 +// Description: Tool used to program onboard FLASH image +//####DESCRIPTIONEND#### + +// +// This program will program the FLASH on the CL7211 board from a fixed buffer +// + +#include <pkgconf/kernel.h> // Configuration header +#include <cyg/kernel/kapi.h> +#include <cyg/infra/diag.h> +#include <cyg/hal/hal_cache.h> + +#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; + +void identify_FLASH(void); +int write_flash(long *data, volatile long *mem); +int erase_sector(volatile long *mem); + +// Note: these are mapped addresses +// 0xE0000000 = ROM Bank 0 +// 0xF0000000 = ROM Bank 1 +volatile unsigned long *FLASH = (volatile unsigned long *)0xE0000000; + +long *flash_buffer = (long *)0x60000; +long *flash_buffer_end = (long *)0x64000; +long *ROM_address = (long *)0xE07E0000; + +// Adapted from Cirrus sample code +#define ATMEL_SEQ_ADD1 0x00015554>>2 +#define ATMEL_SEQ_ADD2 0x0000AAA8>>2 +#define ATMEL_START_CMD1 0xAAAAAAAA +#define ATMEL_START_CMD2 0x55555555 +#define ATMEL_ID_CMD 0x90909090 +#define ATMEL_PROG_CMD 0xA0A0A0A0 +#define ATMEL_ERASE_CMD 0x80808080 +#define ATMEL_SECTOR_ERASE_CMD 0x30303030 +#define ATMEL_STOP_CMD 0xF0F0F0F0 +#define ATMEL_BUSY_TOGGLE 0x00400040 +#define ATMEL_ERASE_TOGGLE 0x00440044 + +#define ATMEL_MANUF 0x1F +#define ATMEL_AT29C040_ID 0X5B +#define ATMEL_AT29C040A_ID 0XA4 +#define ATMEL_AT29C1024_ID 0X25 +#define ATMEL_SECTOR_SIZE 256 +#define ATMEL_MAX_SECTORS 2048 + +#define INTEL_MANUF 0x0089 +#define INTEL_STOP_CMD 0x00FF00FF +#define INTEL_PROG_CMD 0x00400040 +#define INTEL_ERASE_CMD 0x00200020 +#define INTEL_ERASE_CONFIRM 0x00D000D0 +#define INTEL_READ_STATUS 0x00700070 +#define INTEL_CLEAR_STATUS 0x00500050 +#define INTEL_SB_WSMS 0x00800080 // Write state machine = ready +#define INTEL_SB_ERASE_ERROR 0x00200020 // Erase failure +#define INTEL_SB_PROG_ERROR 0x00100010 // Programming failure + +#define ERASE_TIMEOUT 10 // seconds + +int manuf_code, device_code, sector_size, max_no_of_sectors, word_mode; + +// FUNCTIONS + +static void +cyg_test_exit(void) +{ + while (TRUE) ; +} + +static void +program_flash(void) +{ + diag_printf("PROGRAM FLASH here!\n"); + HAL_UCACHE_SYNC(); // ROM space is marked cacheable which causes problems! + HAL_UCACHE_DISABLE(); // So, just disable caches. + identify_FLASH(); + diag_printf("About to program FLASH using data at %x..%x\n", flash_buffer, flash_buffer_end); + diag_printf("*** Press RESET now to abort!\n"); + cyg_thread_delay(5*100); + diag_printf("\n"); + diag_printf("... Erase sector\n"); + if (erase_sector(ROM_address)) { + diag_printf("... Programming FLASH\n"); + while (flash_buffer < flash_buffer_end) { + if (!write_flash(flash_buffer++, ROM_address++)) break; + } + } + + // Exit Program Mode + switch (manuf_code) { + case ATMEL_MANUF: + FLASH[ATMEL_SEQ_ADD1] = ATMEL_START_CMD1; + FLASH[ATMEL_SEQ_ADD2] = ATMEL_START_CMD2; + FLASH[ATMEL_SEQ_ADD1] = ATMEL_STOP_CMD; + break; + case INTEL_MANUF: + FLASH[0] = INTEL_STOP_CMD; + break; + } + diag_printf("All done!\n"); + cyg_test_exit(); +} + +void +identify_FLASH(void ) +{ + // Enter Software Product Identification Mode + FLASH[ATMEL_SEQ_ADD1] = ATMEL_START_CMD1; + FLASH[ATMEL_SEQ_ADD2] = ATMEL_START_CMD2; + FLASH[ATMEL_SEQ_ADD1] = ATMEL_ID_CMD; + + // Wait at least 10ms + cyg_thread_delay(2); + + // Read Manufacturer and device code from the device + manuf_code = FLASH[0] >> 16; + device_code = FLASH[1] >> 16; + + diag_printf("manufacturer: 0x%04x, device: 0x%04x\n", manuf_code, device_code); + + // Exit Software Product Identification Mode + switch (manuf_code) { + case ATMEL_MANUF: + FLASH[ATMEL_SEQ_ADD1] = ATMEL_START_CMD1; + FLASH[ATMEL_SEQ_ADD2] = ATMEL_START_CMD2; + FLASH[ATMEL_SEQ_ADD1] = ATMEL_STOP_CMD; + break; + case INTEL_MANUF: + FLASH[0] = INTEL_STOP_CMD; + break; + default: + diag_printf("Unrecognized FLASH manufacturer - I give up!\n"); + cyg_test_exit(); + } +} + +void +spin(void) +{ + volatile int i; + for (i = 0; i < 100; i++) ; +} + +int +write_flash(long *data, volatile long *mem) +{ + long data1, data2; + long status; + int timer; + switch (manuf_code) { + case ATMEL_MANUF: + // Enter Program Mode + FLASH[ATMEL_SEQ_ADD1] = ATMEL_START_CMD1; + FLASH[ATMEL_SEQ_ADD2] = ATMEL_START_CMD2; + FLASH[ATMEL_SEQ_ADD1] = ATMEL_PROG_CMD; + // Send data to selected address + *mem = *data; + while (TRUE) { + data1 = *mem; // Read cell back twice + data2 = *mem; + // Bit 6 toggles between reads while programming in progress + if ((data1 & ATMEL_BUSY_TOGGLE) == (data2 & ATMEL_BUSY_TOGGLE)) break; + } + break; + case INTEL_MANUF: + // Clear current errors + FLASH[0] = INTEL_CLEAR_STATUS; + // Issue program command + FLASH[0] = INTEL_PROG_CMD; + // Send data to selected address + *mem = *data; + timer = 10000; + // Read the status register to wait for programming complete + do { + spin(); + status = FLASH[0]; + } while (((status & INTEL_SB_WSMS) != INTEL_SB_WSMS) && + (--timer > 0)); + // Check for errors + if (timer == 0) { + diag_printf("Programming at 0x%08x timed out - status: 0x%08x\n", mem, status); + } + if ((status & INTEL_SB_PROG_ERROR) != 0) { + diag_printf("Device reports programming error at 0x%08x - status: 0x%08x\n", mem, status); + } + // Exit program mode + FLASH[0] = INTEL_STOP_CMD; + break; + } + if (*mem != *data) { + diag_printf("Programming failed at 0x%08x - write: 0x%08x, read: 0x%08x\n", + mem, *data, *mem); + return (FALSE); + } + return (TRUE); +} + +int +erase_sector(volatile long *mem) +{ + long data1, data2; + long status; + int timer; + switch (manuf_code) { + case ATMEL_MANUF: + // Erase sector command + FLASH[ATMEL_SEQ_ADD1] = ATMEL_START_CMD1; + FLASH[ATMEL_SEQ_ADD2] = ATMEL_START_CMD2; + FLASH[ATMEL_SEQ_ADD1] = ATMEL_ERASE_CMD; + FLASH[ATMEL_SEQ_ADD1] = ATMEL_START_CMD1; + FLASH[ATMEL_SEQ_ADD2] = ATMEL_START_CMD2; + *mem = ATMEL_SECTOR_ERASE_CMD; + while (TRUE) { + data1 = *mem; // Read cell back twice + data2 = *mem; + // Bits 6+2 toggle between reads while programming in progress + if ((data1 & ATMEL_ERASE_TOGGLE) == (data2 & ATMEL_ERASE_TOGGLE)) break; + } + break; + case INTEL_MANUF: + // Clear current errors + FLASH[0] = INTEL_CLEAR_STATUS; + // Issue erase block command + FLASH[0] = INTEL_ERASE_CMD; + *mem = INTEL_ERASE_CONFIRM; + timer = ERASE_TIMEOUT*50; + // Read the status register while erase in progress + do { + cyg_thread_delay(2); + status = FLASH[0]; + } while (((status & INTEL_SB_WSMS) != INTEL_SB_WSMS) && + (--timer > 0)); + // Check for errors + if (timer == 0) { + diag_printf("Erase not complete after %d seconds - status: 0x%08x\n", + ERASE_TIMEOUT, status); + } + if ((status & INTEL_SB_ERASE_ERROR) != 0) { + diag_printf("Device reports erase error - status: 0x%08x\n", status); + } + // Exit erase mode + FLASH[0] = INTEL_STOP_CMD; + break; + } + if (*mem != 0xFFFFFFFF) { + diag_printf("Erase failed at 0x%08x - read: 0x%08x\n", + mem, *mem); + return (FALSE); + } + return (TRUE); +} + +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 + program_flash, // entry + 1, // index + "program_thread", // 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() +
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/edb7xxx/current/src/PKGconf.mak @@ -0,0 +1,42 @@ +#============================================================================== +# +# makefile +# +# hal/arm/edb7xxx/src +# +#============================================================================== +#####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#### +#============================================================================== + +PACKAGE := hal_arm_edb7xxx +include ../../../../../pkgconf/system.mak +include ../../../../../pkgconf/pkgconf.mak + +LIBRARY := libtarget.a +COMPILE := hal_diag.c plf_stub.c edb7xxx_misc.c +OTHER_OBJS := +OTHER_TARGETS := +OTHER_CLEAN := +OTHER_DEPS := + +include $(COMPONENT_REPOSITORY)/pkgconf/makrules.src
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/edb7xxx/current/src/edb7xxx_misc.c @@ -0,0 +1,377 @@ +//========================================================================== +// +// edb7xxx_misc.c +// +// HAL misc board support code for ARM EDB7XXX-1 +// +//========================================================================== +//####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-02-20 +// Purpose: HAL board support +// Description: Implementations of HAL board interfaces +// +//####DESCRIPTIONEND#### +// +//========================================================================*/ + +#include <pkgconf/hal.h> +#include <pkgconf/system.h> +#include CYGBLD_HAL_PLATFORM_H + +#include <cyg/infra/cyg_type.h> // base types +#include <cyg/infra/cyg_trac.h> // tracing macros +#include <cyg/infra/cyg_ass.h> // assertion macros + +#include <cyg/hal/hal_io.h> // IO macros +#include <cyg/hal/hal_arch.h> // Register state info +#include <cyg/hal/hal_diag.h> +#include <cyg/hal/hal_intr.h> // Interrupt names +#include <cyg/hal/hal_cache.h> +#include <cyg/hal/hal_edb7xxx.h> // Hardware definitions + +// #define CYGHWR_HAL_ARM_EDB7XXX_BATLOW +#ifdef CYGHWR_HAL_ARM_EDB7XXX_BATLOW +#include <cyg/hal/hal_intr.h> // HAL interrupt macros +#include <cyg/hal/drv_api.h> // HAL ISR support +static cyg_interrupt batlow_interrupt; +static cyg_handle_t batlow_interrupt_handle; +#endif + +#if (CYGHWR_HAL_ARM_EDB7XXX_PROCESSOR_CLOCK == 18432) +#define CPU_CLOCK 0 +#elif (CYGHWR_HAL_ARM_EDB7XXX_PROCESSOR_CLOCK == 36864) +#define CPU_CLOCK 1 +#elif (CYGHWR_HAL_ARM_EDB7XXX_PROCESSOR_CLOCK == 49152) +#define CPU_CLOCK 2 +#elif (CYGHWR_HAL_ARM_EDB7XXX_PROCESSOR_CLOCK == 73728) +#define CPU_CLOCK 3 +#else +#err Invalid CPU clock frequency +#endif + +static cyg_uint32 _period; + +// Use Timer/Counter #2 for system clock + +void hal_clock_initialize(cyg_uint32 period) +{ + volatile cyg_uint32 *syscon1 = (volatile cyg_uint32 *)SYSCON1; + volatile cyg_uint32 *tc2d = (volatile cyg_uint32 *)TC2D; + // Set timer to 512KHz, prescale mode + *syscon1 = (*syscon1 & ~(SYSCON1_TC2M|SYSCON1_TC2S)) | SYSCON1_TC2S | SYSCON1_TC2M; + // Initialize counter + *tc2d = period; + _period = period; +} + +// This routine is called during a clock interrupt. + +#ifdef CYGHWR_HAL_ARM_EDB7XXX_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_EDB7XXX_SOFTWARE_DRAM_REFRESH + +void hal_clock_reset(cyg_uint32 vector, cyg_uint32 period) +{ + volatile cyg_uint32 *tc2d = (volatile cyg_uint32 *)TC2D; + if (period != _period) { + *tc2d = period; + _period = period; + } +#ifdef CYGHWR_HAL_ARM_EDB7XXX_SOFTWARE_DRAM_REFRESH + do_DRAM_refresh(); +#else + // Temporary fix for DRAM starvation problem + if (CYGHWR_HAL_ARM_EDB7XXX_PROCESSOR_CLOCK > 37000) { + int i; + for (i = 0; i < (CYGHWR_HAL_ARM_EDB7XXX_PROCESSOR_CLOCK*2)/50; i++) ; // approx 200 us + } +#endif +} + +// Read the current value of the clock, returning the number of hardware "ticks" +// that have occurred (i.e. how far away the current value is from the start) + +void hal_clock_read(cyg_uint32 *pvalue) +{ + volatile cyg_int32 *tc2d = (volatile cyg_int32 *)TC2D; + static cyg_int32 clock_val; + clock_val = *tc2d & 0x0000FFFF; // Register has only 16 bits + if (clock_val & 0x00008000) clock_val |= 0xFFFF8000; // Extend sign bit + *pvalue = (cyg_uint32)(_period - clock_val); // 'clock_val' counts down and wraps +} + +// These tables map the various [soft] interrupt numbers onto the hardware + +static cyg_uint32 hal_interrupt_bitmap[] = { + 0, // CYGNUM_HAL_INTERRUPT_unused 0 + INTSR1_EXTFIQ, // CYGNUM_HAL_INTERRUPT_EXTFIQ 1 + INTSR1_BLINT, // CYGNUM_HAL_INTERRUPT_BLINT 2 + INTSR1_WEINT, // CYGNUM_HAL_INTERRUPT_WEINT 3 + INTSR1_MCINT, // CYGNUM_HAL_INTERRUPT_MCINT 4 + INTSR1_CSINT, // CYGNUM_HAL_INTERRUPT_CSINT 5 + INTSR1_EINT1, // CYGNUM_HAL_INTERRUPT_EINT1 6 + INTSR1_EINT2, // CYGNUM_HAL_INTERRUPT_EINT2 7 + INTSR1_EINT3, // CYGNUM_HAL_INTERRUPT_EINT3 8 + INTSR1_TC1OI, // CYGNUM_HAL_INTERRUPT_TC1OI 9 + INTSR1_TC2OI, // CYGNUM_HAL_INTERRUPT_TC2OI 10 + INTSR1_RTCMI, // CYGNUM_HAL_INTERRUPT_RTCMI 11 + INTSR1_TINT, // CYGNUM_HAL_INTERRUPT_TINT 12 + INTSR1_UTXINT1, // CYGNUM_HAL_INTERRUPT_UTXINT1 13 + INTSR1_URXINT1, // CYGNUM_HAL_INTERRUPT_URXINT1 14 + INTSR1_UMSINT, // CYGNUM_HAL_INTERRUPT_UMSINT 15 + INTSR1_SSEOTI, // CYGNUM_HAL_INTERRUPT_SSEOTI 16 + INTSR2_KBDINT, // CYGNUM_HAL_INTERRUPT_KBDINT 17 + INTSR2_SS2RX, // CYGNUM_HAL_INTERRUPT_SS2RX 18 + INTSR2_SS2TX, // CYGNUM_HAL_INTERRUPT_SS2TX 19 + INTSR2_UTXINT2, // CYGNUM_HAL_INTERRUPT_UTXINT2 20 + INTSR2_URXINT2, // CYGNUM_HAL_INTERRUPT_URXINT2 21 +#if defined(__EDB7211) + INTSR3_MCPINT // CYGNUM_HAL_INTERRUPT_MCPINT 22 +#endif +}; + +static cyg_uint32 hal_interrupt_mask_regmap[] = { + 0, // CYGNUM_HAL_INTERRUPT_unused 0 + INTMR1, // CYGNUM_HAL_INTERRUPT_EXTFIQ 1 + INTMR1, // CYGNUM_HAL_INTERRUPT_BLINT 2 + INTMR1, // CYGNUM_HAL_INTERRUPT_WEINT 3 + INTMR1, // CYGNUM_HAL_INTERRUPT_MCINT 4 + INTMR1, // CYGNUM_HAL_INTERRUPT_CSINT 5 + INTMR1, // CYGNUM_HAL_INTERRUPT_EINT1 6 + INTMR1, // CYGNUM_HAL_INTERRUPT_EINT2 7 + INTMR1, // CYGNUM_HAL_INTERRUPT_EINT3 8 + INTMR1, // CYGNUM_HAL_INTERRUPT_TC1OI 9 + INTMR1, // CYGNUM_HAL_INTERRUPT_TC2OI 10 + INTMR1, // CYGNUM_HAL_INTERRUPT_RTCMI 11 + INTMR1, // CYGNUM_HAL_INTERRUPT_TINT 12 + INTMR1, // CYGNUM_HAL_INTERRUPT_UTXINT1 13 + INTMR1, // CYGNUM_HAL_INTERRUPT_URXINT1 14 + INTMR1, // CYGNUM_HAL_INTERRUPT_UMSINT 15 + INTMR1, // CYGNUM_HAL_INTERRUPT_SSEOTI 16 + INTMR2, // CYGNUM_HAL_INTERRUPT_KBDINT 17 + INTMR2, // CYGNUM_HAL_INTERRUPT_SS2RX 18 + INTMR2, // CYGNUM_HAL_INTERRUPT_SS2TX 19 + INTMR2, // CYGNUM_HAL_INTERRUPT_UTXINT2 20 + INTMR2, // CYGNUM_HAL_INTERRUPT_URXINT2 21 +#if defined(__EDB7211) + INTMR3, // CYGNUM_HAL_INTERRUPT_MCPINT 22 +#endif +}; + +static cyg_uint32 hal_interrupt_clear_map[] = { + 0, // CYGNUM_HAL_INTERRUPT_unused 0 + 0, // CYGNUM_HAL_INTERRUPT_EXTFIQ 1 + BLEOI, // CYGNUM_HAL_INTERRUPT_BLINT 2 + TEOI, // CYGNUM_HAL_INTERRUPT_WEINT 3 + MCEOI, // CYGNUM_HAL_INTERRUPT_MCINT 4 + COEOI, // CYGNUM_HAL_INTERRUPT_CSINT 5 + 0, // CYGNUM_HAL_INTERRUPT_EINT1 6 + 0, // CYGNUM_HAL_INTERRUPT_EINT2 7 + 0, // CYGNUM_HAL_INTERRUPT_EINT3 8 + TC1EOI, // CYGNUM_HAL_INTERRUPT_TC1OI 9 + TC2EOI, // CYGNUM_HAL_INTERRUPT_TC2OI 10 + RTCEOI, // CYGNUM_HAL_INTERRUPT_RTCMI 11 + TEOI, // CYGNUM_HAL_INTERRUPT_TINT 12 + 0, // CYGNUM_HAL_INTERRUPT_UTXINT1 13 + 0, // CYGNUM_HAL_INTERRUPT_URXINT1 14 + UMSEOI, // CYGNUM_HAL_INTERRUPT_UMSINT 15 + 0, // CYGNUM_HAL_INTERRUPT_SSEOTI 16 + KBDEOI, // CYGNUM_HAL_INTERRUPT_KBDINT 17 + 0, // CYGNUM_HAL_INTERRUPT_SS2RX 18 + 0, // CYGNUM_HAL_INTERRUPT_SS2TX 19 + 0, // CYGNUM_HAL_INTERRUPT_UTXINT2 20 + 0, // CYGNUM_HAL_INTERRUPT_URXINT2 21 +#if defined(__EDB7211) + 0, // CYGNUM_HAL_INTERRUPT_MCPINT 22 +#endif +}; + +static struct regmap { + int first_int, last_int; + cyg_uint32 stat_reg, mask_reg; +} hal_interrupt_status_regmap[] = { + { CYGNUM_HAL_INTERRUPT_EXTFIQ, CYGNUM_HAL_INTERRUPT_SSEOTI, INTSR1, INTMR1}, + { CYGNUM_HAL_INTERRUPT_KBDINT, CYGNUM_HAL_INTERRUPT_URXINT2, INTSR2, INTMR2}, +#if defined(__EDB7211) + { CYGNUM_HAL_INTERRUPT_MCPINT, CYGNUM_HAL_INTERRUPT_MCPINT, INTSR3, INTMR3}, +#endif + { 0, 0, 0} +}; + +#ifdef CYGHWR_HAL_ARM_EDB7XXX_BATLOW +// This ISR is called when the battery low interrupt occurs +int +cyg_hal_batlow_isr(cyg_vector_t vector, cyg_addrword_t data, HAL_SavedRegisters *regs) +{ + diag_printf("Battery low\n"); + cyg_drv_interrupt_mask(CYGNUM_HAL_INTERRUPT_BLINT); + // Presumably, one would leave this masked until the battery changed + cyg_drv_interrupt_acknowledge(CYGNUM_HAL_INTERRUPT_BLINT); + return 0; // No need to run DSR +} +#endif + +// +// Early stage hardware initialization +// Some initialization has already been done before we get here. For now +// just set up the interrupt environment. + +void hal_hardware_init(void) +{ + volatile cyg_uint32 *icr; + int vector; + // Clear and initialize instruction cache + HAL_ICACHE_INVALIDATE_ALL(); + HAL_ICACHE_ENABLE(); + // Any hardware/platform initialization that needs to be done. + *(volatile cyg_uint32 *)INTMR1 = 0; + *(volatile cyg_uint32 *)INTMR2 = 0; +#if !defined(__CL7111) + *(volatile cyg_uint32 *)INTMR3 = 0; + *(volatile cyg_uint8 *)SYSCON3 = SYSCON3_CLKCTL(CPU_CLOCK); +#endif +#if 0 + diag_printf("IMR1: %04x, IMR2: %04x\n", + *(volatile cyg_uint32 *)INTMR1, + *(volatile cyg_uint32 *)INTMR2); + diag_printf("Memcfg1: %08x, Memcfg2: %08x, DRAM refresh: %08x\n", + *(volatile cyg_uint32 *)MEMCFG1, + *(volatile cyg_uint32 *)MEMCFG2, + *(volatile cyg_uint8 *)DRFPR); +#endif + // Reset all interrupt masks (disable all interrupt sources) + for (vector = CYGNUM_HAL_ISR_MIN; vector < CYGNUM_HAL_ISR_COUNT; vector++) { + icr = (volatile cyg_uint32 *)hal_interrupt_clear_map[vector]; + if (icr) *icr = 0; // Just a write clears the latch + } + // Turn on the DIAG LED to let the world know the board is alive + *(volatile unsigned char *)LEDFLSH = LEDFLSH_ENABLE|LEDFLSH_DUTY(16)|LEDFLSH_PERIOD(1); +#ifdef CYGHWR_HAL_ARM_EDB7XXX_BATLOW + cyg_drv_interrupt_create(CYGNUM_HAL_INTERRUPT_BLINT, + 99, // Priority - what goes here? + 0, // Data item passed to interrupt handler + cyg_hal_batlow_isr, + 0, + &batlow_interrupt_handle, + &batlow_interrupt); + cyg_drv_interrupt_attach(batlow_interrupt_handle); + cyg_drv_interrupt_unmask(CYGNUM_HAL_INTERRUPT_BLINT); +#endif +} + +// +// This routine is called to respond to a hardware interrupt (IRQ). It +// should interrogate the hardware and return the IRQ vector number. + +// This code is a little convoluted to keep it general while still avoiding +// reading the hardware a lot, since the interrupt status is split across +// three separate registers. + +int hal_spurious_ints; + +int hal_IRQ_handler(void) +{ + struct regmap *map = hal_interrupt_status_regmap; + cyg_uint32 stat; + int vector; + while (map->first_int) { + stat = *(volatile cyg_uint32 *)map->stat_reg & *(volatile cyg_uint32 *)map->mask_reg; + for (vector = map->first_int; vector <= map->last_int; vector++) { + if (stat & hal_interrupt_bitmap[vector]) return vector; + } + map++; // Next interrupt status register + } + hal_spurious_ints++; + return CYGNUM_HAL_INTERRUPT_unused; // This shouldn't happen! +} + +// +// Interrupt control +// + +void hal_interrupt_mask(int vector) +{ + volatile cyg_uint32 *imr; + imr = (volatile cyg_uint32 *)hal_interrupt_mask_regmap[vector]; + *imr &= ~hal_interrupt_bitmap[vector]; +} + +void hal_interrupt_unmask(int vector) +{ + volatile cyg_uint32 *imr; + imr = (volatile cyg_uint32 *)hal_interrupt_mask_regmap[vector]; + *imr |= hal_interrupt_bitmap[vector]; +} + +void hal_interrupt_acknowledge(int vector) +{ + // Some interrupt sources have a register for this. + volatile cyg_uint8 *icr; + icr = (volatile cyg_uint8 *)hal_interrupt_clear_map[vector]; + if (icr) { + *icr = 0; // Any data clears interrupt + } +} + +void hal_interrupt_configure(int vector, int level, int up) +{ + // No interrupts are configurable on this hardware +} + +void hal_interrupt_set_level(int vector, int level) +{ + // No interrupts are configurable on this hardware +} + +/*------------------------------------------------------------------------*/ +// EOF hal_misc.c
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/edb7xxx/current/src/hal_diag.c @@ -0,0 +1,272 @@ +/*============================================================================= +// +// hal_diag.c +// +// HAL diagnostic output 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): nickg, gthomas +// Contributors:nickg, gthomas +// Date: 1998-03-02 +// Purpose: HAL diagnostic output +// Description: Implementations of HAL diagnostic output support. +// +//####DESCRIPTIONEND#### +// +//===========================================================================*/ + +#include <pkgconf/hal.h> +#include <pkgconf/system.h> +#include CYGBLD_HAL_PLATFORM_H + +#include <cyg/infra/cyg_type.h> // base types +#include <cyg/infra/cyg_trac.h> // tracing macros +#include <cyg/infra/cyg_ass.h> // assertion macros + +#include <cyg/hal/hal_arch.h> // basic machine info +#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_INCLUDE_STUBS +#include <cyg/hal/drv_api.h> +#include <cyg/hal/hal_stub.h> // cyg_hal_gdb_interrupt +#endif +#include <cyg/hal/hal_edb7xxx.h> // Hardware definitions + +#if CYGHWR_HAL_ARM_EDB7XXX_DIAG_PORT == 0 +#define CYG_DIAG_DEV_DATA UARTDR1 +#define CYG_DIAG_DEV_BLCR UBLCR1 +#define CYG_DIAG_DEV_STAT SYSFLG1 +#define CYG_DIAG_DEV_CTRL SYSCON1 +#define CYG_DIAG_DEV_INT CYGNUM_HAL_INTERRUPT_URXINT1 +#else +#define CYG_DIAG_DEV_DATA UARTDR2 +#define CYG_DIAG_DEV_STAT SYSFLG2 +#define CYG_DIAG_DEV_CTRL SYSCON2 +#define CYG_DIAG_DEV_BLCR UBLCR2 +#define CYG_DIAG_DEV_INT CYGNUM_HAL_INTERRUPT_URXINT2 +#endif + +// Assumption: all diagnostic output must be GDB packetized unless this is a ROM (i.e. +// totally stand-alone) system. + +#ifdef CYG_HAL_STARTUP_STUBS +#define CYG_HAL_STARTUP_ROM +#undef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS +#endif + +#if defined(CYG_HAL_STARTUP_ROM) && !defined(CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS) +#define HAL_DIAG_USES_HARDWARE +#else +#if defined(CYGDGB_HAL_DIAG_DISABLE_GDB_PROTOCOL) +#define HAL_DIAG_USES_HARDWARE +#elif CYGHWR_HAL_ARM_EDB7XXX_DIAG_PORT != CYGHWR_HAL_ARM_EDB7XXX_GDB_PORT +#define HAL_DIAG_USES_HARDWARE +#endif +#endif + +/*---------------------------------------------------------------------------*/ +// EDB7XXX Serial Port (UARTx) for Debug + +// Actually send character down the wire +static void +hal_diag_write_char_serial(char c) +{ + cyg_uint32 stat; + // Wait for Tx FIFO not full + do { + stat = *(volatile cyg_uint32 *)CYG_DIAG_DEV_STAT; + } while ((stat & SYSFLG1_UTXFF1) != 0) ; + *(volatile cyg_uint8 *)CYG_DIAG_DEV_DATA = c; +} + +static bool +hal_diag_read_serial(char *c) +{ + long timeout = 1000000000; // A long time... + cyg_uint32 stat, val; + + do { + stat = *(volatile cyg_uint32 *)CYG_DIAG_DEV_STAT; + if (--timeout == 0) return false; + } while ((stat & SYSFLG1_URXFE1) != 0); + // Need to read 32 bits + val = *(volatile cyg_uint32 *)CYG_DIAG_DEV_DATA & 0xFF; + *c = val; + return true; +} + +#ifdef HAL_DIAG_USES_HARDWARE + +void hal_diag_init(void) +{ + static int init = 0; +#ifndef CYG_HAL_STARTUP_ROM + char *msg = "\n\rRAM EDB7XXX eCos\n\r"; +#endif + if (init++) return; + + // Enable port + *(volatile cyg_uint32 *)CYG_DIAG_DEV_CTRL |= SYSCON1_UART1EN; + // Configure + *(volatile cyg_uint32 *)CYG_DIAG_DEV_BLCR = + UART_BITRATE(CYGHWR_HAL_ARM_EDB7XXX_DIAG_BAUD) | + UBLCR_FIFOEN | UBLCR_WRDLEN8; +#ifndef CYG_HAL_STARTUP_ROM + while (*msg) hal_diag_write_char(*msg++); +#endif +} + +#ifndef CYG_HAL_STARTUP_ROM +#define DIAG_BUFSIZE 2048 +static char diag_buffer[DIAG_BUFSIZE]; +static int diag_bp = 0; +#endif + +void hal_diag_write_char(char c) +{ + hal_diag_init(); +#ifndef CYG_HAL_STARTUP_ROM + diag_buffer[diag_bp++] = c; + if (diag_bp == sizeof(diag_buffer)) diag_bp = 0; +#endif + hal_diag_write_char_serial(c); +} + +void hal_diag_read_char(char *c) +{ + while (!hal_diag_read_serial(c)) ; +} + +#else // HAL_DIAG relies on GDB + +// Initialize diag port +void hal_diag_init(void) +{ +#if 0 // Assume port is already setup + // Enable port + *(volatile cyg_uint32 *)CYG_DIAG_DEV_CTRL |= SYSCON1_UART1EN; + // Configure + *(volatile cyg_uint32 *)CYG_DIAG_DEV_BLCR = + UART_BITRATE(CYGHWR_HAL_ARM_EDB7XXX_DIAG_BAUD) | + UBLCR_FIFOEN | UBLCR_WRDLEN8; +#endif +} + +void +hal_diag_read_char(char *c) +{ + while (!hal_diag_read_serial(c)) ; +} + +void +hal_diag_write_char(char c) +{ + static char line[100]; + static int pos = 0; + + // No need to send CRs + if( c == '\r' ) return; + + line[pos++] = c; + + if( c == '\n' || pos == sizeof(line) ) + { + + CYG_INTERRUPT_STATE old; + + // Disable interrupts. This prevents GDB trying to interrupt us + // while we are in the middle of sending a packet. The serial + // 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) + { + static char hex[] = "0123456789ABCDEF"; + cyg_uint8 csum = 0; + int i; + char c1; + + hal_diag_write_char_serial('$'); + hal_diag_write_char_serial('O'); + csum += 'O'; + for( i = 0; i < pos; i++ ) + { + char ch = line[i]; + char h = hex[(ch>>4)&0xF]; + char l = hex[ch&0xF]; + hal_diag_write_char_serial(h); + hal_diag_write_char_serial(l); + csum += h; + csum += l; + } + hal_diag_write_char_serial('#'); + hal_diag_write_char_serial(hex[(csum>>4)&0xF]); + hal_diag_write_char_serial(hex[csum&0xF]); + + // Wait for the ACK character '+' from GDB here and handle + // receiving a ^C instead. This is the reason for this clause + // being a loop. + if (!hal_diag_read_serial(&c1)) + continue; // No response - try sending packet again + + if( c1 == '+' ) + break; // a good acknowledge + +#ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + cyg_drv_interrupt_acknowledge(CYG_DIAG_DEV_INT); + if( c1 == 3 ) { + // Ctrl-C: breakpoint. + cyg_hal_gdb_interrupt (__builtin_return_address(0)); + break; + } +#endif + // otherwise, loop round again + } + + 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 + + } +} +#endif + +/*---------------------------------------------------------------------------*/ +/* End of hal_diag.c */
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/edb7xxx/current/src/plf_stub.c @@ -0,0 +1,157 @@ +//============================================================================= +// +// plf_stub.c +// +// Platform specific code for GDB stub support. +// +//============================================================================= +//####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, jskov +// Date: 1999-04-21 +// Purpose: Platform specific code for GDB stub support. +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include <pkgconf/hal.h> +#include <pkgconf/system.h> +#include CYGBLD_HAL_PLATFORM_H + +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +#include <cyg/hal/hal_stub.h> + +#include <cyg/hal/hal_io.h> // HAL IO macros +#include <cyg/hal/hal_edb7xxx.h> // Hardware definitions +#ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT +#include <cyg/hal/hal_intr.h> // HAL interrupt macros +#include <cyg/hal/drv_api.h> // HAL ISR support +#endif + +#if CYGHWR_HAL_ARM_EDB7XXX_GDB_PORT == 0 +#define CYG_GDB_DEV_DATA UARTDR1 +#define CYG_GDB_DEV_BLCR UBLCR1 +#define CYG_GDB_DEV_STAT SYSFLG1 +#define CYG_GDB_DEV_CTRL SYSCON1 +#define CYG_GDB_DEV_INT CYGNUM_HAL_INTERRUPT_URXINT1 +#else +#define CYG_GDB_DEV_DATA UARTDR2 +#define CYG_GDB_DEV_STAT SYSFLG2 +#define CYG_GDB_DEV_CTRL SYSCON2 +#define CYG_GDB_DEV_BLCR UBLCR2 +#define CYG_GDB_DEV_INT CYGNUM_HAL_INTERRUPT_URXINT2 +#endif + +#ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT +static cyg_interrupt gdb_interrupt; +static cyg_handle_t gdb_interrupt_handle; +#endif + +//----------------------------------------------------------------------------- +#ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + +// This ISR is called only for serial receive interrupts. +int +cyg_hal_gdb_isr(cyg_vector_t vector, cyg_addrword_t data, HAL_SavedRegisters *regs) +{ + cyg_uint8 c; + + c = hal_edb7xxx_get_char(); // Fetch the character + if( 3 == c ) { // ^C + // Ctrl-C: set a breakpoint at PC so GDB will display the + // correct program context when stopping rather than the + // interrupt handler. + cyg_hal_gdb_interrupt (regs->pc); + cyg_drv_interrupt_acknowledge(CYG_GDB_DEV_INT); + } + return 0; // No need to run DSR +} + +int +hal_edb7xxx_interruptible(int state) +{ + if (state) { + cyg_drv_interrupt_unmask(CYG_GDB_DEV_INT); + } else { + cyg_drv_interrupt_mask(CYG_GDB_DEV_INT); + } + + return 0; +} +#endif + +// Initialize the current serial port. +void hal_edb7xxx_init_serial(void) +{ + // Enable port + *(volatile cyg_uint32 *)CYG_GDB_DEV_CTRL |= SYSCON1_UART1EN; + // Configure + *(volatile cyg_uint32 *)CYG_GDB_DEV_BLCR = + UART_BITRATE(CYGHWR_HAL_ARM_EDB7XXX_GDB_BAUD) | + UBLCR_FIFOEN | UBLCR_WRDLEN8; + +#ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + cyg_drv_interrupt_create(CYG_GDB_DEV_INT, + 99, // Priority - what goes here? + 0, // Data item passed to interrupt handler + cyg_hal_gdb_isr, + 0, + &gdb_interrupt_handle, + &gdb_interrupt); + cyg_drv_interrupt_attach(gdb_interrupt_handle); + cyg_drv_interrupt_unmask(CYG_GDB_DEV_INT); +#endif +} + +// Write C to the current serial port. +void hal_edb7xxx_put_char(int c) +{ + cyg_uint32 stat; + // Wait for Tx FIFO not full + do { + stat = *(volatile cyg_uint32 *)CYG_GDB_DEV_STAT; + } while ((stat & SYSFLG1_UTXFF1) != 0) ; + *(volatile cyg_uint32 *)CYG_GDB_DEV_DATA = c; +} + +// Read one character from the current serial port. +int hal_edb7xxx_get_char(void) +{ + cyg_uint32 stat, val; + do { + stat = *(volatile cyg_uint32 *)CYG_GDB_DEV_STAT; + } while ((stat & SYSFLG1_URXFE1) != 0); + // Need to read 32 bits + val = *(volatile cyg_uint32 *)CYG_GDB_DEV_DATA & 0xFF; + return val; +} + +#endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS +//----------------------------------------------------------------------------- +// End of plf_stub.c
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/edb7xxx/current/support/Makefile @@ -0,0 +1,13 @@ +# +# eCos support tools for EP7211 +# + +DL_FILES = dl_7211.o io.o +ALL := dl_7211 + + +all: $(ALL) + +dl_7211: $(DL_FILES) + $(CC) -o $@ $(DL_FILES) +
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/edb7xxx/current/support/bootcode.h @@ -0,0 +1,131 @@ +// THIS IS A GENERATED FILE...DO NOT EDIT! +char pcBoot[2048] = { + 20, 208, 159, 229, 1, 0, 160, 227, 203, 0, 0, 235, 180, 0, 0, 235, + 2, 1, 160, 227, 64, 8, 128, 229, 252, 255, 255, 234, 0, 8, 0, 16, + 2, 1, 160, 227, 4, 0, 45, 229, 0, 0, 157, 229, 64, 1, 144, 229, + 1, 5, 16, 227, 3, 0, 0, 10, 0, 0, 157, 229, 64, 1, 144, 229, + 1, 5, 16, 227, 251, 255, 255, 26, 0, 0, 157, 229, 128, 4, 144, 229, +255, 0, 0, 226, 4, 208, 141, 226, 14, 240, 160, 225, 255, 0, 0, 226, + 2, 17, 160, 227, 4, 16, 45, 229, 0, 16, 157, 229, 64, 17, 145, 229, + 2, 5, 17, 227, 3, 0, 0, 10, 0, 16, 157, 229, 64, 17, 145, 229, + 2, 5, 17, 227, 251, 255, 255, 26, 0, 16, 157, 229, 4, 208, 141, 226, +128, 4, 161, 229, 14, 240, 160, 225, 13, 192, 160, 225, 0, 216, 45, 233, + 4, 176, 76, 226, 2, 1, 160, 227, 4, 0, 45, 229, 219, 255, 255, 235, + 48, 0, 64, 226, 5, 0, 80, 227, 0, 241, 143, 144, 23, 0, 0, 234, + 6, 0, 0, 234, 8, 0, 0, 234, 10, 0, 0, 234, 12, 0, 0, 234, + 14, 0, 0, 234, 7, 8, 160, 227, 1, 0, 128, 226, 13, 0, 0, 234, + 23, 0, 160, 227, 7, 8, 128, 226, 10, 0, 0, 234, 11, 0, 160, 227, + 7, 8, 128, 226, 7, 0, 0, 234, 7, 0, 160, 227, 7, 8, 128, 226, + 4, 0, 0, 234, 5, 0, 160, 227, 7, 8, 128, 226, 1, 0, 0, 234, + 7, 8, 160, 227, 3, 0, 128, 226, 0, 16, 157, 229, 192, 4, 161, 229, +190, 255, 255, 235, 45, 0, 80, 227, 252, 255, 255, 26, 0, 168, 27, 233, + 13, 192, 160, 225, 0, 216, 45, 233, 4, 176, 76, 226, 183, 255, 255, 235, + 0, 16, 160, 225, 181, 255, 255, 235, 0, 20, 129, 225, 179, 255, 255, 235, + 0, 24, 129, 225, 177, 255, 255, 235, 0, 12, 129, 225, 0, 32, 144, 229, +255, 0, 2, 226, 188, 255, 255, 235, 255, 48, 160, 227, 34, 4, 3, 224, +185, 255, 255, 235, 34, 8, 3, 224, 183, 255, 255, 235, 34, 12, 160, 225, + 0, 104, 27, 233, 180, 255, 255, 234, 13, 192, 160, 225, 0, 216, 45, 233, + 4, 176, 76, 226, 161, 255, 255, 235, 0, 16, 160, 225, 159, 255, 255, 235, + 0, 20, 129, 225, 157, 255, 255, 235, 0, 24, 129, 225, 155, 255, 255, 235, + 0, 28, 129, 225, 153, 255, 255, 235, 0, 32, 160, 225, 151, 255, 255, 235, + 0, 36, 130, 225, 149, 255, 255, 235, 0, 40, 130, 225, 147, 255, 255, 235, + 0, 12, 130, 225, 0, 0, 129, 229, 0, 168, 27, 233, 13, 192, 160, 225, +240, 223, 45, 233, 4, 176, 76, 226, 8, 208, 77, 226, 3, 129, 160, 227, +138, 255, 255, 235, 0, 16, 160, 225, 136, 255, 255, 235, 0, 20, 129, 225, +134, 255, 255, 235, 0, 24, 129, 225, 132, 255, 255, 235, 0, 28, 129, 225, +130, 255, 255, 235, 0, 32, 160, 225, 128, 255, 255, 235, 0, 36, 130, 225, +126, 255, 255, 235, 0, 40, 130, 225, 124, 255, 255, 235, 0, 76, 130, 225, + 0, 32, 160, 227, 0, 0, 84, 227, 4, 0, 0, 154, 119, 255, 255, 235, + 2, 0, 200, 231, 1, 32, 130, 226, 4, 0, 82, 225, 250, 255, 255, 58, + 15, 34, 1, 226, 7, 114, 98, 226, 15, 98, 193, 227, 92, 0, 0, 235, + 0, 80, 160, 225, 0, 0, 80, 227, 15, 0, 0, 154, 4, 144, 134, 224, + 1, 0, 69, 226, 0, 160, 160, 225, 13, 32, 160, 225, 4, 16, 141, 226, + 85, 0, 0, 235, 4, 16, 157, 229, 1, 0, 89, 225, 3, 0, 0, 58, + 7, 0, 160, 225, 137, 0, 0, 235, 48, 0, 133, 226, 110, 255, 255, 235, + 10, 80, 160, 225, 0, 0, 90, 227, 240, 255, 255, 138, 0, 80, 160, 227, + 0, 0, 84, 227, 9, 0, 0, 154, 5, 32, 136, 224, 5, 16, 134, 224, + 7, 0, 160, 225, 1, 59, 160, 227, 147, 0, 0, 235, 44, 0, 160, 227, + 97, 255, 255, 235, 1, 91, 133, 226, 4, 0, 85, 225, 245, 255, 255, 58, +240, 175, 27, 233, 13, 192, 160, 225, 0, 216, 45, 233, 4, 176, 76, 226, + 63, 0, 160, 227, 88, 255, 255, 235, 72, 255, 255, 235, 66, 0, 80, 227, + 7, 0, 0, 10, 70, 0, 80, 227, 9, 0, 0, 10, 82, 0, 80, 227, + 5, 0, 0, 10, 87, 0, 80, 227, 244, 255, 255, 26, 153, 255, 255, 235, +242, 255, 255, 234, 91, 255, 255, 235, 240, 255, 255, 234, 127, 255, 255, 235, +238, 255, 255, 234, 168, 255, 255, 235, 236, 255, 255, 234, 2, 17, 160, 227, + 0, 32, 160, 227, 2, 49, 160, 227, 1, 58, 131, 226, 128, 34, 129, 229, +128, 34, 131, 229, 128, 35, 129, 229, 192, 35, 129, 229, 128, 192, 160, 227, + 2, 201, 140, 226, 128, 193, 129, 229, 129, 192, 160, 227, 0, 0, 80, 227, + 64, 39, 129, 229, 0, 194, 129, 229, 2, 5, 160, 3, 0, 1, 145, 21, +255, 4, 192, 19, 127, 8, 192, 19, 254, 12, 192, 19, 255, 0, 192, 19, + 0, 1, 129, 229, 5, 0, 160, 227, 0, 1, 163, 229, 64, 32, 193, 229, +254, 0, 160, 227, 65, 0, 193, 229, 67, 32, 193, 229, 15, 0, 160, 227, +192, 0, 193, 229, 1, 32, 193, 5, 1, 0, 209, 21, 4, 0, 0, 18, + 1, 0, 193, 21, 3, 32, 193, 229, 2, 0, 160, 227, 128, 0, 193, 229, + 14, 240, 160, 225, 71, 0, 160, 227, 14, 240, 160, 225, 0, 0, 80, 227, + 1, 0, 0, 186, 71, 0, 80, 227, 1, 0, 0, 186, 0, 0, 160, 227, + 14, 240, 160, 225, 8, 0, 80, 227, 0, 7, 160, 177, 0, 0, 129, 181, + 1, 9, 160, 179, 4, 0, 0, 186, 242, 56, 160, 227, 255, 52, 131, 226, +128, 8, 131, 224, 0, 0, 129, 229, 2, 8, 160, 227, 0, 0, 130, 229, + 1, 0, 160, 227, 14, 240, 160, 225, 4, 0, 45, 229, 128, 16, 160, 227, + 2, 21, 129, 226, 0, 0, 157, 229, 0, 0, 144, 229, 255, 4, 192, 227, +127, 8, 192, 227, 255, 12, 192, 227, 127, 0, 192, 227, 1, 0, 80, 225, +247, 255, 255, 26, 80, 16, 160, 227, 5, 22, 129, 226, 0, 0, 157, 229, + 4, 208, 141, 226, 0, 16, 128, 229, 14, 240, 160, 225, 13, 192, 160, 225, + 48, 216, 45, 233, 4, 176, 76, 226, 0, 64, 160, 225, 8, 208, 77, 226, + 0, 80, 160, 227, 210, 255, 255, 235, 0, 0, 80, 227, 10, 0, 0, 218, + 13, 32, 160, 225, 4, 16, 141, 226, 5, 0, 160, 225, 206, 255, 255, 235, + 4, 0, 160, 225, 4, 16, 157, 229, 4, 0, 0, 235, 1, 80, 133, 226, +199, 255, 255, 235, 5, 0, 80, 225, 244, 255, 255, 202, 48, 168, 27, 233, + 13, 192, 160, 225, 0, 216, 45, 233, 4, 176, 76, 226, 4, 0, 45, 229, + 0, 0, 81, 227, 15, 0, 0, 186, 2, 5, 81, 227, 13, 0, 0, 170, + 32, 48, 160, 227, 2, 54, 131, 226, 65, 17, 160, 225, 0, 32, 157, 229, + 1, 49, 130, 231, 208, 32, 160, 227, 13, 38, 130, 226, 0, 48, 157, 229, + 1, 33, 131, 231, 199, 255, 255, 235, 255, 0, 160, 227, 255, 8, 128, 226, + 0, 16, 157, 229, 0, 0, 129, 229, 0, 168, 27, 233, 13, 192, 160, 225, +240, 216, 45, 233, 4, 176, 76, 226, 0, 80, 160, 225, 1, 64, 160, 225, + 4, 0, 45, 229, 0, 0, 84, 227, 4, 0, 0, 186, 2, 5, 84, 227, + 2, 0, 0, 170, 3, 0, 132, 224, 2, 5, 80, 227, 0, 0, 0, 218, +240, 168, 27, 233, 0, 96, 160, 227, 0, 0, 83, 227, 13, 0, 0, 218, + 64, 112, 160, 227, 1, 117, 135, 226, 0, 0, 157, 229, 0, 112, 128, 229, + 6, 16, 146, 231, 6, 0, 132, 224, 64, 193, 160, 225, 0, 0, 157, 229, + 12, 17, 128, 231, 5, 0, 160, 225, 166, 255, 255, 235, 4, 96, 134, 226, + 3, 0, 86, 225, 243, 255, 255, 186, 255, 16, 160, 227, 255, 24, 129, 226, + 0, 0, 157, 229, 0, 16, 128, 229, 232, 255, 255, 234, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +};
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/edb7xxx/current/support/dl_edb7xxx.c @@ -0,0 +1,411 @@ +//**************************************************************************** +// +// DOWNLOAD.C - Automates the download of code into the flash on the +// CL-PS7111-DK-D2 board. +// +// Copyright (c) 1999 Cirrus Logic, Inc. +// +// Adapted for Linux by Cygnus Solutions, Inc. +// Renamed 'dl_edb7xxx' to indicate support for all Cirrus Logic eval boards. +// +//**************************************************************************** +#include <stdio.h> +#include "bootcode.h" + +#define DEFAULT_PORT "/dev/ttyS1" +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: %s <filename> {<baud rate> {<comm port>}}\n", argv[0]); + 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: %d(%s).\n", lRate, argv[2]); + 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: %s\n", argv[3]); + 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); + + // + // Get the baud rate divisor for the given baud rate. + // + SetBaud(lPort, 9600); + switch(lRate) + { + case 9600: + { + cRateChar = '0'; + break; + } + + case 19200: + { + cRateChar = '1'; + break; + } + + case 28800: + { + cRateChar = '2'; + break; + } + + case 38400: + { + cRateChar = '3'; + break; + } + + case 57600: + { + cRateChar = '4'; + break; + } + + case 115200: + { + cRateChar = '5'; + break; + } + } + + // + // 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..."); + + // + // Wait until we read a '<' from the comm port. + // + WaitFor(lPort, '<'); + + // + // Tell the user that we are downloading the boot code. + // + fprintf(stderr, "\nDownloading boot code...( 0%%)"); + + // + // Write the boot code to the comm port. + // + for(lIdx = 0; lIdx < 2048; lIdx++) + { + // + // Write this character. + // + SendChar(lPort, pcBoot[lIdx]); + + // + // Periodically print out our progress. + // + if((lIdx & 127) == 127) + { + fprintf(stderr, "\b\b\b\b\b%3d%%)", ((lIdx + 1) * 100) / 2048); + } + } + + // + // Wait until we read a '>' from the comm port. + // + WaitFor(lPort, '>'); + + // + // Wait until we read a '?' from the comm port. + // + WaitFor(lPort, '?'); + + // + // Tell the boot code to switch to the desired baud rate. + // + SendChar(lPort, 'B'); + SendChar(lPort, cRateChar); + + // + // Wait until the output buffer is empty. + // + WaitForOutputEmpty(); + + // + // Switch our baud rate to the desired rate. + // + SetBaud(lPort, lRate); + + // + // 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 program flash command. + // + SendChar(lPort, 'F'); + + // + // We always program the flash at location 0. + // + SendChar(lPort, 0); + SendChar(lPort, 0); + SendChar(lPort, 0); + SendChar(lPort, 0); + + // + // 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); + } + } + + // + // Tell the user that we are erasing the flash. + // + fprintf(stderr, "\nErasing the flash...( 0%%)"); + + // + // Wait until the flash has been erased. + // + cFirstChar = cChar = ReceiveChar(lPort); + while(cChar != '1') + { + // + // Print out our progress. + // + fprintf(stderr, "\b\b\b\b\b%3d%%)", + ((cFirstChar - cChar + 1) * 100) / (cFirstChar - '0')); + + // + // Read a character from the boot code. + // + cChar = ReceiveChar(lPort); + } + + // + // Tell the user that we are programming the flash. + // + fprintf(stderr, "\nProgramming the flash...( 0%%)"); + + // + // Wait until the flash has been programmed. + // + lIdx = 0; + while(1) + { + // + // Read a character from the boot code. + // + cChar = ReceiveChar(lPort); + + // + // If the character is a '?', then we are done. + // + if(cChar == '?') + { + break; + } + + // + // Print out our progress. + // + fprintf(stderr, "\b\b\b\b\b%3d%%)", + (++lIdx * 100) / ((lFileSize + 1023) / 1024)); + } + + // + // Tell the user we are done. + // + fprintf(stderr, "\nSuccessfully downloaded '%s'.\n", argv[1]); +} +
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/edb7xxx/current/support/io.c @@ -0,0 +1,151 @@ +//========================================================================== +// +// io.c +// +// Linux I/O support for Cirrus Logic EDB7xxx eval board tools +// +//========================================================================== +//####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-06-16 +// Description: Linux I/O support for Cirrus Logic EDB7xxx FLASH tools +//####DESCRIPTIONEND#### + +// +// io.c - I/O functions +// + +#include <stdio.h> +#include <sys/ioctl.h> +#include <fcntl.h> +#include <termios.h> + +char ReceiveChar(long port) +{ + char buf; + int res; + // Port is in non-blocking mode, this needs to have a loop + do { + res = read(port, &buf, 1); + } while (res < 0); +// printf("Read: %c\n", buf); + return buf; +} + +static void +uspin(int len) +{ + volatile int cnt; + while (--len >= 0) { + for (cnt = 1; cnt < 2000; cnt++) ; + } +} + +void SendChar(long port, char ch) +{ + char buf = ch; + write(port, &buf, 1); +// printf("Send: %x\n", ch); +// usleep(100); + uspin(100); +} + +void SetBaud(long port, long reqRate) +{ + struct termios buf; + int rate; + + // Get original configuration + if (tcgetattr(port, &buf)) { + fprintf(stderr, "Can't get port config\n"); + return; + } + + // Reset to raw. + buf.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP + |INLCR|IGNCR|ICRNL|IXON); + buf.c_oflag &= ~OPOST; + buf.c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN); + buf.c_cflag &= ~(CSIZE|PARENB); + buf.c_cflag |= CS8; + + // Set baud rate. + switch (reqRate) { + case 9600: + rate = B9600; + break; + case 38400: + rate = B38400; + break; + case 57600: + rate = B57600; + break; + case 115200: + rate = B115200; + break; + } + cfsetispeed(&buf, rate); + cfsetospeed(&buf, rate); + + // Set data bits. + buf.c_cflag &= ~CSIZE; + buf.c_cflag |= CS8; + + // Set stop bits. + buf.c_cflag &= ~CSTOPB; // One stop + + // Set parity. + buf.c_cflag &= ~(PARENB | PARODD); // no parity. + + // Set the new settings + if (tcsetattr(port, TCSADRAIN, &buf)) { + fprintf(stderr, "Error: tcsetattr\n"); + return; + } + + tcdrain(port); + usleep(1000000/10*2); +} + +int CharReady(long port) +{ + int n, res; + res = ioctl(port, FIONREAD, &n); + return n; // Non-zero if characters ready to read +} + +void WaitForOutputEmpty(long port) +{ + usleep(2000000); +} + +long OpenPort(char *name) +{ + int fd; + fd = open(name, O_RDWR|O_NONBLOCK); + return fd; +}
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/edb7xxx/current/tests/PKGconf.mak @@ -0,0 +1,39 @@ +#=============================================================================== +# +# makefile +# +# kernel/tests +# +#=============================================================================== +#####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#### +#=============================================================================== + +PACKAGE := hal_arm_edb7xxx +include ../../../../../pkgconf/pkgconf.mak + +TESTS := dram_test + +include $(COMPONENT_REPOSITORY)/pkgconf/makrules.tst + + +
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/edb7xxx/current/tests/dram_test.c @@ -0,0 +1,316 @@ +//========================================================================== +// +// dram_test.c +// +// eCos generic 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_arch.h> +#include CYGHWR_MEMORY_LAYOUT_H // Memory layout + +#ifndef FALSE +#define FALSE 0 +#define TRUE 1 +#endif + +#define STACK_SIZE CYGNUM_HAL_STACK_SIZE_MINIMUM +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 = CYGMEM_REGION_ram+CYGMEM_REGION_ram_SIZE; + start_DRAM = ((cyg_uint32)&_end + 0x00000FFF) & 0xFFFFF000; + 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/pid/current/ChangeLog +++ b/packages/hal/arm/pid/current/ChangeLog @@ -1,3 +1,33 @@ +1999-11-09 Gary Thomas <gthomas@cygnus.co.uk> + + * include/pkgconf/mlt_arm_pidBE_ram.h: + * include/pkgconf/mlt_arm_pidBE_rom.h: + * include/pkgconf/mlt_arm_pidTBE_ram.h: + * include/pkgconf/mlt_arm_pidTBE_rom.h: + * include/pkgconf/mlt_arm_pidT_ram.h: + * include/pkgconf/mlt_arm_pidT_rom.h: + * include/pkgconf/mlt_arm_pid_ram.h: + * include/pkgconf/mlt_arm_pid_rom.h: New file(s). + + * 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_pidTBE_ram.ldi: + * include/pkgconf/mlt_arm_pidTBE_ram.mlt: + * include/pkgconf/mlt_arm_pidTBE_rom.ldi: + * include/pkgconf/mlt_arm_pidTBE_rom.mlt: + * include/pkgconf/mlt_arm_pidT_ram.ldi: + * include/pkgconf/mlt_arm_pidT_ram.mlt: + * include/pkgconf/mlt_arm_pidT_rom.ldi: + * include/pkgconf/mlt_arm_pidT_rom.mlt: + * include/pkgconf/mlt_arm_pid_ram.ldi: + * include/pkgconf/mlt_arm_pid_ram.mlt: + * include/pkgconf/mlt_arm_pid_rom.ldi: + * include/pkgconf/mlt_arm_pid_rom.mlt: Update with correct memory layout. + + * src/hal_diag.c: Honor GDB_DISABLE option. + 1999-10-29 Jesper Skov <jskov@cygnus.co.uk> * misc/PKGconf.mak: Also generate stripped .img files.
--- a/packages/hal/arm/pid/current/include/pkgconf/mlt_arm_pid9_stubs.mlt +++ b/packages/hal/arm/pid/current/include/pkgconf/mlt_arm_pid9_stubs.mlt @@ -1,4 +1,4 @@ -version 0 +!version 0 region ram 800 3800 0 ! region rom 4000000 80000 1 ! section data 0 1 1 1 1 1 0 0 800 bss !
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/pid/current/include/pkgconf/mlt_arm_pidBE_ram.h @@ -0,0 +1,13 @@ +// eCos memory layout - Tue Nov 09 06:57:37 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 (0x80000) +#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 (0x4000)
--- a/packages/hal/arm/pid/current/include/pkgconf/mlt_arm_pidBE_ram.ldi +++ b/packages/hal/arm/pid/current/include/pkgconf/mlt_arm_pidBE_ram.ldi @@ -1,40 +1,17 @@ -//=========================================================================== -// -// 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#### -//=========================================================================== +// eCos memory layout - Tue Nov 09 06:57:37 1999 + +// This is a generated file - do not edit MEMORY { - ram : ORIGIN = 0x00004000, LENGTH = 0x7C000 + ram : ORIGIN = 0, LENGTH = 0x80000 } SECTIONS { SECTIONS_BEGIN - SECTION_rom_vectors (ram, 0x4000, LMA_EQ_VMA) + __reserved = 0; . = __reserved + 0x4000; + SECTION_rom_vectors (ram, ALIGN (0x1), 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)
--- a/packages/hal/arm/pid/current/include/pkgconf/mlt_arm_pidBE_ram.mlt +++ b/packages/hal/arm/pid/current/include/pkgconf/mlt_arm_pidBE_ram.mlt @@ -1,6 +1,7 @@ version 0 -region ram 4000 7c000 0 ! -section rom_vectors 0 1 0 1 1 1 1 1 4000 4000 text text ! +region ram 0 80000 0 ! +section reserved 4000 1 0 0 1 1 1 1 0 0 rom_vectors rom_vectors ! +section rom_vectors 0 1 0 1 0 1 0 1 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 !
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/pid/current/include/pkgconf/mlt_arm_pidBE_rom.h @@ -0,0 +1,16 @@ +// eCos memory layout - Tue Nov 09 06:59:24 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 (0x80000) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#define CYGMEM_REGION_rom (0x4000000) +#define CYGMEM_REGION_rom_SIZE (0x80000) +#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 (0x800)
--- a/packages/hal/arm/pid/current/include/pkgconf/mlt_arm_pidBE_rom.ldi +++ b/packages/hal/arm/pid/current/include/pkgconf/mlt_arm_pidBE_rom.ldi @@ -1,37 +1,11 @@ -//=========================================================================== -// -// 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#### -//=========================================================================== +// eCos memory layout - Tue Nov 09 06:59:24 1999 -// Modified for ARM/PID7T, generic ROM image +// This is a generated file - do not edit MEMORY { - rom : ORIGIN = 0x04000000, LENGTH = 0x80000 - ram : ORIGIN = 0x00000800, LENGTH = 0x7F800 + ram : ORIGIN = 0, LENGTH = 0x80000 + rom : ORIGIN = 0x4000000, LENGTH = 0x80000 } SECTIONS @@ -44,8 +18,8 @@ SECTIONS 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)) + __reserved = 0; . = __reserved + 0x800; + SECTION_data (ram, ALIGN (0x1), FOLLOWING (.gcc_except_table)) SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) SECTIONS_END } -
--- a/packages/hal/arm/pid/current/include/pkgconf/mlt_arm_pidBE_rom.mlt +++ b/packages/hal/arm/pid/current/include/pkgconf/mlt_arm_pidBE_rom.mlt @@ -1,7 +1,8 @@ version 0 -region ram 800 7f800 0 ! +region ram 0 80000 0 ! region rom 4000000 80000 1 ! -section data 0 1 1 1 1 1 0 0 800 bss ! +section reserved 800 1 0 0 1 1 1 0 0 0 data ! +section data 0 1 1 1 0 1 0 0 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 !
--- a/packages/hal/arm/pid/current/include/pkgconf/mlt_arm_pidBE_stubs.ldi +++ b/packages/hal/arm/pid/current/include/pkgconf/mlt_arm_pidBE_stubs.ldi @@ -20,7 +20,7 @@ // 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. +// by Cygnus are Copyright (C) 1998,1999 Cygnus Solutions. All Rights reserved. // ------------------------------------------- // //####COPYRIGHTEND####
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/pid/current/include/pkgconf/mlt_arm_pid_ram.h @@ -0,0 +1,13 @@ +// eCos memory layout - Tue Nov 09 06:57:37 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 (0x80000) +#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 (0x4000)
--- a/packages/hal/arm/pid/current/include/pkgconf/mlt_arm_pid_ram.ldi +++ b/packages/hal/arm/pid/current/include/pkgconf/mlt_arm_pid_ram.ldi @@ -1,40 +1,17 @@ -//=========================================================================== -// -// 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#### -//=========================================================================== +// eCos memory layout - Tue Nov 09 06:57:37 1999 + +// This is a generated file - do not edit MEMORY { - ram : ORIGIN = 0x00004000, LENGTH = 0x7C000 + ram : ORIGIN = 0, LENGTH = 0x80000 } SECTIONS { SECTIONS_BEGIN - SECTION_rom_vectors (ram, 0x4000, LMA_EQ_VMA) + __reserved = 0; . = __reserved + 0x4000; + SECTION_rom_vectors (ram, ALIGN (0x1), 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)
--- a/packages/hal/arm/pid/current/include/pkgconf/mlt_arm_pid_ram.mlt +++ b/packages/hal/arm/pid/current/include/pkgconf/mlt_arm_pid_ram.mlt @@ -1,6 +1,7 @@ version 0 -region ram 4000 7c000 0 ! -section rom_vectors 0 1 0 1 1 1 1 1 4000 4000 text text ! +region ram 0 80000 0 ! +section reserved 4000 1 0 0 1 1 1 1 0 0 rom_vectors rom_vectors ! +section rom_vectors 0 1 0 1 0 1 0 1 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 !
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/pid/current/include/pkgconf/mlt_arm_pid_rom.h @@ -0,0 +1,16 @@ +// eCos memory layout - Tue Nov 09 06:59:24 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 (0x80000) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#define CYGMEM_REGION_rom (0x4000000) +#define CYGMEM_REGION_rom_SIZE (0x80000) +#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 (0x800)
--- a/packages/hal/arm/pid/current/include/pkgconf/mlt_arm_pid_rom.ldi +++ b/packages/hal/arm/pid/current/include/pkgconf/mlt_arm_pid_rom.ldi @@ -1,37 +1,11 @@ -//=========================================================================== -// -// 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#### -//=========================================================================== +// eCos memory layout - Tue Nov 09 06:59:24 1999 -// Modified for ARM/PID7T, generic ROM image +// This is a generated file - do not edit MEMORY { - rom : ORIGIN = 0x04000000, LENGTH = 0x80000 - ram : ORIGIN = 0x00000800, LENGTH = 0x7F800 + ram : ORIGIN = 0, LENGTH = 0x80000 + rom : ORIGIN = 0x4000000, LENGTH = 0x80000 } SECTIONS @@ -44,8 +18,8 @@ SECTIONS 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)) + __reserved = 0; . = __reserved + 0x800; + SECTION_data (ram, ALIGN (0x1), FOLLOWING (.gcc_except_table)) SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) SECTIONS_END } -
--- a/packages/hal/arm/pid/current/include/pkgconf/mlt_arm_pid_rom.mlt +++ b/packages/hal/arm/pid/current/include/pkgconf/mlt_arm_pid_rom.mlt @@ -1,7 +1,8 @@ version 0 -region ram 800 7f800 0 ! +region ram 0 80000 0 ! region rom 4000000 80000 1 ! -section data 0 1 1 1 1 1 0 0 800 bss ! +section reserved 800 1 0 0 1 1 1 0 0 0 data ! +section data 0 1 1 1 0 1 0 0 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 !
--- a/packages/hal/arm/pid/current/src/hal_diag.c +++ b/packages/hal/arm/pid/current/src/hal_diag.c @@ -58,7 +58,7 @@ // Assumption: all diagnostic output must be GDB packetized unless this is a ROM (i.e. // totally stand-alone) system. -#ifdef CYG_HAL_STARTUP_ROM +#if defined(CYG_HAL_STARTUP_ROM) || defined(CYGDBG_HAL_DIAG_DISABLE_GDB_PROTOCOL) #define HAL_DIAG_USES_HARDWARE #endif
--- a/packages/hal/common/current/ChangeLog +++ b/packages/hal/common/current/ChangeLog @@ -1,3 +1,15 @@ +1999-11-15 Jonathan Larmour <jlarmour@cygnus.co.uk> + + * include/dbg-threads-api.h, include/generic-stub.h, + include/hal_stub.h: Add comments to explain these header files should + not be included by user programs + +1999-11-09 Gary Thomas <gthomas@cygnus.co.uk> + + * include/pkgconf/hal.h (CYGDBG_HAL_DIAG_DISABLE_GDB_PROTOCOL): + New option which [explicitly] controls use of GDB protocol + for diagnostic I/O. + 1999-10-29 Gary Thomas <gthomas@cygnus.co.uk> * tests/PKGconf.mak: Add cache tests for Cirrus Logic boards.
--- a/packages/hal/common/current/include/dbg-threads-api.h +++ b/packages/hal/common/current/include/dbg-threads-api.h @@ -1,8 +1,10 @@ #if !defined(DBG_THREADS_API_INCLUDED) #define DBG_THREADS_API_INCLUDED 1 /* These are the calls used to extract operating system specific information - used in supporting thread aware debugging. - The Operating Environment being debugged needs to supply these functions. + * used in supporting thread aware debugging. + * The Operating Environment being debugged needs to supply these functions. + * + * This header is not to be included by user code */ /*
--- a/packages/hal/common/current/include/generic-stub.h +++ b/packages/hal/common/current/include/generic-stub.h @@ -17,6 +17,12 @@ * Code is Cygnus. Portions created by Cygnus are Copyright (C) 1998, 1999 * Cygnus Solutions. All Rights Reserved. */ + +/* This header is not to be included by user code, and is only placed in a + * publically accessible directory so that platform stub packages + * are able to include it if required. + */ + #ifndef GENERIC_STUB_H #define GENERIC_STUB_H
--- a/packages/hal/common/current/include/hal_stub.h +++ b/packages/hal/common/current/include/hal_stub.h @@ -38,7 +38,12 @@ // Date: 1999-02-12 // Purpose: Generic HAL stub header. // Usage: #include <cyg/hal/hal_stub.h> -// +// Description: This header is included by generic-stub.c to provide an +// interface to the eCos-specific stub implementation. It is +// not to be included by user code, and is only placed in a +// publically accessible directory so that platform stub packages +// are able to include it if required. +// //####DESCRIPTIONEND#### // //=============================================================================
--- a/packages/hal/common/current/include/pkgconf/hal.h +++ b/packages/hal/common/current/include/pkgconf/hal.h @@ -109,8 +109,25 @@ code can be eliminated." } + cdl_option CYGDBG_HAL_DIAG_DISABLE_GDB_PROTOCOL { + display "Disable GDB protocol for diagnostic output" + parent CYGPKG_HAL + description " + This option forces diagnostic output to not use the GDB + protocol. Most programs will use the GDB protocol for + diagnostic I/O because of the environment. This option + allows for an explicit override in these cases." + } + }}CFG_DATA */ #define CYGFUN_HAL_COMMON_KERNEL_SUPPORT +#undef CYGDBG_HAL_DIAG_DISABLE_GDB_PROTOCOL + +#ifdef CYGDBG_HAL_DIAG_DISABLE_GDB_PROTOCOL +#if !defined(CYGPKG_HAL_ARM) +#err GDB protocol cannot be explicitly disabled for this platform. +#endif +#endif /* {{CFG_DATA
--- a/packages/hal/common/current/tests/PKGconf.mak +++ b/packages/hal/common/current/tests/PKGconf.mak @@ -44,7 +44,7 @@ TESTS += cache endif -ifdef CYGPKG_HAL_ARM_CL7211 +ifdef CYGPKG_HAL_ARM_EDB7XXX TESTS += cache endif
--- a/packages/io/serial/current/include/pkgconf/io_serial.h +++ b/packages/io/serial/current/include/pkgconf/io_serial.h @@ -384,102 +384,103 @@ /* ---------------------------------------------------------------------------- {{CFG_DATA - cdl_component CYGPKG_IO_SERIAL_ARM_CL7211 { - display "ARM CL7x11 (CL7111/CL7211) serial device drivers" + cdl_component CYGPKG_IO_SERIAL_ARM_EDB7XXX { + display "Cirrus Logic EDB7xxx serial device drivers" type bool requires CYGPKG_IO_SERIAL - parent CYGPKG_HAL_ARM_CL7211 + parent CYGPKG_HAL_ARM_EDB7XXX description " - This option enables the serial device drivers for the ARM CL7x11." + This option enables the serial device drivers for the Cirrus Logic CL-PS7111 + and EDB7xxx evaluation boards." doc ref/ecos-ref/ecos-device-drivers.html } - cdl_component CYGPKG_IO_SERIAL_ARM_CL7211_SERIAL1 { - display "ARM CL7x11 serial port 1 driver" + cdl_component CYGPKG_IO_SERIAL_ARM_EDB7XXX_SERIAL1 { + display "Cirrus Logic EDB7xxx serial port 1 driver" type bool - parent CYGPKG_IO_SERIAL_ARM_CL7211 + parent CYGPKG_IO_SERIAL_ARM_EDB7XXX description " - This option includes the serial device driver for the ARM CL7x11 port 1." + This option includes the serial device driver for the Cirrus Logic EDB7xxx port 1." doc ref/ecos-ref/ecos-device-drivers.html } - cdl_option CYGDAT_IO_SERIAL_ARM_CL7211_SERIAL1_NAME { - display "Device name for the ARM CL7x11 serial port 1 driver" + cdl_option CYGDAT_IO_SERIAL_ARM_EDB7XXX_SERIAL1_NAME { + display "Device name for the Cirrus Logic EDB7xxx serial port 1 driver" type string - parent CYGPKG_IO_SERIAL_ARM_CL7211_SERIAL1 + parent CYGPKG_IO_SERIAL_ARM_EDB7XXX_SERIAL1 description " - This option specifies the name of serial device for the ARM CL7x11 port 1." + This option specifies the name of serial device for the Cirrus Logic EDB7xxx port 1." doc ref/ecos-ref/ecos-device-drivers.html } - cdl_option CYGNUM_IO_SERIAL_ARM_CL7211_SERIAL1_BAUD { - display "Baud rate for the ARM CL7x11 serial port 1 driver" + cdl_option CYGNUM_IO_SERIAL_ARM_EDB7XXX_SERIAL1_BAUD { + display "Baud rate for the Cirrus Logic EDB7xxx serial port 1 driver" type enum legal_values 50 75 110 134_5 150 200 300 600 1200 1800 2400 3600 4800 7200 9600 14400 19200 38400 57600 115200 234000 - parent CYGPKG_IO_SERIAL_ARM_CL7211_SERIAL1 + parent CYGPKG_IO_SERIAL_ARM_EDB7XXX_SERIAL1 description " - This option specifies the default baud rate (speed) for the ARM CL7x11 port 1." + This option specifies the default baud rate (speed) for the Cirrus Logic EDB7xxx port 1." doc ref/ecos-ref/ecos-device-drivers.html } - cdl_option CYGNUM_IO_SERIAL_ARM_CL7211_SERIAL1_BUFSIZE { - display "Buffer size for the ARM CL7x11 serial port 1 driver" + cdl_option CYGNUM_IO_SERIAL_ARM_EDB7XXX_SERIAL1_BUFSIZE { + display "Buffer size for the Cirrus Logic EDB7xxx serial port 1 driver" type count legal_values 0 to 8192 - parent CYGPKG_IO_SERIAL_ARM_CL7211_SERIAL1 + parent CYGPKG_IO_SERIAL_ARM_EDB7XXX_SERIAL1 description " - This option specifies the size of the internal buffers used for the ARM CL7x11 port 1." + This option specifies the size of the internal buffers used for the Cirrus Logic EDB7xxx port 1." doc ref/ecos-ref/ecos-device-drivers.html } - cdl_component CYGPKG_IO_SERIAL_ARM_CL7211_SERIAL2 { - display "ARM CL7x11 serial port 2 driver" + cdl_component CYGPKG_IO_SERIAL_ARM_EDB7XXX_SERIAL2 { + display "Cirrus Logic EDB7xxx serial port 2 driver" type bool - parent CYGPKG_IO_SERIAL_ARM_CL7211 + parent CYGPKG_IO_SERIAL_ARM_EDB7XXX description " - This option includes the serial device driver for the ARM CL7x11 port 2." + This option includes the serial device driver for the Cirrus Logic EDB7xxx port 2." doc ref/ecos-ref/ecos-device-drivers.html } - cdl_option CYGDAT_IO_SERIAL_ARM_CL7211_SERIAL2_NAME { - display "Device name for the ARM CL7x11 serial port 2 driver" + cdl_option CYGDAT_IO_SERIAL_ARM_EDB7XXX_SERIAL2_NAME { + display "Device name for the Cirrus Logic EDB7xxx serial port 2 driver" type string - parent CYGPKG_IO_SERIAL_ARM_CL7211_SERIAL2 + parent CYGPKG_IO_SERIAL_ARM_EDB7XXX_SERIAL2 description " - This option specifies the name of serial device for the ARM CL7x11 port 2." + This option specifies the name of serial device for the Cirrus Logic EDB7xxx port 2." doc ref/ecos-ref/ecos-device-drivers.html } - cdl_option CYGNUM_IO_SERIAL_ARM_CL7211_SERIAL2_BAUD { - display "Baud rate for the ARM CL7x11 serial port 2 driver" + cdl_option CYGNUM_IO_SERIAL_ARM_EDB7XXX_SERIAL2_BAUD { + display "Baud rate for the Cirrus Logic EDB7xxx serial port 2 driver" type enum legal_values 50 75 110 134_5 150 200 300 600 1200 1800 2400 3600 4800 7200 9600 14400 19200 38400 57600 115200 234000 - parent CYGPKG_IO_SERIAL_ARM_CL7211_SERIAL2 + parent CYGPKG_IO_SERIAL_ARM_EDB7XXX_SERIAL2 description " - This option specifies the default baud rate (speed) for the ARM CL7x11 port 2." + This option specifies the default baud rate (speed) for the Cirrus Logic EDB7xxx port 2." doc ref/ecos-ref/ecos-device-drivers.html } - cdl_option CYGNUM_IO_SERIAL_ARM_CL7211_SERIAL2_BUFSIZE { - display "Buffer size for the ARM CL7x11 serial port 2 driver" + cdl_option CYGNUM_IO_SERIAL_ARM_EDB7XXX_SERIAL2_BUFSIZE { + display "Buffer size for the Cirrus Logic EDB7xxx serial port 2 driver" type count legal_values 0 to 8192 - parent CYGPKG_IO_SERIAL_ARM_CL7211_SERIAL2 + parent CYGPKG_IO_SERIAL_ARM_EDB7XXX_SERIAL2 description " - This option specifies the size of the internal buffers used for the ARM CL7x11 port 2." + This option specifies the size of the internal buffers used for the Cirrus Logic EDB7xxx port 2." doc ref/ecos-ref/ecos-device-drivers.html } }}CFG_DATA */ -#undef CYGPKG_IO_SERIAL_ARM_CL7211 -#undef CYGPKG_IO_SERIAL_ARM_CL7211_SERIAL1 -#define CYGDAT_IO_SERIAL_ARM_CL7211_SERIAL1_NAME "/dev/ser1" -#define CYGNUM_IO_SERIAL_ARM_CL7211_SERIAL1_BAUD 38400 -#define CYGNUM_IO_SERIAL_ARM_CL7211_SERIAL1_BUFSIZE 128 -#undef CYGPKG_IO_SERIAL_ARM_CL7211_SERIAL2 -#define CYGDAT_IO_SERIAL_ARM_CL7211_SERIAL2_NAME "/dev/ser2" -#define CYGNUM_IO_SERIAL_ARM_CL7211_SERIAL2_BAUD 38400 -#define CYGNUM_IO_SERIAL_ARM_CL7211_SERIAL2_BUFSIZE 128 +#undef CYGPKG_IO_SERIAL_ARM_EDB7XXX +#undef CYGPKG_IO_SERIAL_ARM_EDB7XXX_SERIAL1 +#define CYGDAT_IO_SERIAL_ARM_EDB7XXX_SERIAL1_NAME "/dev/ser1" +#define CYGNUM_IO_SERIAL_ARM_EDB7XXX_SERIAL1_BAUD 38400 +#define CYGNUM_IO_SERIAL_ARM_EDB7XXX_SERIAL1_BUFSIZE 128 +#undef CYGPKG_IO_SERIAL_ARM_EDB7XXX_SERIAL2 +#define CYGDAT_IO_SERIAL_ARM_EDB7XXX_SERIAL2_NAME "/dev/ser2" +#define CYGNUM_IO_SERIAL_ARM_EDB7XXX_SERIAL2_BAUD 38400 +#define CYGNUM_IO_SERIAL_ARM_EDB7XXX_SERIAL2_BUFSIZE 128 /* ---------------------------------------------------------------------------- {{CFG_DATA
--- a/packages/io/serial/current/src/PKGconf.mak +++ b/packages/io/serial/current/src/PKGconf.mak @@ -40,8 +40,8 @@ endif ifdef CYGPKG_HAL_ARM_AEB EXTRAS_COMPILE += arm/aeb_serial.c endif -ifdef CYGPKG_HAL_ARM_CL7211 -EXTRAS_COMPILE += arm/cl7211_serial.c +ifdef CYGPKG_HAL_ARM_EDB7XXX +EXTRAS_COMPILE += arm/edb7xxx_serial.c endif ifdef CYGPKG_HAL_ARM_CMA230 EXTRAS_COMPILE += arm/cma230_serial.c
deleted file mode 100644 --- a/packages/io/serial/current/src/arm/cl7211_serial.c +++ /dev/null @@ -1,381 +0,0 @@ -//========================================================================== -// -// io/serial/arm/cl7211_serial.c -// -// Cirrus Logic CL7211 Serial I/O Interface Module (interrupt driven) -// -//========================================================================== -//####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-02-04 -// Purpose: CL7211 Serial I/O module (interrupt driven version) -// Description: -// -//####DESCRIPTIONEND#### -// -//========================================================================== - -#include <pkgconf/system.h> -#include <pkgconf/io_serial.h> -#include <pkgconf/io.h> -#include <cyg/io/io.h> -#include <cyg/hal/hal_intr.h> -#include <cyg/io/devtab.h> -#include <cyg/io/serial.h> -#include <cyg/infra/diag.h> - -#ifdef CYGPKG_IO_SERIAL_ARM_CL7211 - -#include "cl7211_serial.h" - -typedef struct cl7211_serial_info { - CYG_ADDRWORD data, // Pointer to data register - control, // Pointer to baud rate/line control register - stat, // Pointer to system flags for this port - syscon; // Pointer to system control for this port - CYG_WORD tx_int_num, // Transmit interrupt number - rx_int_num, // Receive interrupt number - ms_int_num; // Modem Status Change interrupt number - cyg_interrupt serial_tx_interrupt, - serial_rx_interrupt, - serial_ms_interrupt; - cyg_handle_t serial_tx_interrupt_handle, - serial_rx_interrupt_handle, - serial_ms_interrupt_handle; - bool tx_enabled; -} cl7211_serial_info; - -static bool cl7211_serial_init(struct cyg_devtab_entry *tab); -static bool cl7211_serial_putc(serial_channel *chan, unsigned char c); -static Cyg_ErrNo cl7211_serial_lookup(struct cyg_devtab_entry **tab, - struct cyg_devtab_entry *sub_tab, - const char *name); -static unsigned char cl7211_serial_getc(serial_channel *chan); -static bool cl7211_serial_set_config(serial_channel *chan, cyg_serial_info_t *config); -static void cl7211_serial_start_xmit(serial_channel *chan); -static void cl7211_serial_stop_xmit(serial_channel *chan); - -static cyg_uint32 cl7211_serial_tx_ISR(cyg_vector_t vector, cyg_addrword_t data); -static void cl7211_serial_tx_DSR(cyg_vector_t vector, cyg_ucount32 count, cyg_addrword_t data); -static cyg_uint32 cl7211_serial_rx_ISR(cyg_vector_t vector, cyg_addrword_t data); -static void cl7211_serial_rx_DSR(cyg_vector_t vector, cyg_ucount32 count, cyg_addrword_t data); -static cyg_uint32 cl7211_serial_ms_ISR(cyg_vector_t vector, cyg_addrword_t data); -static void cl7211_serial_ms_DSR(cyg_vector_t vector, cyg_ucount32 count, cyg_addrword_t data); - -static SERIAL_FUNS(cl7211_serial_funs, - cl7211_serial_putc, - cl7211_serial_getc, - cl7211_serial_set_config, - cl7211_serial_start_xmit, - cl7211_serial_stop_xmit - ); - -#ifdef CYGPKG_IO_SERIAL_ARM_CL7211_SERIAL1 -static cl7211_serial_info cl7211_serial_info1 = {UARTDR1, // Data register - UBLCR1, // Port control - SYSFLG1, // Status - SYSCON1, // System config - CYGNUM_HAL_INTERRUPT_UTXINT1, // Tx interrupt - CYGNUM_HAL_INTERRUPT_URXINT1, // Rx interrupt - 0 /*CYGNUM_HAL_INTERRUPT_UMSINT*/}; // Modem control -#if CYGNUM_IO_SERIAL_ARM_CL7211_SERIAL1_BUFSIZE > 0 -static unsigned char cl7211_serial_out_buf1[CYGNUM_IO_SERIAL_ARM_CL7211_SERIAL1_BUFSIZE]; -static unsigned char cl7211_serial_in_buf1[CYGNUM_IO_SERIAL_ARM_CL7211_SERIAL1_BUFSIZE]; - -static SERIAL_CHANNEL_USING_INTERRUPTS(cl7211_serial_channel1, - cl7211_serial_funs, - cl7211_serial_info1, - CYG_SERIAL_BAUD_RATE(CYGNUM_IO_SERIAL_ARM_CL7211_SERIAL1_BAUD), - CYG_SERIAL_STOP_DEFAULT, - CYG_SERIAL_PARITY_DEFAULT, - CYG_SERIAL_WORD_LENGTH_DEFAULT, - CYG_SERIAL_FLAGS_DEFAULT, - &cl7211_serial_out_buf1[0], sizeof(cl7211_serial_out_buf1), - &cl7211_serial_in_buf1[0], sizeof(cl7211_serial_in_buf1) - ); -#else -static SERIAL_CHANNEL(cl7211_serial_channel1, - cl7211_serial_funs, - cl7211_serial_info1, - CYG_SERIAL_BAUD_RATE(CYGNUM_IO_SERIAL_ARM_CL7211_SERIAL1_BAUD), - CYG_SERIAL_STOP_DEFAULT, - CYG_SERIAL_PARITY_DEFAULT, - CYG_SERIAL_WORD_LENGTH_DEFAULT, - CYG_SERIAL_FLAGS_DEFAULT - ); -#endif - -DEVTAB_ENTRY(cl7211_serial_io1, - CYGDAT_IO_SERIAL_ARM_CL7211_SERIAL1_NAME, - 0, // Does not depend on a lower level interface - &serial_devio, - cl7211_serial_init, - cl7211_serial_lookup, // Serial driver may need initializing - &cl7211_serial_channel1 - ); -#endif // CYGPKG_IO_SERIAL_ARM_CL7211_SERIAL2 - -#ifdef CYGPKG_IO_SERIAL_ARM_CL7211_SERIAL2 -static cl7211_serial_info cl7211_serial_info2 = {UARTDR2, // Data register - UBLCR2, // Port control - SYSFLG2, // Status - SYSCON2, // System config - CYGNUM_HAL_INTERRUPT_UTXINT2, // Tx interrupt - CYGNUM_HAL_INTERRUPT_URXINT2, // Rx interrupt - 0}; // No modem control -#if CYGNUM_IO_SERIAL_ARM_CL7211_SERIAL2_BUFSIZE > 0 -static unsigned char cl7211_serial_out_buf2[CYGNUM_IO_SERIAL_ARM_CL7211_SERIAL2_BUFSIZE]; -static unsigned char cl7211_serial_in_buf2[CYGNUM_IO_SERIAL_ARM_CL7211_SERIAL2_BUFSIZE]; - -static SERIAL_CHANNEL_USING_INTERRUPTS(cl7211_serial_channel2, - cl7211_serial_funs, - cl7211_serial_info2, - CYG_SERIAL_BAUD_RATE(CYGNUM_IO_SERIAL_ARM_CL7211_SERIAL2_BAUD), - CYG_SERIAL_STOP_DEFAULT, - CYG_SERIAL_PARITY_DEFAULT, - CYG_SERIAL_WORD_LENGTH_DEFAULT, - CYG_SERIAL_FLAGS_DEFAULT, - &cl7211_serial_out_buf2[0], sizeof(cl7211_serial_out_buf2), - &cl7211_serial_in_buf2[0], sizeof(cl7211_serial_in_buf2) - ); -#else -static SERIAL_CHANNEL(cl7211_serial_channel2, - cl7211_serial_funs, - cl7211_serial_info2, - CYG_SERIAL_BAUD_RATE(CYGNUM_IO_SERIAL_ARM_CL7211_SERIAL2_BAUD), - CYG_SERIAL_STOP_DEFAULT, - CYG_SERIAL_PARITY_DEFAULT, - CYG_SERIAL_WORD_LENGTH_DEFAULT, - CYG_SERIAL_FLAGS_DEFAULT - ); -#endif - -DEVTAB_ENTRY(cl7211_serial_io2, - CYGDAT_IO_SERIAL_ARM_CL7211_SERIAL2_NAME, - 0, // Does not depend on a lower level interface - &serial_devio, - cl7211_serial_init, - cl7211_serial_lookup, // Serial driver may need initializing - &cl7211_serial_channel2 - ); -#endif // CYGPKG_IO_SERIAL_ARM_CL7211_SERIAL2 - -// Internal function to actually configure the hardware to desired baud rate, etc. -static bool -cl7211_serial_config_port(serial_channel *chan, cyg_serial_info_t *new_config, bool init) -{ - cl7211_serial_info *cl7211_chan = (cl7211_serial_info *)chan->dev_priv; - volatile cyg_uint32 *syscon = (volatile cyg_uint32 *)cl7211_chan->syscon; - volatile cyg_uint32 *blcfg = (volatile cyg_uint32 *)cl7211_chan->control; - unsigned int baud_divisor = select_baud[new_config->baud]; - cyg_uint32 _lcr; - if (baud_divisor == 0) return false; - // Disable port interrupts while changing hardware - _lcr = select_word_length[new_config->word_length - CYGNUM_SERIAL_WORD_LENGTH_5] | - select_stop_bits[new_config->stop] | - select_parity[new_config->parity] | - UBLCR_FIFOEN | UART_BITRATE(baud_divisor); -#ifdef CYGDBG_IO_INIT - diag_printf("Set CTL: %x = %x\n", blcfg, _lcr); -#endif - *blcfg = _lcr; - *syscon |= SYSCON1_UART1EN; - if (new_config != &chan->config) { - chan->config = *new_config; - } - return true; -} - -// Function to initialize the device. Called at bootstrap time. -static bool -cl7211_serial_init(struct cyg_devtab_entry *tab) -{ - serial_channel *chan = (serial_channel *)tab->priv; - cl7211_serial_info *cl7211_chan = (cl7211_serial_info *)chan->dev_priv; -#ifdef CYGDBG_IO_INIT - diag_printf("CL7211 SERIAL init - dev: %x.%d\n", cl7211_chan->control, cl7211_chan->tx_int_num); -#endif - (chan->callbacks->serial_init)(chan); // Really only required for interrupt driven devices - if (chan->out_cbuf.len != 0) { - cyg_drv_interrupt_create(cl7211_chan->tx_int_num, - 99, // Priority - unused - (cyg_addrword_t)chan, // Data item passed to interrupt handler - cl7211_serial_tx_ISR, - cl7211_serial_tx_DSR, - &cl7211_chan->serial_tx_interrupt_handle, - &cl7211_chan->serial_tx_interrupt); - cyg_drv_interrupt_attach(cl7211_chan->serial_tx_interrupt_handle); - cyg_drv_interrupt_mask(cl7211_chan->tx_int_num); - cl7211_chan->tx_enabled = false; - } - if (chan->in_cbuf.len != 0) { - cyg_drv_interrupt_create(cl7211_chan->rx_int_num, - 99, // Priority - unused - (cyg_addrword_t)chan, // Data item passed to interrupt handler - cl7211_serial_rx_ISR, - cl7211_serial_rx_DSR, - &cl7211_chan->serial_rx_interrupt_handle, - &cl7211_chan->serial_rx_interrupt); - cyg_drv_interrupt_attach(cl7211_chan->serial_rx_interrupt_handle); - cyg_drv_interrupt_unmask(cl7211_chan->rx_int_num); - } - cl7211_serial_config_port(chan, &chan->config, true); - return true; -} - -// This routine is called when the device is "looked" up (i.e. attached) -static Cyg_ErrNo -cl7211_serial_lookup(struct cyg_devtab_entry **tab, - struct cyg_devtab_entry *sub_tab, - const char *name) -{ - serial_channel *chan = (serial_channel *)(*tab)->priv; - (chan->callbacks->serial_init)(chan); // Really only required for interrupt driven devices - return ENOERR; -} - -// Send a character to the device output buffer. -// Return 'true' if character is sent to device -static bool -cl7211_serial_putc(serial_channel *chan, unsigned char c) -{ - cl7211_serial_info *cl7211_chan = (cl7211_serial_info *)chan->dev_priv; - volatile cyg_uint8 *data = (volatile cyg_uint8 *)cl7211_chan->data; - volatile cyg_uint32 *stat = (volatile cyg_uint32 *)cl7211_chan->stat; - if ((*stat & SYSFLG1_UTXFF1) == 0) { -// Transmit buffer/FIFO is not full - *data = c; - return true; - } else { -// No space - return false; - } -} - -// Fetch a character from the device input buffer, waiting if necessary -static unsigned char -cl7211_serial_getc(serial_channel *chan) -{ - unsigned char c; - cl7211_serial_info *cl7211_chan = (cl7211_serial_info *)chan->dev_priv; - volatile cyg_uint32 *data = (volatile cyg_uint32 *)cl7211_chan->data; - volatile cyg_uint32 *stat = (volatile cyg_uint32 *)cl7211_chan->stat; - while (*stat & SYSFLG1_URXFE1) ; // Wait for char - c = *data; - return c; -} - -// Set up the device characteristics; baud rate, etc. -static bool -cl7211_serial_set_config(serial_channel *chan, cyg_serial_info_t *config) -{ - return cl7211_serial_config_port(chan, config, false); -} - -// Enable the transmitter (interrupt) on the device -static void -cl7211_serial_start_xmit(serial_channel *chan) -{ - cl7211_serial_info *cl7211_chan = (cl7211_serial_info *)chan->dev_priv; - cl7211_chan->tx_enabled = true; - cyg_drv_interrupt_unmask(cl7211_chan->tx_int_num); -} - -// Disable the transmitter on the device -static void -cl7211_serial_stop_xmit(serial_channel *chan) -{ - cl7211_serial_info *cl7211_chan = (cl7211_serial_info *)chan->dev_priv; - cyg_drv_interrupt_mask(cl7211_chan->tx_int_num); - cl7211_chan->tx_enabled = false; -} - -// Serial I/O - low level Tx interrupt handler (ISR) -static cyg_uint32 -cl7211_serial_tx_ISR(cyg_vector_t vector, cyg_addrword_t data) -{ - serial_channel *chan = (serial_channel *)data; - cl7211_serial_info *cl7211_chan = (cl7211_serial_info *)chan->dev_priv; - cyg_drv_interrupt_mask(cl7211_chan->tx_int_num); - cyg_drv_interrupt_acknowledge(cl7211_chan->tx_int_num); - return CYG_ISR_CALL_DSR; // Cause DSR to be run -} - -// Serial I/O - high level Tx interrupt handler (DSR) -static void -cl7211_serial_tx_DSR(cyg_vector_t vector, cyg_ucount32 count, cyg_addrword_t data) -{ - serial_channel *chan = (serial_channel *)data; - cl7211_serial_info *cl7211_chan = (cl7211_serial_info *)chan->dev_priv; - (chan->callbacks->xmt_char)(chan); - if (cl7211_chan->tx_enabled) { - cyg_drv_interrupt_unmask(cl7211_chan->tx_int_num); - } -} - -// Serial I/O - low level Rx interrupt handler (ISR) -static cyg_uint32 -cl7211_serial_rx_ISR(cyg_vector_t vector, cyg_addrword_t data) -{ - serial_channel *chan = (serial_channel *)data; - cl7211_serial_info *cl7211_chan = (cl7211_serial_info *)chan->dev_priv; - cyg_drv_interrupt_mask(cl7211_chan->rx_int_num); - cyg_drv_interrupt_acknowledge(cl7211_chan->rx_int_num); - return CYG_ISR_CALL_DSR; // Cause DSR to be run -} - -// Serial I/O - high level Rx interrupt handler (DSR) -static void -cl7211_serial_rx_DSR(cyg_vector_t vector, cyg_ucount32 count, cyg_addrword_t data) -{ - serial_channel *chan = (serial_channel *)data; - cl7211_serial_info *cl7211_chan = (cl7211_serial_info *)chan->dev_priv; - volatile cyg_uint32 *datreg = (volatile cyg_uint32 *)cl7211_chan->data; - volatile cyg_uint32 *stat = (volatile cyg_uint32 *)cl7211_chan->stat; - while (!(*stat & SYSFLG1_URXFE1)) - (chan->callbacks->rcv_char)(chan, *datreg); - cyg_drv_interrupt_unmask(cl7211_chan->rx_int_num); -} - -// Serial I/O - low level Ms interrupt handler (ISR) -static cyg_uint32 -cl7211_serial_ms_ISR(cyg_vector_t vector, cyg_addrword_t data) -{ - serial_channel *chan = (serial_channel *)data; - cl7211_serial_info *cl7211_chan = (cl7211_serial_info *)chan->dev_priv; - cyg_drv_interrupt_mask(cl7211_chan->ms_int_num); - cyg_drv_interrupt_acknowledge(cl7211_chan->ms_int_num); - return CYG_ISR_CALL_DSR; // Cause DSR to be run -} - -// Serial I/O - high level Ms interrupt handler (DSR) -static void -cl7211_serial_ms_DSR(cyg_vector_t vector, cyg_ucount32 count, cyg_addrword_t data) -{ -} -#endif // CYGPKG_IO_SERIAL_ARM_CL7211 -
deleted file mode 100644 --- a/packages/io/serial/current/src/arm/cl7211_serial.h +++ /dev/null @@ -1,98 +0,0 @@ -#ifndef CYGONCE_ARM_CL7211_SERIAL_H -#define CYGONCE_ARM_CL7211_SERIAL_H - -// ==================================================================== -// -// cl7211_serial.h -// -// Device I/O - Description of Cirrus Logic CL7211 serial hardware -// -// ==================================================================== -//####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-02-04 -// Purpose: Internal interfaces for serial I/O drivers -// Description: -// -//####DESCRIPTIONEND#### -// -// ==================================================================== - -// Description of serial ports on Cirrus Logic CL7211 - -#include <cyg/hal/hal_cl7211.h> // Hardware definitions - -static unsigned int select_word_length[] = { - UBLCR_WRDLEN5, // 5 bits / word (char) - UBLCR_WRDLEN6, - UBLCR_WRDLEN7, - UBLCR_WRDLEN8 -}; - -static unsigned int select_stop_bits[] = { - 0, - 0, // 1 stop bit - 0, // 1.5 stop bit - UBLCR_XSTOP // 2 stop bits -}; - -static unsigned int select_parity[] = { - 0, // No parity - UBLCR_PRTEN|UBLCR_EVENPRT, // Even parity - UBLCR_PRTEN, // Odd parity - 0, // Mark parity - 0, // Space parity -}; - -// Baud rate values, based on PLL clock - -static cyg_int32 select_baud[] = { - 0, // Unused - 50, // 50 - 75, // 75 - 110, // 110 - 0, // 134.5 - 150, // 150 - 200, // 200 - 300, // 300 - 600, // 600 - 1200, // 1200 - 1800, // 1800 - 2400, // 2400 - 3600, // 3600 - 4800, // 4800 - 7200, // 7200 - 9600, // 9600 - 14400, // 14400 - 19200, // 19200 - 38400, // 38400 - 57600, // 57600 - 115200, // 115200 - 0, // 230400 -}; - -#endif // CYGONCE_ARM_CL7211_SERIAL_H
new file mode 100644 --- /dev/null +++ b/packages/io/serial/current/src/arm/edb7xxx_serial.c @@ -0,0 +1,381 @@ +//========================================================================== +// +// io/serial/arm/edb7xxx_serial.c +// +// Cirrus Logic EDB7XXX Serial I/O Interface Module (interrupt driven) +// +//========================================================================== +//####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-02-04 +// Purpose: EDB7XXX Serial I/O module (interrupt driven version) +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include <pkgconf/system.h> +#include <pkgconf/io_serial.h> +#include <pkgconf/io.h> +#include <cyg/io/io.h> +#include <cyg/hal/hal_intr.h> +#include <cyg/io/devtab.h> +#include <cyg/io/serial.h> +#include <cyg/infra/diag.h> + +#ifdef CYGPKG_IO_SERIAL_ARM_EDB7XXX + +#include "edb7xxx_serial.h" + +typedef struct edb7xxx_serial_info { + CYG_ADDRWORD data, // Pointer to data register + control, // Pointer to baud rate/line control register + stat, // Pointer to system flags for this port + syscon; // Pointer to system control for this port + CYG_WORD tx_int_num, // Transmit interrupt number + rx_int_num, // Receive interrupt number + ms_int_num; // Modem Status Change interrupt number + cyg_interrupt serial_tx_interrupt, + serial_rx_interrupt, + serial_ms_interrupt; + cyg_handle_t serial_tx_interrupt_handle, + serial_rx_interrupt_handle, + serial_ms_interrupt_handle; + bool tx_enabled; +} edb7xxx_serial_info; + +static bool edb7xxx_serial_init(struct cyg_devtab_entry *tab); +static bool edb7xxx_serial_putc(serial_channel *chan, unsigned char c); +static Cyg_ErrNo edb7xxx_serial_lookup(struct cyg_devtab_entry **tab, + struct cyg_devtab_entry *sub_tab, + const char *name); +static unsigned char edb7xxx_serial_getc(serial_channel *chan); +static bool edb7xxx_serial_set_config(serial_channel *chan, cyg_serial_info_t *config); +static void edb7xxx_serial_start_xmit(serial_channel *chan); +static void edb7xxx_serial_stop_xmit(serial_channel *chan); + +static cyg_uint32 edb7xxx_serial_tx_ISR(cyg_vector_t vector, cyg_addrword_t data); +static void edb7xxx_serial_tx_DSR(cyg_vector_t vector, cyg_ucount32 count, cyg_addrword_t data); +static cyg_uint32 edb7xxx_serial_rx_ISR(cyg_vector_t vector, cyg_addrword_t data); +static void edb7xxx_serial_rx_DSR(cyg_vector_t vector, cyg_ucount32 count, cyg_addrword_t data); +static cyg_uint32 edb7xxx_serial_ms_ISR(cyg_vector_t vector, cyg_addrword_t data); +static void edb7xxx_serial_ms_DSR(cyg_vector_t vector, cyg_ucount32 count, cyg_addrword_t data); + +static SERIAL_FUNS(edb7xxx_serial_funs, + edb7xxx_serial_putc, + edb7xxx_serial_getc, + edb7xxx_serial_set_config, + edb7xxx_serial_start_xmit, + edb7xxx_serial_stop_xmit + ); + +#ifdef CYGPKG_IO_SERIAL_ARM_EDB7XXX_SERIAL1 +static edb7xxx_serial_info edb7xxx_serial_info1 = {UARTDR1, // Data register + UBLCR1, // Port control + SYSFLG1, // Status + SYSCON1, // System config + CYGNUM_HAL_INTERRUPT_UTXINT1, // Tx interrupt + CYGNUM_HAL_INTERRUPT_URXINT1, // Rx interrupt + 0 /*CYGNUM_HAL_INTERRUPT_UMSINT*/}; // Modem control +#if CYGNUM_IO_SERIAL_ARM_EDB7XXX_SERIAL1_BUFSIZE > 0 +static unsigned char edb7xxx_serial_out_buf1[CYGNUM_IO_SERIAL_ARM_EDB7XXX_SERIAL1_BUFSIZE]; +static unsigned char edb7xxx_serial_in_buf1[CYGNUM_IO_SERIAL_ARM_EDB7XXX_SERIAL1_BUFSIZE]; + +static SERIAL_CHANNEL_USING_INTERRUPTS(edb7xxx_serial_channel1, + edb7xxx_serial_funs, + edb7xxx_serial_info1, + CYG_SERIAL_BAUD_RATE(CYGNUM_IO_SERIAL_ARM_EDB7XXX_SERIAL1_BAUD), + CYG_SERIAL_STOP_DEFAULT, + CYG_SERIAL_PARITY_DEFAULT, + CYG_SERIAL_WORD_LENGTH_DEFAULT, + CYG_SERIAL_FLAGS_DEFAULT, + &edb7xxx_serial_out_buf1[0], sizeof(edb7xxx_serial_out_buf1), + &edb7xxx_serial_in_buf1[0], sizeof(edb7xxx_serial_in_buf1) + ); +#else +static SERIAL_CHANNEL(edb7xxx_serial_channel1, + edb7xxx_serial_funs, + edb7xxx_serial_info1, + CYG_SERIAL_BAUD_RATE(CYGNUM_IO_SERIAL_ARM_EDB7XXX_SERIAL1_BAUD), + CYG_SERIAL_STOP_DEFAULT, + CYG_SERIAL_PARITY_DEFAULT, + CYG_SERIAL_WORD_LENGTH_DEFAULT, + CYG_SERIAL_FLAGS_DEFAULT + ); +#endif + +DEVTAB_ENTRY(edb7xxx_serial_io1, + CYGDAT_IO_SERIAL_ARM_EDB7XXX_SERIAL1_NAME, + 0, // Does not depend on a lower level interface + &serial_devio, + edb7xxx_serial_init, + edb7xxx_serial_lookup, // Serial driver may need initializing + &edb7xxx_serial_channel1 + ); +#endif // CYGPKG_IO_SERIAL_ARM_EDB7XXX_SERIAL2 + +#ifdef CYGPKG_IO_SERIAL_ARM_EDB7XXX_SERIAL2 +static edb7xxx_serial_info edb7xxx_serial_info2 = {UARTDR2, // Data register + UBLCR2, // Port control + SYSFLG2, // Status + SYSCON2, // System config + CYGNUM_HAL_INTERRUPT_UTXINT2, // Tx interrupt + CYGNUM_HAL_INTERRUPT_URXINT2, // Rx interrupt + 0}; // No modem control +#if CYGNUM_IO_SERIAL_ARM_EDB7XXX_SERIAL2_BUFSIZE > 0 +static unsigned char edb7xxx_serial_out_buf2[CYGNUM_IO_SERIAL_ARM_EDB7XXX_SERIAL2_BUFSIZE]; +static unsigned char edb7xxx_serial_in_buf2[CYGNUM_IO_SERIAL_ARM_EDB7XXX_SERIAL2_BUFSIZE]; + +static SERIAL_CHANNEL_USING_INTERRUPTS(edb7xxx_serial_channel2, + edb7xxx_serial_funs, + edb7xxx_serial_info2, + CYG_SERIAL_BAUD_RATE(CYGNUM_IO_SERIAL_ARM_EDB7XXX_SERIAL2_BAUD), + CYG_SERIAL_STOP_DEFAULT, + CYG_SERIAL_PARITY_DEFAULT, + CYG_SERIAL_WORD_LENGTH_DEFAULT, + CYG_SERIAL_FLAGS_DEFAULT, + &edb7xxx_serial_out_buf2[0], sizeof(edb7xxx_serial_out_buf2), + &edb7xxx_serial_in_buf2[0], sizeof(edb7xxx_serial_in_buf2) + ); +#else +static SERIAL_CHANNEL(edb7xxx_serial_channel2, + edb7xxx_serial_funs, + edb7xxx_serial_info2, + CYG_SERIAL_BAUD_RATE(CYGNUM_IO_SERIAL_ARM_EDB7XXX_SERIAL2_BAUD), + CYG_SERIAL_STOP_DEFAULT, + CYG_SERIAL_PARITY_DEFAULT, + CYG_SERIAL_WORD_LENGTH_DEFAULT, + CYG_SERIAL_FLAGS_DEFAULT + ); +#endif + +DEVTAB_ENTRY(edb7xxx_serial_io2, + CYGDAT_IO_SERIAL_ARM_EDB7XXX_SERIAL2_NAME, + 0, // Does not depend on a lower level interface + &serial_devio, + edb7xxx_serial_init, + edb7xxx_serial_lookup, // Serial driver may need initializing + &edb7xxx_serial_channel2 + ); +#endif // CYGPKG_IO_SERIAL_ARM_EDB7XXX_SERIAL2 + +// Internal function to actually configure the hardware to desired baud rate, etc. +static bool +edb7xxx_serial_config_port(serial_channel *chan, cyg_serial_info_t *new_config, bool init) +{ + edb7xxx_serial_info *edb7xxx_chan = (edb7xxx_serial_info *)chan->dev_priv; + volatile cyg_uint32 *syscon = (volatile cyg_uint32 *)edb7xxx_chan->syscon; + volatile cyg_uint32 *blcfg = (volatile cyg_uint32 *)edb7xxx_chan->control; + unsigned int baud_divisor = select_baud[new_config->baud]; + cyg_uint32 _lcr; + if (baud_divisor == 0) return false; + // Disable port interrupts while changing hardware + _lcr = select_word_length[new_config->word_length - CYGNUM_SERIAL_WORD_LENGTH_5] | + select_stop_bits[new_config->stop] | + select_parity[new_config->parity] | + UBLCR_FIFOEN | UART_BITRATE(baud_divisor); +#ifdef CYGDBG_IO_INIT + diag_printf("Set CTL: %x = %x\n", blcfg, _lcr); +#endif + *blcfg = _lcr; + *syscon |= SYSCON1_UART1EN; + if (new_config != &chan->config) { + chan->config = *new_config; + } + return true; +} + +// Function to initialize the device. Called at bootstrap time. +static bool +edb7xxx_serial_init(struct cyg_devtab_entry *tab) +{ + serial_channel *chan = (serial_channel *)tab->priv; + edb7xxx_serial_info *edb7xxx_chan = (edb7xxx_serial_info *)chan->dev_priv; +#ifdef CYGDBG_IO_INIT + diag_printf("EDB7XXX SERIAL init - dev: %x.%d\n", edb7xxx_chan->control, edb7xxx_chan->tx_int_num); +#endif + (chan->callbacks->serial_init)(chan); // Really only required for interrupt driven devices + if (chan->out_cbuf.len != 0) { + cyg_drv_interrupt_create(edb7xxx_chan->tx_int_num, + 99, // Priority - unused + (cyg_addrword_t)chan, // Data item passed to interrupt handler + edb7xxx_serial_tx_ISR, + edb7xxx_serial_tx_DSR, + &edb7xxx_chan->serial_tx_interrupt_handle, + &edb7xxx_chan->serial_tx_interrupt); + cyg_drv_interrupt_attach(edb7xxx_chan->serial_tx_interrupt_handle); + cyg_drv_interrupt_mask(edb7xxx_chan->tx_int_num); + edb7xxx_chan->tx_enabled = false; + } + if (chan->in_cbuf.len != 0) { + cyg_drv_interrupt_create(edb7xxx_chan->rx_int_num, + 99, // Priority - unused + (cyg_addrword_t)chan, // Data item passed to interrupt handler + edb7xxx_serial_rx_ISR, + edb7xxx_serial_rx_DSR, + &edb7xxx_chan->serial_rx_interrupt_handle, + &edb7xxx_chan->serial_rx_interrupt); + cyg_drv_interrupt_attach(edb7xxx_chan->serial_rx_interrupt_handle); + cyg_drv_interrupt_unmask(edb7xxx_chan->rx_int_num); + } + edb7xxx_serial_config_port(chan, &chan->config, true); + return true; +} + +// This routine is called when the device is "looked" up (i.e. attached) +static Cyg_ErrNo +edb7xxx_serial_lookup(struct cyg_devtab_entry **tab, + struct cyg_devtab_entry *sub_tab, + const char *name) +{ + serial_channel *chan = (serial_channel *)(*tab)->priv; + (chan->callbacks->serial_init)(chan); // Really only required for interrupt driven devices + return ENOERR; +} + +// Send a character to the device output buffer. +// Return 'true' if character is sent to device +static bool +edb7xxx_serial_putc(serial_channel *chan, unsigned char c) +{ + edb7xxx_serial_info *edb7xxx_chan = (edb7xxx_serial_info *)chan->dev_priv; + volatile cyg_uint8 *data = (volatile cyg_uint8 *)edb7xxx_chan->data; + volatile cyg_uint32 *stat = (volatile cyg_uint32 *)edb7xxx_chan->stat; + if ((*stat & SYSFLG1_UTXFF1) == 0) { +// Transmit buffer/FIFO is not full + *data = c; + return true; + } else { +// No space + return false; + } +} + +// Fetch a character from the device input buffer, waiting if necessary +static unsigned char +edb7xxx_serial_getc(serial_channel *chan) +{ + unsigned char c; + edb7xxx_serial_info *edb7xxx_chan = (edb7xxx_serial_info *)chan->dev_priv; + volatile cyg_uint32 *data = (volatile cyg_uint32 *)edb7xxx_chan->data; + volatile cyg_uint32 *stat = (volatile cyg_uint32 *)edb7xxx_chan->stat; + while (*stat & SYSFLG1_URXFE1) ; // Wait for char + c = *data; + return c; +} + +// Set up the device characteristics; baud rate, etc. +static bool +edb7xxx_serial_set_config(serial_channel *chan, cyg_serial_info_t *config) +{ + return edb7xxx_serial_config_port(chan, config, false); +} + +// Enable the transmitter (interrupt) on the device +static void +edb7xxx_serial_start_xmit(serial_channel *chan) +{ + edb7xxx_serial_info *edb7xxx_chan = (edb7xxx_serial_info *)chan->dev_priv; + edb7xxx_chan->tx_enabled = true; + cyg_drv_interrupt_unmask(edb7xxx_chan->tx_int_num); +} + +// Disable the transmitter on the device +static void +edb7xxx_serial_stop_xmit(serial_channel *chan) +{ + edb7xxx_serial_info *edb7xxx_chan = (edb7xxx_serial_info *)chan->dev_priv; + cyg_drv_interrupt_mask(edb7xxx_chan->tx_int_num); + edb7xxx_chan->tx_enabled = false; +} + +// Serial I/O - low level Tx interrupt handler (ISR) +static cyg_uint32 +edb7xxx_serial_tx_ISR(cyg_vector_t vector, cyg_addrword_t data) +{ + serial_channel *chan = (serial_channel *)data; + edb7xxx_serial_info *edb7xxx_chan = (edb7xxx_serial_info *)chan->dev_priv; + cyg_drv_interrupt_mask(edb7xxx_chan->tx_int_num); + cyg_drv_interrupt_acknowledge(edb7xxx_chan->tx_int_num); + return CYG_ISR_CALL_DSR; // Cause DSR to be run +} + +// Serial I/O - high level Tx interrupt handler (DSR) +static void +edb7xxx_serial_tx_DSR(cyg_vector_t vector, cyg_ucount32 count, cyg_addrword_t data) +{ + serial_channel *chan = (serial_channel *)data; + edb7xxx_serial_info *edb7xxx_chan = (edb7xxx_serial_info *)chan->dev_priv; + (chan->callbacks->xmt_char)(chan); + if (edb7xxx_chan->tx_enabled) { + cyg_drv_interrupt_unmask(edb7xxx_chan->tx_int_num); + } +} + +// Serial I/O - low level Rx interrupt handler (ISR) +static cyg_uint32 +edb7xxx_serial_rx_ISR(cyg_vector_t vector, cyg_addrword_t data) +{ + serial_channel *chan = (serial_channel *)data; + edb7xxx_serial_info *edb7xxx_chan = (edb7xxx_serial_info *)chan->dev_priv; + cyg_drv_interrupt_mask(edb7xxx_chan->rx_int_num); + cyg_drv_interrupt_acknowledge(edb7xxx_chan->rx_int_num); + return CYG_ISR_CALL_DSR; // Cause DSR to be run +} + +// Serial I/O - high level Rx interrupt handler (DSR) +static void +edb7xxx_serial_rx_DSR(cyg_vector_t vector, cyg_ucount32 count, cyg_addrword_t data) +{ + serial_channel *chan = (serial_channel *)data; + edb7xxx_serial_info *edb7xxx_chan = (edb7xxx_serial_info *)chan->dev_priv; + volatile cyg_uint32 *datreg = (volatile cyg_uint32 *)edb7xxx_chan->data; + volatile cyg_uint32 *stat = (volatile cyg_uint32 *)edb7xxx_chan->stat; + while (!(*stat & SYSFLG1_URXFE1)) + (chan->callbacks->rcv_char)(chan, *datreg); + cyg_drv_interrupt_unmask(edb7xxx_chan->rx_int_num); +} + +// Serial I/O - low level Ms interrupt handler (ISR) +static cyg_uint32 +edb7xxx_serial_ms_ISR(cyg_vector_t vector, cyg_addrword_t data) +{ + serial_channel *chan = (serial_channel *)data; + edb7xxx_serial_info *edb7xxx_chan = (edb7xxx_serial_info *)chan->dev_priv; + cyg_drv_interrupt_mask(edb7xxx_chan->ms_int_num); + cyg_drv_interrupt_acknowledge(edb7xxx_chan->ms_int_num); + return CYG_ISR_CALL_DSR; // Cause DSR to be run +} + +// Serial I/O - high level Ms interrupt handler (DSR) +static void +edb7xxx_serial_ms_DSR(cyg_vector_t vector, cyg_ucount32 count, cyg_addrword_t data) +{ +} +#endif // CYGPKG_IO_SERIAL_ARM_EDB7XXX +
new file mode 100644 --- /dev/null +++ b/packages/io/serial/current/src/arm/edb7xxx_serial.h @@ -0,0 +1,98 @@ +#ifndef CYGONCE_ARM_EDB7XXX_SERIAL_H +#define CYGONCE_ARM_EDB7XXX_SERIAL_H + +// ==================================================================== +// +// edb7xxx_serial.h +// +// Device I/O - Description of Cirrus Logic EDB7XXX serial hardware +// +// ==================================================================== +//####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-02-04 +// Purpose: Internal interfaces for serial I/O drivers +// Description: +// +//####DESCRIPTIONEND#### +// +// ==================================================================== + +// Description of serial ports on Cirrus Logic EDB7XXX + +#include <cyg/hal/hal_edb7xxx.h> // Hardware definitions + +static unsigned int select_word_length[] = { + UBLCR_WRDLEN5, // 5 bits / word (char) + UBLCR_WRDLEN6, + UBLCR_WRDLEN7, + UBLCR_WRDLEN8 +}; + +static unsigned int select_stop_bits[] = { + 0, + 0, // 1 stop bit + 0, // 1.5 stop bit + UBLCR_XSTOP // 2 stop bits +}; + +static unsigned int select_parity[] = { + 0, // No parity + UBLCR_PRTEN|UBLCR_EVENPRT, // Even parity + UBLCR_PRTEN, // Odd parity + 0, // Mark parity + 0, // Space parity +}; + +// Baud rate values, based on PLL clock + +static cyg_int32 select_baud[] = { + 0, // Unused + 50, // 50 + 75, // 75 + 110, // 110 + 0, // 134.5 + 150, // 150 + 200, // 200 + 300, // 300 + 600, // 600 + 1200, // 1200 + 1800, // 1800 + 2400, // 2400 + 3600, // 3600 + 4800, // 4800 + 7200, // 7200 + 9600, // 9600 + 14400, // 14400 + 19200, // 19200 + 38400, // 38400 + 57600, // 57600 + 115200, // 115200 + 0, // 230400 +}; + +#endif // CYGONCE_ARM_EDB7XXX_SERIAL_H
--- a/packages/io/serial/current/tests/ser_test_protocol.inl +++ b/packages/io/serial/current/tests/ser_test_protocol.inl @@ -103,11 +103,11 @@ # define TEST_TTY_DEV CYGDAT_IO_SERIAL_TTY_TTY1_DEV # endif #endif -#if defined(CYGPKG_HAL_ARM_CL7211) \ - && defined(CYGPKG_IO_SERIAL_ARM_CL7211) \ - && defined(CYGPKG_IO_SERIAL_ARM_CL7211_SERIAL1) -# define TEST_CRASH_ID "armcl7" -# define TEST_SER_DEV CYGDAT_IO_SERIAL_ARM_CL7211_SERIAL1_NAME +#if defined(CYGPKG_HAL_ARM_EDB7XXX) \ + && defined(CYGPKG_IO_SERIAL_ARM_EDB7XXX) \ + && defined(CYGPKG_IO_SERIAL_ARM_EDB7XXX_SERIAL1) +# define TEST_CRASH_ID "armedb7xxx" +# define TEST_SER_DEV CYGDAT_IO_SERIAL_ARM_EDB7XXX_SERIAL1_NAME # if defined(CYGPKG_IO_SERIAL_TTY_TTY1) # define TEST_TTY_DEV CYGDAT_IO_SERIAL_TTY_TTY1_DEV # endif @@ -334,7 +334,7 @@ cyg_ser_cfg_t test_configs[] = { !defined(CYGPKG_HAL_ARM_AEB) && \ !defined(CYGPKG_HAL_MN10300_STDEVAL1) && \ !defined(CYGPKG_HAL_ARM_CMA230) && \ - !defined(CYGPKG_HAL_ARM_CL7211) && \ + !defined(CYGPKG_HAL_ARM_EDB7XXX) && \ !defined(CYGPKG_HAL_SPARCLITE_SLEB) { CYGNUM_SERIAL_BAUD_115200, CYGNUM_SERIAL_WORD_LENGTH_8, CYGNUM_SERIAL_STOP_1, CYGNUM_SERIAL_PARITY_NONE },
--- a/packages/kernel/current/tests/PKGconf.mak +++ b/packages/kernel/current/tests/PKGconf.mak @@ -46,7 +46,7 @@ TESTS += kcache1 kcache2 endif -ifdef CYGPKG_HAL_ARM_CL7211 +ifdef CYGPKG_HAL_ARM_EDB7XXX TESTS += kcache1 kcache2 endif
--- a/packages/packages +++ b/packages/packages @@ -144,9 +144,9 @@ package CYGPKG_HAL_ARM_AEB { hardware } -package CYGPKG_HAL_ARM_CL7211 { - alias { "Cirrus Logic CL7211 evaluation board support" hal_arm_cl7211 arm_cl7211_hal } - directory hal/arm/cl7211 +package CYGPKG_HAL_ARM_EDB7XXX { + alias { "Cirrus Logic EDB7xxx evaluation board(s) support" hal_arm_edb7xxx arm_edb7xxx_hal } + directory hal/arm/edb7xxx include_dir cyg/hal hardware }
--- a/packages/targets +++ b/packages/targets @@ -227,7 +227,7 @@ target arm { ERRFLAGS "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef" CXXERRFLAGS "-Woverloaded-virtual" DBGFLAGS "-g -O2" - LANGFLAGS "-ffunction-sections -fdata-sections" + LANGFLAGS "-ffunction-sections -fdata-sections -mno-sched-prolog" CXXLANGFLAGS "-fno-rtti -fno-exceptions -fvtable-gc -finit-priority" LDLANGFLAGS "-Wl,--gc-sections -Wl,-static" } @@ -279,7 +279,7 @@ target arm { ERRFLAGS "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef" CXXERRFLAGS "-Woverloaded-virtual" DBGFLAGS "-g -O2" - LANGFLAGS "-ffunction-sections -fdata-sections" + LANGFLAGS "-ffunction-sections -fdata-sections -mno-sched-prolog" CXXLANGFLAGS "-fno-rtti -fno-exceptions -fvtable-gc -finit-priority" LDLANGFLAGS "-Wl,--gc-sections -Wl,-static" } @@ -296,7 +296,7 @@ target arm { ERRFLAGS "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef" CXXERRFLAGS "-Woverloaded-virtual" DBGFLAGS "-g -O2" - LANGFLAGS "-ffunction-sections -fdata-sections" + LANGFLAGS "-ffunction-sections -fdata-sections -mno-sched-prolog" CXXLANGFLAGS "-fno-rtti -fno-exceptions -fvtable-gc -finit-priority" LDLANGFLAGS "-Wl,--gc-sections -Wl,-static" } @@ -304,38 +304,39 @@ target arm { platform cl7111 { alias { "Cirrus Logic Eval Board (CL7111)" } startup { ram rom stubs } - base_platform cl7211 + base_platform edb7xxx packages { - CYGPKG_HAL_ARM_CL7211 + CYGPKG_HAL_ARM_EDB7XXX } cflags { ARCHFLAGS "-mcpu=arm710c -D__CL7111" ERRFLAGS "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef" CXXERRFLAGS "-Woverloaded-virtual" DBGFLAGS "-g -O2" - LANGFLAGS "-ffunction-sections -fdata-sections" + LANGFLAGS "-ffunction-sections -fdata-sections -mno-sched-prolog" CXXLANGFLAGS "-fno-rtti -fno-exceptions -fvtable-gc -finit-priority" LDLANGFLAGS "-Wl,--gc-sections -Wl,-static" } } # FIXME: ARCHFLAGS "-mcpu=arm720" - platform eb7211 { - alias { "Cirrus Logic Eval Board (EB7211)" } + platform edb7211 { + alias { "Cirrus Logic Eval Board (EDB7211)" eb7211 } startup { ram rom stubs } - base_platform cl7211 + base_platform edb7xxx packages { - CYGPKG_HAL_ARM_CL7211 + CYGPKG_HAL_ARM_EDB7XXX } cflags { - ARCHFLAGS "-mcpu=arm7tdmi -D__CL7211" + ARCHFLAGS "-mcpu=arm7tdmi -D__EDB7211" ERRFLAGS "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef" CXXERRFLAGS "-Woverloaded-virtual" DBGFLAGS "-g -O2" - LANGFLAGS "-ffunction-sections -fdata-sections" + LANGFLAGS "-ffunction-sections -fdata-sections -mno-sched-prolog" CXXLANGFLAGS "-fno-rtti -fno-exceptions -fvtable-gc -finit-priority" LDLANGFLAGS "-Wl,--gc-sections -Wl,-static" } } + platform cma230 { alias { "Cogent CMA230" } startup { ram rom stubs } @@ -347,7 +348,7 @@ target arm { ERRFLAGS "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef" CXXERRFLAGS "-Woverloaded-virtual" DBGFLAGS "-g -O2" - LANGFLAGS "-ffunction-sections -fdata-sections" + LANGFLAGS "-ffunction-sections -fdata-sections -mno-sched-prolog" CXXLANGFLAGS "-fno-rtti -fno-exceptions -fvtable-gc -finit-priority" LDLANGFLAGS "-Wl,--gc-sections -Wl,-static" }
