changeset 3169:d739dc63d0e7

Add: Clocking support for PLL1 (K70), DDRAM controller Cache, eDMA - 32 chan. [Bugzilla 1001579
author vae
date Wed, 09 May 2012 22:14:17 +0000
parents 2a048cafed94
children 07b48df106b8
files packages/hal/cortexm/kinetis/var/current/ChangeLog packages/hal/cortexm/kinetis/var/current/cdl/hal_cortexm_kinetis.cdl packages/hal/cortexm/kinetis/var/current/cdl/kinetis_clocking.cdl packages/hal/cortexm/kinetis/var/current/cdl/kinetis_flexbus.cdl packages/hal/cortexm/kinetis/var/current/include/hal_cache.h packages/hal/cortexm/kinetis/var/current/include/var_io.h packages/hal/cortexm/kinetis/var/current/include/var_io_ddrmc.h packages/hal/cortexm/kinetis/var/current/include/var_io_devs.h packages/hal/cortexm/kinetis/var/current/include/var_io_lmem.h packages/hal/cortexm/kinetis/var/current/src/kinetis_clocking.c packages/hal/cortexm/kinetis/var/current/src/kinetis_ddram.c packages/hal/cortexm/kinetis/var/current/src/kinetis_misc.c
diffstat 12 files changed, 1730 insertions(+), 213 deletions(-) [+]
line wrap: on
line diff
--- a/packages/hal/cortexm/kinetis/var/current/ChangeLog
+++ b/packages/hal/cortexm/kinetis/var/current/ChangeLog
@@ -1,3 +1,18 @@
+2012-05-04  Ilija Kocho  <ilijak@siva.com.mk>
+
+	* cdl/hal_cortexm_kinetis.cdl:
+	* src/kinetis_clocking.cdl:
+	* src/kinetis_clocking.c:
+	* include/hal_cache.h
+	* include/var_io_lmem.h:
+	* include/var_io_ddrmc.h:
+	* include/var_io_devs.h:
+	* include/var_io.h:
+	* src/kinetis_ddram.c:
+	* src/kinetis_misc.c:
+    Add: Clocking support for PLL1 (K70), DDRAM controller
+    Cache, eDMA - 32 chan. [Bugzilla 1001579]
+
 2012-01-11  Tomas Frydrych <tomas@sleepfive.com>
 
 	* include/var_io.h:
@@ -9,7 +24,7 @@ 2012-01-11  Tomas Frydrych <tomas@sleepf
 
 2012-01-05  Ilija Kocho  <ilijak@siva.com.mk>
 
-    * cdl/kinetis_irq_scheme.cdl
+	* cdl/kinetis_irq_scheme.cdl
     Centralized IRQ priority scheme.
 
 	* cdl/hal_cortexm_kinetis.cdl:
@@ -65,7 +80,7 @@ 2011-10-19  Ilija Kocho  <ilijak@siva.co
 // ####GPLCOPYRIGHTBEGIN####
 // -------------------------------------------
 // This file is part of eCos, the Embedded Configurable Operating System.
-// Copyright (C) 2011, 2012 Free Software Foundation, Inc.
+// Copyright (C) 2011 Free Software Foundation, Inc.
 //
 // This program is free software; you can redistribute it and/or modify
 // it under the terms of the GNU General Public License as published by
--- a/packages/hal/cortexm/kinetis/var/current/cdl/hal_cortexm_kinetis.cdl
+++ b/packages/hal/cortexm/kinetis/var/current/cdl/hal_cortexm_kinetis.cdl
@@ -65,7 +65,7 @@ cdl_package CYGPKG_HAL_CORTEXM_KINETIS {
     implements    CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT
 
     requires      { CYGHWR_HAL_CORTEXM == "M4" }
-
+    requires      { CYGHWR_HAL_CORTEXM_FPU implies CYGHWR_HAL_CORTEXM_KINETIS_FPU }
     define_proc {
         puts $::cdl_system_header "#define CYGBLD_HAL_TARGET_H   <pkgconf/hal_cortexm.h>"
         puts $::cdl_system_header "#define CYGBLD_HAL_VARIANT_H  <pkgconf/hal_cortexm_kinetis.h>"
@@ -99,9 +99,9 @@ cdl_package CYGPKG_HAL_CORTEXM_KINETIS {
 
         cdl_option CYGHWR_HAL_CORTEXM_KINETIS_FPU {
             display          "Floating Point Unit option"
-            implements    CYGINT_HAL_CORTEXM_FPU
             flavor           bool
-            default_value    { 0 }
+            implements       CYGINT_HAL_CORTEXM_FPV4_SP_D16
+            default_value    { CYGINT_HAL_CORTEXM_FPV4_SP_D16 }
             description "Select whether the chip has Floating Point Unit."
         }
 
@@ -121,6 +121,14 @@ cdl_package CYGPKG_HAL_CORTEXM_KINETIS {
             default_value    { 0 }
             description "Select whether the chip has FlexNVM."
         }
+
+        cdl_option CYGHWR_HAL_CORTEXM_KINETIS_REV {
+            display "Kinetis revision"
+            flavor data
+            legal_values 1 2
+            default_value 1
+            description "Revision"
+        }
     }
 
     cdl_option CYGNUM_HAL_CORTEXM_PRIORITY_LEVEL_BITS {
@@ -144,10 +152,22 @@ cdl_package CYGPKG_HAL_CORTEXM_KINETIS {
             display "System frequency clock setpoint"
             flavor data
             legal_values  32768 to 220000000
-            default_value 96000000
+            default_value { CYGNUM_HAL_CORTEXM_KINETIS_PLF_CLOCK_FREQ_SP ?
+                CYGNUM_HAL_CORTEXM_KINETIS_PLF_CLOCK_FREQ_SP : 96000000 }
             description "Desired system clock frequency"
         }
-       script kinetis_clocking.cdl
+
+        cdl_option CYGNUM_HAL_CORTEXM_KINETIS_AUX_FREQ_SP {
+            display "Auxiliary clock frequency setpoint"
+            flavor data
+            active_if CYGINT_HAL_CORTEXM_KINETIS_HAS_PLL1
+            legal_values  32768 to 220000000
+            default_value { CYGNUM_HAL_CORTEXM_KINETIS_PLF_AUX_FREQ_SP ?
+                CYGNUM_HAL_CORTEXM_KINETIS_PLF_AUX_FREQ_SP : 96000000 }
+            description "Desired auxiliary clock frequency"
+        }
+
+        script kinetis_clocking.cdl
     }
 
     cdl_option CYGNUM_HAL_KERNEL_COUNTERS_CLOCK_ISR_DEFAULT_PRIORITY {
@@ -466,6 +486,71 @@ cdl_package CYGPKG_HAL_CORTEXM_KINETIS {
                 calculated { 4096 }
             }
 
+            cdl_interface CYGINT_HAL_CACHE {
+                display "Platform has cache"
+                flavor bool
+            }
+
+            cdl_interface CYGINT_HAL_HAS_NONCACHEABLE {
+                display "Platform has non-cacheable regions"
+                flavor bool
+            }
+        }
+
+        cdl_component CYGPKG_HAL_KINETIS_CACHE {
+            display "Cache memory"
+            flavor bool
+
+            default_value CYGINT_HAL_CACHE
+            active_if (CYGINT_HAL_CACHE)
+
+            cdl_component CYGHWR_HAL_NON_CACHABLE {
+                display "Non cacheable memory regions"
+                flavor data
+                active_if CYGINT_HAL_HAS_NONCACHEABLE
+                legal_values { "\".sram\"" "\".noncache\"" }
+                default_value { "\".noncache\"" }
+
+                cdl_option CYGHWR_HAL_ENET_TCD_SECTION {
+                    display "Ethernet buffer descriptor memory section"
+                    flavor data
+                    legal_values { "\".sram\"" "\".noncache\"" }
+                    default_value { "\".sram\"" }
+
+                    description "Ethernet is a bus master so buffers/buffer
+                        descriptos must reside in non-cacheable memory"
+                }
+
+                cdl_option CYGHWR_HAL_ENET_BUF_SECTION {
+                    display "Ethernet buffer memory section"
+                    flavor data
+                    legal_values { "\".sram\"" "\".noncache\"" }
+                    default_value { "\".noncache\"" }
+
+                    description "Ethernet is a bus master so buffers/buffer
+                        descriptos must reside in non-cacheable memory"
+                    }
+
+                cdl_option CYGHWR_HAL_EDMA_TCD_SECTION {
+                    display "eDMA transfer control descriptor memory section"
+                    flavor data
+                    legal_values { "\".sram\"" "\".noncache\"" }
+                    default_value { "\".sram\"" }
+
+                    description "eDMA is a bus master so buffers/buffer
+                        descriptos must reside in non-cacheable memory"
+                }
+
+                cdl_option CYGHWR_HAL_EDMA_BUF_SECTION {
+                    display "eDMA buffer memory section"
+                    flavor data
+                    legal_values { "\".sram\"" "\".noncache\"" }
+                    default_value { "\".noncache\"" }
+
+                    description "eDMA is a bus master so buffers/buffer
+                        descriptos must reside in non-cacheable memory"
+                }
+            }
         }
 
         cdl_interface CYGINT_HAL_CORTEXM_KINETIS_FLEXBUS {
@@ -575,6 +660,107 @@ cdl_package CYGPKG_HAL_CORTEXM_KINETIS {
         }
     }
 
+    cdl_interface CYGINT_HAL_CORTEXM_KINETIS_DDRAM {
+        display "Platform uses SDRAM"
+        flavor bool
+        description "
+        This interface will be implemented if the specific
+        controller being used provides FlexBus and if FlexBus is
+        used on target hardware"
+    }
+
+    cdl_component CYGPKG_HAL_CORTEXM_KINETIS_DDRMC {
+        display       "SDRAM"
+        flavor bool
+        active_if     CYGINT_HAL_CORTEXM_KINETIS_DDRAM
+        default_value CYGINT_HAL_CORTEXM_KINETIS_DDRAM
+        description "SDRAM external RAM."
+
+        requires CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL1
+        compile kinetis_ddram.c
+
+        cdl_option CYGHWR_HAL_KINETIS_DDR_CACHE_TYPE {
+            display "DDR cache type"
+            flavor data
+            calculated  CYGSEM_HAL_DCACHE_STARTUP_MODE
+        }
+
+        cdl_option CYGHWR_HAL_KINETIS_DDR_BASE {
+            display "Cacheable DDRAM base address"
+            flavor data
+            default_value    0x70000000
+        }
+
+        cdl_option CYGHWR_HAL_KINETIS_DDR_SIZE_MIB {
+            display "DDRAM size \[MiB\]"
+            flavor data
+            default_value 128
+        }
+
+        cdl_option CYGHWR_HAL_KINETIS_DDR_NON_CACHED_SIZE_MIB {
+            display "Non-cacheable DDRAM size \[MiB\]"
+            requires { CYGHWR_HAL_KINETIS_DDR_NON_CACHED_SIZE_MIB <=
+                CYGHWR_HAL_KINETIS_DDR_SIZE_MIB }
+            flavor data
+
+            implements CYGINT_HAL_HAS_NONCACHEABLE
+
+            default_value 16
+        }
+
+        cdl_option CYGHWR_HAL_KINETIS_DDR_SIZE {
+            display "DDRAM size \[MiB\]"
+            flavor data
+            calculated { CYGHWR_HAL_KINETIS_DDR_SIZE_MIB * (1024 * 1024) * 0x1 }
+        }
+
+        cdl_option CYGHWR_HAL_KINETIS_DDR_CACHED_SIZE_MIB {
+            display "Cacheable DDRAM size \[MiB\]"
+            flavor data
+            calculated { CYGHWR_HAL_KINETIS_DDR_SIZE_MIB -
+                CYGHWR_HAL_KINETIS_DDR_NON_CACHED_SIZE_MIB}
+        }
+
+        cdl_option CYGHWR_HAL_KINETIS_DDR_CACHED_SIZE {
+            display "Cacheable DDRAM size \[Bytes\]"
+            flavor data
+            calculated { (CYGHWR_HAL_KINETIS_DDR_SIZE -
+                           CYGHWR_HAL_KINETIS_DDR_NON_CACHED_SIZE) * 0x1 }
+        }
+
+        cdl_option CYGHWR_HAL_KINETIS_DDR_NON_CACHED_BASE {
+            display "Non-cacheable DDRAM base address"
+            flavor data
+
+            calculated { 0x80000000 + CYGHWR_HAL_KINETIS_DDR_CACHED_SIZE }
+        }
+
+        cdl_option CYGHWR_HAL_KINETIS_DDR_NON_CACHED_SIZE {
+            display "Non-cacheable DDRAM size \[Bytes\]"
+            flavor data
+            calculated { CYGHWR_HAL_KINETIS_DDR_NON_CACHED_SIZE_MIB
+                           * (1024 * 1024) * 0x1 }
+        }
+
+        cdl_option CYGHWR_HAL_DDR_SYNC_MODE {
+            display "Synchronous mode"
+            flavor bool
+            requires { CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK == "PLL1" }
+            default_value { 1 }
+        }
+
+        cdl_option CYGHWR_HAL_KINETIS_SIM_MCR_DDRBUS {
+            display "DDR bus configuration"
+            flavor data
+            legal_values 0 1 2 3 6
+            default_value 6
+            description "
+                DDRAM configuration: 0 - LPDDR Half Strength,
+                1 - LPDDR Full Strength, 2 - DDR2 Half Strength,
+                3 - DDR1, 6 - DDR2 Full Strength"
+        }
+    }
+
     for { set ::channel 0 } { $::channel < 6 } { incr ::channel } {
 
         cdl_interface CYGINT_HAL_FREESCALE_UART[set ::channel] {
--- a/packages/hal/cortexm/kinetis/var/current/cdl/kinetis_clocking.cdl
+++ b/packages/hal/cortexm/kinetis/var/current/cdl/kinetis_clocking.cdl
@@ -58,8 +58,9 @@
             CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_INT_RC   :
             CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_EXT_RC   ?
             CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_EXT_RC   :
-            CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL      ?
-            CYGNUM_HAL_CORTEXM_KINETIS_MCG_PLL_FREQ_AV :
+            (CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL ||
+             CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL1)   ?
+            CYGNUM_HAL_CORTEXM_KINETIS_MCG_PLLSEL_FREQ_AV:
             CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_FLL      ?
             CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_FREQ_AV :
             0
@@ -83,9 +84,15 @@
         cdl_option CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK {
             display "System clock source"
             flavor data
-            default_value { "PLL" }
+            default_value { CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL1 == 1 ? "PLL1" : "PLL" }
             legal_values {
-                "PLL" "FLL" "EXT_REFCLK"
+                "PLL" "FLL" "EXT_REFCLK" ( CYGINT_HAL_CORTEXM_KINETIS_HAS_PLL1 ? "PLL1" : "PLL" )
+            }
+            requires { CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK == "PLL" implies
+                CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL == 1
+            }
+            requires { CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK == "PLL1" implies
+                CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL1 == 1
             }
             description "
                 Select one of 3 options for MCG output clock:
@@ -102,61 +109,141 @@
             }
             description "Set External Reference Clock frequency and type."
 
-            cdl_option CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS {
-                display "Clock type"
+            cdl_component CYGHWR_HAL_CORTEXM_KINETIS_MCG_REF_EXT0 {
+                display "External freq ref 0"
                 flavor data
-                default_value { "OSC" }
-                legal_values { "OSC" "XTAL" "RTC"}
+                no_define
+                calculated { CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS . " " .
+                    CYGHWR_HAL_CORTEXM_KINETIS_MCG_REF_EXT_FREQ
+                }
+                cdl_option CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS {
+                    display "Clock type"
+                    flavor data
+                    default_value { "OSC" }
+                    legal_values { "OSC" "XTAL" "RTC"}
+
+                    requires {
+                        (CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS == "OSC") implies
+                        (CYGHWR_HAL_CORTEXM_KINETIS_MCG_REF_EXT_FREQ <= 50000000)
+                    }
 
-                requires {
-                    (CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS == "OSC") implies
-                    (CYGHWR_HAL_CORTEXM_KINETIS_MCG_REF_EXT_FREQ <= 50000000)
+                    requires {
+                        (CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS == "XTAL") implies
+                        (((CYGHWR_HAL_CORTEXM_KINETIS_MCG_REF_EXT_FREQ >= 3000000) &&
+                          (CYGHWR_HAL_CORTEXM_KINETIS_MCG_REF_EXT_FREQ <= 32000000)) ||
+                          ((CYGHWR_HAL_CORTEXM_KINETIS_MCG_REF_EXT_FREQ >= 32000) &&
+                           (CYGHWR_HAL_CORTEXM_KINETIS_MCG_REF_EXT_FREQ <= 40000)))
+                    }
+
+                    requires { (CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS == "RTC")
+                        implies (CYGHWR_HAL_CORTEXM_KINETIS_RTC == 1)
+                    }
+                    requires { (CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS == "RTC")
+                        implies (CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK == "FLL")
+                    }
+                    requires { (CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS == "RTC")
+                        implies (CYGHWR_HAL_CORTEXM_KINETIS_MCG_REF_EXT_FREQ == 32768)
+                    }
+
+                    description "
+                    Ext reference can be External oscillator or a crystal
+                    for the on-chip oscillator or Real Time Clock."
                 }
 
-                requires {
-                    (CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS == "XTAL") implies
-                    (((CYGHWR_HAL_CORTEXM_KINETIS_MCG_REF_EXT_FREQ >= 3000000) &&
-                      (CYGHWR_HAL_CORTEXM_KINETIS_MCG_REF_EXT_FREQ <= 32000000)) ||
-                      ((CYGHWR_HAL_CORTEXM_KINETIS_MCG_REF_EXT_FREQ >= 32000) &&
-                       (CYGHWR_HAL_CORTEXM_KINETIS_MCG_REF_EXT_FREQ <= 40000)))
+                cdl_option CYGHWR_HAL_CORTEXM_KINETIS_MCG_REF_EXT_FREQ {
+                    display "Clock frequency"
+                    flavor data
+                    legal_values  0 to 50000000
+                    default_value {
+                        is_active(CYGHWR_HAL_CORTEXM_KINETIS_PLF_XTAL_OR_OSC_FREQ) ?
+                        CYGHWR_HAL_CORTEXM_KINETIS_PLF_XTAL_OR_OSC_FREQ :
+                        4000000
+                    }
+                    description "External oscillator or crystal reference in Hz."
                 }
 
-                requires { (CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS == "RTC")
-                    implies (CYGHWR_HAL_CORTEXM_KINETIS_RTC == 1)
-                }
-                requires { (CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS == "RTC")
-                    implies (CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK == "FLL")
+                cdl_option CYGHWR_HAL_CORTEXM_KINETIS_OSC_CAP {
+                    display "XTAL parallel C \[pF\]"
+                    flavor data
+                    active_if { CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS == "XTAL" }
+                    legal_values { 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 }
+                    default_value 0
+                    description "
+                        The oscillator has 4 on-chip capacitors that combined
+                        produce capacitance in parallel to the crystal."
                 }
-                requires { (CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS == "RTC")
-                    implies (CYGHWR_HAL_CORTEXM_KINETIS_MCG_REF_EXT_FREQ == 32768)
-                }
-
-                description "
-                    Ext reference can be External oscillator or a crystal
-                    for the on-chip oscillator or Real Time Clock."
             }
 
-            cdl_option CYGHWR_HAL_CORTEXM_KINETIS_MCG_REF_EXT_FREQ {
-                display "Clock frequency"
+            cdl_component CYGHWR_HAL_CORTEXM_KINETIS_MCG_REF_EXT1 {
+                display "External freq ref 1"
                 flavor data
-                legal_values  0 to 50000000
-                default_value {
-                    is_active(CYGHWR_HAL_CORTEXM_KINETIS_PLF_XTAL_OR_OSC_FREQ) ?
-                    CYGHWR_HAL_CORTEXM_KINETIS_PLF_XTAL_OR_OSC_FREQ :
-                    4000000
+                no_define
+                active_if CYGINT_HAL_CORTEXM_KINETIS_HAS_OSC1
+                calculated { CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_IS . " " .
+                    CYGHWR_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_FREQ
                 }
-                description "External oscillator or crystal reference in Hz."
-            }
+                cdl_option CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_IS {
+                    display "Clock type"
+                    flavor data
+                    default_value { "OSC" }
+                    legal_values { "OSC" "XTAL" }
+
+                    requires {
+                        (CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_IS == "OSC") implies
+                        (CYGHWR_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_FREQ <= 50000000)
+                    }
+
+                    requires {
+                        (CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_IS == "XTAL") implies
+                        (((CYGHWR_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_FREQ >= 3000000) &&
+                          (CYGHWR_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_FREQ <= 32000000)) ||
+                          ((CYGHWR_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_FREQ >= 32000) &&
+                           (CYGHWR_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_FREQ <= 40000)))
+                    }
 
-            cdl_option CYGHWR_HAL_CORTEXM_KINETIS_OSC_CAP {
-                display "XTAL parallel C \[pF\]"
-                flavor data
-                active_if { CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS == "XTAL" }
-                legal_values { 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 }
-                default_value 0
-                description "
-                    The oscillator has 4 on-chip capacitors that combined
-                    produce capacitance in parallel to the crystal."
+                   requires { (CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_IS == "RTC")
+                       implies (CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL == 0)
+                   }
+                   requires { (CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_IS == "RTC")
+                       implies (CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL1 == 0)
+                   }
+                   requires { (CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_IS == "RTC")
+                       implies (CYGHWR_HAL_CORTEXM_KINETIS_RTC == 1)
+                   }
+                   requires { (CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_IS == "RTC")
+                       implies (CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK == "FLL")
+                   }
+                   requires { (CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_IS == "RTC")
+                       implies (CYGHWR_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_FREQ == 32768)
+                   }
+
+                    description "
+                    Ext reference can be External oscillator or a crystal
+                    for the on-chip oscillator or Real Time Clock."
+                }
+
+                cdl_option CYGHWR_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_FREQ {
+                    display "Clock frequency"
+                    flavor data
+                    legal_values  0 to 50000000
+                    default_value {
+                        is_active(CYGHWR_HAL_CORTEXM_KINETIS_PLF_XTAL_OR_OSC1_FREQ) ?
+                        CYGHWR_HAL_CORTEXM_KINETIS_PLF_XTAL_OR_OSC1_FREQ :
+                        4000000
+                    }
+                    description "External oscillator or crystal reference in Hz."
+                }
+
+                cdl_option CYGHWR_HAL_CORTEXM_KINETIS_OSC1_CAP {
+                    display "XTAL parallel C \[pF\]"
+                    flavor data
+                    active_if { CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_IS == "XTAL" }
+                    legal_values { 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 }
+                    default_value 0
+                    description "
+                        The oscillator has 4 on-chip capacitors that combined
+                        produce capacitance in parallel to the crystal."
+                }
             }
         }
 
@@ -173,7 +260,12 @@
                 display "PLL/FLL output frequency set point"
                 flavor data
                 legal_values  32768 to 220000000
-                calculated CYGNUM_HAL_CORTEXM_KINETIS_MCGOUT_FREQ_SP
+                calculated {
+                    ((CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK == "PLL") ||
+                     (CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK == "FLL")) ?
+                        CYGNUM_HAL_CORTEXM_KINETIS_MCGOUT_FREQ_SP :
+                        CYGNUM_HAL_CORTEXM_KINETIS_AUX_FREQ_SP
+                }
                 description "Desired PLL output frequency."
             }
 
@@ -186,11 +278,23 @@
                     implies (CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK == "FLL")
                 }
 
-                legal_values { "INT_RC_32KHZ" "EXT_REFCLK" }
+                legal_values { "INT_RC_32KHZ" "EXT_REFCLK" "EXT_REFCLK1" }
                 description "
-                    PLL/FLL oscillators can use one of 3 clock
-                    references: External Reference Clock or Low (32768 Hz)
-                    or High (2MHz) Frequency Internal oscillator"
+                PLL/FLL oscillators can use one of external reference
+                clock references as well as Low (32768 Hz) or High (2MHz)
+                Frequency Internal oscillator"
+            }
+
+            cdl_option CYGOPT_HAL_CORTEXM_KINETIS_MCG_PLL1_REFSRC {
+                display "Reference clock source for PLL1"
+                active_if CYGINT_HAL_CORTEXM_KINETIS_HAS_PLL1
+                flavor data
+                default_value { "EXT_REFCLK" }
+
+                legal_values { "EXT_REFCLK" "EXT_REFCLK1" }
+                description "
+                    PLL1 oscillator can use one of 2 external reference clock
+                    references."
             }
 
             cdl_component CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_REF_FREQ {
@@ -209,6 +313,7 @@
                 no_define
                 active_if { CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK == "FLL" ||
                     CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK == "PLL" ||
+                    CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK == "PLL1" ||
                     CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK == "EXT_REFCLK"
                 }
 
@@ -262,12 +367,12 @@
                 cdl_option CYGNUM_HAL_CORTEXM_MCG_DCO_DMX32 {
                     display "DCO max. frequency with 32768 reference"
                     flavor data
-                    legal_values 0 0x80
+                    legal_values { 0 0x80 }
                     default_value {
                         ((CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_FREQ_SP == 96000000) ||
                          (CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_FREQ_SP == 72000000) ||
                          (CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_FREQ_SP == 48000000) ||
-                         (CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_FREQ_SP == 24000000)) ?
+                         (CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_FREQ_SP > 9600000)) ?
                         0x80 : 0x00
                     }
                 }
@@ -326,67 +431,172 @@
 
             cdl_component CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL {
                 display "PLL oscillator"
-                flavor none
-                no_define
-                active_if { CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK == "PLL" ||
-                    CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK == "EXT_REFCLK"
+                flavor bool
+                default_value 1
+#                { CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK == "FLL" ? 0 : 1 }
+#                active_if { CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK == "PLL" ||
+#                    CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK == "EXT_REFCLK"
+#                }
+
+                cdl_component CYGOPT_HAL_CORTEXM_KINETIS_100_MCGOUT_PLL {
+                    display "100 Mhz line"
+                    flavor none
+                    no_define
+                    active_if !CYGINT_HAL_CORTEXM_KINETIS_150
+
+                    cdl_option CYGNUM_HAL_CORTEXM_KINETIS_100_MCGOUT_PLL_INFREQ_X {
+                        display "Phase detector proposed input frequency"
+                        no_define
+                        flavor data
+                        calculated {
+                            (CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_FREQ_SP > 180000000) ?
+                            3800000 :
+                            (CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_FREQ_SP > 110000000) ?
+                            3000000 :
+                            !(CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_FREQ_SP % 3) ? 2000000 :
+                            !(CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_FREQ_SP % 4) ? 2000000 :
+                            !(CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_FREQ_SP % 5) ? 2500000 :
+                            300000
+                        }
+                    }
+
+                    cdl_option CYGOPT_HAL_CORTEXM_KINETIS_100_MCGOUT_PLL_PRDIV {
+                        display "PLL External Reference Divider"
+                        flavor data
+                        legal_values 1 to 25
+                        default_value {
+                            CYGNUM_HAL_CORTEXM_KINETIS_100_MCGOUT_PLL_INFREQ_X ?
+                            (CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_REF_FREQ /
+                             CYGNUM_HAL_CORTEXM_KINETIS_100_MCGOUT_PLL_INFREQ_X ) : -1
+                        }
+                    }
+
+                    cdl_option CYGNUM_HAL_CORTEXM_KINETIS_100_MCGOUT_PLL_INFREQ {
+                        display "Phase detector input frequency"
+                        no_define
+                        flavor data
+                        legal_values 2000000 to 4000000
+                        calculated { CYGOPT_HAL_CORTEXM_KINETIS_100_MCGOUT_PLL_PRDIV ?
+                            (CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_REF_FREQ /
+                             CYGOPT_HAL_CORTEXM_KINETIS_100_MCGOUT_PLL_PRDIV) : -1
+                        }
+                    }
+
+                    cdl_option CYGOPT_HAL_CORTEXM_KINETIS_100_MCGOUT_PLL_VDIV {
+                        display "VCO Divider"
+                        flavor data
+                        legal_values 24 to 55
+                        default_value { CYGNUM_HAL_CORTEXM_KINETIS_100_MCGOUT_PLL_INFREQ ?
+                            (CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_FREQ_SP /
+                             CYGNUM_HAL_CORTEXM_KINETIS_100_MCGOUT_PLL_INFREQ) : -1
+                        }
+                    }
+
+                    cdl_option CYGNUM_HAL_CORTEXM_KINETIS_100_MCG_PLL_FREQ_AV {
+                        display "PLL output frequency actual value"
+                        flavor data
+                        calculated { CYGOPT_HAL_CORTEXM_KINETIS_100_MCGOUT_PLL_PRDIV ?
+                            (CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_REF_FREQ /
+                             CYGOPT_HAL_CORTEXM_KINETIS_100_MCGOUT_PLL_PRDIV *
+                             CYGOPT_HAL_CORTEXM_KINETIS_100_MCGOUT_PLL_VDIV) : -1
+                        }
+                    }
                 }
 
-                cdl_option CYGNUM_HAL_CORTEXM_KINETIS_MCGOUT_PLL_INFREQ_X {
-                    display "Phase detector proposed input frequency"
+                cdl_component CYGOPT_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL {
+                    display "150 Mhz line"
+                    flavor none
                     no_define
-                    flavor data
-                    calculated {
-                        (CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_FREQ_SP > 180000000) ?
-                        3800000 :
-                        (CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_FREQ_SP > 110000000) ?
-                        3000000 :
-                        !(CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_FREQ_SP % 3) ? 2000000 :
-                        !(CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_FREQ_SP % 4) ? 2000000 :
-                        !(CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_FREQ_SP % 5) ? 2500000 :
-                        300000
+                    active_if CYGINT_HAL_CORTEXM_KINETIS_150
+
+                    cdl_option CYGNUM_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL_INFREQ_X {
+                        display "Phase detector proposed input frequency"
+                        no_define
+                        flavor data
+                        legal_values 1000000 to 32000000
+                        default_value {
+                            (CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_REF_FREQ == 50000000) ?
+                            (!(CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_FREQ_SP % 48000000) ? 50000000/8 : 50000000/5) :
+                            !(CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_FREQ_SP % 30000000) ? 30000000 :
+                            !(CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_FREQ_SP % 4000000) ? 4000000 :
+                            5000000
+                        }
+                    }
+
+                    cdl_option CYGHWR_HAL_CORTEXM_KINETIS_PLLREFSEL {
+                        display "PLL0 Reference Oscillator select"
+                        flavor data
+                        default_value 0
+                        legal_values 0 1
+                    }
+
+                    cdl_option CYGOPT_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL_PRDIV {
+                        display "PLL External Reference Divider"
+                        flavor data
+                        legal_values 1 to 8
+                        default_value {
+                            CYGNUM_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL_INFREQ_X ?
+                            (CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_REF_FREQ /
+                             CYGNUM_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL_INFREQ_X ) : -1
+                        }
+                    }
+
+                    cdl_option CYGNUM_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL_INFREQ {
+                        display "Phase detector input frequency"
+                        no_define
+                        flavor data
+                        legal_values 1000000 to 32000000
+                        calculated { CYGOPT_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL_PRDIV ?
+                            (CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_REF_FREQ /
+                             CYGOPT_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL_PRDIV) : -1
+                        }
+                    }
+
+                    cdl_option CYGOPT_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL_VDIV {
+                        display "VCO Divider"
+                        flavor data
+                        legal_values 16 to 47
+                        default_value { CYGNUM_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL_INFREQ ?
+                            ((CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_FREQ_SP /
+                             CYGNUM_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL_INFREQ) * 2) : -1
+                        }
+                    }
+
+                    cdl_option CYGNUM_HAL_CORTEXM_KINETIS_150_MCG_PLL_FREQ_AV {
+                        display "PLL output frequency actual value"
+                        flavor data
+                        calculated { CYGOPT_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL_PRDIV ?
+                            ((CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_REF_FREQ /
+                             CYGOPT_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL_PRDIV *
+                             CYGOPT_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL_VDIV) / 2) : -1
+                        }
                     }
                 }
 
                 cdl_option CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL_PRDIV {
                     display "PLL External Reference Divider"
                     flavor data
-                    legal_values 1 to 25
-                    default_value {
-                        CYGNUM_HAL_CORTEXM_KINETIS_MCGOUT_PLL_INFREQ_X ?
-                        (CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_REF_FREQ /
-                         CYGNUM_HAL_CORTEXM_KINETIS_MCGOUT_PLL_INFREQ_X ) : -1
-                    }
-                }
-
-                cdl_option CYGNUM_HAL_CORTEXM_KINETIS_MCGOUT_PLL_INFREQ {
-                    display "Phase detector input frequency"
-                    no_define
-                    flavor data
-                    legal_values 2000000 to 4000000
-                    calculated { CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL_PRDIV ?
-                        (CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_REF_FREQ /
-                         CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL_PRDIV) : -1
+                    calculated { CYGINT_HAL_CORTEXM_KINETIS_150 ?
+                        CYGOPT_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL_PRDIV :
+                        CYGOPT_HAL_CORTEXM_KINETIS_100_MCGOUT_PLL_PRDIV
                     }
                 }
 
                 cdl_option CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL_VDIV {
-                    display "VCO Divider"
+                    display "PLL External Reference Divider"
                     flavor data
-                    legal_values 24 to 55
-                    default_value { CYGNUM_HAL_CORTEXM_KINETIS_MCGOUT_PLL_INFREQ ?
-                        (CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_FREQ_SP /
-                         CYGNUM_HAL_CORTEXM_KINETIS_MCGOUT_PLL_INFREQ) : -1
+                    calculated { CYGINT_HAL_CORTEXM_KINETIS_150 ?
+                        (CYGOPT_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL_VDIV) :
+                        CYGOPT_HAL_CORTEXM_KINETIS_100_MCGOUT_PLL_VDIV
                     }
                 }
 
                 cdl_option CYGNUM_HAL_CORTEXM_KINETIS_MCG_PLL_FREQ_AV {
                     display "PLL output frequency actual value"
                     flavor data
-                    calculated { CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL_PRDIV ?
-                        (CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_REF_FREQ /
-                         CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL_PRDIV *
-                         CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL_VDIV) : -1
+                    calculated { CYGINT_HAL_CORTEXM_KINETIS_150 ?
+                        CYGNUM_HAL_CORTEXM_KINETIS_150_MCG_PLL_FREQ_AV :
+                        CYGNUM_HAL_CORTEXM_KINETIS_100_MCG_PLL_FREQ_AV
                     }
                 }
             }
@@ -632,4 +842,140 @@
         }
     }
 
-# EOF kinetis_clocking.cdl
+    #   PLL1 and OSC1 Configuration
+    #   PLL1
+
+    cdl_interface CYGINT_HAL_CORTEXM_KINETIS_HAS_PLL1 {
+        display "MCG Has PLL1"
+    }
+
+    cdl_interface CYGINT_HAL_CORTEXM_KINETIS_HAS_OSC1 {
+        display "MCG Has OSC1"
+    }
+
+    cdl_interface CYGINT_HAL_CORTEXM_KINETIS_150 {
+        display "120 - 150 MHz line"
+    }
+
+    cdl_component CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL1 {
+        display "PLL1 oscillator"
+        parent CYGOPT_HAL_CORTEXM_KINETIS_MCG_FLL_PLL
+        flavor bool
+        default_value CYGINT_HAL_CORTEXM_KINETIS_HAS_PLL1
+        active_if CYGINT_HAL_CORTEXM_KINETIS_HAS_PLL1
+
+        cdl_option CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL1_FREQ_SP {
+            display "PLL1 output frequency set point"
+            flavor data
+            legal_values  32768 to 220000000
+            calculated {
+                (CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK == "PLL1") ?
+                     CYGNUM_HAL_CORTEXM_KINETIS_MCGOUT_FREQ_SP :
+                     CYGNUM_HAL_CORTEXM_KINETIS_AUX_FREQ_SP
+            }
+            description "Desired PLL1 output frequency."
+        }
+
+        cdl_component CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL1_REF_FREQ {
+            display "Reference frequency."
+            flavor data
+            calculated { is_active (CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT) ?
+                CYGHWR_HAL_CORTEXM_KINETIS_MCG_REF_EXT_FREQ :
+                (CYGOPT_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_REFSRC
+                 == "INT_RC_32KHZ" ? 32768 : 2000000 )
+            }
+        }
+
+        cdl_option CYGNUM_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL1_INFREQ_X {
+            display "Phase detector proposed input frequency"
+            no_define
+            flavor data
+            legal_values 1000000 to 32000000
+            default_value {
+                (CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL1_REF_FREQ == 50000000) ?
+                (!(CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL1_FREQ_SP % 48000000) ? 50000000/8 : 50000000/5) :
+                !(CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL1_FREQ_SP % 30000000) ? 30000000 :
+                !(CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL1_FREQ_SP % 4000000) ? 4000000 :
+                5000000
+            }
+        }
+
+        cdl_option CYGHWR_HAL_CORTEXM_KINETIS_PLL1REFSEL {
+            display "PLL10 Reference Oscillator select"
+            flavor data
+            default_value 0
+            legal_values 0 1
+        }
+
+        cdl_option CYGOPT_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL1_PRDIV {
+            display "PLL1 External Reference Divider"
+            flavor data
+            legal_values 1 to 8
+            default_value {
+                CYGNUM_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL1_INFREQ_X ?
+                (CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL1_REF_FREQ /
+                 CYGNUM_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL1_INFREQ_X ) : -1
+            }
+        }
+
+        cdl_option CYGNUM_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL1_INFREQ {
+            display "Phase detector input frequency"
+            no_define
+            flavor data
+            legal_values 1000000 to 32000000
+            calculated { CYGOPT_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL1_PRDIV ?
+                (CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL1_REF_FREQ /
+                 CYGOPT_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL1_PRDIV) : -1
+            }
+        }
+
+        cdl_option CYGOPT_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL1_VDIV {
+            display "VCO Divider"
+            flavor data
+            legal_values 16 to 47
+            default_value { CYGNUM_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL1_INFREQ ?
+                ((CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL1_FREQ_SP /
+                  CYGNUM_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL1_INFREQ) * 2) : -1
+            }
+        }
+
+        cdl_option CYGNUM_HAL_CORTEXM_KINETIS_150_MCG_PLL1_FREQ_AV {
+            display "PLL1 output frequency actual value"
+            flavor data
+            calculated { CYGOPT_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL1_PRDIV ?
+                ((CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL1_REF_FREQ /
+                  CYGOPT_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL1_PRDIV *
+                  CYGOPT_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL1_VDIV) / 2) : -1
+            }
+        }
+
+        cdl_option CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL1_PRDIV {
+            display "PLL1 External Reference Divider"
+            flavor data
+            calculated CYGOPT_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL1_PRDIV
+        }
+
+        cdl_option CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL1_VDIV {
+            display "PLL1 External Reference Divider"
+            flavor data
+            calculated CYGOPT_HAL_CORTEXM_KINETIS_150_MCGOUT_PLL1_VDIV
+        }
+
+        cdl_option CYGNUM_HAL_CORTEXM_KINETIS_MCG_PLL1_FREQ_AV {
+            display "PLL1 output frequency actual value"
+            flavor data
+            calculated CYGNUM_HAL_CORTEXM_KINETIS_150_MCG_PLL1_FREQ_AV
+        }
+    }
+
+    cdl_option CYGNUM_HAL_CORTEXM_KINETIS_MCG_PLLSEL_FREQ_AV {
+        display "Frequency of selected PLL"
+        flavor data
+        parent CYGOPT_HAL_CORTEXM_KINETIS_MCG_FLL_PLL
+        calculated {CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK == "PLL1" ?
+            CYGNUM_HAL_CORTEXM_KINETIS_MCG_PLL1_FREQ_AV :
+            CYGNUM_HAL_CORTEXM_KINETIS_MCG_PLL_FREQ_AV
+        }
+    }
+
+    # EOF kinetis_clocking.cdl
--- a/packages/hal/cortexm/kinetis/var/current/cdl/kinetis_flexbus.cdl
+++ b/packages/hal/cortexm/kinetis/var/current/cdl/kinetis_flexbus.cdl
@@ -50,7 +50,7 @@
 #        display       "FlexBus"
 
 for { set ::chipsel 0 } { $::chipsel < 6 } { incr ::chipsel } {
-    
+
     cdl_interface CYGINT_HAL_KINETIS_FB_CS[set ::chipsel] {
         display     "Platform uses Chip select [set ::chipsel]"
         flavor      bool
@@ -59,7 +59,7 @@ for { set ::chipsel 0 } { $::chipsel < 6
             controller being used provides chip select [set ::chipsel], and if
             that chip select is used on target hardware."
     }
-    
+
     cdl_component CYGHWR_HAL_KINETIS_FB_CS[set ::chipsel] {
         display       "Chip select [set ::chipsel]"
         flavor        bool
@@ -68,7 +68,7 @@ for { set ::chipsel 0 } { $::chipsel < 6
         description   "
             This option includes initialization data for
             chip select [set ::chipsel]."
-        
+
         cdl_option CYGHWR_HAL_KINETIS_FB_CS[set ::chipsel]_CR_PS {
             display "Port size (encoded)"
             flavor data
--- a/packages/hal/cortexm/kinetis/var/current/include/hal_cache.h
+++ b/packages/hal/cortexm/kinetis/var/current/include/hal_cache.h
@@ -10,7 +10,7 @@
 // ####ECOSGPLCOPYRIGHTBEGIN####                                            
 // -------------------------------------------                              
 // This file is part of eCos, the Embedded Configurable Operating System.   
-// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2008 Free Software Foundation, Inc.
+// Copyright (C) 2012 Free Software Foundation, Inc.
 //
 // 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     
@@ -41,18 +41,17 @@
 //=============================================================================
 //#####DESCRIPTIONBEGIN####
 //
-// Author(s):    jlarmour
-// Contributors: 
-// Date:         2004-07-23
+// Author(s):    jlarmour, ilijak
+// Contributors:
+// Date:         2012-05-02
 // Purpose:      Cache control API
 // Description:  The macros defined here provide the HAL APIs for handling
 //               cache control operations.
 //
-//               For Kinetis, for the time being these are empty macros.
 // Usage:
 //               #include <cyg/hal/hal_cache.h>
 //               ...
-//              
+//
 //
 //####DESCRIPTIONEND####
 //
@@ -62,24 +61,76 @@
 
 //-----------------------------------------------------------------------------
 // Cache dimensions
+#ifdef CYGINT_HAL_CACHE
 
 // Data cache
-//#define HAL_DCACHE_SIZE                 0    // Size of data cache in bytes
-//#define HAL_DCACHE_LINE_SIZE            0    // Size of a data cache line
-//#define HAL_DCACHE_WAYS                 0    // Associativity of the cache
+#define HAL_DCACHE_SIZE                 (8192*2) // Size of data cache in bytes
+#define HAL_DCACHE_LINE_SIZE            16       // Size of a data cache line
+#define HAL_DCACHE_WAYS                 2*2      // Associativity of the cache
 
 // Instruction cache
-//#define HAL_ICACHE_SIZE                 0    // Size of cache in bytes
-//#define HAL_ICACHE_LINE_SIZE            0    // Size of a cache line
-//#define HAL_ICACHE_WAYS                 0    // Associativity of the cache
+#define HAL_ICACHE_SIZE                 8192*2   // Size of cache in bytes
+#define HAL_ICACHE_LINE_SIZE            16       // Size of a cache line
+#define HAL_ICACHE_WAYS                 2*2      // Associativity of the cache
 
-//#define HAL_DCACHE_SETS (HAL_DCACHE_SIZE/(HAL_DCACHE_LINE_SIZE*HAL_DCACHE_WAYS))
-//#define HAL_ICACHE_SETS (HAL_ICACHE_SIZE/(HAL_ICACHE_LINE_SIZE*HAL_ICACHE_WAYS))
+#define HAL_DCACHE_SETS (HAL_DCACHE_SIZE/(HAL_DCACHE_LINE_SIZE*HAL_DCACHE_WAYS))
+#define HAL_ICACHE_SETS (HAL_ICACHE_SIZE/(HAL_ICACHE_LINE_SIZE*HAL_ICACHE_WAYS))
+
+#include <cyg/hal/var_io_lmem.h>
 
 //-----------------------------------------------------------------------------
 // Global control of data cache
 
 // Enable the data cache
+#define HAL_DCACHE_ENABLE() \
+    HAL_CORTEXM_KINETIS_CACHE_PS_ENABLE(); \
+    HAL_CORTEXM_KINETIS_CACHE_PC_ENABLE()
+
+// Disable the data cache
+#define HAL_DCACHE_DISABLE() \
+    HAL_CORTEXM_KINETIS_CACHE_PS_DISABLE(); \
+    HAL_CORTEXM_KINETIS_CACHE_PC_DISABLE()
+
+// Invalidate the entire cache
+#define HAL_DCACHE_INVALIDATE_ALL() \
+    HAL_CORTEXM_KINETIS_CACHE_PS_INVALL(); \
+    HAL_CORTEXM_KINETIS_CACHE_PC_INVALL()
+
+// Synchronize the contents of the cache with memory.
+#define HAL_DCACHE_SYNC() \
+    HAL_CORTEXM_KINETIS_CACHE_PS_SYNC(); \
+    HAL_CORTEXM_KINETIS_CACHE_PC_SYNC()
+
+// Purge contents of data cache
+#define HAL_DCACHE_PURGE_ALL() \
+    HAL_CORTEXM_KINETIS_CACHE_PS_CLEAR(); \
+    HAL_CORTEXM_KINETIS_CACHE_PC_CLEAR()
+
+// Query the state of the data cache (does not affect the caching)
+#define HAL_DCACHE_IS_ENABLED(_state_)          \
+    CYG_MACRO_START                             \
+    (_state_) = HAL_CORTEXM_KINETIS_CACHE_PS_IS_ENABLED() && \
+                HAL_CORTEXM_KINETIS_CACHE_PC_IS_ENABLED(); \
+    CYG_MACRO_END
+
+// Invalidate cache lines in the given range without writing to memory.
+#define HAL_DCACHE_INVALIDATE( _base_ , _size_ ) \
+            HAL_CORTEXM_KINETIS_CACHE_PS_INVALIDATE(_base_, _size_); \
+            HAL_CORTEXM_KINETIS_CACHE_PC_INVALIDATE(_base_, _size_)
+
+#else // CYGINT_HAL_CACHE
+
+// Data cache
+//#define HAL_DCACHE_SIZE                 0     // Size of data cache in bytes
+//#define HAL_DCACHE_LINE_SIZE            0     // Size of a data cache line
+//#define HAL_DCACHE_WAYS                 0      // Associativity of the cache
+
+// Instruction cache
+//#define HAL_ICACHE_SIZE                 0     // Size of cache in bytes
+//#define HAL_ICACHE_LINE_SIZE            0      // Size of a cache line
+//#define HAL_ICACHE_WAYS                 0      // Associativity of the cache
+
+// Enable the data cache
 #define HAL_DCACHE_ENABLE()
 
 // Disable the data cache
@@ -97,7 +148,7 @@
 // Query the state of the data cache (does not affect the caching)
 #define HAL_DCACHE_IS_ENABLED(_state_)          \
     CYG_MACRO_START                             \
-    (_state_) = 0;                              \
+    (_state_) = 0; \
     CYG_MACRO_END
 
 // Set the data cache refill burst size
@@ -131,7 +182,7 @@
 //#define HAL_DCACHE_FLUSH( _base_ , _size_ )
 
 // Invalidate cache lines in the given range without writing to memory.
-//#define HAL_DCACHE_INVALIDATE( _base_ , _size_ )
+#define HAL_DCACHE_INVALIDATE( _base_ , _size_ )
 
 // Write dirty cache lines to memory for the given address range.
 //#define HAL_DCACHE_STORE( _base_ , _size_ )
@@ -147,26 +198,25 @@
 // Allocate and zero the cache lines associated with the given range.
 //#define HAL_DCACHE_ZERO( _base_ , _size_ )
 
+#endif // CYGINT_HAL_CACHE
+
 //-----------------------------------------------------------------------------
 // Global control of Instruction cache
 
 // Enable the instruction cache
-#define HAL_ICACHE_ENABLE()
+#define HAL_ICACHE_ENABLE() HAL_DCACHE_ENABLE()
 
 // Disable the instruction cache
-#define HAL_ICACHE_DISABLE()
+#define HAL_ICACHE_DISABLE() HAL_DCACHE_DISABLE()
 
 // Invalidate the entire cache
-#define HAL_ICACHE_INVALIDATE_ALL()
+#define HAL_ICACHE_INVALIDATE_ALL() HAL_DCACHE_INVALIDATE_ALL()
 
 // Synchronize the contents of the cache with memory.
-#define HAL_ICACHE_SYNC()
+#define HAL_ICACHE_SYNC() HAL_DCACHE_SYNC()
 
 // Query the state of the instruction cache (does not affect the caching)
-#define HAL_ICACHE_IS_ENABLED(_state_)          \
-    CYG_MACRO_START                             \
-    (_state_) = 0;                              \
-    CYG_MACRO_END
+#define HAL_ICACHE_IS_ENABLED(_state_) HAL_DCACHE_IS_ENABLED(_state_)
 
 // Set the instruction cache refill burst size
 //#define HAL_ICACHE_BURST_SIZE(_size_)
@@ -185,8 +235,46 @@
 // Instruction cache line control
 
 // Invalidate cache lines in the given range without writing to memory.
-//#define HAL_ICACHE_INVALIDATE( _base_ , _size_ )
+#define HAL_ICACHE_INVALIDATE( _base_ , _size_ ) HAL_DCACHE_INVALIDATE( _base_ , _size_ )
 
 //-----------------------------------------------------------------------------
-#endif // ifndef CYGONCE_HAL_CACHE_H
+// Global control of Instruction cache
+
+// Enable the instruction cache
+#define HAL_UCACHE_ENABLE() HAL_DCACHE_ENABLE()
+
+// Disable the instruction cache
+#define HAL_UCACHE_DISABLE() HAL_DCACHE_DISABLE()
+
+// Invalidate the entire cache
+#define HAL_UCACHE_INVALIDATE_ALL() HAL_DCACHE_INVALIDATE_ALL()
+
+// Synchronize the contents of the cache with memory.
+#define HAL_UCACHE_SYNC() HAL_DCACHE_SYNC()
+
+// Query the state of the instruction cache (does not affect the caching)
+#define HAL_UCACHE_IS_ENABLED(_state_) HAL_DCACHE_IS_ENABLED(_state_)
+
+// Set the instruction cache refill burst size
+//#define HAL_UCACHE_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_UCACHE_LOCK(_base_, _size_)
+
+// Undo a previous lock operation
+//#define HAL_UCACHE_UNLOCK(_base_, _size_)
+
+// Unlock entire cache
+//#define HAL_UCACHE_UNLOCK_ALL()
+
+//-----------------------------------------------------------------------------
+// Instruction cache line control
+
+// Invalidate cache lines in the given range without writing to memory.
+#define HAL_UCACHE_INVALIDATE( _base_ , _size_ ) HAL_DCACHE_INVALIDATE( _base_ , _size_ )
+
+#endif // CYGONCE_HAL_CACHE_H
+
+//-----------------------------------------------------------------------------
 // End of hal_cache.h
--- a/packages/hal/cortexm/kinetis/var/current/include/var_io.h
+++ b/packages/hal/cortexm/kinetis/var/current/include/var_io.h
@@ -10,7 +10,7 @@
 // ####ECOSGPLCOPYRIGHTBEGIN####                                            
 // -------------------------------------------                              
 // This file is part of eCos, the Embedded Configurable Operating System.   
-// Copyright (C) 2011, 2012 Free Software Foundation, Inc.                        
+// Copyright (C) 2011 Free Software Foundation, Inc.                        
 //
 // 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     
@@ -109,6 +109,9 @@ typedef struct cyghwr_hal_kinetis_flash_
 #define CYGHWR_HAL_KINETIS_OSC_CR          (0x40065000)
 #define CYGHWR_HAL_KINETIS_OSC_CR_P        ((volatile cyg_uint8*) 0x40065000)
 
+#define CYGHWR_HAL_KINETIS_OSC1_CR         (0x400E5000)
+#define CYGHWR_HAL_KINETIS_OSC1_CR_P       ((volatile cyg_uint8*) 0x400E5000)
+
 #define CYGHWR_HAL_KINETIS_OSC_CR_SC16P_M      0x01
 #define CYGHWR_HAL_KINETIS_OSC_CR_SC16P_S         0
 #define CYGHWR_HAL_KINETIS_OSC_CR_SC8P_M       0x02
@@ -134,10 +137,25 @@ typedef volatile struct cyghwr_hal_kinet
     cyg_uint8 c6;      // MCG Control 6 Register
     cyg_uint8 status;  // MCG Status Register
     cyg_uint8 mcg_res0;
+#if CYGHWR_HAL_CORTEXM_KINETIS_REV == 1
     cyg_uint8 atc;     // MCG Auto Trim Control Register
+#elif CYGHWR_HAL_CORTEXM_KINETIS_REV == 2
+    cyg_uint8 sc;     // MCG Status and Control Register
+#endif
     cyg_uint8 mcg_res1;
     cyg_uint8 atcvh;   // MCG Auto Trim Compare Value High Register
     cyg_uint8 atcvl;   // MCG Auto Trim Compare Value Low Register
+#if CYGHWR_HAL_CORTEXM_KINETIS_REV == 2
+    cyg_uint8 c7;      // MCG Control 7 Register
+    cyg_uint8 c8;      // MCG Control 8 Register    
+#endif
+#if CYGINT_HAL_CORTEXM_KINETIS_150
+    cyg_uint8 c10;     // MCG Control 10 Register
+    cyg_uint8 mcg_res2;
+    cyg_uint8 c11;     // MCG Control 11 Register
+    cyg_uint8 c12;     // MCG Control 12 Register
+    cyg_uint8 s2;      // MCG Status 2 Register
+#endif //CYGINT_HAL_CORTEXM_KINETIS_150    
 } cyghwr_hal_kinetis_mcg_t;
 
 #define CYGHWR_HAL_KINETIS_MCG_P  ((cyghwr_hal_kinetis_mcg_t *)0x40064000)
@@ -176,6 +194,11 @@ enum {
 #define CYGHWR_HAL_KINETIS_MCG_C2_RANGE_S       4
 #define CYGHWR_HAL_KINETIS_MCG_C2_RANGE(__v)    \
         VALUE_(CYGHWR_HAL_KINETIS_MCG_C2_RANGE_S, __v)
+
+#if CYGHWR_HAL_CORTEXM_KINETIS_REV == 2
+#define CYGHWR_HAL_KINETIS_MCG_C2_LOCRE0_M      0x80
+#define CYGHWR_HAL_KINETIS_MCG_C2_LOCRE0_S      7
+#endif
 // C3 Bit Fields
 #define CYGHWR_HAL_KINETIS_MCG_C3_SCTRIM_M      0xFF
 #define CYGHWR_HAL_KINETIS_MCG_C3_SCTRIM_S      0
@@ -203,6 +226,10 @@ enum {
 #define CYGHWR_HAL_KINETIS_MCG_C5_PLLSTEN_S     5
 #define CYGHWR_HAL_KINETIS_MCG_C5_PLLCLKEN_M    0x40
 #define CYGHWR_HAL_KINETIS_MCG_C5_PLLCLKEN_S    6
+#if CYGINT_HAL_CORTEXM_KINETIS_HAS_OSC1
+# define CYGHWR_HAL_KINETIS_MCG_C5_PLLREFSEL0_M  0x80
+# define CYGHWR_HAL_KINETIS_MCG_C5_PLLREFSEL0_S  7
+#endif
 // C6 Bit Fields
 #define CYGHWR_HAL_KINETIS_MCG_C6_VDIV_M        0x1F
 #define CYGHWR_HAL_KINETIS_MCG_C6_VDIV_S        0
@@ -235,6 +262,8 @@ enum {
 #define CYGHWR_HAL_KINETIS_MCG_S_LOCK_S         6
 #define CYGHWR_HAL_KINETIS_MCG_S_LOLS_M         0x80
 #define CYGHWR_HAL_KINETIS_MCG_S_LOLS_S         7
+
+#if CYGHWR_HAL_CORTEXM_KINETIS_REV == 1
 // ATC Bit Fields
 #define CYGHWR_HAL_KINETIS_MCG_ATC_ATMF_M       0x20
 #define CYGHWR_HAL_KINETIS_MCG_ATC_ATMF_S       5
@@ -242,6 +271,23 @@ enum {
 #define CYGHWR_HAL_KINETIS_MCG_ATC_ATMS_S       6
 #define CYGHWR_HAL_KINETIS_MCG_ATC_ATME_M       0x80
 #define CYGHWR_HAL_KINETIS_MCG_ATC_ATME_S       7
+#elif CYGHWR_HAL_CORTEXM_KINETIS_REV == 2
+// SC Bit Fields
+#define CYGHWR_HAL_KINETIS_MCG_SC_LOCS0_M       0x01
+#define CYGHWR_HAL_KINETIS_MCG_SC_LOCS0_S       0
+#define CYGHWR_HAL_KINETIS_MCG_SC_FCRDIV_M      0x0E
+#define CYGHWR_HAL_KINETIS_MCG_SC_FCRDIV_S      1
+#define CYGHWR_HAL_KINETIS_MCG_SC_FCRDIV(__v) \
+        VALUE_(CYGHWR_HAL_KINETIS_MCG_SC_FCRDIV_S, __v)
+#define CYGHWR_HAL_KINETIS_MCG_SC_FLTPRSRV_M    0x10
+#define CYGHWR_HAL_KINETIS_MCG_SC_FLTPRSRV_S    4
+#define CYGHWR_HAL_KINETIS_MCG_SC_ATMF_M        0x20
+#define CYGHWR_HAL_KINETIS_MCG_SC_ATMF_S        5
+#define CYGHWR_HAL_KINETIS_MCG_SC_ATMS_M        0x40
+#define CYGHWR_HAL_KINETIS_MCG_SC_ATMS_S        6
+#define CYGHWR_HAL_KINETIS_MCG_SC_ATME_M        0x80
+#define CYGHWR_HAL_KINETIS_MCG_SC_ATME_S        7
+#endif //  CYGHWR_HAL_CORTEXM_KINETIS_REV
 // ATCVH Bit Fields
 #define CYGHWR_HAL_KINETIS_MCG_ATCVH_ATCVH_M    0xFF
 #define CYGHWR_HAL_KINETIS_MCG_ATCVH_ATCVH_S    0
@@ -251,7 +297,72 @@ enum {
 #define CYGHWR_HAL_KINETIS_MCG_ATCVL_ATCVL_M    0xFF
 #define CYGHWR_HAL_KINETIS_MCG_ATCVL_ATCVL_S    0
 #define CYGHWR_HAL_KINETIS_MCG_ATCVL_ATCVL(__v) \
-        VALUE_(CYGHWR_HAL_KINETIS_MCG_ATCVL_ATCVL_S, __v)
+VALUE_(CYGHWR_HAL_KINETIS_MCG_ATCVL_ATCVL_S, __v)
+
+#if CYGHWR_HAL_CORTEXM_KINETIS_REV == 2
+// C7 Bit Fields
+#define CYGHWR_HAL_KINETIS_MCG_C7_OSCSEL_M      0x1
+#define CYGHWR_HAL_KINETIS_MCG_C7_OSCSEL_S      0
+// C8 Bit Fields
+#define CYGHWR_HAL_KINETIS_MCG_C8_LOCS1_M       0x1
+#define CYGHWR_HAL_KINETIS_MCG_C8_LOCS1_S       0
+#define CYGHWR_HAL_KINETIS_MCG_C8_CME1_M        0x20
+#define CYGHWR_HAL_KINETIS_MCG_C8_CME1_S        5
+#define CYGHWR_HAL_KINETIS_MCG_C8_LOLRE_M       0x40
+#define CYGHWR_HAL_KINETIS_MCG_C8_LOLRE_S       6
+#define CYGHWR_HAL_KINETIS_MCG_C8_LOCRE1_M      0x80
+#define CYGHWR_HAL_KINETIS_MCG_C8_LOCRE1_S      7
+#endif // CYGHWR_HAL_CORTEXM_KINETIS_REV == 2
+
+#if CYGINT_HAL_CORTEXM_KINETIS_150
+
+// C10 Bit Fields
+#define CYGHWR_HAL_KINETIS_MCG_C10_EREFS1_M      0x04
+#define CYGHWR_HAL_KINETIS_MCG_C10_EREFS1_S      2
+#define CYGHWR_HAL_KINETIS_MCG_C10_HGO1_M        0x08
+#define CYGHWR_HAL_KINETIS_MCG_C10_HGO1_S        3
+#define CYGHWR_HAL_KINETIS_MCG_C10_RANGE1_M      0x30
+#define CYGHWR_HAL_KINETIS_MCG_C10_RANGE1_S      4
+#define CYGHWR_HAL_KINETIS_MCG_C10_RANGE1(__v)    \
+        VALUE_(CYGHWR_HAL_KINETIS_MCG_C10_RANGE1_S, __v)
+#define CYGHWR_HAL_KINETIS_MCG_C10_LOCRE0_M      0x80
+#define CYGHWR_HAL_KINETIS_MCG_C10_LOCRE0_S      7
+// C11 Bit Fields
+#define CYGHWR_HAL_KINETIS_MCG_C11_PRDIV1_M       0x7
+#define CYGHWR_HAL_KINETIS_MCG_C11_PRDIV1_S       0
+#define CYGHWR_HAL_KINETIS_MCG_C11_PRDIV1(__v)    \
+        VALUE_(CYGHWR_HAL_KINETIS_MCG_C11_PRDIV1_S, __v)
+#define CYGHWR_HAL_KINETIS_MCG_C11_PLLCS_M        0x10
+#define CYGHWR_HAL_KINETIS_MCG_C11_PLLCS_S        4
+#define CYGHWR_HAL_KINETIS_MCG_C11_PLLSTEN1_M     0x20
+#define CYGHWR_HAL_KINETIS_MCG_C11_PLLSTEN1_S     5
+#define CYGHWR_HAL_KINETIS_MCG_C11_PLLCLKEN1_M    0x40
+#define CYGHWR_HAL_KINETIS_MCG_C11_PLLCLKEN1_S    6
+# define CYGHWR_HAL_KINETIS_MCG_C11_PLLREFSEL1_M  0x80
+# define CYGHWR_HAL_KINETIS_MCG_C11_PLLREFSEL1_S  7
+// C12 Bit Fields
+#define CYGHWR_HAL_KINETIS_MCG_C12_VDIV1_M        0x1F
+#define CYGHWR_HAL_KINETIS_MCG_C12_VDIV1_S        0
+#define CYGHWR_HAL_KINETIS_MCG_C12_VDIV1(__v)     \
+        VALUE_(CYGHWR_HAL_KINETIS_MCG_C12_VDIV1_S, __v)
+#define CYGHWR_HAL_KINETIS_MCG_C12_CME2_M         0x20
+#define CYGHWR_HAL_KINETIS_MCG_C12_CME2_S         5
+#define CYGHWR_HAL_KINETIS_MCG_C12_LOLIE1_M       0x80
+#define CYGHWR_HAL_KINETIS_MCG_C12_LOLIE1_S       7
+// S2 Bit Fields
+#define CYGHWR_HAL_KINETIS_MCG_S2_LOCS2_M        0x01
+#define CYGHWR_HAL_KINETIS_MCG_S2_LOCS2_S        0
+#define CYGHWR_HAL_KINETIS_MCG_S2_OSCINIT1_M     0x02
+#define CYGHWR_HAL_KINETIS_MCG_S2_OSCINIT1_S     1
+#define CYGHWR_HAL_KINETIS_MCG_S2_PLLCST_M       0x10
+#define CYGHWR_HAL_KINETIS_MCG_S2_PLLCST_S       4
+#define CYGHWR_HAL_KINETIS_MCG_S2_LOCK1_M        0x40
+#define CYGHWR_HAL_KINETIS_MCG_S2_LOCK1_S        6
+#define CYGHWR_HAL_KINETIS_MCG_S2_LOLS1_M        0x80
+#define CYGHWR_HAL_KINETIS_MCG_S2_LOLS1_S        7
+
+#endif //CYGINT_HAL_CORTEXM_KINETIS_150
+
 
 //---------------------------------------------------------------------------
 // Real Time Clock
@@ -434,6 +545,10 @@ typedef volatile struct cyghwr_hal_kinet
     cyg_uint32 uidmh;           // Unique Identification Register Mid-High
     cyg_uint32 uidml;           // Unique Identification Register Mid Low
     cyg_uint32 uidl;            // Unique Identification Register Low
+    
+    cyg_uint32 clkdiv3;         // System Clock Divider Register 3
+    cyg_uint32 clkdiv4;         // System Clock Divider Register 4
+    cyg_uint32 mcr;             // Misc control register
 } cyghwr_hal_kinetis_sim_t;
 
 #define CYGHWR_HAL_KINETIS_SIM_P ((cyghwr_hal_kinetis_sim_t *) 0x40047000)
@@ -560,15 +675,15 @@ typedef volatile struct cyghwr_hal_kinet
 #define CYGHWR_HAL_KINETIS_SIM_SDID_REVID(__val)       \
         VALUE_(CYGHWR_HAL_KINETIS_SIM_SDID_REVID_S, __val)
 // SCGC1 Bit Fields
+#define CYGHWR_HAL_KINETIS_SIM_SCGC1_OSC1_M            0x20
+#define CYGHWR_HAL_KINETIS_SIM_SCGC1_OSC1_S            5
 #define CYGHWR_HAL_KINETIS_SIM_SCGC1_UART4_M           0x400
 #define CYGHWR_HAL_KINETIS_SIM_SCGC1_UART4_S           10
 #define CYGHWR_HAL_KINETIS_SIM_SCGC1_UART5_M           0x800
 #define CYGHWR_HAL_KINETIS_SIM_SCGC1_UART5_S           11
 
-#ifndef CYGHWR_HAL_KINETIS_SIM_SCGC1_ALL_M
 #define CYGHWR_HAL_KINETIS_SIM_SCGC1_ALL_M \
  (CYGHWR_HAL_KINETIS_SIM_SCGC1_UART4_M | CYGHWR_HAL_KINETIS_SIM_SCGC1_UART5_M)
-#endif
 
 // SCGC2 Bit Fields
 #define CYGHWR_HAL_KINETIS_SIM_SCGC2_ENET_M            0x1
@@ -578,12 +693,10 @@ typedef volatile struct cyghwr_hal_kinet
 #define CYGHWR_HAL_KINETIS_SIM_SCGC2_DAC1_M            0x2000
 #define CYGHWR_HAL_KINETIS_SIM_SCGC2_DAC1_S            13
 
-#ifndef CYGHWR_HAL_KINETIS_SIM_SCGC2_ALL_M
 #define CYGHWR_HAL_KINETIS_SIM_SCGC2_ALL_M         \
             (CYGHWR_HAL_KINETIS_SIM_SCGC2_ENET_M | \
              CYGHWR_HAL_KINETIS_SIM_SCGC2_DAC0_M | \
              CYGHWR_HAL_KINETIS_SIM_SCGC2_DAC1_M)
-#endif
 
 // SCGC3 Bit Fields
 #define CYGHWR_HAL_KINETIS_SIM_SCGC3_RNGB_M            0x1
@@ -592,22 +705,31 @@ typedef volatile struct cyghwr_hal_kinet
 #define CYGHWR_HAL_KINETIS_SIM_SCGC3_FLEXCAN1_S        4
 #define CYGHWR_HAL_KINETIS_SIM_SCGC3_SPI2_M            0x1000
 #define CYGHWR_HAL_KINETIS_SIM_SCGC3_SPI2_S            12
+#ifdef CYGPKG_HAL_CORTEXM_KINETIS_DDRMC
+# define CYGHWR_HAL_KINETIS_SIM_SCGC3_DDR_M             0x4000
+# define CYGHWR_HAL_KINETIS_SIM_SCGC3_DDR_S             14
+#else
+# define CYGHWR_HAL_KINETIS_SIM_SCGC3_DDR_M             0
+# define CYGHWR_HAL_KINETIS_SIM_SCGC3_DDR_S             0
+#endif
 #define CYGHWR_HAL_KINETIS_SIM_SCGC3_SDHC_M            0x20000
 #define CYGHWR_HAL_KINETIS_SIM_SCGC3_SDHC_S            17
 #define CYGHWR_HAL_KINETIS_SIM_SCGC3_FTM2_M            0x1000000
 #define CYGHWR_HAL_KINETIS_SIM_SCGC3_FTM2_S            24
 #define CYGHWR_HAL_KINETIS_SIM_SCGC3_ADC1_M            0x8000000
 #define CYGHWR_HAL_KINETIS_SIM_SCGC3_ADC1_S            27
+#define CYGHWR_HAL_KINETIS_SIM_SCGC3_ADC3_M            0x10000000
+#define CYGHWR_HAL_KINETIS_SIM_SCGC3_ADC3_S            28
 
-#ifndef CYGHWR_HAL_KINETIS_SIM_SCGC3_ALL_M
 #define CYGHWR_HAL_KINETIS_SIM_SCGC3_ALL_M             \
             (CYGHWR_HAL_KINETIS_SIM_SCGC3_RNGB_M |     \
              CYGHWR_HAL_KINETIS_SIM_SCGC3_FLEXCAN1_M | \
              CYGHWR_HAL_KINETIS_SIM_SCGC3_SPI2_M |     \
+             CYGHWR_HAL_KINETIS_SIM_SCGC3_DDR_M  |     \
              CYGHWR_HAL_KINETIS_SIM_SCGC3_SDHC_M |     \
              CYGHWR_HAL_KINETIS_SIM_SCGC3_FTM2_M |     \
-             CYGHWR_HAL_KINETIS_SIM_SCGC3_ADC1_M)
-#endif
+             CYGHWR_HAL_KINETIS_SIM_SCGC3_ADC1_M |     \
+             CYGHWR_HAL_KINETIS_SIM_SCGC3_ADC3_M )
 
 // SCGC4 Bit Fields
 #define CYGHWR_HAL_KINETIS_SIM_SCGC4_EWM_M             0x2
@@ -635,7 +757,6 @@ typedef volatile struct cyghwr_hal_kinet
 #define CYGHWR_HAL_KINETIS_SIM_SCGC4_LLWU_M            0x10000000
 #define CYGHWR_HAL_KINETIS_SIM_SCGC4_LLWU_S            28
 
-#ifndef CYGHWR_HAL_KINETIS_SIM_SCGC4_ALL_M
 #define CYGHWR_HAL_KINETIS_SIM_SCGC4_ALL_M \
  (CYGHWR_HAL_KINETIS_SIM_SCGC4_EWM_M |CYGHWR_HAL_KINETIS_SIM_SCGC4_CMT_M |    \
  CYGHWR_HAL_KINETIS_SIM_SCGC4_I2C0_M |CYGHWR_HAL_KINETIS_SIM_SCGC4_I2C1_M |   \
@@ -643,7 +764,6 @@ typedef volatile struct cyghwr_hal_kinet
  CYGHWR_HAL_KINETIS_SIM_SCGC4_UART2_M | CYGHWR_HAL_KINETIS_SIM_SCGC4_UART3_M |\
  CYGHWR_HAL_KINETIS_SIM_SCGC4_USBOTG_M | CYGHWR_HAL_KINETIS_SIM_SCGC4_CMP_M | \
  CYGHWR_HAL_KINETIS_SIM_SCGC4_VREF_M | CYGHWR_HAL_KINETIS_SIM_SCGC4_LLWU_M)
-#endif
 
 // SCGC5 Bit Fields
 #define CYGHWR_HAL_KINETIS_SIM_SCGC5_LPTIMER_M         0x1
@@ -662,7 +782,8 @@ typedef volatile struct cyghwr_hal_kinet
 #define CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTD_S           12
 #define CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTE_M           0x2000
 #define CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTE_S           13
-
+#define CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTF_M           0x4000
+#define CYGHWR_HAL_KINETIS_SIM_SCGC5_PORTF_S           14
 #ifndef CYGHWR_HAL_KINETIS_SIM_SCGC5_ALL_M
 #define CYGHWR_HAL_KINETIS_SIM_SCGC5_ALL_M            \
             (CYGHWR_HAL_KINETIS_SIM_SCGC5_LPTIMER_M | \
@@ -680,6 +801,10 @@ typedef volatile struct cyghwr_hal_kinet
 #define CYGHWR_HAL_KINETIS_SIM_SCGC6_FTFL_S            0
 #define CYGHWR_HAL_KINETIS_SIM_SCGC6_DMAMUX_M          0x2
 #define CYGHWR_HAL_KINETIS_SIM_SCGC6_DMAMUX_S          1
+#define CYGHWR_HAL_KINETIS_SIM_SCGC6_DMAMUX0_M         0x2
+#define CYGHWR_HAL_KINETIS_SIM_SCGC6_DMAMUX0_S         1
+#define CYGHWR_HAL_KINETIS_SIM_SCGC6_DMAMUX1_M         0x4
+#define CYGHWR_HAL_KINETIS_SIM_SCGC6_DMAMUX1_S         2
 #define CYGHWR_HAL_KINETIS_SIM_SCGC6_FLEXCAN0_M        0x10
 #define CYGHWR_HAL_KINETIS_SIM_SCGC6_FLEXCAN0_S        4
 #define CYGHWR_HAL_KINETIS_SIM_SCGC6_DSPI0_M           0x1000
@@ -705,7 +830,6 @@ typedef volatile struct cyghwr_hal_kinet
 #define CYGHWR_HAL_KINETIS_SIM_SCGC6_RTC_M             0x20000000
 #define CYGHWR_HAL_KINETIS_SIM_SCGC6_RTC_S             29
 
-#ifndef CYGHWR_HAL_KINETIS_SIM_SCGC6_ALL_M
 #define CYGHWR_HAL_KINETIS_SIM_SCGC6_ALL_M             \
             (CYGHWR_HAL_KINETIS_SIM_SCGC6_FTFL_M |     \
              CYGHWR_HAL_KINETIS_SIM_SCGC6_DMAMUX_M |   \
@@ -721,7 +845,6 @@ typedef volatile struct cyghwr_hal_kinet
              CYGHWR_HAL_KINETIS_SIM_SCGC6_FTM1_M |     \
              CYGHWR_HAL_KINETIS_SIM_SCGC6_ADC0_M |     \
              CYGHWR_HAL_KINETIS_SIM_SCGC6_RTC_M)
-#endif
 
 // SCGC7 Bit Fields
 #define CYGHWR_HAL_KINETIS_SIM_SCGC7_FLEXBUS_M         0x1
@@ -731,12 +854,10 @@ typedef volatile struct cyghwr_hal_kinet
 #define CYGHWR_HAL_KINETIS_SIM_SCGC7_MPU_M             0x4
 #define CYGHWR_HAL_KINETIS_SIM_SCGC7_MPU_S             2
 
-#ifndef CYGHWR_HAL_KINETIS_SIM_SCGC7_ALL_M
 #define CYGHWR_HAL_KINETIS_SIM_SCGC7_ALL_M            \
             (CYGHWR_HAL_KINETIS_SIM_SCGC7_FLEXBUS_M | \
              CYGHWR_HAL_KINETIS_SIM_SCGC7_DMA_M |     \
              CYGHWR_HAL_KINETIS_SIM_SCGC7_MPU_M)
-#endif
 
 // CLKDIV1 Bit Fields
 #define CYGHWR_HAL_KINETIS_SIM_CLKDIV1_OUTDIV4_M       0xF0000
@@ -816,6 +937,20 @@ typedef volatile struct cyghwr_hal_kinet
 #define CYGHWR_HAL_KINETIS_SIM_UIDL_UID_S              0
 #define CYGHWR_HAL_KINETIS_SIM_UIDL_UID(__val)         \
         VALUE_(CYGHWR_HAL_KINETIS_SIM_UIDL_UID_S, __val)
+// MCR Bit Fields
+#define CYGHWR_HAL_KINETIS_SIM_MCR_DDRCFG_M           0xE000
+#define CYGHWR_HAL_KINETIS_SIM_MCR_DDRCFG_S           5
+#define CYGHWR_HAL_KINETIS_SIM_MCR_DDRCFG(__val)      \
+        VALUE_(CYGHWR_HAL_KINETIS_SIM_MCR_DDRCFG_S, __val)
+#define CYGHWR_HAL_KINETIS_SIM_MCR_DDRDQSDIS_M        0x8
+#define CYGHWR_HAL_KINETIS_SIM_MCR_DDRDQSDIS_S        3
+#define CYGHWR_HAL_KINETIS_SIM_MCR_DDRPEN_M           0x4
+#define CYGHWR_HAL_KINETIS_SIM_MCR_DDRPEN_S           2
+#define CYGHWR_HAL_KINETIS_SIM_MCR_DDRS_M             0x2
+#define CYGHWR_HAL_KINETIS_SIM_MCR_DDRS_S             1
+#define CYGHWR_HAL_KINETIS_SIM_MCR_DDRSREN_M          0x1
+#define CYGHWR_HAL_KINETIS_SIM_MCR_DDRSREN_S          0
+
 
 //---------------------------------------------------------------------------
 // PORT - Peripheral register structure
@@ -939,6 +1074,50 @@ CYG_MACRO_START \
 CYG_MACRO_END
 
 //---------------------------------------------------------------------------
+// PMC Power Management Controller
+
+typedef volatile struct cyghwr_hal_kinetis_pmc_s {
+    cyg_uint8 lvdsc1;   // Low Voltage Detect Status and Control 1 Register
+    cyg_uint8 lvdsc2;   // Low Voltage Detect Status and Control 2 Register
+    cyg_uint8 regsc;    // Regulator Status and Control Register
+} cyghwr_hal_kinetis_pmc_t;
+
+// PMC base address
+#define CYGHWR_HAL_KINETIS_PMC_P  ((cyghwr_hal_kinetis_pmc_t *)0x4007D000)
+
+// LVDSC1 Bit Fields
+#define CYGHWR_HAL_KINETIS_PMC_LVDSC1_LVDV_M      0x3
+#define CYGHWR_HAL_KINETIS_PMC_LVDSC1_LVDV(__val) \
+        (__val & CYGHWR_HAL_KINETIS_PMC_LVDSC1_LVDV_M)
+#define CYGHWR_HAL_KINETIS_PMC_LVDSC1_LVDRE_M     0x10
+#define CYGHWR_HAL_KINETIS_PMC_LVDSC1_LVDRE_S     4
+#define CYGHWR_HAL_KINETIS_PMC_LVDSC1_LVDIE_M     0x20
+#define CYGHWR_HAL_KINETIS_PMC_LVDSC1_LVDIE_S     5
+#define CYGHWR_HAL_KINETIS_PMC_LVDSC1_LVDACK_M    0x40
+#define CYGHWR_HAL_KINETIS_PMC_LVDSC1_LVDACK_S    6
+#define CYGHWR_HAL_KINETIS_PMC_LVDSC1_LVDF_M      0x80
+#define CYGHWR_HAL_KINETIS_PMC_LVDSC1_LVDF_S      7
+// LVDSC2 Bit Fields
+#define CYGHWR_HAL_KINETIS_PMC_LVDSC2_LVWV_M      0x3
+#define CYGHWR_HAL_KINETIS_PMC_LVDSC2_LVWV(__val) \
+        (__val & CYGHWR_HAL_KINETIS_PMC_LVDSC2_LVWV_M)
+#define CYGHWR_HAL_KINETIS_PMC_LVDSC2_LVWIE_M     0x20
+#define CYGHWR_HAL_KINETIS_PMC_LVDSC2_LVWIE_S     5
+#define CYGHWR_HAL_KINETIS_PMC_LVDSC2_LVWACK_M    0x40
+#define CYGHWR_HAL_KINETIS_PMC_LVDSC2_LVWACK_S    6
+#define CYGHWR_HAL_KINETIS_PMC_LVDSC2_LVWF_M      0x80
+#define CYGHWR_HAL_KINETIS_PMC_LVDSC2_LVWF_S      7
+// REGSC Bit Fields
+#define CYGHWR_HAL_KINETIS_PMC_REGSC_BGBE_M       0x1
+#define CYGHWR_HAL_KINETIS_PMC_REGSC_BGBE_S       0
+#define CYGHWR_HAL_KINETIS_PMC_REGSC_REGONS_M     0x4
+#define CYGHWR_HAL_KINETIS_PMC_REGSC_REGONS_S     2
+#define CYGHWR_HAL_KINETIS_PMC_REGSC_ACKISO_M     0x8
+#define CYGHWR_HAL_KINETIS_PMC_REGSC_ACKISO_S     3
+#define CYGHWR_HAL_KINETIS_PMC_REGSC_BGEN_M       0x10
+#define CYGHWR_HAL_KINETIS_PMC_REGSC_BGEN_S       4
+
+//---------------------------------------------------------------------------
 // FMC Flash Memory Controller
 
 #define CYGHWR_HAL_KINETIS_FMC_BASE     (0x4001F000)
@@ -1042,11 +1221,12 @@ typedef volatile struct cyghwr_hal_kinet
 #ifdef CYGPKG_HAL_CORTEXM_KINETIS_FLEXBUS
 # include <cyg/hal/var_io_flexbus.h>
 #endif
+
 //----------------------------------------------------------------------------
-// DMA
-//#ifdef CYGPKG_HAL_CORTEXM_KINETIS_DMA
-//# include <cyg/hal/var_io_dma.h>
-//#endif
+// DDRMC - SDRAM controller
+#ifdef CYGPKG_HAL_CORTEXM_KINETIS_DDRMC
+# include <cyg/hal/var_io_ddrmc.h>
+#endif
 
 //---------------------------------------------------------------------------
 // GPIO
new file mode 100644
--- /dev/null
+++ b/packages/hal/cortexm/kinetis/var/current/include/var_io_ddrmc.h
@@ -0,0 +1,111 @@
+#ifndef CYGONCE_HAL_VAR_IO_DDRMC_H
+#define CYGONCE_HAL_VAR_IO_DDRMC_H
+//===========================================================================
+//
+//      var_io_ddrmc.h
+//
+//      Kinetis DDRam controller specific registers
+//
+//===========================================================================
+// ####ECOSGPLCOPYRIGHTBEGIN####                                            
+// -------------------------------------------                              
+// This file is part of eCos, the Embedded Configurable Operating System.   
+// Copyright (C) 2012 Free Software Foundation, Inc.                        
+//
+// 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.,    
+// 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 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 v2.                                               
+//
+// 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 Kocho <ilijak@siva.com.mk>
+// Date:          2012-03-08
+// Purpose:       Kinetis variant specific registers
+// Description:
+// Usage:         #include <cyg/hal/var_io_ddrmc.h>  // var_io.h includes this file
+//
+//####DESCRIPTIONEND####
+//
+//===========================================================================
+
+//----------------------------------------------------------------------------
+// DDRMC - SDRAM controller
+
+# define CYGNUM_HAL_KINETIS_DDRMC_CR_N 64  // Number of DDRMC control registers
+
+typedef volatile struct cyghwr_hal_kinetis_ddrmc_s {
+    cyg_uint32 cr[CYGNUM_HAL_KINETIS_DDRMC_CR_N]; // Control registers
+    cyg_uint32 reserved1[32];
+    cyg_uint32 rcr;                               // RCR control register
+    cyg_uint32 reserved2[10];
+    cyg_uint32 pad_ctrl;                          // I/O Pad control register
+} cyghwr_hal_kinetis_ddrmc_t;
+
+# define CYGHWR_HAL_KINETIS_DDRMC_P  ((cyghwr_hal_kinetis_ddrmc_t *)0x400ae000)
+
+// RCR
+# define CYGHWR_HAL_KINETIS_DDRMC_RCR_RST_M 0x40000000
+// PAD CTRL
+# define CYGHWR_HAL_KINETIS_DDRMC_PADCTRL_ODT_CS0_M 0x03000000
+# define CYGHWR_HAL_KINETIS_DDRMC_PADCTRL_ODT_CS0_S 20
+# define CYGHWR_HAL_KINETIS_DDRMC_PADCTRL_ODT(_x_)  \
+        VALUE_(CYGHWR_HAL_KINETIS_DDRMC_PADCTRL_ODT_CS0_S, _x_)
+# define CYGHWR_HAL_KINETIS_DDRMC_PADCTRL_ODT_DIS 0
+# define CYGHWR_HAL_KINETIS_DDRMC_PADCTRL_ODT_50  3
+# define CYGHWR_HAL_KINETIS_DDRMC_PADCTRL_ODT_75  1
+# define CYGHWR_HAL_KINETIS_DDRMC_PADCTRL_ODT_150 2
+
+# define CYGHWR_HAL_KINETIS_DDRMC_PADCTRL_SPDLY_M 0x0000000f
+# define CYGHWR_HAL_KINETIS_DDRMC_PADCTRL_SPDLY_S 0
+# define CYGHWR_HAL_KINETIS_DDRMC_PADCTRL_SPDLY(_x_)  \
+        VALUE_(CYGHWR_HAL_KINETIS_DDRMC_PADCTRL_SPDLY_S, _x_)
+# define CYGHWR_HAL_KINETIS_DDRMC_PADCTRL_SPDLY_0BUF  0
+# define CYGHWR_HAL_KINETIS_DDRMC_PADCTRL_SPDLY_4BUF  1
+# define CYGHWR_HAL_KINETIS_DDRMC_PADCTRL_SPDLY_7BUF  2
+# define CYGHWR_HAL_KINETIS_DDRMC_PADCTRL_SPDLY_10BUF 3
+
+# define CYGHWR_HAL_KINETIS_DDRMC_CR00_START 0x1
+# define CYGHWR_HAL_KINETIS_DDRMC_CR30_DRAM_INIT_CPL 0x400
+
+# define CYGHWR_HAL_KINETIS_SIM_MCR_DDR_SETUP_M 0x0000ffff
+
+# ifndef CYGHWR_HAL_KINETIS_SIM_MCR_DDR_SETUP
+#  define CYGHWR_HAL_KINETIS_SIM_MCR_DDR_SETUP \
+          (CYGHWR_HAL_KINETIS_SIM_MCR_DDRCFG(CYGHWR_HAL_KINETIS_SIM_MCR_DDRBUS)| \
+          (CYGHWR_HAL_KINETIS_SIM_MCR_DDRDQSDIS_M * 0)                         | \
+          (CYGHWR_HAL_KINETIS_SIM_MCR_DDRPEN_M * 1)                            | \
+          (CYGHWR_HAL_KINETIS_SIM_MCR_DDRS_M * 0)                              | \
+          (CYGHWR_HAL_KINETIS_SIM_MCR_DDRSREN_M * 0 ))
+# endif
+
+__externC void hal_cortexm_kinetis_ddrmc_init(const cyg_uint32 src[], cyg_uint32 num);
+# define HAL_CORTEXM_KINETIS_DDRMC_INIT(__inidat) \
+        hal_cortexm_kinetis_ddrmc_init(__inidat, ((sizeof(__inidat)/2)/sizeof(__inidat[0])))
+__externC void hal_cortexm_kinetis_ddrmc_diag(void);
+
+//-----------------------------------------------------------------------------
+// end of var_io_ddrmc.h
+#endif // CYGONCE_HAL_VAR_IO_DDRMC_H
--- a/packages/hal/cortexm/kinetis/var/current/include/var_io_devs.h
+++ b/packages/hal/cortexm/kinetis/var/current/include/var_io_devs.h
@@ -10,7 +10,7 @@
 // ####ECOSGPLCOPYRIGHTBEGIN####                                            
 // -------------------------------------------                              
 // This file is part of eCos, the Embedded Configurable Operating System.   
-// Copyright (C) 2011, 2012 Free Software Foundation, Inc.                        
+// Copyright (C) 2011 Free Software Foundation, Inc.                        
 //
 // 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     
@@ -56,28 +56,9 @@
 // DEVS:
 // Following macros may be, and usually are borrwed by some device drivers.
 
-
-//=============================================================================
-// Peripheral clock
-
-//
-//===========================================================================
-
-
-//=============================================================================
-// DEVS:
-// Following macros may be, and usually are borrwed by some device drivers.
-
 // Peripheral clock [Hz];
 __externC cyg_uint32 hal_get_peripheral_clock(void);
 
-//----------------------------------------------------------------------------
-// SLCD
-// Only for the K40 variant
-#if CYGHWR_HAL_CORTEXM_KINETIS_SUBFAM == 40
-#define CYGADDR_HAL_FREESCALE_SLCD_BASE (0x400BE000)
-#endif
-
 //-----------------------------------------------------------------------------
 // Freescale UART
 // Borrow some HAL resources to Freescale UART driver
@@ -248,7 +229,8 @@
 #define FREESCALE_DMAMUX_SRC_KINETIS_SPI2R       20
 #define FREESCALE_DMAMUX_SRC_KINETIS_SPI2T       21
 #define FREESCALE_DMAMUX_SRC_KINETIS_I2C0        22
-#define FREESCALE_DMAMUX_SRC_KINETIS_I2C1        23
+#define FREESCALE_DMAMUX_SRC_KINETIS_I2C1        23 // Either I2C1
+#define FREESCALE_DMAMUX_SRC_KINETIS_I2C2        23 // or I2C2
 #define FREESCALE_DMAMUX_SRC_KINETIS_FTM0C0      24
 #define FREESCALE_DMAMUX_SRC_KINETIS_FTM0C1      25
 #define FREESCALE_DMAMUX_SRC_KINETIS_FTM0C2      26
@@ -290,6 +272,72 @@
 #define FREESCALE_DMAMUX_SRC_KINETIS_DMAMUX8     62
 #define FREESCALE_DMAMUX_SRC_KINETIS_DMAMUX9     63
 
+// DMAMUX1 DMA request sources
+#define FREESCALE_DMAMUX1_SRC_KINETIS_DISABLE     0
+#define FREESCALE_DMAMUX1_SRC_KINETIS_RESERVE     1
+#define FREESCALE_DMAMUX1_SRC_KINETIS_UART0R      2
+#define FREESCALE_DMAMUX1_SRC_KINETIS_UART0T      3
+#define FREESCALE_DMAMUX1_SRC_KINETIS_UART1R      4
+#define FREESCALE_DMAMUX1_SRC_KINETIS_UART1T      5
+#define FREESCALE_DMAMUX1_SRC_KINETIS_UART2R      6
+#define FREESCALE_DMAMUX1_SRC_KINETIS_UART2T      7
+#define FREESCALE_DMAMUX1_SRC_KINETIS_UART3R      8
+#define FREESCALE_DMAMUX1_SRC_KINETIS_UART3T      9
+#define FREESCALE_DMAMUX1_SRC_KINETIS_UART4R     10
+#define FREESCALE_DMAMUX1_SRC_KINETIS_UART4T     11
+#define FREESCALE_DMAMUX1_SRC_KINETIS_UART5R     12
+#define FREESCALE_DMAMUX1_SRC_KINETIS_UART5T     13
+#define FREESCALE_DMAMUX1_SRC_KINETIS_I2S0R      14
+#define FREESCALE_DMAMUX1_SRC_KINETIS_I3S0T      15
+#define FREESCALE_DMAMUX1_SRC_KINETIS_SPI0R      16
+#define FREESCALE_DMAMUX1_SRC_KINETIS_SPI0T      17
+#define FREESCALE_DMAMUX1_SRC_KINETIS_SPI1R      18
+#define FREESCALE_DMAMUX1_SRC_KINETIS_SPI1T      19
+#define FREESCALE_DMAMUX1_SRC_KINETIS_SPI2R      20
+#define FREESCALE_DMAMUX1_SRC_KINETIS_SPI2T      21
+#define FREESCALE_DMAMUX1_SRC_KINETIS_RESERVE_22 22
+#define FREESCALE_DMAMUX1_SRC_KINETIS_RESERVE_23 23
+#define FREESCALE_DMAMUX1_SRC_KINETIS_FTM3C0     24
+#define FREESCALE_DMAMUX1_SRC_KINETIS_FTM3C1     25
+#define FREESCALE_DMAMUX1_SRC_KINETIS_FTM3C2     26
+#define FREESCALE_DMAMUX1_SRC_KINETIS_FTM3C3     27
+#define FREESCALE_DMAMUX1_SRC_KINETIS_FTM3C4     28
+#define FREESCALE_DMAMUX1_SRC_KINETIS_FTM3C5     29
+#define FREESCALE_DMAMUX1_SRC_KINETIS_FTM3C6     30
+#define FREESCALE_DMAMUX1_SRC_KINETIS_FTM3C7     31
+#define FREESCALE_DMAMUX1_SRC_KINETIS_RESERVE_32 32
+#define FREESCALE_DMAMUX1_SRC_KINETIS_RESERVE_33 33
+#define FREESCALE_DMAMUX1_SRC_KINETIS_RESERVE_34 34
+#define FREESCALE_DMAMUX1_SRC_KINETIS_RESERVE_35 35
+#define FREESCALE_DMAMUX1_SRC_KINETIS_1588T0     36
+#define FREESCALE_DMAMUX1_SRC_KINETIS_1588T1     37
+#define FREESCALE_DMAMUX1_SRC_KINETIS_1588T2     38
+#define FREESCALE_DMAMUX1_SRC_KINETIS_1588T3     39
+#define FREESCALE_DMAMUX1_SRC_KINETIS_ADC0       40
+#define FREESCALE_DMAMUX1_SRC_KINETIS_ADC1       41
+#define FREESCALE_DMAMUX1_SRC_KINETIS_ADC2       42
+#define FREESCALE_DMAMUX1_SRC_KINETIS_ADC3       43
+#define FREESCALE_DMAMUX1_SRC_KINETIS_RESERVE_44 44
+#define FREESCALE_DMAMUX1_SRC_KINETIS_DAC0       45
+#define FREESCALE_DMAMUX1_SRC_KINETIS_DAC1       46
+#define FREESCALE_DMAMUX1_SRC_KINETIS_CMP0       47
+#define FREESCALE_DMAMUX1_SRC_KINETIS_CMP1       48
+#define FREESCALE_DMAMUX1_SRC_KINETIS_CMP2       49
+#define FREESCALE_DMAMUX1_SRC_KINETIS_CMP3       50
+#define FREESCALE_DMAMUX1_SRC_KINETIS_RESERVE_51 51
+#define FREESCALE_DMAMUX1_SRC_KINETIS_RESERVE_52 52
+#define FREESCALE_DMAMUX1_SRC_KINETIS_PORTF      53
+#define FREESCALE_DMAMUX1_SRC_KINETIS_DMAMUX0    54
+#define FREESCALE_DMAMUX1_SRC_KINETIS_DMAMUX1    55
+#define FREESCALE_DMAMUX1_SRC_KINETIS_DMAMUX2    56
+#define FREESCALE_DMAMUX1_SRC_KINETIS_DMAMUX3    57
+#define FREESCALE_DMAMUX1_SRC_KINETIS_DMAMUX4    58
+#define FREESCALE_DMAMUX1_SRC_KINETIS_DMAMUX5    59
+#define FREESCALE_DMAMUX1_SRC_KINETIS_DMAMUX6    60
+#define FREESCALE_DMAMUX1_SRC_KINETIS_DMAMUX7    61
+#define FREESCALE_DMAMUX1_SRC_KINETIS_DMAMUX8    62
+#define FREESCALE_DMAMUX1_SRC_KINETIS_DMAMUX9    63
+
 #define FREESCALE_DMAMUX_SRC_SPI0_RX FREESCALE_DMAMUX_SRC_KINETIS_SPI0R
 #define FREESCALE_DMAMUX_SRC_SPI0_TX FREESCALE_DMAMUX_SRC_KINETIS_SPI0T
 #define FREESCALE_DMAMUX_SRC_SPI1_RX FREESCALE_DMAMUX_SRC_KINETIS_SPI1R
@@ -302,8 +350,14 @@
 // Lend some eDMA macros to device driver that use DMA
 
 // Base address
+#define CYGHWR_HAL_FREESCALE_EDMA0_P  ((cyghwr_hal_freescale_edma_t *)0x40008000)
+// DMAMUX base addresses
+#define CYGHWR_HAL_FREESCALE_DMAMUX0_P ((cyghwr_hal_freescale_dmamux_t *) 0x40021000)
+#define CYGHWR_HAL_FREESCALE_DMAMUX1_P ((cyghwr_hal_freescale_dmamux_t *) 0x40022000)
+
 #define CYGHWR_IO_FREESCALE_EDMA0_P CYGHWR_HAL_FREESCALE_EDMA0_P
 #define CYGHWR_IO_FREESCALE_DMAMUX0_P CYGHWR_HAL_FREESCALE_DMAMUX0_P
+#define CYGHWR_IO_FREESCALE_DMAMUX1_P CYGHWR_HAL_FREESCALE_DMAMUX1_P
 
 //-----------------------------------------------------------------------------
 // end of var_io_devs.h
new file mode 100644
--- /dev/null
+++ b/packages/hal/cortexm/kinetis/var/current/include/var_io_lmem.h
@@ -0,0 +1,246 @@
+#ifndef CYGONCE_HAL_VAR_IO_LMEM_H
+#define CYGONCE_HAL_VAR_IO_LMEM_H
+//===========================================================================
+//
+//      var_io_lmem.h
+//
+//      Kinetis Local memory controller specific registers
+//
+//===========================================================================
+// ####ECOSGPLCOPYRIGHTBEGIN####                                            
+// -------------------------------------------                              
+// This file is part of eCos, the Embedded Configurable Operating System.   
+// Copyright (C) 2012 Free Software Foundation, Inc.                        
+//
+// 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.,    
+// 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 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 v2.                                               
+//
+// 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 Kocho <ilijak@siva.com.mk>
+// Date:          2012-04-28
+// Purpose:       Kinetis variant specific registers
+// Description:
+// Usage:         #include <cyg/hal/var_io_lmem.h>  // var_io.h includes this file
+//
+//####DESCRIPTIONEND####
+//
+//===========================================================================
+
+//----------------------------------------------------------------------------
+// LMEM - Local memory controller
+
+typedef volatile struct cyghwr_hal_kinetis_lmem_s {
+    cyg_uint32 ccr;    // Cache control register
+    cyg_uint32 clcr;   // Cache line control register
+    void *csar;        // Cache search address register
+    cyg_uint32 cvr;    // Cache read/write value register
+    cyg_uint8  reserved[16];
+    cyg_uint32 rmr;    // Cache regions mode register
+} cyghwr_hal_kinetis_lmem_t;
+
+#define CYGHWR_HAL_KINETIS_LMEM_PC_P  ((cyghwr_hal_kinetis_lmem_t *) 0xE0082000)
+#define CYGHWR_HAL_KINETIS_LMEM_PS_P  ((cyghwr_hal_kinetis_lmem_t *) 0xE0082800)
+
+// CCR Bit Fields
+#define CYGHWR_HAL_KINETIS_LMEM_CCR_ENCACHE_M          0x1
+#define CYGHWR_HAL_KINETIS_LMEM_CCR_ENWRBUF_M          0x2
+#define CYGHWR_HAL_KINETIS_LMEM_CCR_INVW0_M            0x1000000
+#define CYGHWR_HAL_KINETIS_LMEM_CCR_PUSHW0_M           0x2000000
+#define CYGHWR_HAL_KINETIS_LMEM_CCR_INVW1_M            0x4000000
+#define CYGHWR_HAL_KINETIS_LMEM_CCR_PUSHW1_M           0x8000000
+#define CYGHWR_HAL_KINETIS_LMEM_CCR_GO_M               0x80000000
+
+//CLCR Bit Fields
+#define CYGHWR_HAL_KINETIS_LMEM_CLCR_LGO_M             0x1
+#define CYGHWR_HAL_KINETIS_LMEM_CLCR_CACHEADDR_M       0xFFC
+#define CYGHWR_HAL_KINETIS_LMEM_CLCR_CACHEADDR_S       2
+#define CYGHWR_HAL_KINETIS_LMEM_CLCR_CACHEADDR(_ca_) \
+            (_ca_ << CYGHWR_HAL_KINETIS_LMEM_CLCR_CACHEADDR_S)
+#define CYGHWR_HAL_KINETIS_LMEM_CLCR_WSEL_M            0x4000
+#define CYGHWR_HAL_KINETIS_LMEM_CLCR_TDSEL_M           0x10000
+#define CYGHWR_HAL_KINETIS_LMEM_CLCR_LCIVB_M           0x100000
+#define CYGHWR_HAL_KINETIS_LMEM_CLCR_LCIMB_M           0x200000
+#define CYGHWR_HAL_KINETIS_LMEM_CLCR_LCWAY_M           0x400000
+#define CYGHWR_HAL_KINETIS_LMEM_CLCR_LCMD_S            24
+#define CYGHWR_HAL_KINETIS_LMEM_CLCR_LCMD(_cmd_) \
+            (_cmd_ << CYGHWR_HAL_KINETIS_LMEM_CLCR_LCMD_S)
+#define CYGHWR_HAL_KINETIS_LMEM_CLCR_LADSEL_M          0x4000000
+#define CYGHWR_HAL_KINETIS_LMEM_CLCR_LACC_M            0x8000000
+
+// CSAR Bit Fields
+#define CYGHWR_HAL_KINETIS_LMEM_CSAR_LGO_M             0x1
+#define CYGHWR_HAL_KINETIS_LMEM_CSAR_PHYADDR_M         0xFFFFFFFC
+#define CYGHWR_HAL_KINETIS_LMEM_CSAR_PHYADDR_S         2
+#define CYGHWR_HAL_KINETIS_LMEM_CSAR_PHYADDR(_adr_) \
+            (_adr_ << CYGHWR_HAL_KINETIS_LMEM_CSAR_PHYADDR_S)
+
+// CCVR Bit Fields
+#define CYGHWR_HAL_KINETIS_LMEM_CCVR_DATA_M            0xFFFFFFFF
+
+// PCCRMR Bit Fields
+
+#define CYGHWR_HAL_KINETIS_LMEM_CRMR_REGION_M           0x3
+#define CYGHWR_HAL_KINETIS_LMEM_CRMR_REGION(_region_,_mask_) \
+            (_mask_ << ((15 - _region_) * 2))
+
+#define CYGHWR_HAL_KINETIS_LMEM_CRMR_REGION_NC_M 0
+#define CYGHWR_HAL_KINETIS_LMEM_CRMR_REGION_WT_M 2
+#define CYGHWR_HAL_KINETIS_LMEM_CRMR_REGION_WB_M 3
+
+#define CYGHWR_HAL_KINETIS_LMEM_R_FLASH_0000   0
+#define CYGHWR_HAL_KINETIS_LMEM_R_DRAM_0800    1
+#define CYGHWR_HAL_KINETIS_LMEM_R_FLEXNVM_1000 2
+#define CYGHWR_HAL_KINETIS_LMEM_R_FLEXBUS_1800 3
+#define CYGHWR_HAL_KINETIS_LMEM_R_SRAM_L       4
+#define CYGHWR_HAL_KINETIS_LMEM_R_SRAM_U       5
+#define CYGHWR_HAL_KINETIS_LMEM_FLEXBUS_6000   6
+#define CYGHWR_HAL_KINETIS_LMEM_DRAM_7000      7
+#define CYGHWR_HAL_KINETIS_LMEM_DRAM_8000      8
+#define CYGHWR_HAL_KINETIS_LMEM_FLEXBUS_9000   9
+
+
+#define HAL_CORTEXM_KINETIS_CACHE_PC_ENABLE() \
+            hal_cortexm_kinetis_cache_enable(CYGHWR_HAL_KINETIS_LMEM_PC_P)
+
+#define HAL_CORTEXM_KINETIS_CACHE_PS_ENABLE() \
+            hal_cortexm_kinetis_cache_enable(CYGHWR_HAL_KINETIS_LMEM_PS_P)
+
+#define HAL_CORTEXM_KINETIS_CACHE_PC_DISABLE() \
+            hal_cortexm_kinetis_cache_disable(CYGHWR_HAL_KINETIS_LMEM_PC_P)
+
+#define HAL_CORTEXM_KINETIS_CACHE_PS_DISABLE() \
+            hal_cortexm_kinetis_cache_disable(CYGHWR_HAL_KINETIS_LMEM_PS_P)
+
+#define HAL_CORTEXM_KINETIS_CACHE_PC_INVALL() \
+            hal_cortexm_kinetis_cache_inval(CYGHWR_HAL_KINETIS_LMEM_PC_P)
+
+#define HAL_CORTEXM_KINETIS_CACHE_PS_INVALL() \
+            hal_cortexm_kinetis_cache_inval(CYGHWR_HAL_KINETIS_LMEM_PS_P)
+
+#define HAL_CORTEXM_KINETIS_CACHE_PC_SYNC() \
+            hal_cortexm_kinetis_cache_sync(CYGHWR_HAL_KINETIS_LMEM_PC_P)
+
+#define HAL_CORTEXM_KINETIS_CACHE_PS_SYNC() \
+            hal_cortexm_kinetis_cache_sync(CYGHWR_HAL_KINETIS_LMEM_PS_P)
+
+#define HAL_CORTEXM_KINETIS_CACHE_PC_CLEAR() \
+            hal_cortexm_kinetis_cache_clear(CYGHWR_HAL_KINETIS_LMEM_PC_P)
+
+#define HAL_CORTEXM_KINETIS_CACHE_PS_CLEAR() \
+            hal_cortexm_kinetis_cache_clear(CYGHWR_HAL_KINETIS_LMEM_PS_P)
+
+#define HAL_CORTEXM_KINETIS_CACHE_PC_IS_ENABLED() \
+            hal_cortexm_kinetis_cache_is_enabled(CYGHWR_HAL_KINETIS_LMEM_PC_P)
+
+#define HAL_CORTEXM_KINETIS_CACHE_PS_IS_ENABLED() \
+            hal_cortexm_kinetis_cache_is_enabled(CYGHWR_HAL_KINETIS_LMEM_PS_P)
+
+#define HAL_CORTEXM_KINETIS_CACHE_PS_INVALIDATE(_base, _size_) \
+        hal_cortexm_kinetis_cache_invalidate(CYGHWR_HAL_KINETIS_LMEM_PS_P, _base, _size_)
+
+#define HAL_CORTEXM_KINETIS_CACHE_PC_INVALIDATE(_base, _size_) \
+        hal_cortexm_kinetis_cache_invalidate(CYGHWR_HAL_KINETIS_LMEM_PC_P, _base, _size_)
+
+__externC void inline
+hal_cortexm_kinetis_cache_enable(cyghwr_hal_kinetis_lmem_t* lmem_p)
+{
+    lmem_p->ccr = (CYGHWR_HAL_KINETIS_LMEM_CCR_GO_M |
+              CYGHWR_HAL_KINETIS_LMEM_CCR_INVW0_M |
+              CYGHWR_HAL_KINETIS_LMEM_CCR_INVW1_M |
+              CYGHWR_HAL_KINETIS_LMEM_CCR_ENCACHE_M |
+              CYGHWR_HAL_KINETIS_LMEM_CCR_ENWRBUF_M
+              );
+}
+
+__externC void inline
+hal_cortexm_kinetis_cache_disable(cyghwr_hal_kinetis_lmem_t* lmem_p)
+{
+    lmem_p->ccr = (CYGHWR_HAL_KINETIS_LMEM_CCR_GO_M |
+              CYGHWR_HAL_KINETIS_LMEM_CCR_PUSHW0_M |
+              CYGHWR_HAL_KINETIS_LMEM_CCR_PUSHW1_M
+              );
+}
+
+__externC void inline
+hal_cortexm_kinetis_cache_inval(cyghwr_hal_kinetis_lmem_t* lmem_p)
+{
+    lmem_p->ccr |= ( CYGHWR_HAL_KINETIS_LMEM_CCR_GO_M |
+              CYGHWR_HAL_KINETIS_LMEM_CCR_INVW0_M |
+              CYGHWR_HAL_KINETIS_LMEM_CCR_INVW1_M
+              );
+}
+
+__externC void inline
+hal_cortexm_kinetis_cache_sync(cyghwr_hal_kinetis_lmem_t* lmem_p)
+{
+    lmem_p->ccr |= ( CYGHWR_HAL_KINETIS_LMEM_CCR_GO_M |
+              CYGHWR_HAL_KINETIS_LMEM_CCR_PUSHW0_M |
+              CYGHWR_HAL_KINETIS_LMEM_CCR_PUSHW1_M
+              );
+}
+
+__externC void inline
+hal_cortexm_kinetis_cache_clear(cyghwr_hal_kinetis_lmem_t* lmem_p)
+{
+    lmem_p->ccr |= ( CYGHWR_HAL_KINETIS_LMEM_CCR_GO_M |
+              CYGHWR_HAL_KINETIS_LMEM_CCR_INVW0_M |
+              CYGHWR_HAL_KINETIS_LMEM_CCR_INVW1_M |
+              CYGHWR_HAL_KINETIS_LMEM_CCR_PUSHW0_M |
+              CYGHWR_HAL_KINETIS_LMEM_CCR_PUSHW1_M
+              );
+}
+
+__externC bool inline
+hal_cortexm_kinetis_cache_is_enabled(cyghwr_hal_kinetis_lmem_t* lmem_p)
+{
+    return lmem_p->ccr & CYGHWR_HAL_KINETIS_LMEM_CCR_ENCACHE_M;
+}
+
+
+__externC void inline
+hal_cortexm_kinetis_cache_invalidate(cyghwr_hal_kinetis_lmem_t* lmem_p,
+                                        cyg_uint8* addr_p, cyg_uint32 size)
+{
+    size = (((cyg_uint32)addr_p & 0xf) + size)/HAL_DCACHE_LINE_SIZE + 1;
+    while(size--){
+        lmem_p->csar = addr_p;
+        lmem_p->clcr = CYGHWR_HAL_KINETIS_LMEM_CLCR_LADSEL_M |
+              CYGHWR_HAL_KINETIS_LMEM_CLCR_LCMD(1) |
+              CYGHWR_HAL_KINETIS_LMEM_CLCR_LGO_M;
+        addr_p += HAL_DCACHE_LINE_SIZE;
+         while(lmem_p->clcr & CYGHWR_HAL_KINETIS_LMEM_CLCR_LGO_M);
+    }
+}
+
+# define HAL_CORTEXM_KINETIS_DDRMC_INIT(__inidat) \
+        hal_cortexm_kinetis_ddrmc_init(__inidat, ((sizeof(__inidat)/2)/sizeof(__inidat[0])))
+__externC void hal_cortexm_kinetis_ddrmc_diag(void);
+
+//-----------------------------------------------------------------------------
+// end of var_io_ddrmc.h
+#endif // CYGONCE_HAL_VAR_IO_LMEM_H
--- a/packages/hal/cortexm/kinetis/var/current/src/kinetis_clocking.c
+++ b/packages/hal/cortexm/kinetis/var/current/src/kinetis_clocking.c
@@ -101,6 +101,7 @@ hal_start_clocks( void )
     // Real Time Clock
     hal_start_rtc_clock();
 # endif
+    hal_set_clock_dividers();
     // Main clock - MCG
     hal_start_main_clock();
 #endif
@@ -121,72 +122,160 @@ hal_start_clocks( void )
 // Setup MCG
 // Note: Currently only PBE mode is supported and tested.
 
+#ifdef CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL
+
+// MCG can have 1 or 2 PLL oscillators.
+// PLL0 aka PLL is always present.
+static inline void CYGOPT_HAL_KINETIS_MISC_FLASH_SECTION_ATTR
+hal_start_pll0(cyghwr_hal_kinetis_mcg_t *mcg_p)
+{
+    mcg_p->c5 = CYGHWR_HAL_KINETIS_MCG_C5_PRDIV(
+          CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL_PRDIV-1) |
+          CYGHWR_HAL_KINETIS_MCG_C5_PLLSTEN_M
+# ifdef CYGHWR_HAL_CORTEXM_KINETIS_PLLREFSEL_1
+          | CYGHWR_HAL_KINETIS_MCG_C5_PLLREFSEL0_M
+# endif //CYGHWR_HAL_CORTEXM_KINETIS_PLLREFSEL_1
+          ;
+# if CYGINT_HAL_CORTEXM_KINETIS_150
+    mcg_p->c6 = CYGHWR_HAL_KINETIS_MCG_C6_VDIV(
+          CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL_VDIV-16);
+# else
+    mcg_p->c6 = CYGHWR_HAL_KINETIS_MCG_C6_VDIV(
+          CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL_VDIV-24);
+# endif
+    mcg_p->c5 |= CYGHWR_HAL_KINETIS_MCG_C5_PLLCLKEN_M;
+    MCG_WAIT_WHILE(!(mcg_p->status & CYGHWR_HAL_KINETIS_MCG_S_LOCK_M));
+}
+#endif //CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL
+
+#ifdef CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL1
+
+// PLL1 Oscillator is present on some devices.
+static inline void CYGOPT_HAL_KINETIS_MISC_FLASH_SECTION_ATTR
+hal_start_pll1(cyghwr_hal_kinetis_mcg_t *mcg_p)
+{
+    mcg_p->c11 = CYGHWR_HAL_KINETIS_MCG_C11_PLLCS_M;
+    mcg_p->c11 = CYGHWR_HAL_KINETIS_MCG_C11_PRDIV1(
+          CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL1_PRDIV-1) |
+          CYGHWR_HAL_KINETIS_MCG_C11_PLLSTEN1_M
+# ifdef CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_PLL1
+          | CYGHWR_HAL_KINETIS_MCG_C11_PLLCS_M
+# endif
+# ifdef CYGHWR_HAL_CORTEXM_KINETIS_PLL1REFSEL_1
+          | CYGHWR_HAL_KINETIS_MCG_C11_PLLREFSEL1_M
+# endif
+          ;
+    mcg_p->c12 = CYGHWR_HAL_KINETIS_MCG_C12_VDIV1(
+          CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL1_VDIV-16);
+    mcg_p->c11 |= CYGHWR_HAL_KINETIS_MCG_C11_PLLCLKEN1_M;
+    MCG_WAIT_WHILE(!(mcg_p->s2 & CYGHWR_HAL_KINETIS_MCG_S2_LOCK1_M));
+}
+#endif // CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL1
+
+#ifdef CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT
+
+// There are 1 or 2 external oscillators
+void CYGOPT_HAL_KINETIS_MISC_FLASH_SECTION_ATTR
+hal_start_ext_ref(void)
+{
+    volatile cyg_uint8 *osc_cr_p = CYGHWR_HAL_KINETIS_OSC_CR_P;
+
+# if defined CYGHWR_HAL_CORTEXM_KINETIS_PLLREFSEL_0 || \
+     defined CYGHWR_HAL_CORTEXM_KINETIS_PLL1REFSEL_0
+#  ifdef CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS_XTAL
+    // Set the oscillator 0
+    *osc_cr_p = CYGHWR_HAL_CORTEXM_KINETIS_OSC_CAP / 2;
+#  elif defined CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS_OSC
+    // Select external oscillator
+    *osc_cr_p = CYGHWR_HAL_KINETIS_OSC_CR_ERCLKEN_M |
+          CYGHWR_HAL_KINETIS_OSC_CR_EREFSTEN_M;
+#  endif // CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS_XTAL
+# endif // CYGHWR_HAL_CORTEXM_KINETIS_PLLREFSEL_0 || ...
+
+# if defined CYGHWR_HAL_CORTEXM_KINETIS_PLLREFSEL_1 || \
+     defined CYGHWR_HAL_CORTEXM_KINETIS_PLL1REFSEL_1
+#  ifdef CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_IS_XTAL
+    // Set the oscillator 1
+    osc_cr_p = CYGHWR_HAL_KINETIS_OSC1_CR_P;
+    *osc_cr_p = CYGHWR_HAL_CORTEXM_KINETIS_OSC1_CAP / 2;
+#  elif defined CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_IS_OSC
+    // Select external oscillator
+    *osc_cr_p = CYGHWR_HAL_KINETIS_OSC1_CR_ERCLKEN_M |
+          CYGHWR_HAL_KINETIS_OSC1_CR_EREFSTEN_M;
+#  endif // CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_IS_XTAL
+# endif // CYGHWR_HAL_CORTEXM_KINETIS_PLLREFSEL_1 || ...
+}
+#endif // CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT
+
+
 void CYGOPT_HAL_KINETIS_MISC_FLASH_SECTION_ATTR
 hal_start_main_clock(void)
 {
     cyghwr_hal_kinetis_mcg_t *mcg_p = CYGHWR_HAL_KINETIS_MCG_P;
 #if defined CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_PLL ||\
-    defined CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS_RTC
+    defined CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_PLL1 ||\
+    (defined CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS_RTC &&\
+    CYGHWR_HAL_CORTEXM_KINETIS_REV == 1)
     cyghwr_hal_kinetis_sim_t *sim_p = CYGHWR_HAL_KINETIS_SIM_P;
 #endif
+
+#ifdef CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS_RTC
+    // Select RTC clock source for MCG reference
+# if CYGHWR_HAL_CORTEXM_KINETIS_REV == 1
+    sim_p->sopt2 |= CYGHWR_HAL_KINETIS_SIM_SOPT2_MCGCLKSEL_M;
+# elif CYGHWR_HAL_CORTEXM_KINETIS_REV == 2
+    mcg_p->c7 |= CYGHWR_HAL_KINETIS_MCG_C7_OSCSEL_M;
+# endif // CYGHWR_HAL_CORTEXM_KINETIS_REV == 2
+#endif // CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS_RTC
+
 #ifdef CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT
-# if defined CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS_XTAL || \
-    defined CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS_OSC
-    volatile cyg_uint8 *osc_cr_p = CYGHWR_HAL_KINETIS_OSC_CR_P;
+    hal_start_ext_ref();
 # endif
 
-# ifdef CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS_XTAL
-    // Set the main oscillator
-    *osc_cr_p = CYGHWR_HAL_CORTEXM_KINETIS_OSC_CAP / 2;
-# elif defined CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS_OSC
-    // Select exteranal oscillator
-    *osc_cr_p = CYGHWR_HAL_KINETIS_OSC_CR_ERCLKEN_M |
-          CYGHWR_HAL_KINETIS_OSC_CR_EREFSTEN_M;
-# endif // CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS_XTAL
+#if defined(CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_PLL) || \
+    defined(CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_PLL1) || \
+    defined(CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_FLL) || \
+    defined(CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_EXT_REFCLK)
 
-# ifdef CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS_RTC
-    // Select RTC clock source for MCG reference
-    sim_p->sopt2 |= CYGHWR_HAL_KINETIS_SIM_SOPT2_MCGCLKSEL_M;
-# endif // CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS_RTC
-#endif // CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT
-
-#if defined(CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_PLL) || \
-     defined(CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_FLL) || \
-     defined(CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_EXT_REFCLK)
-    // Enter FBE mode
     mcg_p->c2 = CYGHWR_HAL_KINETIS_MCG_C2_RANGE(
                     CYGNUM_HAL_CORTEXM_KINETIS_MCG_REF_FREQ_RANGE)
-# ifdef CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS_XTAL
+#  ifdef CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS_XTAL
           | CYGHWR_HAL_KINETIS_MCG_C2_EREFS_M | CYGHWR_HAL_KINETIS_MCG_C2_HGO_M
-# endif // CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS_XTAL
+#  endif // CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS_XTAL
           ;
+
     mcg_p->c1 = CYGHWR_HAL_KINETIS_MCG_C1_FRDIV(
         CYGNUM_HAL_CORTEXM_KINETIS_MCG_REF_FRDIV_REG)
 # if defined(CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_PLL) || \
-      defined(CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_EXT_REFCLK)
+     defined(CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_PLL1) || \
+     defined(CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_EXT_REFCLK)
         |CYGHWR_HAL_KINETIS_MCG_C1_CLKS(CYGHWR_HAL_KINETIS_MCG_C1_CLKS_EXT_REF)
-# endif // CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_PLL
+# endif // CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_PLL*
         ;
 
 # ifdef CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT_IS_XTAL
     // Wait for oscillator start up
     MCG_WAIT_WHILE(!(mcg_p->status & CYGHWR_HAL_KINETIS_MCG_S_OSCINIT_M));
 # endif
+# ifdef CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT1_IS_XTAL
+    // Wait for oscillator 1 start up
+    MCG_WAIT_WHILE(!(mcg_p->s2 & CYGHWR_HAL_KINETIS_MCG_S2_OSCINIT1_M));
+# endif
 # ifdef CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT
     // Wait for reference clock to switch to external reference
     MCG_WAIT_WHILE(mcg_p->status & CYGHWR_HAL_KINETIS_MCG_S_IREFST_M);
     // Wait for status flags update
     MCG_WAIT_WHILE((mcg_p->status & CYGHWR_HAL_KINETIS_MCG_S_CLKST_M) !=
 #  if defined(CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_PLL) || \
-defined(CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_EXT_REFCLK)
+      defined(CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_PLL1) || \
+      defined(CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_EXT_REFCLK)
             CYGHWR_HAL_KINETIS_MCG_S_CLKST_EXT
 #  else
             CYGHWR_HAL_KINETIS_MCG_S_CLKST_FLL
 #  endif
             );
 # endif //  CYGOPT_HAL_CORTEXM_KINETIS_MCG_REF_EXT
-    // Set peripheral dividers before switching to high frequency.
-    hal_set_clock_dividers();
+
 # ifdef CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_FLL
     // Configure FLL
     mcg_p->c4 = (mcg_p->c4 & 0x1f) |
@@ -195,33 +284,42 @@ defined(CYGOPT_HAL_CORTEXM_KINETIS_MCG_M
                CYGNUM_HAL_CORTEXM_MCG_DCO_DRST_DRS));
 
 # endif // CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_FLL
-# ifdef CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_PLL
-    // Configure PLL and enter PBE mode
-    mcg_p->c5 = CYGHWR_HAL_KINETIS_MCG_C5_PRDIV(
-          CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL_PRDIV-1) |
-          CYGHWR_HAL_KINETIS_MCG_C5_PLLSTEN_M;
-    mcg_p->c6 = CYGHWR_HAL_KINETIS_MCG_C6_VDIV(
-          CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL_VDIV-24);
 
+# ifdef CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL
+    hal_start_pll0(mcg_p);
+# endif
+# ifdef CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL1
+    hal_start_pll1(mcg_p);
+# endif
+# if defined(CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL) || \
+     defined(CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL1)
     // Switch to PBE mode
     mcg_p->c6 |=  CYGHWR_HAL_KINETIS_MCG_C6_PLLS_M;
 
     MCG_WAIT_WHILE((mcg_p->status & CYGHWR_HAL_KINETIS_MCG_S_CLKST_M) !=
                    CYGHWR_HAL_KINETIS_MCG_S_CLKST_EXT);
     MCG_WAIT_WHILE(!(mcg_p->status & CYGHWR_HAL_KINETIS_MCG_S_PLLST_M));
+#  ifdef CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL
     MCG_WAIT_WHILE(!(mcg_p->status & CYGHWR_HAL_KINETIS_MCG_S_LOCK_M));
+#  endif
+#  if defined CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL1
+    MCG_WAIT_WHILE(!(mcg_p->s2 & CYGHWR_HAL_KINETIS_MCG_S2_LOCK1_M));
+#  endif // CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL1
 
     // Enter PEE mode
     mcg_p->c1 &= ~CYGHWR_HAL_KINETIS_MCG_C1_CLKS_M;
     MCG_WAIT_WHILE((mcg_p->status & CYGHWR_HAL_KINETIS_MCG_S_CLKST_M) !=
                    CYGHWR_HAL_KINETIS_MCG_S_CLKST_PLL);
-# endif // CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_PLL
+# endif // defined CYGOPT_HAL_CORTEXM_KINETIS_MCGOUT_PLL*
+
 # if defined(CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_PLL) || \
+     defined(CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_PLL1) || \
      defined(CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_EXT_REFCLK)
     sim_p->sopt2 |= CYGHWR_HAL_KINETIS_SIM_SOPT2_PLLFLLSEL_M;
 # endif
 
 #endif // defined(CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_PLL) ||
+       // defined(CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_PLL1) ||
        // defined(CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_FLL) ||
        // defined(CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_EXT_REFCLK)
 }
@@ -233,9 +331,21 @@ hal_get_cpu_clock(void)
 #ifdef CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_PLL
     cyghwr_hal_kinetis_mcg_t *mcg_p = CYGHWR_HAL_KINETIS_MCG_P;
 
+# if CYGINT_HAL_CORTEXM_KINETIS_150
+    freq = CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_REF_FREQ /
+          ((mcg_p->c5 & CYGHWR_HAL_KINETIS_MCG_C5_PRDIV_M)+1) *
+          ((mcg_p->c6 & CYGHWR_HAL_KINETIS_MCG_C6_VDIV_M)+16) / 2;
+# else
     freq = CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_REF_FREQ /
           ((mcg_p->c5 & CYGHWR_HAL_KINETIS_MCG_C5_PRDIV_M)+1) *
           ((mcg_p->c6 & CYGHWR_HAL_KINETIS_MCG_C6_VDIV_M)+24);
+# endif
+#elif defined CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_PLL1
+    cyghwr_hal_kinetis_mcg_t *mcg_p = CYGHWR_HAL_KINETIS_MCG_P;
+
+    freq = CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_PLL_REF_FREQ /
+          ((mcg_p->c11 & CYGHWR_HAL_KINETIS_MCG_C11_PRDIV1_M)+1) *
+          ((mcg_p->c12 & CYGHWR_HAL_KINETIS_MCG_C12_VDIV1_M)+16) / 2;
 #elif defined(CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_FLL)
     freq = CYGNUM_HAL_CORTEXM_KINETIS_MCG_FLL_FREQ_AV;
 #elif defined(CYGOPT_HAL_CORTEXM_KINETIS_MCG_MCGOUTCLK_EXT_REFCLK)
@@ -246,6 +356,9 @@ hal_get_cpu_clock(void)
     return freq;
 }
 
+
+// Clock dividers provide clock sources for various peripherals.
+
 void CYGOPT_HAL_KINETIS_MISC_FLASH_SECTION_ATTR
 hal_set_clock_dividers(void)
 {
new file mode 100644
--- /dev/null
+++ b/packages/hal/cortexm/kinetis/var/current/src/kinetis_ddram.c
@@ -0,0 +1,118 @@
+//==========================================================================
+//
+//      kinetis_ddram.c
+//
+//      Cortex-M Kinetis HAL functions
+//
+//==========================================================================
+// ####ECOSGPLCOPYRIGHTBEGIN####                                            
+// -------------------------------------------                              
+// This file is part of eCos, the Embedded Configurable Operating System.   
+// Copyright (C) 2012 Free Software Foundation, Inc.                        
+//
+// 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.,    
+// 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 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 v2.                                               
+//
+// 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 kocho <ilijak@siva.com.mk>
+// Date:         2012-03-08
+// Description:
+//
+//####DESCRIPTIONEND####
+//
+//========================================================================
+
+#include <pkgconf/hal.h>
+#include <pkgconf/hal_cortexm.h>
+#include <pkgconf/hal_cortexm_kinetis.h>
+#ifdef CYGPKG_KERNEL
+#include <pkgconf/kernel.h>
+#endif
+
+#include <cyg/infra/diag.h>
+#include <cyg/infra/cyg_type.h>
+#include <cyg/infra/cyg_trac.h>         // tracing macros
+#include <cyg/infra/cyg_ass.h>          // assertion macros
+
+#include <cyg/hal/cortexm_endian.h>
+#include <cyg/hal/hal_arch.h>           // HAL header
+#include <cyg/hal/hal_intr.h>           // HAL header
+#include <cyg/hal/hal_if.h>             // HAL header
+
+
+
+// DDRAM Controller
+#ifdef CYGPKG_HAL_CORTEXM_KINETIS_DDRMC
+// Initialize DDRAM controller.
+// inidat[] is an array of ordered pairs: (register-index, register-value).
+void CYGOPT_HAL_KINETIS_MISC_FLASH_SECTION_ATTR
+hal_cortexm_kinetis_ddrmc_init(const cyg_uint32 inidat[], cyg_uint32 num)
+{
+    cyghwr_hal_kinetis_ddrmc_t* ddrmc_p = CYGHWR_HAL_KINETIS_DDRMC_P;
+    cyghwr_hal_kinetis_sim_t *sim_p = CYGHWR_HAL_KINETIS_SIM_P;
+    volatile cyg_uint32* cr_p;
+    cyg_uint32 cr_i;
+    cyg_uint32 regval;
+
+    sim_p->scgc3 |= CYGHWR_HAL_KINETIS_SIM_SCGC3_DDR_M;
+
+    regval = sim_p->mcr & ~CYGHWR_HAL_KINETIS_SIM_MCR_DDR_SETUP_M;
+    sim_p->mcr   = regval | CYGHWR_HAL_KINETIS_SIM_MCR_DDR_SETUP;
+
+    ddrmc_p->rcr |= CYGHWR_HAL_KINETIS_DDRMC_RCR_RST_M;
+    ddrmc_p->pad_ctrl = 0x01030203;
+    cr_p = ddrmc_p->cr;
+    do {
+        cr_i = *inidat++;
+        cr_p[cr_i] = *inidat++;
+    } while(--num);
+    __asm__ volatile ("nop\n");
+    ddrmc_p->cr[0] |= CYGHWR_HAL_KINETIS_DDRMC_CR00_START;
+    while(!(ddrmc_p->cr[30] & CYGHWR_HAL_KINETIS_DDRMC_CR30_DRAM_INIT_CPL));
+}
+
+void
+hal_cortexm_kinetis_ddrmc_diag(void)
+{
+    cyghwr_hal_kinetis_ddrmc_t* ddrmc_p = CYGHWR_HAL_KINETIS_DDRMC_P;
+    cyghwr_hal_kinetis_sim_t *sim_p = CYGHWR_HAL_KINETIS_SIM_P;
+    volatile cyg_uint32* cr_p;
+    cyg_uint32 cr_i;
+
+    diag_printf("SCGC3 = 0x%08x, MCR = 0x%08x\n", sim_p->scgc3, sim_p->mcr);
+    diag_printf("RCR= 0x%08x, PAD_CTRL= 0x%08x\n", ddrmc_p->rcr, ddrmc_p->pad_ctrl);
+    cr_p = ddrmc_p->cr;
+    for(cr_i=0; cr_i < 64; cr_i++){
+        diag_printf("  CR%02d = 0x%08x\n", cr_i, cr_p[cr_i]);
+    }
+}
+
+#endif // CYGPKG_HAL_CORTEXM_KINETIS_DDRMC
+
+//==========================================================================
+// EOF kinetis_ddram.c
--- a/packages/hal/cortexm/kinetis/var/current/src/kinetis_misc.c
+++ b/packages/hal/cortexm/kinetis/var/current/src/kinetis_misc.c
@@ -66,8 +66,19 @@
 #include <cyg/hal/hal_intr.h>           // HAL header
 #include <cyg/hal/hal_if.h>             // HAL header
 
+#include <cyg/hal/hal_cache.h>
+
 void sst25xx_freescale_dspi_reg(void);
 
+#ifdef CYGPKG_HAL_KINETIS_CACHE
+# if defined CYGSEM_HAL_ENABLE_DCACHE_ON_STARTUP || \
+     defined CYGSEM_HAL_ENABLE_ICACHE_ON_STARTUP
+
+#  define ENABLE_CACHE_ON_STARTUP
+
+# endif
+#endif // defined CYGPKG_HAL_KINETIS_CACHE
+
 #ifdef CYG_HAL_STARTUP_ROM
 
 //===========================================================================
@@ -100,7 +111,46 @@ hal_kinetis_flash_conf_p( void )
 
 //=== KINETIS FLASH security configuration END. ============================
 
-//volatile cyg_uint32 *poin;
+#if defined CYG_HAL_STARTUP_ROM && defined CYGPKG_HAL_KINETIS_CACHE
+
+// Function for demotion of caching memory regions
+
+static void
+hal_cortexm_kinetis_conf_cache_regions(cyghwr_hal_kinetis_lmem_t* lmem_p,
+                                      cyg_uint32 reg_n, const cyg_uint32 *reg_mode_p)
+{
+    cyg_uint32 region;
+    cyg_uint32 mode;
+    cyg_uint32 regval;
+    cyg_uint32 reg_mode;
+
+    regval = lmem_p->rmr;
+    for(; reg_n; reg_n--){
+        reg_mode = *reg_mode_p++;
+        region = reg_mode >> 16;
+        mode = reg_mode & 0x0000ffff;
+        regval &= ~(0x3 << (15-region)*2);
+        regval |= mode << (15-region)*2;
+    }
+    lmem_p->rmr = regval;
+}
+
+const cyg_uint32 cache_reg_modes[] = {
+    (CYGHWR_HAL_KINETIS_LMEM_DRAM_7000 << 16) |
+#if defined CYGSEM_HAL_DCACHE_STARTUP_MODE_WRITETHRU
+    CYGHWR_HAL_KINETIS_LMEM_CRMR_REGION_WT_M,
+#elif defined CYGSEM_HAL_DCACHE_STARTUP_MODE_COPYBACK
+    CYGHWR_HAL_KINETIS_LMEM_CRMR_REGION_WB_M,
+#else
+    CYGHWR_HAL_KINETIS_LMEM_CRMR_REGION_NC_M,
+#endif
+
+    (CYGHWR_HAL_KINETIS_LMEM_DRAM_8000 << 16) |
+    CYGHWR_HAL_KINETIS_LMEM_CRMR_REGION_NC_M
+};
+
+#endif // defined CYG_HAL_STARTUP_ROM && defined CYGPKG_HAL_KINETIS_CACHE
+
 //==========================================================================
 // Setup variant specific hardware
 //=========================================================================
@@ -108,12 +158,23 @@ hal_kinetis_flash_conf_p( void )
 void hal_variant_init( void )
 {
     hal_update_clock_var();
+#if defined CYG_HAL_STARTUP_ROM && defined CYGPKG_HAL_KINETIS_CACHE
+    hal_cortexm_kinetis_conf_cache_regions(CYGHWR_HAL_KINETIS_LMEM_PS_P,
+        sizeof(cache_reg_modes)/sizeof(cache_reg_modes[0]),
+        cache_reg_modes);
+    hal_cortexm_kinetis_conf_cache_regions(CYGHWR_HAL_KINETIS_LMEM_PC_P,
+        sizeof(cache_reg_modes)/sizeof(cache_reg_modes[0]),
+        cache_reg_modes);
+# ifdef ENABLE_CACHE_ON_STARTUP
+    HAL_DCACHE_ENABLE();
+    HAL_ICACHE_ENABLE();
+# endif
+#endif // defined CYG_HAL_STARTUP_ROM && defined CYGPKG_HAL_KINETIS_CACHE
 #ifdef CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT
     hal_if_init();
 #endif
 }
 
-
 //===========================================================================
 // The  WDOG at Freescale Kinetis is enabled after reset. hal_wdog_disable
 // provides functionality for disabling it at startup.
@@ -191,6 +252,5 @@ hal_dump_pin_setting(cyg_uint32 pin)
     }
 }
 
-
 //==========================================================================
 // EOF kinetis_misc.c