Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=9c8f8e752431f3f7ed6ea6ea6e491ce12057f572
Commit:     9c8f8e752431f3f7ed6ea6ea6e491ce12057f572
Parent:     de46c33745f5e2ad594c72f2cf5f490861b16ce1
Author:     Haavard Skinnemoen <[EMAIL PROTECTED]>
AuthorDate: Thu Feb 1 16:34:10 2007 +0100
Committer:  Haavard Skinnemoen <[EMAIL PROTECTED]>
CommitDate: Fri Apr 27 12:58:50 2007 +0200

    [AVR32] Add basic HMATRIX support
    
    This adds register and clock definitions for the High-speed bus Matrix
    (HMATRIX) as well as a function that can be used to configure special
    EBI functionality like CompactFlash and NAND flash support.
    
    Signed-off-by: Haavard Skinnemoen <[EMAIL PROTECTED]>
---
 arch/avr32/mach-at32ap/at32ap7000.c |   38 +++++++
 arch/avr32/mach-at32ap/hmatrix.h    |  182 +++++++++++++++++++++++++++++++++++
 2 files changed, 220 insertions(+), 0 deletions(-)

diff --git a/arch/avr32/mach-at32ap/at32ap7000.c 
b/arch/avr32/mach-at32ap/at32ap7000.c
index 472703f..32c7045 100644
--- a/arch/avr32/mach-at32ap/at32ap7000.c
+++ b/arch/avr32/mach-at32ap/at32ap7000.c
@@ -18,6 +18,7 @@
 #include <asm/arch/sm.h>
 
 #include "clock.h"
+#include "hmatrix.h"
 #include "pio.h"
 #include "sm.h"
 
@@ -467,6 +468,42 @@ static struct clk pico_clk = {
 };
 
 /* --------------------------------------------------------------------
+ * HMATRIX
+ * -------------------------------------------------------------------- */
+
+static struct clk hmatrix_clk = {
+       .name           = "hmatrix_clk",
+       .parent         = &pbb_clk,
+       .mode           = pbb_clk_mode,
+       .get_rate       = pbb_clk_get_rate,
+       .index          = 2,
+       .users          = 1,
+};
+#define HMATRIX_BASE   ((void __iomem *)0xfff00800)
+
+#define hmatrix_readl(reg)                                     \
+       __raw_readl((HMATRIX_BASE) + HMATRIX_##reg)
+#define hmatrix_writel(reg,value)                              \
+       __raw_writel((value), (HMATRIX_BASE) + HMATRIX_##reg)
+
+/*
+ * Set bits in the HMATRIX Special Function Register (SFR) used by the
+ * External Bus Interface (EBI). This can be used to enable special
+ * features like CompactFlash support, NAND Flash support, etc. on
+ * certain chipselects.
+ */
+static inline void set_ebi_sfr_bits(u32 mask)
+{
+       u32 sfr;
+
+       clk_enable(&hmatrix_clk);
+       sfr = hmatrix_readl(SFR4);
+       sfr |= mask;
+       hmatrix_writel(SFR4, sfr);
+       clk_disable(&hmatrix_clk);
+}
+
+/* --------------------------------------------------------------------
  *  PIO
  * -------------------------------------------------------------------- */
 
@@ -950,6 +987,7 @@ struct clk *at32_clock_list[] = {
        &pbb_clk,
        &at32_sm_pclk,
        &at32_intc0_pclk,
+       &hmatrix_clk,
        &ebi_clk,
        &hramc_clk,
        &smc0_pclk,
diff --git a/arch/avr32/mach-at32ap/hmatrix.h b/arch/avr32/mach-at32ap/hmatrix.h
new file mode 100644
index 0000000..d10bfb6
--- /dev/null
+++ b/arch/avr32/mach-at32ap/hmatrix.h
@@ -0,0 +1,182 @@
+/*
+ * Register definitions for High-Speed Bus Matrix
+ */
+#ifndef __HMATRIX_H
+#define __HMATRIX_H
+
+/* HMATRIX register offsets */
+#define HMATRIX_MCFG0                          0x0000
+#define HMATRIX_MCFG1                          0x0004
+#define HMATRIX_MCFG2                          0x0008
+#define HMATRIX_MCFG3                          0x000c
+#define HMATRIX_MCFG4                          0x0010
+#define HMATRIX_MCFG5                          0x0014
+#define HMATRIX_MCFG6                          0x0018
+#define HMATRIX_MCFG7                          0x001c
+#define HMATRIX_MCFG8                          0x0020
+#define HMATRIX_MCFG9                          0x0024
+#define HMATRIX_MCFG10                         0x0028
+#define HMATRIX_MCFG11                         0x002c
+#define HMATRIX_MCFG12                         0x0030
+#define HMATRIX_MCFG13                         0x0034
+#define HMATRIX_MCFG14                         0x0038
+#define HMATRIX_MCFG15                         0x003c
+#define HMATRIX_SCFG0                          0x0040
+#define HMATRIX_SCFG1                          0x0044
+#define HMATRIX_SCFG2                          0x0048
+#define HMATRIX_SCFG3                          0x004c
+#define HMATRIX_SCFG4                          0x0050
+#define HMATRIX_SCFG5                          0x0054
+#define HMATRIX_SCFG6                          0x0058
+#define HMATRIX_SCFG7                          0x005c
+#define HMATRIX_SCFG8                          0x0060
+#define HMATRIX_SCFG9                          0x0064
+#define HMATRIX_SCFG10                         0x0068
+#define HMATRIX_SCFG11                         0x006c
+#define HMATRIX_SCFG12                         0x0070
+#define HMATRIX_SCFG13                         0x0074
+#define HMATRIX_SCFG14                         0x0078
+#define HMATRIX_SCFG15                         0x007c
+#define HMATRIX_PRAS0                          0x0080
+#define HMATRIX_PRBS0                          0x0084
+#define HMATRIX_PRAS1                          0x0088
+#define HMATRIX_PRBS1                          0x008c
+#define HMATRIX_PRAS2                          0x0090
+#define HMATRIX_PRBS2                          0x0094
+#define HMATRIX_PRAS3                          0x0098
+#define HMATRIX_PRBS3                          0x009c
+#define HMATRIX_PRAS4                          0x00a0
+#define HMATRIX_PRBS4                          0x00a4
+#define HMATRIX_PRAS5                          0x00a8
+#define HMATRIX_PRBS5                          0x00ac
+#define HMATRIX_PRAS6                          0x00b0
+#define HMATRIX_PRBS6                          0x00b4
+#define HMATRIX_PRAS7                          0x00b8
+#define HMATRIX_PRBS7                          0x00bc
+#define HMATRIX_PRAS8                          0x00c0
+#define HMATRIX_PRBS8                          0x00c4
+#define HMATRIX_PRAS9                          0x00c8
+#define HMATRIX_PRBS9                          0x00cc
+#define HMATRIX_PRAS10                         0x00d0
+#define HMATRIX_PRBS10                         0x00d4
+#define HMATRIX_PRAS11                         0x00d8
+#define HMATRIX_PRBS11                         0x00dc
+#define HMATRIX_PRAS12                         0x00e0
+#define HMATRIX_PRBS12                         0x00e4
+#define HMATRIX_PRAS13                         0x00e8
+#define HMATRIX_PRBS13                         0x00ec
+#define HMATRIX_PRAS14                         0x00f0
+#define HMATRIX_PRBS14                         0x00f4
+#define HMATRIX_PRAS15                         0x00f8
+#define HMATRIX_PRBS15                         0x00fc
+#define HMATRIX_MRCR                           0x0100
+#define HMATRIX_SFR0                           0x0110
+#define HMATRIX_SFR1                           0x0114
+#define HMATRIX_SFR2                           0x0118
+#define HMATRIX_SFR3                           0x011c
+#define HMATRIX_SFR4                           0x0120
+#define HMATRIX_SFR5                           0x0124
+#define HMATRIX_SFR6                           0x0128
+#define HMATRIX_SFR7                           0x012c
+#define HMATRIX_SFR8                           0x0130
+#define HMATRIX_SFR9                           0x0134
+#define HMATRIX_SFR10                          0x0138
+#define HMATRIX_SFR11                          0x013c
+#define HMATRIX_SFR12                          0x0140
+#define HMATRIX_SFR13                          0x0144
+#define HMATRIX_SFR14                          0x0148
+#define HMATRIX_SFR15                          0x014c
+
+/* Bitfields in MCFGx */
+#define HMATRIX_ULBT_OFFSET                    0
+#define HMATRIX_ULBT_SIZE                      3
+
+/* Bitfields in SCFGx */
+#define HMATRIX_SLOT_CYCLE_OFFSET              0
+#define HMATRIX_SLOT_CYCLE_SIZE                        8
+#define HMATRIX_DEFMSTR_TYPE_OFFSET            16
+#define HMATRIX_DEFMSTR_TYPE_SIZE              2
+#define HMATRIX_FIXED_DEFMSTR_OFFSET           18
+#define HMATRIX_FIXED_DEFMSTR_SIZE             4
+#define HMATRIX_ARBT_OFFSET                    24
+#define HMATRIX_ARBT_SIZE                      2
+
+/* Bitfields in PRASx */
+#define HMATRIX_M0PR_OFFSET                    0
+#define HMATRIX_M0PR_SIZE                      4
+#define HMATRIX_M1PR_OFFSET                    4
+#define HMATRIX_M1PR_SIZE                      4
+#define HMATRIX_M2PR_OFFSET                    8
+#define HMATRIX_M2PR_SIZE                      4
+#define HMATRIX_M3PR_OFFSET                    12
+#define HMATRIX_M3PR_SIZE                      4
+#define HMATRIX_M4PR_OFFSET                    16
+#define HMATRIX_M4PR_SIZE                      4
+#define HMATRIX_M5PR_OFFSET                    20
+#define HMATRIX_M5PR_SIZE                      4
+#define HMATRIX_M6PR_OFFSET                    24
+#define HMATRIX_M6PR_SIZE                      4
+#define HMATRIX_M7PR_OFFSET                    28
+#define HMATRIX_M7PR_SIZE                      4
+
+/* Bitfields in PRBSx */
+#define HMATRIX_M8PR_OFFSET                    0
+#define HMATRIX_M8PR_SIZE                      4
+#define HMATRIX_M9PR_OFFSET                    4
+#define HMATRIX_M9PR_SIZE                      4
+#define HMATRIX_M10PR_OFFSET                   8
+#define HMATRIX_M10PR_SIZE                     4
+#define HMATRIX_M11PR_OFFSET                   12
+#define HMATRIX_M11PR_SIZE                     4
+#define HMATRIX_M12PR_OFFSET                   16
+#define HMATRIX_M12PR_SIZE                     4
+#define HMATRIX_M13PR_OFFSET                   20
+#define HMATRIX_M13PR_SIZE                     4
+#define HMATRIX_M14PR_OFFSET                   24
+#define HMATRIX_M14PR_SIZE                     4
+#define HMATRIX_M15PR_OFFSET                   28
+#define HMATRIX_M15PR_SIZE                     4
+
+/* Bitfields in SFR4 */
+#define HMATRIX_CS1A_OFFSET                    1
+#define HMATRIX_CS1A_SIZE                      1
+#define HMATRIX_CS3A_OFFSET                    3
+#define HMATRIX_CS3A_SIZE                      1
+#define HMATRIX_CS4A_OFFSET                    4
+#define HMATRIX_CS4A_SIZE                      1
+#define HMATRIX_CS5A_OFFSET                    5
+#define HMATRIX_CS5A_SIZE                      1
+#define HMATRIX_DBPUC_OFFSET                   8
+#define HMATRIX_DBPUC_SIZE                     1
+
+/* Constants for ULBT */
+#define HMATRIX_ULBT_INFINITE                  0
+#define HMATRIX_ULBT_SINGLE                    1
+#define HMATRIX_ULBT_FOUR_BEAT                 2
+#define HMATRIX_ULBT_EIGHT_BEAT                        3
+#define HMATRIX_ULBT_SIXTEEN_BEAT              4
+
+/* Constants for DEFMSTR_TYPE */
+#define HMATRIX_DEFMSTR_TYPE_NO_DEFAULT                0
+#define HMATRIX_DEFMSTR_TYPE_LAST_DEFAULT      1
+#define HMATRIX_DEFMSTR_TYPE_FIXED_DEFAULT     2
+
+/* Constants for ARBT */
+#define HMATRIX_ARBT_ROUND_ROBIN               0
+#define HMATRIX_ARBT_FIXED_PRIORITY            1
+
+/* Bit manipulation macros */
+#define HMATRIX_BIT(name)                                      \
+       (1 << HMATRIX_##name##_OFFSET)
+#define HMATRIX_BF(name,value)                                 \
+       (((value) & ((1 << HMATRIX_##name##_SIZE) - 1))         \
+        << HMATRIX_##name##_OFFSET)
+#define HMATRIX_BFEXT(name,value)                              \
+       (((value) >> HMATRIX_##name##_OFFSET)                   \
+        & ((1 << HMATRIX_##name##_SIZE) - 1))
+#define HMATRIX_BFINS(name,value,old)                          \
+       (((old) & ~(((1 << HMATRIX_##name##_SIZE) - 1)          \
+                   << HMATRIX_##name##_OFFSET))                \
+        | HMATRIX_BF(name,value))
+
+#endif /* __HMATRIX_H */
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to