* hal_platform_setup.h - Approach to a new platform port
@ 2006-06-06 7:27 Ilija Koco
2006-06-06 12:02 ` Andrew Lunn
0 siblings, 1 reply; 5+ messages in thread
From: Ilija Koco @ 2006-06-06 7:27 UTC (permalink / raw)
To: ecos-devel
[-- Attachment #1: Type: text/plain, Size: 714 bytes --]
Hi
I am preparing to add new platform port, so I consider placing common
variant setup code in a common header hal_variant_setup.h
Since this is not a common practice i would like to hear your opinion.
Advantage of such organization is avoiding multiple copies of the code
that is going to be same for all platforms:
- PLL clock initialization (all parameters are set by cdl so no
changes in code are needed)
- Memory re-mapping (This may need additional code for system,s with
external memory, but it can then be added in hal_platform_setup_h when
needed.
Attached diff file wou'd give you a breif picture (current port only).
Pliease give your comments so I could proceed on.
Regards
Ilija
[-- Attachment #2: hal_variant.diff --]
[-- Type: text/x-patch, Size: 10944 bytes --]
diff -r -U 5 -N -x CVS -x '*~' -x '.#*' clean/ecos/packages/hal/arm/mac7100/mace1/current/include/hal_platform_setup.h devo/ecos/packages/hal/arm/mac7100/mace1/current/include/hal_platform_setup.h
--- clean/ecos/packages/hal/arm/mac7100/mace1/current/include/hal_platform_setup.h 2006-05-31 21:17:20.000000000 +0200
+++ devo/ecos/packages/hal/arm/mac7100/mace1/current/include/hal_platform_setup.h 2006-06-06 09:13:58.626788960 +0200
@@ -52,11 +52,11 @@
//####DESCRIPTIONEND####
//
//===========================================================================
#include <cyg/hal/var_io.h>
-
+#include <cyg/hal/hal_variant_setup.h>
//===========================================================================
.macro _led y
ldr r0,=MAC7100_PIM_PORTDATA(MAC7100_PORT_A_OFFSET)
ldrh r1,[r0]
@@ -80,89 +80,26 @@
strh r1,[r0],#2
strh r1,[r0],#2 // LED: MSB ...
_led 0 // Set initial LED state.
.endm
-// Initialize PLL
-#if defined(CYGNUM_HAL_ARM_MAC7100_FDIV) // Divider set by user.
-# define MAC7100_CRG_REFDV_VAL (CYGNUM_HAL_ARM_MAC7100_FDIV-1)
-#else // Divider calculated.
- //NOTE: works for f_osc <= 8MHz
-# define MAC7100_CRG_REFDV_VAL (((CYGNUM_HAL_ARM_MAC7100_F_OSC/500000) - 1) & 0x0F) // 15 (1)
-#endif
-#define MAC7100_CRG_SYNR_VAL (CYGNUM_HAL_ARM_MAC7100_CLOCK_SPEED / 2 / \
- (CYGNUM_HAL_ARM_MAC7100_F_OSC / (MAC7100_CRG_REFDV_VAL+1))-1) // 47 (5)
-#define MAC7100_CRG_PLLCTL_VAL \
- (MAC7100_CRG_CME|MAC7100_CRG_PLLON|MAC7100_CRG_AUTO| \
- MAC7100_CRG_ACQ|MAC7100_CRG_SCME)
-#define MAC7100_CRG_CLKSEL_VAL (MAC7100_CRG_PLLSEL)
-
-.macro _pclock_init
- ldr r2,=MAC7100_CRG_BASE
- mov r3,#0
- // Disable clock interrupts
- strb r3,[r2,#(MAC7100_CRG_CRGINT-MAC7100_CRG_BASE)]
- // DeSelect PLL clock
- mov r3,#MAC7100_CRG_REFDV_VAL
- // Reference Divider reg.
- strb r3,[r2,#(MAC7100_CRG_REFDV-MAC7100_CRG_BASE)]
- mov r3,#MAC7100_CRG_SYNR_VAL
- // Synthesizer register
- strb r3,[r2,#(MAC7100_CRG_SYNR-MAC7100_CRG_BASE)]
- mov r3,#MAC7100_CRG_PLLCTL_VAL
- // PLL control register
- strb r3,[r2,#(MAC7100_CRG_PLLCTL-MAC7100_CRG_BASE)]
- // Wait PLL lock <---
-1: ldrb r3,[r2,#(MAC7100_CRG_CRGFLG-MAC7100_CRG_BASE)]
- tst r3,#MAC7100_CRG_LOCK
- bne 2f // PLL locked, GO ON ----->>
- _led 0x55
- b 1b // Still waiting for PLL lock -------------------------->
-2: mov r3,#MAC7100_CRG_CLKSEL_VAL // <<----
- // Select PLL clock
- strb r3,[r2,#(MAC7100_CRG_CLKSEL-MAC7100_CRG_BASE)]
- mov r3,#0
- strb r3,[r2,#(MAC7100_CRG_BDMCTL-MAC7100_CRG_BASE)] // Set CRG BDMCTL
- mov r3,r3
+// Clock initilalization
+ .macro _pclock_init
+ _MAC7100_setPLL
.endm
- .macro _pio_init
- .endm
-
// Memory re-mapping
- .macro _TelePort
- _led 1
- ldr r1, TelePort //AAMR_REG
- ldr r0, [r1]
-
- mvn r4, #0xf0000000 // 1. Copy telepoter to RAM
- ldr r2, TelePort+4 // TelePorter
- ldr r3, TelePort+8 // TelePort (TelePorter end)
- and r2,r2,r4
- and r3,r3,r4
- mov r4, #0x40000000 // RAM address
-1: //CopyTelePorter: // copying teleporter
- ldr r5,[r2],#4 // <---
- str r5,[r4],#4
- cmp r2,r3
- bne 1b //CopyTelePorter // --->
- ldr r3,TelePort+12
- mov pc,#0x40000000 // 2. Jump to TelePorter in RAM
-TelePorter:
- bic r0,r0,#0x000000ff // 3. Re-map memory
- orr r0,r0,#0x8b // Flash -> 0x20000000
- str r0,[r1] // RAM -> 0x00000000 and 0x40000000
- mov pc,r3 // 4. Teleport back to Flash
-TelePort:
- .long MAC7100_MCM_AAMR
- .long TelePorter
- .long TelePort
- .long TelePortReturn
-TelePortReturn:
+ .macro _remap_memory
+ _TelePort
.endm
-// End memory re-mapping
+
+
+// Initialize paralel port
+ .macro _pio_init
+ .endm
+
#define CYGHWR_LED_MACRO _led \x
//===========================================================================
diff -r -U 5 -N -x CVS -x '*~' -x '.#*' clean/ecos/packages/hal/arm/mac7100/var/current/include/hal_variant_setup.h devo/ecos/packages/hal/arm/mac7100/var/current/include/hal_variant_setup.h
--- clean/ecos/packages/hal/arm/mac7100/var/current/include/hal_variant_setup.h 1970-01-01 01:00:00.000000000 +0100
+++ devo/ecos/packages/hal/arm/mac7100/var/current/include/hal_variant_setup.h 2006-06-06 08:47:46.000000000 +0200
@@ -0,0 +1,139 @@
+#ifndef CYGONCE_HAL_VARIANT_SETUP_H
+#define CYGONCE_HAL_VARIANT_SETUP_H
+
+//=============================================================================
+//
+// hal_variant_setup.h
+//
+// Variant specific support for HAL (assembly code)
+//
+//=============================================================================
+//####ECOSGPLCOPYRIGHTBEGIN####
+// -------------------------------------------
+// This file is part of eCos, the Embedded Configurable Operating System.
+// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
+// Copyright (C) 2003 Nick Garnett <nickg@calivar.com>
+// Copyright (C) 2006 eCosCentric Ltd
+//
+// eCos is free software; you can redistribute it and/or modify it under
+// the terms of the GNU General Public License as published by the Free
+// Software Foundation; either version 2 or (at your option) any later version.
+//
+// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
+// WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+// for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with eCos; if not, write to the Free Software Foundation, Inc.,
+// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+//
+// As a special exception, if other files instantiate templates or use macros
+// or inline functions from this file, or you compile this file and link it
+// with other works to produce a work based on this file, this file does not
+// by itself cause the resulting work to be covered by the GNU General Public
+// License. However the source code for this file must still be made available
+// in accordance with section (3) of the GNU General Public License.
+//
+// This exception does not invalidate any other reasons why a work based on
+// this file might be covered by the GNU General Public License.
+// -------------------------------------------
+//####ECOSGPLCOPYRIGHTEND####
+//=============================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s): Ilija Koco <ilijak@siva.com.mk>
+// Contributors:
+// Date: 2006-06-05
+// Purpose: MAC7100 variant specific support routines
+// Description:
+// Usage: in <cyg/hal/hal_platform_serup.h> include following:
+// #include <cyg/hal/hal_variant_setup.h>
+//
+//####DESCRIPTIONEND####
+//
+//===========================================================================
+
+// Clock initilalization
+// Initialize PLL
+#if defined(CYGNUM_HAL_ARM_MAC7100_FDIV) // Divider set by user.
+# define MAC7100_CRG_REFDV_VAL (CYGNUM_HAL_ARM_MAC7100_FDIV-1)
+#else // Divider calculated.
+ //NOTE: works for f_osc <= 8MHz
+# define MAC7100_CRG_REFDV_VAL (((CYGNUM_HAL_ARM_MAC7100_F_OSC/500000) - 1) & 0x0F) // 15 (1)
+#endif
+#define MAC7100_CRG_SYNR_VAL (CYGNUM_HAL_ARM_MAC7100_CLOCK_SPEED / 2 / \
+ (CYGNUM_HAL_ARM_MAC7100_F_OSC / (MAC7100_CRG_REFDV_VAL+1))-1) // 47 (5)
+
+#define MAC7100_CRG_PLLCTL_VAL \
+ (MAC7100_CRG_CME|MAC7100_CRG_PLLON|MAC7100_CRG_AUTO| \
+ MAC7100_CRG_ACQ|MAC7100_CRG_SCME)
+#define MAC7100_CRG_CLKSEL_VAL (MAC7100_CRG_PLLSEL)
+
+.macro _MAC7100_setPLL
+ ldr r2,=MAC7100_CRG_BASE
+ mov r3,#0
+ // Disable clock interrupts
+ strb r3,[r2,#(MAC7100_CRG_CRGINT-MAC7100_CRG_BASE)]
+ // DeSelect PLL clock
+ mov r3,#MAC7100_CRG_REFDV_VAL
+ // Reference Divider reg.
+ strb r3,[r2,#(MAC7100_CRG_REFDV-MAC7100_CRG_BASE)]
+ mov r3,#MAC7100_CRG_SYNR_VAL
+ // Synthesizer register
+ strb r3,[r2,#(MAC7100_CRG_SYNR-MAC7100_CRG_BASE)]
+ mov r3,#MAC7100_CRG_PLLCTL_VAL
+ // PLL control register
+ strb r3,[r2,#(MAC7100_CRG_PLLCTL-MAC7100_CRG_BASE)]
+ // Wait PLL lock <---
+1: ldrb r3,[r2,#(MAC7100_CRG_CRGFLG-MAC7100_CRG_BASE)]
+ tst r3,#MAC7100_CRG_LOCK
+ bne 2f // PLL locked, GO ON ----->>
+ b 1b // Still waiting for PLL lock -------------------------->
+2: mov r3,#MAC7100_CRG_CLKSEL_VAL // <<----
+ // Select PLL clock
+ strb r3,[r2,#(MAC7100_CRG_CLKSEL-MAC7100_CRG_BASE)]
+ mov r3,#0
+ strb r3,[r2,#(MAC7100_CRG_BDMCTL-MAC7100_CRG_BASE)] // Set CRG BDMCTL
+ mov r3,r3
+ .endm
+
+// Memory re-mapping
+// Re-map internal memory so that vectors can reside in RAM.
+// RAM base 0x00000000 (as well as 0x40000000)
+// Flash base 0x20000000
+
+ .macro _TelePort
+ ldr r1, TelePort //AAMR_REG
+ ldr r0, [r1]
+
+ mvn r4, #0xf0000000 // 1. Copy telepoter to RAM
+ ldr r2, TelePort+4 // TelePorter
+ ldr r3, TelePort+8 // TelePort (TelePorter end)
+ and r2,r2,r4
+ and r3,r3,r4
+ mov r4, #0x40000000 // RAM address
+1: //CopyTelePorter: // copying teleporter
+ ldr r5,[r2],#4 // <---
+ str r5,[r4],#4
+ cmp r2,r3
+ bne 1b //CopyTelePorter // --->
+ ldr r3,TelePort+12
+ mov pc,#0x40000000 // 2. Jump to TelePorter in RAM
+TelePorter:
+ bic r0,r0,#0x000000ff // 3. Re-map memory
+ orr r0,r0,#0x8b // Flash -> 0x20000000
+ str r0,[r1] // RAM -> 0x00000000 and 0x40000000
+ mov pc,r3 // 4. Teleport back to Flash
+TelePort:
+ .long MAC7100_MCM_AAMR
+ .long TelePorter
+ .long TelePort
+ .long TelePortReturn
+TelePortReturn:
+ .endm
+// End memory re-mapping
+
+//-----------------------------------------------------------------------------
+// end of hal_variant_setup.h
+#endif // CYGONCE_HAL_VARIANT_SETUP_H
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: hal_platform_setup.h - Approach to a new platform port
2006-06-06 7:27 hal_platform_setup.h - Approach to a new platform port Ilija Koco
@ 2006-06-06 12:02 ` Andrew Lunn
2006-06-06 13:02 ` Ilija Koco
0 siblings, 1 reply; 5+ messages in thread
From: Andrew Lunn @ 2006-06-06 12:02 UTC (permalink / raw)
To: Ilija Koco; +Cc: ecos-devel
On Tue, Jun 06, 2006 at 09:27:20AM +0200, Ilija Koco wrote:
i> Hi
>
> I am preparing to add new platform port, so I consider placing common
> variant setup code in a common header hal_variant_setup.h
>
> Since this is not a common practice i would like to hear your opinion.
> Advantage of such organization is avoiding multiple copies of the code
> that is going to be same for all platforms:
>
> - PLL clock initialization (all parameters are set by cdl so no
> changes in code are needed)
> - Memory re-mapping (This may need additional code for system,s with
> external memory, but it can then be added in hal_platform_setup_h when
> needed.
>
> Attached diff file wou'd give you a breif picture (current port only).
> Pliease give your comments so I could proceed on.
The principal seems O.K. to me.
I would call the file hal_var_setup.h since that is the normally used
abbreviation for varient, eg var_io.h, hal_var_ints.h.
Andrew
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: hal_platform_setup.h - Approach to a new platform port
2006-06-06 12:02 ` Andrew Lunn
@ 2006-06-06 13:02 ` Ilija Koco
2006-06-06 16:15 ` Andrew Lunn
0 siblings, 1 reply; 5+ messages in thread
From: Ilija Koco @ 2006-06-06 13:02 UTC (permalink / raw)
To: Andrew Lunn; +Cc: ecos-devel
Andrew Lunn wrote:
> On Tue, Jun 06, 2006 at 09:27:20AM +0200, Ilija Koco wrote:
> i> Hi
>
>> I am preparing to add new platform port, so I consider placing common
>> variant setup code in a common header hal_variant_setup.h
>>
>> Since this is not a common practice i would like to hear your opinion.
>> Advantage of such organization is avoiding multiple copies of the code
>> that is going to be same for all platforms:
>>
>> - PLL clock initialization (all parameters are set by cdl so no
>> changes in code are needed)
>> - Memory re-mapping (This may need additional code for system,s with
>> external memory, but it can then be added in hal_platform_setup_h when
>> needed.
>>
>> Attached diff file wou'd give you a breif picture (current port only).
>> Pliease give your comments so I could proceed on.
>>
>
> The principal seems O.K. to me.
>
> I would call the file hal_var_setup.h since that is the normally used
> abbreviation for varient, eg var_io.h, hal_var_ints.h.
>
> Andrew
>
It wont be bad, but I derived from hal_platform_setup.h that has
"platform" instead of "plf" (as usual). Also these files contain
assembler rater than C source so maybe it's better if they are
distinguished by their names as they are now.
With respect to this, If you agree, I would keep hal_variant_setup.h
Please comment!
Ilija
>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: hal_platform_setup.h - Approach to a new platform port
2006-06-06 13:02 ` Ilija Koco
@ 2006-06-06 16:15 ` Andrew Lunn
2006-06-07 12:23 ` Ilija Koco
0 siblings, 1 reply; 5+ messages in thread
From: Andrew Lunn @ 2006-06-06 16:15 UTC (permalink / raw)
To: Ilija Koco; +Cc: ecos-devel
> It wont be bad, but I derived from hal_platform_setup.h that has
> "platform" instead of "plf" (as usual). Also these files contain
> assembler rater than C source so maybe it's better if they are
> distinguished by their names as they are now.
If you want to indicate it contain assembly language it probably
should be .inc not .h. eg see ./powerpc/mpc5xx/current/include/variant.inc
Andrew
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: hal_platform_setup.h - Approach to a new platform port
2006-06-06 16:15 ` Andrew Lunn
@ 2006-06-07 12:23 ` Ilija Koco
0 siblings, 0 replies; 5+ messages in thread
From: Ilija Koco @ 2006-06-07 12:23 UTC (permalink / raw)
To: ecos-devel
It seems to me there isn't much consistency in naming since
hal_platform_setup.h is assembler too. With respect to this I would stay
with hal_variant_setup.h
Ilija
Andrew Lunn wrote:
>> It wont be bad, but I derived from hal_platform_setup.h that has
>> "platform" instead of "plf" (as usual). Also these files contain
>> assembler rater than C source so maybe it's better if they are
>> distinguished by their names as they are now.
>>
>
> If you want to indicate it contain assembly language it probably
> should be .inc not .h. eg see ./powerpc/mpc5xx/current/include/variant.inc
>
> Andrew
>
>
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2006-06-07 12:23 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-06-06 7:27 hal_platform_setup.h - Approach to a new platform port Ilija Koco
2006-06-06 12:02 ` Andrew Lunn
2006-06-06 13:02 ` Ilija Koco
2006-06-06 16:15 ` Andrew Lunn
2006-06-07 12:23 ` Ilija Koco
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).