public inbox for ecos-devel@sourceware.org
 help / color / mirror / Atom feed
* 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).