avr32: Rename pm_init() as clk_init() and make SoC-specific
authorHaavard Skinnemoen <haavard.skinnemoen@atmel.com>
Fri, 2 May 2008 13:21:40 +0000 (15:21 +0200)
committerHaavard Skinnemoen <haavard.skinnemoen@atmel.com>
Tue, 27 May 2008 13:27:30 +0000 (15:27 +0200)
pm_init() was always more about clock initialization than anything
else. Dealing with PLLs, clock gating and such is also inherently
SoC-specific, so move it into a SoC-specific directory.

Signed-off-by: Haavard Skinnemoen <haavard.skinnemoen@atmel.com>
cpu/at32ap/at32ap700x/Makefile
cpu/at32ap/at32ap700x/clk.c [new file with mode: 0644]
cpu/at32ap/at32ap700x/sm.h [new file with mode: 0644]
cpu/at32ap/cpu.c
cpu/at32ap/sm.h [deleted file]
include/asm-avr32/arch-at32ap700x/clk.h

index d2767121184acbe3b48127452e20695299065a40..740423563ed9d2411fde722946eb157714e83111 100644 (file)
@@ -24,7 +24,7 @@ include $(TOPDIR)/config.mk
 
 LIB    := $(obj)lib$(SOC).a
 
-COBJS  := gpio.o
+COBJS  := gpio.o clk.o
 SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(SOBJS) $(COBJS))
 
diff --git a/cpu/at32ap/at32ap700x/clk.c b/cpu/at32ap/at32ap700x/clk.c
new file mode 100644 (file)
index 0000000..b3aa034
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2005-2008 Atmel Corporation
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * 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 the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+#include <common.h>
+
+#include <asm/io.h>
+
+#include <asm/arch/clk.h>
+#include <asm/arch/memory-map.h>
+
+#include "sm.h"
+
+void clk_init(void)
+{
+       uint32_t cksel;
+
+       /* in case of soft resets, disable watchdog */
+       sm_writel(WDT_CTRL, SM_BF(KEY, 0x55));
+       sm_writel(WDT_CTRL, SM_BF(KEY, 0xaa));
+
+#ifdef CONFIG_PLL
+       /* Initialize the PLL */
+       sm_writel(PM_PLL0, (SM_BF(PLLCOUNT, CFG_PLL0_SUPPRESS_CYCLES)
+                           | SM_BF(PLLMUL, CFG_PLL0_MUL - 1)
+                           | SM_BF(PLLDIV, CFG_PLL0_DIV - 1)
+                           | SM_BF(PLLOPT, CFG_PLL0_OPT)
+                           | SM_BF(PLLOSC, 0)
+                           | SM_BIT(PLLEN)));
+
+       /* Wait for lock */
+       while (!(sm_readl(PM_ISR) & SM_BIT(LOCK0))) ;
+#endif
+
+       /* Set up clocks for the CPU and all peripheral buses */
+       cksel = 0;
+       if (CFG_CLKDIV_CPU)
+               cksel |= SM_BIT(CPUDIV) | SM_BF(CPUSEL, CFG_CLKDIV_CPU - 1);
+       if (CFG_CLKDIV_HSB)
+               cksel |= SM_BIT(HSBDIV) | SM_BF(HSBSEL, CFG_CLKDIV_HSB - 1);
+       if (CFG_CLKDIV_PBA)
+               cksel |= SM_BIT(PBADIV) | SM_BF(PBASEL, CFG_CLKDIV_PBA - 1);
+       if (CFG_CLKDIV_PBB)
+               cksel |= SM_BIT(PBBDIV) | SM_BF(PBBSEL, CFG_CLKDIV_PBB - 1);
+       sm_writel(PM_CKSEL, cksel);
+
+#ifdef CONFIG_PLL
+       /* Use PLL0 as main clock */
+       sm_writel(PM_MCCTRL, SM_BIT(PLLSEL));
+#endif
+}
diff --git a/cpu/at32ap/at32ap700x/sm.h b/cpu/at32ap/at32ap700x/sm.h
new file mode 100644 (file)
index 0000000..6492c8e
--- /dev/null
@@ -0,0 +1,204 @@
+/*
+ * Register definitions for System Manager
+ */
+#ifndef __CPU_AT32AP_SM_H__
+#define __CPU_AT32AP_SM_H__
+
+/* SM register offsets */
+#define SM_PM_MCCTRL                           0x0000
+#define SM_PM_CKSEL                            0x0004
+#define SM_PM_CPU_MASK                         0x0008
+#define SM_PM_HSB_MASK                         0x000c
+#define SM_PM_PBA_MASK                         0x0010
+#define SM_PM_PBB_MASK                         0x0014
+#define SM_PM_PLL0                             0x0020
+#define SM_PM_PLL1                             0x0024
+#define SM_PM_VCTRL                            0x0030
+#define SM_PM_VMREF                            0x0034
+#define SM_PM_VMV                              0x0038
+#define SM_PM_IER                              0x0040
+#define SM_PM_IDR                              0x0044
+#define SM_PM_IMR                              0x0048
+#define SM_PM_ISR                              0x004c
+#define SM_PM_ICR                              0x0050
+#define SM_PM_GCCTRL                           0x0060
+#define SM_RTC_CTRL                            0x0080
+#define SM_RTC_VAL                             0x0084
+#define SM_RTC_TOP                             0x0088
+#define SM_RTC_IER                             0x0090
+#define SM_RTC_IDR                             0x0094
+#define SM_RTC_IMR                             0x0098
+#define SM_RTC_ISR                             0x009c
+#define SM_RTC_ICR                             0x00a0
+#define SM_WDT_CTRL                            0x00b0
+#define SM_WDT_CLR                             0x00b4
+#define SM_WDT_EXT                             0x00b8
+#define SM_RC_RCAUSE                           0x00c0
+#define SM_EIM_IER                             0x0100
+#define SM_EIM_IDR                             0x0104
+#define SM_EIM_IMR                             0x0108
+#define SM_EIM_ISR                             0x010c
+#define SM_EIM_ICR                             0x0110
+#define SM_EIM_MODE                            0x0114
+#define SM_EIM_EDGE                            0x0118
+#define SM_EIM_LEVEL                           0x011c
+#define SM_EIM_TEST                            0x0120
+#define SM_EIM_NMIC                            0x0124
+
+/* Bitfields in PM_CKSEL */
+#define SM_CPUSEL_OFFSET                       0
+#define SM_CPUSEL_SIZE                         3
+#define SM_CPUDIV_OFFSET                       7
+#define SM_CPUDIV_SIZE                         1
+#define SM_HSBSEL_OFFSET                       8
+#define SM_HSBSEL_SIZE                         3
+#define SM_HSBDIV_OFFSET                       15
+#define SM_HSBDIV_SIZE                         1
+#define SM_PBASEL_OFFSET                       16
+#define SM_PBASEL_SIZE                         3
+#define SM_PBADIV_OFFSET                       23
+#define SM_PBADIV_SIZE                         1
+#define SM_PBBSEL_OFFSET                       24
+#define SM_PBBSEL_SIZE                         3
+#define SM_PBBDIV_OFFSET                       31
+#define SM_PBBDIV_SIZE                         1
+
+/* Bitfields in PM_PLL0 */
+#define SM_PLLEN_OFFSET                                0
+#define SM_PLLEN_SIZE                          1
+#define SM_PLLOSC_OFFSET                       1
+#define SM_PLLOSC_SIZE                         1
+#define SM_PLLOPT_OFFSET                       2
+#define SM_PLLOPT_SIZE                         3
+#define SM_PLLDIV_OFFSET                       8
+#define SM_PLLDIV_SIZE                         8
+#define SM_PLLMUL_OFFSET                       16
+#define SM_PLLMUL_SIZE                         8
+#define SM_PLLCOUNT_OFFSET                     24
+#define SM_PLLCOUNT_SIZE                       6
+#define SM_PLLTEST_OFFSET                      31
+#define SM_PLLTEST_SIZE                                1
+
+/* Bitfields in PM_VCTRL */
+#define SM_VAUTO_OFFSET                                0
+#define SM_VAUTO_SIZE                          1
+#define SM_PM_VCTRL_VAL_OFFSET                 8
+#define SM_PM_VCTRL_VAL_SIZE                   7
+
+/* Bitfields in PM_VMREF */
+#define SM_REFSEL_OFFSET                       0
+#define SM_REFSEL_SIZE                         4
+
+/* Bitfields in PM_VMV */
+#define SM_PM_VMV_VAL_OFFSET                   0
+#define SM_PM_VMV_VAL_SIZE                     8
+
+/* Bitfields in PM_ICR */
+#define SM_LOCK0_OFFSET                                0
+#define SM_LOCK0_SIZE                          1
+#define SM_LOCK1_OFFSET                                1
+#define SM_LOCK1_SIZE                          1
+#define SM_WAKE_OFFSET                         2
+#define SM_WAKE_SIZE                           1
+#define SM_VOK_OFFSET                          3
+#define SM_VOK_SIZE                            1
+#define SM_VMRDY_OFFSET                                4
+#define SM_VMRDY_SIZE                          1
+#define SM_CKRDY_OFFSET                                5
+#define SM_CKRDY_SIZE                          1
+
+/* Bitfields in PM_GCCTRL */
+#define SM_OSCSEL_OFFSET                       0
+#define SM_OSCSEL_SIZE                         1
+#define SM_PLLSEL_OFFSET                       1
+#define SM_PLLSEL_SIZE                         1
+#define SM_CEN_OFFSET                          2
+#define SM_CEN_SIZE                            1
+#define SM_CPC_OFFSET                          3
+#define SM_CPC_SIZE                            1
+#define SM_DIVEN_OFFSET                                4
+#define SM_DIVEN_SIZE                          1
+#define SM_DIV_OFFSET                          8
+#define SM_DIV_SIZE                            8
+
+/* Bitfields in RTC_CTRL */
+#define SM_PCLR_OFFSET                         1
+#define SM_PCLR_SIZE                           1
+#define SM_TOPEN_OFFSET                                2
+#define SM_TOPEN_SIZE                          1
+#define SM_CLKEN_OFFSET                                3
+#define SM_CLKEN_SIZE                          1
+#define SM_PSEL_OFFSET                         8
+#define SM_PSEL_SIZE                           16
+
+/* Bitfields in RTC_VAL */
+#define SM_RTC_VAL_VAL_OFFSET                  0
+#define SM_RTC_VAL_VAL_SIZE                    31
+
+/* Bitfields in RTC_TOP */
+#define SM_RTC_TOP_VAL_OFFSET                  0
+#define SM_RTC_TOP_VAL_SIZE                    32
+
+/* Bitfields in RTC_ICR */
+#define SM_TOPI_OFFSET                         0
+#define SM_TOPI_SIZE                           1
+
+/* Bitfields in WDT_CTRL */
+#define SM_KEY_OFFSET                          24
+#define SM_KEY_SIZE                            8
+
+/* Bitfields in RC_RCAUSE */
+#define SM_POR_OFFSET                          0
+#define SM_POR_SIZE                            1
+#define SM_BOD_OFFSET                          1
+#define SM_BOD_SIZE                            1
+#define SM_EXT_OFFSET                          2
+#define SM_EXT_SIZE                            1
+#define SM_WDT_OFFSET                          3
+#define SM_WDT_SIZE                            1
+#define SM_NTAE_OFFSET                         4
+#define SM_NTAE_SIZE                           1
+#define SM_SERP_OFFSET                         5
+#define SM_SERP_SIZE                           1
+
+/* Bitfields in EIM_EDGE */
+#define SM_INT0_OFFSET                         0
+#define SM_INT0_SIZE                           1
+#define SM_INT1_OFFSET                         1
+#define SM_INT1_SIZE                           1
+#define SM_INT2_OFFSET                         2
+#define SM_INT2_SIZE                           1
+#define SM_INT3_OFFSET                         3
+#define SM_INT3_SIZE                           1
+
+/* Bitfields in EIM_LEVEL */
+
+/* Bitfields in EIM_TEST */
+#define SM_TESTEN_OFFSET                       31
+#define SM_TESTEN_SIZE                         1
+
+/* Bitfields in EIM_NMIC */
+#define SM_EN_OFFSET                           0
+#define SM_EN_SIZE                             1
+
+/* Bit manipulation macros */
+#define SM_BIT(name)                                   \
+       (1 << SM_##name##_OFFSET)
+#define SM_BF(name,value)                              \
+       (((value) & ((1 << SM_##name##_SIZE) - 1))      \
+        << SM_##name##_OFFSET)
+#define SM_BFEXT(name,value)                           \
+       (((value) >> SM_##name##_OFFSET)                \
+        & ((1 << SM_##name##_SIZE) - 1))
+#define SM_BFINS(name,value,old)                       \
+       (((old) & ~(((1 << SM_##name##_SIZE) - 1)       \
+                   << SM_##name##_OFFSET))             \
+        | SM_BF(name,value))
+
+/* Register access macros */
+#define sm_readl(reg)                                  \
+       readl((void *)SM_BASE + SM_##reg)
+#define sm_writel(reg,value)                           \
+       writel((value), (void *)SM_BASE + SM_##reg)
+
+#endif /* __CPU_AT32AP_SM_H__ */
index a7a66cc1a0b028b2677f542a9521409c5005c238..0ba836180e4396f61891f76f7dda42ac64717edf 100644 (file)
@@ -30,7 +30,6 @@
 #include <asm/arch/memory-map.h>
 
 #include "hsmc3.h"
-#include "sm.h"
 
 /* Sanity checks */
 #if (CFG_CLKDIV_CPU > CFG_CLKDIV_HSB)          \
 
 DECLARE_GLOBAL_DATA_PTR;
 
-static void pm_init(void)
-{
-       uint32_t cksel;
-
-#ifdef CONFIG_PLL
-       /* Initialize the PLL */
-       sm_writel(PM_PLL0, (SM_BF(PLLCOUNT, CFG_PLL0_SUPPRESS_CYCLES)
-                           | SM_BF(PLLMUL, CFG_PLL0_MUL - 1)
-                           | SM_BF(PLLDIV, CFG_PLL0_DIV - 1)
-                           | SM_BF(PLLOPT, CFG_PLL0_OPT)
-                           | SM_BF(PLLOSC, 0)
-                           | SM_BIT(PLLEN)));
-
-       /* Wait for lock */
-       while (!(sm_readl(PM_ISR) & SM_BIT(LOCK0))) ;
-#endif
-
-       /* Set up clocks for the CPU and all peripheral buses */
-       cksel = 0;
-       if (CFG_CLKDIV_CPU)
-               cksel |= SM_BIT(CPUDIV) | SM_BF(CPUSEL, CFG_CLKDIV_CPU - 1);
-       if (CFG_CLKDIV_HSB)
-               cksel |= SM_BIT(HSBDIV) | SM_BF(HSBSEL, CFG_CLKDIV_HSB - 1);
-       if (CFG_CLKDIV_PBA)
-               cksel |= SM_BIT(PBADIV) | SM_BF(PBASEL, CFG_CLKDIV_PBA - 1);
-       if (CFG_CLKDIV_PBB)
-               cksel |= SM_BIT(PBBDIV) | SM_BF(PBBSEL, CFG_CLKDIV_PBB - 1);
-       sm_writel(PM_CKSEL, cksel);
-
-       gd->cpu_hz = get_cpu_clk_rate();
-
-#ifdef CONFIG_PLL
-       /* Use PLL0 as main clock */
-       sm_writel(PM_MCCTRL, SM_BIT(PLLSEL));
-#endif
-}
-
 int cpu_init(void)
 {
        extern void _evba(void);
 
-       /* in case of soft resets, disable watchdog */
-       sm_writel(WDT_CTRL, SM_BF(KEY, 0x55));
-       sm_writel(WDT_CTRL, SM_BF(KEY, 0xaa));
-
        gd->cpu_hz = CFG_OSC0_HZ;
 
        /* TODO: Move somewhere else, but needs to be run before we
@@ -98,8 +56,12 @@ int cpu_init(void)
        hsmc3_writel(PULSE0, 0x0b0a0906);
        hsmc3_writel(SETUP0, 0x00010002);
 
-       pm_init();
+       clk_init();
+
+       /* Update the CPU speed according to the PLL configuration */
+       gd->cpu_hz = get_cpu_clk_rate();
 
+       /* Set up the exception handler table and enable exceptions */
        sysreg_write(EVBA, (unsigned long)&_evba);
        asm volatile("csrf      %0" : : "i"(SYSREG_EM_OFFSET));
 
diff --git a/cpu/at32ap/sm.h b/cpu/at32ap/sm.h
deleted file mode 100644 (file)
index 6492c8e..0000000
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
- * Register definitions for System Manager
- */
-#ifndef __CPU_AT32AP_SM_H__
-#define __CPU_AT32AP_SM_H__
-
-/* SM register offsets */
-#define SM_PM_MCCTRL                           0x0000
-#define SM_PM_CKSEL                            0x0004
-#define SM_PM_CPU_MASK                         0x0008
-#define SM_PM_HSB_MASK                         0x000c
-#define SM_PM_PBA_MASK                         0x0010
-#define SM_PM_PBB_MASK                         0x0014
-#define SM_PM_PLL0                             0x0020
-#define SM_PM_PLL1                             0x0024
-#define SM_PM_VCTRL                            0x0030
-#define SM_PM_VMREF                            0x0034
-#define SM_PM_VMV                              0x0038
-#define SM_PM_IER                              0x0040
-#define SM_PM_IDR                              0x0044
-#define SM_PM_IMR                              0x0048
-#define SM_PM_ISR                              0x004c
-#define SM_PM_ICR                              0x0050
-#define SM_PM_GCCTRL                           0x0060
-#define SM_RTC_CTRL                            0x0080
-#define SM_RTC_VAL                             0x0084
-#define SM_RTC_TOP                             0x0088
-#define SM_RTC_IER                             0x0090
-#define SM_RTC_IDR                             0x0094
-#define SM_RTC_IMR                             0x0098
-#define SM_RTC_ISR                             0x009c
-#define SM_RTC_ICR                             0x00a0
-#define SM_WDT_CTRL                            0x00b0
-#define SM_WDT_CLR                             0x00b4
-#define SM_WDT_EXT                             0x00b8
-#define SM_RC_RCAUSE                           0x00c0
-#define SM_EIM_IER                             0x0100
-#define SM_EIM_IDR                             0x0104
-#define SM_EIM_IMR                             0x0108
-#define SM_EIM_ISR                             0x010c
-#define SM_EIM_ICR                             0x0110
-#define SM_EIM_MODE                            0x0114
-#define SM_EIM_EDGE                            0x0118
-#define SM_EIM_LEVEL                           0x011c
-#define SM_EIM_TEST                            0x0120
-#define SM_EIM_NMIC                            0x0124
-
-/* Bitfields in PM_CKSEL */
-#define SM_CPUSEL_OFFSET                       0
-#define SM_CPUSEL_SIZE                         3
-#define SM_CPUDIV_OFFSET                       7
-#define SM_CPUDIV_SIZE                         1
-#define SM_HSBSEL_OFFSET                       8
-#define SM_HSBSEL_SIZE                         3
-#define SM_HSBDIV_OFFSET                       15
-#define SM_HSBDIV_SIZE                         1
-#define SM_PBASEL_OFFSET                       16
-#define SM_PBASEL_SIZE                         3
-#define SM_PBADIV_OFFSET                       23
-#define SM_PBADIV_SIZE                         1
-#define SM_PBBSEL_OFFSET                       24
-#define SM_PBBSEL_SIZE                         3
-#define SM_PBBDIV_OFFSET                       31
-#define SM_PBBDIV_SIZE                         1
-
-/* Bitfields in PM_PLL0 */
-#define SM_PLLEN_OFFSET                                0
-#define SM_PLLEN_SIZE                          1
-#define SM_PLLOSC_OFFSET                       1
-#define SM_PLLOSC_SIZE                         1
-#define SM_PLLOPT_OFFSET                       2
-#define SM_PLLOPT_SIZE                         3
-#define SM_PLLDIV_OFFSET                       8
-#define SM_PLLDIV_SIZE                         8
-#define SM_PLLMUL_OFFSET                       16
-#define SM_PLLMUL_SIZE                         8
-#define SM_PLLCOUNT_OFFSET                     24
-#define SM_PLLCOUNT_SIZE                       6
-#define SM_PLLTEST_OFFSET                      31
-#define SM_PLLTEST_SIZE                                1
-
-/* Bitfields in PM_VCTRL */
-#define SM_VAUTO_OFFSET                                0
-#define SM_VAUTO_SIZE                          1
-#define SM_PM_VCTRL_VAL_OFFSET                 8
-#define SM_PM_VCTRL_VAL_SIZE                   7
-
-/* Bitfields in PM_VMREF */
-#define SM_REFSEL_OFFSET                       0
-#define SM_REFSEL_SIZE                         4
-
-/* Bitfields in PM_VMV */
-#define SM_PM_VMV_VAL_OFFSET                   0
-#define SM_PM_VMV_VAL_SIZE                     8
-
-/* Bitfields in PM_ICR */
-#define SM_LOCK0_OFFSET                                0
-#define SM_LOCK0_SIZE                          1
-#define SM_LOCK1_OFFSET                                1
-#define SM_LOCK1_SIZE                          1
-#define SM_WAKE_OFFSET                         2
-#define SM_WAKE_SIZE                           1
-#define SM_VOK_OFFSET                          3
-#define SM_VOK_SIZE                            1
-#define SM_VMRDY_OFFSET                                4
-#define SM_VMRDY_SIZE                          1
-#define SM_CKRDY_OFFSET                                5
-#define SM_CKRDY_SIZE                          1
-
-/* Bitfields in PM_GCCTRL */
-#define SM_OSCSEL_OFFSET                       0
-#define SM_OSCSEL_SIZE                         1
-#define SM_PLLSEL_OFFSET                       1
-#define SM_PLLSEL_SIZE                         1
-#define SM_CEN_OFFSET                          2
-#define SM_CEN_SIZE                            1
-#define SM_CPC_OFFSET                          3
-#define SM_CPC_SIZE                            1
-#define SM_DIVEN_OFFSET                                4
-#define SM_DIVEN_SIZE                          1
-#define SM_DIV_OFFSET                          8
-#define SM_DIV_SIZE                            8
-
-/* Bitfields in RTC_CTRL */
-#define SM_PCLR_OFFSET                         1
-#define SM_PCLR_SIZE                           1
-#define SM_TOPEN_OFFSET                                2
-#define SM_TOPEN_SIZE                          1
-#define SM_CLKEN_OFFSET                                3
-#define SM_CLKEN_SIZE                          1
-#define SM_PSEL_OFFSET                         8
-#define SM_PSEL_SIZE                           16
-
-/* Bitfields in RTC_VAL */
-#define SM_RTC_VAL_VAL_OFFSET                  0
-#define SM_RTC_VAL_VAL_SIZE                    31
-
-/* Bitfields in RTC_TOP */
-#define SM_RTC_TOP_VAL_OFFSET                  0
-#define SM_RTC_TOP_VAL_SIZE                    32
-
-/* Bitfields in RTC_ICR */
-#define SM_TOPI_OFFSET                         0
-#define SM_TOPI_SIZE                           1
-
-/* Bitfields in WDT_CTRL */
-#define SM_KEY_OFFSET                          24
-#define SM_KEY_SIZE                            8
-
-/* Bitfields in RC_RCAUSE */
-#define SM_POR_OFFSET                          0
-#define SM_POR_SIZE                            1
-#define SM_BOD_OFFSET                          1
-#define SM_BOD_SIZE                            1
-#define SM_EXT_OFFSET                          2
-#define SM_EXT_SIZE                            1
-#define SM_WDT_OFFSET                          3
-#define SM_WDT_SIZE                            1
-#define SM_NTAE_OFFSET                         4
-#define SM_NTAE_SIZE                           1
-#define SM_SERP_OFFSET                         5
-#define SM_SERP_SIZE                           1
-
-/* Bitfields in EIM_EDGE */
-#define SM_INT0_OFFSET                         0
-#define SM_INT0_SIZE                           1
-#define SM_INT1_OFFSET                         1
-#define SM_INT1_SIZE                           1
-#define SM_INT2_OFFSET                         2
-#define SM_INT2_SIZE                           1
-#define SM_INT3_OFFSET                         3
-#define SM_INT3_SIZE                           1
-
-/* Bitfields in EIM_LEVEL */
-
-/* Bitfields in EIM_TEST */
-#define SM_TESTEN_OFFSET                       31
-#define SM_TESTEN_SIZE                         1
-
-/* Bitfields in EIM_NMIC */
-#define SM_EN_OFFSET                           0
-#define SM_EN_SIZE                             1
-
-/* Bit manipulation macros */
-#define SM_BIT(name)                                   \
-       (1 << SM_##name##_OFFSET)
-#define SM_BF(name,value)                              \
-       (((value) & ((1 << SM_##name##_SIZE) - 1))      \
-        << SM_##name##_OFFSET)
-#define SM_BFEXT(name,value)                           \
-       (((value) >> SM_##name##_OFFSET)                \
-        & ((1 << SM_##name##_SIZE) - 1))
-#define SM_BFINS(name,value,old)                       \
-       (((old) & ~(((1 << SM_##name##_SIZE) - 1)       \
-                   << SM_##name##_OFFSET))             \
-        | SM_BF(name,value))
-
-/* Register access macros */
-#define sm_readl(reg)                                  \
-       readl((void *)SM_BASE + SM_##reg)
-#define sm_writel(reg,value)                           \
-       writel((value), (void *)SM_BASE + SM_##reg)
-
-#endif /* __CPU_AT32AP_SM_H__ */
index 309fda50e21d7613e5ed68134994fe9338c94f62..4a1dd33b56b0c259b7bbebb91ef8e5a9ae02524c 100644 (file)
@@ -75,6 +75,8 @@ static inline unsigned long get_mci_clk_rate(void)
 }
 #endif
 
+extern void clk_init(void);
+
 /* Board code may need the SDRAM base clock as a compile-time constant */
 #define SDRAMC_BUS_HZ  (MAIN_CLK_RATE >> CFG_CLKDIV_HSB)