diff options
| author | Jonathan Herman <hermanjl@cs.unc.edu> | 2013-01-22 10:38:37 -0500 |
|---|---|---|
| committer | Jonathan Herman <hermanjl@cs.unc.edu> | 2013-01-22 10:38:37 -0500 |
| commit | fcc9d2e5a6c89d22b8b773a64fb4ad21ac318446 (patch) | |
| tree | a57612d1888735a2ec7972891b68c1ac5ec8faea /arch/arm/include/asm/hardware | |
| parent | 8dea78da5cee153b8af9c07a2745f6c55057fe12 (diff) | |
Diffstat (limited to 'arch/arm/include/asm/hardware')
| -rw-r--r-- | arch/arm/include/asm/hardware/clps7111.h | 184 | ||||
| -rw-r--r-- | arch/arm/include/asm/hardware/cs89712.h | 49 | ||||
| -rw-r--r-- | arch/arm/include/asm/hardware/entry-macro-gic.S | 75 | ||||
| -rw-r--r-- | arch/arm/include/asm/hardware/ep7211.h | 40 | ||||
| -rw-r--r-- | arch/arm/include/asm/hardware/ep7212.h | 83 | ||||
| -rw-r--r-- | arch/arm/include/asm/hardware/linkup-l1110.h | 48 | ||||
| -rw-r--r-- | arch/arm/include/asm/hardware/pl330.h | 217 | ||||
| -rw-r--r-- | arch/arm/include/asm/hardware/uengine.h | 62 |
8 files changed, 758 insertions, 0 deletions
diff --git a/arch/arm/include/asm/hardware/clps7111.h b/arch/arm/include/asm/hardware/clps7111.h new file mode 100644 index 00000000000..44477225aed --- /dev/null +++ b/arch/arm/include/asm/hardware/clps7111.h | |||
| @@ -0,0 +1,184 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/include/asm/hardware/clps7111.h | ||
| 3 | * | ||
| 4 | * This file contains the hardware definitions of the CLPS7111 internal | ||
| 5 | * registers. | ||
| 6 | * | ||
| 7 | * Copyright (C) 2000 Deep Blue Solutions Ltd. | ||
| 8 | * | ||
| 9 | * This program is free software; you can redistribute it and/or modify | ||
| 10 | * it under the terms of the GNU General Public License as published by | ||
| 11 | * the Free Software Foundation; either version 2 of the License, or | ||
| 12 | * (at your option) any later version. | ||
| 13 | * | ||
| 14 | * This program is distributed in the hope that it will be useful, | ||
| 15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 17 | * GNU General Public License for more details. | ||
| 18 | * | ||
| 19 | * You should have received a copy of the GNU General Public License | ||
| 20 | * along with this program; if not, write to the Free Software | ||
| 21 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 22 | */ | ||
| 23 | #ifndef __ASM_HARDWARE_CLPS7111_H | ||
| 24 | #define __ASM_HARDWARE_CLPS7111_H | ||
| 25 | |||
| 26 | #define CLPS7111_PHYS_BASE (0x80000000) | ||
| 27 | |||
| 28 | #ifndef __ASSEMBLY__ | ||
| 29 | #define clps_readb(off) __raw_readb(CLPS7111_BASE + (off)) | ||
| 30 | #define clps_readw(off) __raw_readw(CLPS7111_BASE + (off)) | ||
| 31 | #define clps_readl(off) __raw_readl(CLPS7111_BASE + (off)) | ||
| 32 | #define clps_writeb(val,off) __raw_writeb(val, CLPS7111_BASE + (off)) | ||
| 33 | #define clps_writew(val,off) __raw_writew(val, CLPS7111_BASE + (off)) | ||
| 34 | #define clps_writel(val,off) __raw_writel(val, CLPS7111_BASE + (off)) | ||
| 35 | #endif | ||
| 36 | |||
| 37 | #define PADR (0x0000) | ||
| 38 | #define PBDR (0x0001) | ||
| 39 | #define PDDR (0x0003) | ||
| 40 | #define PADDR (0x0040) | ||
| 41 | #define PBDDR (0x0041) | ||
| 42 | #define PDDDR (0x0043) | ||
| 43 | #define PEDR (0x0080) | ||
| 44 | #define PEDDR (0x00c0) | ||
| 45 | #define SYSCON1 (0x0100) | ||
| 46 | #define SYSFLG1 (0x0140) | ||
| 47 | #define MEMCFG1 (0x0180) | ||
| 48 | #define MEMCFG2 (0x01c0) | ||
| 49 | #define DRFPR (0x0200) | ||
| 50 | #define INTSR1 (0x0240) | ||
| 51 | #define INTMR1 (0x0280) | ||
| 52 | #define LCDCON (0x02c0) | ||
| 53 | #define TC1D (0x0300) | ||
| 54 | #define TC2D (0x0340) | ||
| 55 | #define RTCDR (0x0380) | ||
| 56 | #define RTCMR (0x03c0) | ||
| 57 | #define PMPCON (0x0400) | ||
| 58 | #define CODR (0x0440) | ||
| 59 | #define UARTDR1 (0x0480) | ||
| 60 | #define UBRLCR1 (0x04c0) | ||
| 61 | #define SYNCIO (0x0500) | ||
| 62 | #define PALLSW (0x0540) | ||
| 63 | #define PALMSW (0x0580) | ||
| 64 | #define STFCLR (0x05c0) | ||
| 65 | #define BLEOI (0x0600) | ||
| 66 | #define MCEOI (0x0640) | ||
| 67 | #define TEOI (0x0680) | ||
| 68 | #define TC1EOI (0x06c0) | ||
| 69 | #define TC2EOI (0x0700) | ||
| 70 | #define RTCEOI (0x0740) | ||
| 71 | #define UMSEOI (0x0780) | ||
| 72 | #define COEOI (0x07c0) | ||
| 73 | #define HALT (0x0800) | ||
| 74 | #define STDBY (0x0840) | ||
| 75 | |||
| 76 | #define FBADDR (0x1000) | ||
| 77 | #define SYSCON2 (0x1100) | ||
| 78 | #define SYSFLG2 (0x1140) | ||
| 79 | #define INTSR2 (0x1240) | ||
| 80 | #define INTMR2 (0x1280) | ||
| 81 | #define UARTDR2 (0x1480) | ||
| 82 | #define UBRLCR2 (0x14c0) | ||
| 83 | #define SS2DR (0x1500) | ||
| 84 | #define SRXEOF (0x1600) | ||
| 85 | #define SS2POP (0x16c0) | ||
| 86 | #define KBDEOI (0x1700) | ||
| 87 | |||
| 88 | /* common bits: SYSCON1 / SYSCON2 */ | ||
| 89 | #define SYSCON_UARTEN (1 << 8) | ||
| 90 | |||
| 91 | #define SYSCON1_KBDSCAN(x) ((x) & 15) | ||
| 92 | #define SYSCON1_KBDSCANMASK (15) | ||
| 93 | #define SYSCON1_TC1M (1 << 4) | ||
| 94 | #define SYSCON1_TC1S (1 << 5) | ||
| 95 | #define SYSCON1_TC2M (1 << 6) | ||
| 96 | #define SYSCON1_TC2S (1 << 7) | ||
| 97 | #define SYSCON1_UART1EN SYSCON_UARTEN | ||
| 98 | #define SYSCON1_BZTOG (1 << 9) | ||
| 99 | #define SYSCON1_BZMOD (1 << 10) | ||
| 100 | #define SYSCON1_DBGEN (1 << 11) | ||
| 101 | #define SYSCON1_LCDEN (1 << 12) | ||
| 102 | #define SYSCON1_CDENTX (1 << 13) | ||
| 103 | #define SYSCON1_CDENRX (1 << 14) | ||
| 104 | #define SYSCON1_SIREN (1 << 15) | ||
| 105 | #define SYSCON1_ADCKSEL(x) (((x) & 3) << 16) | ||
| 106 | #define SYSCON1_ADCKSEL_MASK (3 << 16) | ||
| 107 | #define SYSCON1_EXCKEN (1 << 18) | ||
| 108 | #define SYSCON1_WAKEDIS (1 << 19) | ||
| 109 | #define SYSCON1_IRTXM (1 << 20) | ||
| 110 | |||
| 111 | /* common bits: SYSFLG1 / SYSFLG2 */ | ||
| 112 | #define SYSFLG_UBUSY (1 << 11) | ||
| 113 | #define SYSFLG_URXFE (1 << 22) | ||
| 114 | #define SYSFLG_UTXFF (1 << 23) | ||
| 115 | |||
| 116 | #define SYSFLG1_MCDR (1 << 0) | ||
| 117 | #define SYSFLG1_DCDET (1 << 1) | ||
| 118 | #define SYSFLG1_WUDR (1 << 2) | ||
| 119 | #define SYSFLG1_WUON (1 << 3) | ||
| 120 | #define SYSFLG1_CTS (1 << 8) | ||
| 121 | #define SYSFLG1_DSR (1 << 9) | ||
| 122 | #define SYSFLG1_DCD (1 << 10) | ||
| 123 | #define SYSFLG1_UBUSY SYSFLG_UBUSY | ||
| 124 | #define SYSFLG1_NBFLG (1 << 12) | ||
| 125 | #define SYSFLG1_RSTFLG (1 << 13) | ||
| 126 | #define SYSFLG1_PFFLG (1 << 14) | ||
| 127 | #define SYSFLG1_CLDFLG (1 << 15) | ||
| 128 | #define SYSFLG1_URXFE SYSFLG_URXFE | ||
| 129 | #define SYSFLG1_UTXFF SYSFLG_UTXFF | ||
| 130 | #define SYSFLG1_CRXFE (1 << 24) | ||
| 131 | #define SYSFLG1_CTXFF (1 << 25) | ||
| 132 | #define SYSFLG1_SSIBUSY (1 << 26) | ||
| 133 | #define SYSFLG1_ID (1 << 29) | ||
| 134 | |||
| 135 | #define SYSFLG2_SSRXOF (1 << 0) | ||
| 136 | #define SYSFLG2_RESVAL (1 << 1) | ||
| 137 | #define SYSFLG2_RESFRM (1 << 2) | ||
| 138 | #define SYSFLG2_SS2RXFE (1 << 3) | ||
| 139 | #define SYSFLG2_SS2TXFF (1 << 4) | ||
| 140 | #define SYSFLG2_SS2TXUF (1 << 5) | ||
| 141 | #define SYSFLG2_CKMODE (1 << 6) | ||
| 142 | #define SYSFLG2_UBUSY SYSFLG_UBUSY | ||
| 143 | #define SYSFLG2_URXFE SYSFLG_URXFE | ||
| 144 | #define SYSFLG2_UTXFF SYSFLG_UTXFF | ||
| 145 | |||
| 146 | #define LCDCON_GSEN (1 << 30) | ||
| 147 | #define LCDCON_GSMD (1 << 31) | ||
| 148 | |||
| 149 | #define SYSCON2_SERSEL (1 << 0) | ||
| 150 | #define SYSCON2_KBD6 (1 << 1) | ||
| 151 | #define SYSCON2_DRAMZ (1 << 2) | ||
| 152 | #define SYSCON2_KBWEN (1 << 3) | ||
| 153 | #define SYSCON2_SS2TXEN (1 << 4) | ||
| 154 | #define SYSCON2_PCCARD1 (1 << 5) | ||
| 155 | #define SYSCON2_PCCARD2 (1 << 6) | ||
| 156 | #define SYSCON2_SS2RXEN (1 << 7) | ||
| 157 | #define SYSCON2_UART2EN SYSCON_UARTEN | ||
| 158 | #define SYSCON2_SS2MAEN (1 << 9) | ||
| 159 | #define SYSCON2_OSTB (1 << 12) | ||
| 160 | #define SYSCON2_CLKENSL (1 << 13) | ||
| 161 | #define SYSCON2_BUZFREQ (1 << 14) | ||
| 162 | |||
| 163 | /* common bits: UARTDR1 / UARTDR2 */ | ||
| 164 | #define UARTDR_FRMERR (1 << 8) | ||
| 165 | #define UARTDR_PARERR (1 << 9) | ||
| 166 | #define UARTDR_OVERR (1 << 10) | ||
| 167 | |||
| 168 | /* common bits: UBRLCR1 / UBRLCR2 */ | ||
| 169 | #define UBRLCR_BAUD_MASK ((1 << 12) - 1) | ||
| 170 | #define UBRLCR_BREAK (1 << 12) | ||
| 171 | #define UBRLCR_PRTEN (1 << 13) | ||
| 172 | #define UBRLCR_EVENPRT (1 << 14) | ||
| 173 | #define UBRLCR_XSTOP (1 << 15) | ||
| 174 | #define UBRLCR_FIFOEN (1 << 16) | ||
| 175 | #define UBRLCR_WRDLEN5 (0 << 17) | ||
| 176 | #define UBRLCR_WRDLEN6 (1 << 17) | ||
| 177 | #define UBRLCR_WRDLEN7 (2 << 17) | ||
| 178 | #define UBRLCR_WRDLEN8 (3 << 17) | ||
| 179 | #define UBRLCR_WRDLEN_MASK (3 << 17) | ||
| 180 | |||
| 181 | #define SYNCIO_SMCKEN (1 << 13) | ||
| 182 | #define SYNCIO_TXFRMEN (1 << 14) | ||
| 183 | |||
| 184 | #endif /* __ASM_HARDWARE_CLPS7111_H */ | ||
diff --git a/arch/arm/include/asm/hardware/cs89712.h b/arch/arm/include/asm/hardware/cs89712.h new file mode 100644 index 00000000000..f75626933e9 --- /dev/null +++ b/arch/arm/include/asm/hardware/cs89712.h | |||
| @@ -0,0 +1,49 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/include/asm/hardware/cs89712.h | ||
| 3 | * | ||
| 4 | * This file contains the hardware definitions of the CS89712 | ||
| 5 | * additional internal registers. | ||
| 6 | * | ||
| 7 | * Copyright (C) 2001 Thomas Gleixner autronix automation <gleixner@autronix.de> | ||
| 8 | * | ||
| 9 | * | ||
| 10 | * This program is free software; you can redistribute it and/or modify | ||
| 11 | * it under the terms of the GNU General Public License as published by | ||
| 12 | * the Free Software Foundation; either version 2 of the License, or | ||
| 13 | * (at your option) any later version. | ||
| 14 | * | ||
| 15 | * This program is distributed in the hope that it will be useful, | ||
| 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 18 | * GNU General Public License for more details. | ||
| 19 | * | ||
| 20 | * You should have received a copy of the GNU General Public License | ||
| 21 | * along with this program; if not, write to the Free Software | ||
| 22 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 23 | */ | ||
| 24 | #ifndef __ASM_HARDWARE_CS89712_H | ||
| 25 | #define __ASM_HARDWARE_CS89712_H | ||
| 26 | |||
| 27 | /* | ||
| 28 | * CS89712 additional registers | ||
| 29 | */ | ||
| 30 | |||
| 31 | #define PCDR 0x0002 /* Port C Data register ---------------------------- */ | ||
| 32 | #define PCDDR 0x0042 /* Port C Data Direction register ------------------ */ | ||
| 33 | #define SDCONF 0x2300 /* SDRAM Configuration register ---------------------*/ | ||
| 34 | #define SDRFPR 0x2340 /* SDRAM Refresh period register --------------------*/ | ||
| 35 | |||
| 36 | #define SDCONF_ACTIVE (1 << 10) | ||
| 37 | #define SDCONF_CLKCTL (1 << 9) | ||
| 38 | #define SDCONF_WIDTH_4 (0 << 7) | ||
| 39 | #define SDCONF_WIDTH_8 (1 << 7) | ||
| 40 | #define SDCONF_WIDTH_16 (2 << 7) | ||
| 41 | #define SDCONF_WIDTH_32 (3 << 7) | ||
| 42 | #define SDCONF_SIZE_16 (0 << 5) | ||
| 43 | #define SDCONF_SIZE_64 (1 << 5) | ||
| 44 | #define SDCONF_SIZE_128 (2 << 5) | ||
| 45 | #define SDCONF_SIZE_256 (3 << 5) | ||
| 46 | #define SDCONF_CASLAT_2 (2) | ||
| 47 | #define SDCONF_CASLAT_3 (3) | ||
| 48 | |||
| 49 | #endif /* __ASM_HARDWARE_CS89712_H */ | ||
diff --git a/arch/arm/include/asm/hardware/entry-macro-gic.S b/arch/arm/include/asm/hardware/entry-macro-gic.S new file mode 100644 index 00000000000..c115b82fe80 --- /dev/null +++ b/arch/arm/include/asm/hardware/entry-macro-gic.S | |||
| @@ -0,0 +1,75 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/include/asm/hardware/entry-macro-gic.S | ||
| 3 | * | ||
| 4 | * Low-level IRQ helper macros for GIC | ||
| 5 | * | ||
| 6 | * This file is licensed under the terms of the GNU General Public | ||
| 7 | * License version 2. This program is licensed "as is" without any | ||
| 8 | * warranty of any kind, whether express or implied. | ||
| 9 | */ | ||
| 10 | |||
| 11 | #include <asm/hardware/gic.h> | ||
| 12 | |||
| 13 | #ifndef HAVE_GET_IRQNR_PREAMBLE | ||
| 14 | .macro get_irqnr_preamble, base, tmp | ||
| 15 | ldr \base, =gic_cpu_base_addr | ||
| 16 | ldr \base, [\base] | ||
| 17 | .endm | ||
| 18 | #endif | ||
| 19 | |||
| 20 | /* | ||
| 21 | * The interrupt numbering scheme is defined in the | ||
| 22 | * interrupt controller spec. To wit: | ||
| 23 | * | ||
| 24 | * Interrupts 0-15 are IPI | ||
| 25 | * 16-28 are reserved | ||
| 26 | * 29-31 are local. We allow 30 to be used for the watchdog. | ||
| 27 | * 32-1020 are global | ||
| 28 | * 1021-1022 are reserved | ||
| 29 | * 1023 is "spurious" (no interrupt) | ||
| 30 | * | ||
| 31 | * For now, we ignore all local interrupts so only return an interrupt if it's | ||
| 32 | * between 30 and 1020. The test_for_ipi routine below will pick up on IPIs. | ||
| 33 | * | ||
| 34 | * A simple read from the controller will tell us the number of the highest | ||
| 35 | * priority enabled interrupt. We then just need to check whether it is in the | ||
| 36 | * valid range for an IRQ (30-1020 inclusive). | ||
| 37 | */ | ||
| 38 | |||
| 39 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
| 40 | |||
| 41 | ldr \irqstat, [\base, #GIC_CPU_INTACK] | ||
| 42 | /* bits 12-10 = src CPU, 9-0 = int # */ | ||
| 43 | |||
| 44 | ldr \tmp, =1021 | ||
| 45 | bic \irqnr, \irqstat, #0x1c00 | ||
| 46 | cmp \irqnr, #29 | ||
| 47 | cmpcc \irqnr, \irqnr | ||
| 48 | cmpne \irqnr, \tmp | ||
| 49 | cmpcs \irqnr, \irqnr | ||
| 50 | .endm | ||
| 51 | |||
| 52 | /* We assume that irqstat (the raw value of the IRQ acknowledge | ||
| 53 | * register) is preserved from the macro above. | ||
| 54 | * If there is an IPI, we immediately signal end of interrupt on the | ||
| 55 | * controller, since this requires the original irqstat value which | ||
| 56 | * we won't easily be able to recreate later. | ||
| 57 | */ | ||
| 58 | |||
| 59 | .macro test_for_ipi, irqnr, irqstat, base, tmp | ||
| 60 | bic \irqnr, \irqstat, #0x1c00 | ||
| 61 | cmp \irqnr, #16 | ||
| 62 | strcc \irqstat, [\base, #GIC_CPU_EOI] | ||
| 63 | cmpcs \irqnr, \irqnr | ||
| 64 | .endm | ||
| 65 | |||
| 66 | /* As above, this assumes that irqstat and base are preserved.. */ | ||
| 67 | |||
| 68 | .macro test_for_ltirq, irqnr, irqstat, base, tmp | ||
| 69 | bic \irqnr, \irqstat, #0x1c00 | ||
| 70 | mov \tmp, #0 | ||
| 71 | cmp \irqnr, #29 | ||
| 72 | moveq \tmp, #1 | ||
| 73 | streq \irqstat, [\base, #GIC_CPU_EOI] | ||
| 74 | cmp \tmp, #0 | ||
| 75 | .endm | ||
diff --git a/arch/arm/include/asm/hardware/ep7211.h b/arch/arm/include/asm/hardware/ep7211.h new file mode 100644 index 00000000000..654d5f625c4 --- /dev/null +++ b/arch/arm/include/asm/hardware/ep7211.h | |||
| @@ -0,0 +1,40 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/include/asm/hardware/ep7211.h | ||
| 3 | * | ||
| 4 | * This file contains the hardware definitions of the EP7211 internal | ||
| 5 | * registers. | ||
| 6 | * | ||
| 7 | * Copyright (C) 2001 Blue Mug, Inc. All Rights Reserved. | ||
| 8 | * | ||
| 9 | * This program is free software; you can redistribute it and/or modify | ||
| 10 | * it under the terms of the GNU General Public License as published by | ||
| 11 | * the Free Software Foundation; either version 2 of the License, or | ||
| 12 | * (at your option) any later version. | ||
| 13 | * | ||
| 14 | * This program is distributed in the hope that it will be useful, | ||
| 15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 17 | * GNU General Public License for more details. | ||
| 18 | * | ||
| 19 | * You should have received a copy of the GNU General Public License | ||
| 20 | * along with this program; if not, write to the Free Software | ||
| 21 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 22 | */ | ||
| 23 | #ifndef __ASM_HARDWARE_EP7211_H | ||
| 24 | #define __ASM_HARDWARE_EP7211_H | ||
| 25 | |||
| 26 | #include <asm/hardware/clps7111.h> | ||
| 27 | |||
| 28 | /* | ||
| 29 | * define EP7211_BASE to be the base address of the region | ||
| 30 | * you want to access. | ||
| 31 | */ | ||
| 32 | |||
| 33 | #define EP7211_PHYS_BASE (0x80000000) | ||
| 34 | |||
| 35 | /* | ||
| 36 | * XXX miket@bluemug.com: need to introduce EP7211 registers (those not | ||
| 37 | * present in 7212) here. | ||
| 38 | */ | ||
| 39 | |||
| 40 | #endif /* __ASM_HARDWARE_EP7211_H */ | ||
diff --git a/arch/arm/include/asm/hardware/ep7212.h b/arch/arm/include/asm/hardware/ep7212.h new file mode 100644 index 00000000000..3b43bbeaf1d --- /dev/null +++ b/arch/arm/include/asm/hardware/ep7212.h | |||
| @@ -0,0 +1,83 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/include/asm/hardware/ep7212.h | ||
| 3 | * | ||
| 4 | * This file contains the hardware definitions of the EP7212 internal | ||
| 5 | * registers. | ||
| 6 | * | ||
| 7 | * Copyright (C) 2000 Deep Blue Solutions Ltd. | ||
| 8 | * | ||
| 9 | * This program is free software; you can redistribute it and/or modify | ||
| 10 | * it under the terms of the GNU General Public License as published by | ||
| 11 | * the Free Software Foundation; either version 2 of the License, or | ||
| 12 | * (at your option) any later version. | ||
| 13 | * | ||
| 14 | * This program is distributed in the hope that it will be useful, | ||
| 15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 17 | * GNU General Public License for more details. | ||
| 18 | * | ||
| 19 | * You should have received a copy of the GNU General Public License | ||
| 20 | * along with this program; if not, write to the Free Software | ||
| 21 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 22 | */ | ||
| 23 | #ifndef __ASM_HARDWARE_EP7212_H | ||
| 24 | #define __ASM_HARDWARE_EP7212_H | ||
| 25 | |||
| 26 | /* | ||
| 27 | * define EP7212_BASE to be the base address of the region | ||
| 28 | * you want to access. | ||
| 29 | */ | ||
| 30 | |||
| 31 | #define EP7212_PHYS_BASE (0x80000000) | ||
| 32 | |||
| 33 | #ifndef __ASSEMBLY__ | ||
| 34 | #define ep_readl(off) __raw_readl(EP7212_BASE + (off)) | ||
| 35 | #define ep_writel(val,off) __raw_writel(val, EP7212_BASE + (off)) | ||
| 36 | #endif | ||
| 37 | |||
| 38 | /* | ||
| 39 | * These registers are specific to the EP7212 only | ||
| 40 | */ | ||
| 41 | #define DAIR 0x2000 | ||
| 42 | #define DAIR0 0x2040 | ||
| 43 | #define DAIDR1 0x2080 | ||
| 44 | #define DAIDR2 0x20c0 | ||
| 45 | #define DAISR 0x2100 | ||
| 46 | #define SYSCON3 0x2200 | ||
| 47 | #define INTSR3 0x2240 | ||
| 48 | #define INTMR3 0x2280 | ||
| 49 | #define LEDFLSH 0x22c0 | ||
| 50 | |||
| 51 | #define DAIR_DAIEN (1 << 16) | ||
| 52 | #define DAIR_ECS (1 << 17) | ||
| 53 | #define DAIR_LCTM (1 << 19) | ||
| 54 | #define DAIR_LCRM (1 << 20) | ||
| 55 | #define DAIR_RCTM (1 << 21) | ||
| 56 | #define DAIR_RCRM (1 << 22) | ||
| 57 | #define DAIR_LBM (1 << 23) | ||
| 58 | |||
| 59 | #define DAIDR2_FIFOEN (1 << 15) | ||
| 60 | #define DAIDR2_FIFOLEFT (0x0d << 16) | ||
| 61 | #define DAIDR2_FIFORIGHT (0x11 << 16) | ||
| 62 | |||
| 63 | #define DAISR_RCTS (1 << 0) | ||
| 64 | #define DAISR_RCRS (1 << 1) | ||
| 65 | #define DAISR_LCTS (1 << 2) | ||
| 66 | #define DAISR_LCRS (1 << 3) | ||
| 67 | #define DAISR_RCTU (1 << 4) | ||
| 68 | #define DAISR_RCRO (1 << 5) | ||
| 69 | #define DAISR_LCTU (1 << 6) | ||
| 70 | #define DAISR_LCRO (1 << 7) | ||
| 71 | #define DAISR_RCNF (1 << 8) | ||
| 72 | #define DAISR_RCNE (1 << 9) | ||
| 73 | #define DAISR_LCNF (1 << 10) | ||
| 74 | #define DAISR_LCNE (1 << 11) | ||
| 75 | #define DAISR_FIFO (1 << 12) | ||
| 76 | |||
| 77 | #define SYSCON3_ADCCON (1 << 0) | ||
| 78 | #define SYSCON3_DAISEL (1 << 3) | ||
| 79 | #define SYSCON3_ADCCKNSEN (1 << 4) | ||
| 80 | #define SYSCON3_FASTWAKE (1 << 8) | ||
| 81 | #define SYSCON3_DAIEN (1 << 9) | ||
| 82 | |||
| 83 | #endif /* __ASM_HARDWARE_EP7212_H */ | ||
diff --git a/arch/arm/include/asm/hardware/linkup-l1110.h b/arch/arm/include/asm/hardware/linkup-l1110.h new file mode 100644 index 00000000000..7ec91168a57 --- /dev/null +++ b/arch/arm/include/asm/hardware/linkup-l1110.h | |||
| @@ -0,0 +1,48 @@ | |||
| 1 | /* | ||
| 2 | * | ||
| 3 | * Definitions for H3600 Handheld Computer | ||
| 4 | * | ||
| 5 | * Copyright 2001 Compaq Computer Corporation. | ||
| 6 | * | ||
| 7 | * Use consistent with the GNU GPL is permitted, | ||
| 8 | * provided that this copyright notice is | ||
| 9 | * preserved in its entirety in all copies and derived works. | ||
| 10 | * | ||
| 11 | * COMPAQ COMPUTER CORPORATION MAKES NO WARRANTIES, EXPRESSED OR IMPLIED, | ||
| 12 | * AS TO THE USEFULNESS OR CORRECTNESS OF THIS CODE OR ITS | ||
| 13 | * FITNESS FOR ANY PARTICULAR PURPOSE. | ||
| 14 | * | ||
| 15 | * Author: Jamey Hicks. | ||
| 16 | * | ||
| 17 | */ | ||
| 18 | |||
| 19 | /* LinkUp Systems PCCard/CompactFlash Interface for SA-1100 */ | ||
| 20 | |||
| 21 | /* PC Card Status Register */ | ||
| 22 | #define LINKUP_PRS_S1 (1 << 0) /* voltage control bits S1-S4 */ | ||
| 23 | #define LINKUP_PRS_S2 (1 << 1) | ||
| 24 | #define LINKUP_PRS_S3 (1 << 2) | ||
| 25 | #define LINKUP_PRS_S4 (1 << 3) | ||
| 26 | #define LINKUP_PRS_BVD1 (1 << 4) | ||
| 27 | #define LINKUP_PRS_BVD2 (1 << 5) | ||
| 28 | #define LINKUP_PRS_VS1 (1 << 6) | ||
| 29 | #define LINKUP_PRS_VS2 (1 << 7) | ||
| 30 | #define LINKUP_PRS_RDY (1 << 8) | ||
| 31 | #define LINKUP_PRS_CD1 (1 << 9) | ||
| 32 | #define LINKUP_PRS_CD2 (1 << 10) | ||
| 33 | |||
| 34 | /* PC Card Command Register */ | ||
| 35 | #define LINKUP_PRC_S1 (1 << 0) | ||
| 36 | #define LINKUP_PRC_S2 (1 << 1) | ||
| 37 | #define LINKUP_PRC_S3 (1 << 2) | ||
| 38 | #define LINKUP_PRC_S4 (1 << 3) | ||
| 39 | #define LINKUP_PRC_RESET (1 << 4) | ||
| 40 | #define LINKUP_PRC_APOE (1 << 5) /* Auto Power Off Enable: clears S1-S4 when either nCD goes high */ | ||
| 41 | #define LINKUP_PRC_CFE (1 << 6) /* CompactFlash mode Enable: addresses A[10:0] only, A[25:11] high */ | ||
| 42 | #define LINKUP_PRC_SOE (1 << 7) /* signal output driver enable */ | ||
| 43 | #define LINKUP_PRC_SSP (1 << 8) /* sock select polarity: 0 for socket 0, 1 for socket 1 */ | ||
| 44 | #define LINKUP_PRC_MBZ (1 << 15) /* must be zero */ | ||
| 45 | |||
| 46 | struct linkup_l1110 { | ||
| 47 | volatile short prc; | ||
| 48 | }; | ||
diff --git a/arch/arm/include/asm/hardware/pl330.h b/arch/arm/include/asm/hardware/pl330.h new file mode 100644 index 00000000000..575fa8186ca --- /dev/null +++ b/arch/arm/include/asm/hardware/pl330.h | |||
| @@ -0,0 +1,217 @@ | |||
| 1 | /* linux/include/asm/hardware/pl330.h | ||
| 2 | * | ||
| 3 | * Copyright (C) 2010 Samsung Electronics Co. Ltd. | ||
| 4 | * Jaswinder Singh <jassi.brar@samsung.com> | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License as published by | ||
| 8 | * the Free Software Foundation; either version 2 of the License, or | ||
| 9 | * (at your option) any later version. | ||
| 10 | * | ||
| 11 | * This program is distributed in the hope that it will be useful, | ||
| 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 14 | * GNU General Public License for more details. | ||
| 15 | * | ||
| 16 | * You should have received a copy of the GNU General Public License | ||
| 17 | * along with this program; if not, write to the Free Software | ||
| 18 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 19 | */ | ||
| 20 | |||
| 21 | #ifndef __PL330_CORE_H | ||
| 22 | #define __PL330_CORE_H | ||
| 23 | |||
| 24 | #define PL330_MAX_CHAN 8 | ||
| 25 | #define PL330_MAX_IRQS 32 | ||
| 26 | #define PL330_MAX_PERI 32 | ||
| 27 | |||
| 28 | enum pl330_srccachectrl { | ||
| 29 | SCCTRL0 = 0, /* Noncacheable and nonbufferable */ | ||
| 30 | SCCTRL1, /* Bufferable only */ | ||
| 31 | SCCTRL2, /* Cacheable, but do not allocate */ | ||
| 32 | SCCTRL3, /* Cacheable and bufferable, but do not allocate */ | ||
| 33 | SINVALID1, | ||
| 34 | SINVALID2, | ||
| 35 | SCCTRL6, /* Cacheable write-through, allocate on reads only */ | ||
| 36 | SCCTRL7, /* Cacheable write-back, allocate on reads only */ | ||
| 37 | }; | ||
| 38 | |||
| 39 | enum pl330_dstcachectrl { | ||
| 40 | DCCTRL0 = 0, /* Noncacheable and nonbufferable */ | ||
| 41 | DCCTRL1, /* Bufferable only */ | ||
| 42 | DCCTRL2, /* Cacheable, but do not allocate */ | ||
| 43 | DCCTRL3, /* Cacheable and bufferable, but do not allocate */ | ||
| 44 | DINVALID1 = 8, | ||
| 45 | DINVALID2, | ||
| 46 | DCCTRL6, /* Cacheable write-through, allocate on writes only */ | ||
| 47 | DCCTRL7, /* Cacheable write-back, allocate on writes only */ | ||
| 48 | }; | ||
| 49 | |||
| 50 | /* Populated by the PL330 core driver for DMA API driver's info */ | ||
| 51 | struct pl330_config { | ||
| 52 | u32 periph_id; | ||
| 53 | u32 pcell_id; | ||
| 54 | #define DMAC_MODE_NS (1 << 0) | ||
| 55 | unsigned int mode; | ||
| 56 | unsigned int data_bus_width:10; /* In number of bits */ | ||
| 57 | unsigned int data_buf_dep:10; | ||
| 58 | unsigned int num_chan:4; | ||
| 59 | unsigned int num_peri:6; | ||
| 60 | u32 peri_ns; | ||
| 61 | unsigned int num_events:6; | ||
| 62 | u32 irq_ns; | ||
| 63 | }; | ||
| 64 | |||
| 65 | /* Handle to the DMAC provided to the PL330 core */ | ||
| 66 | struct pl330_info { | ||
| 67 | /* Owning device */ | ||
| 68 | struct device *dev; | ||
| 69 | /* Size of MicroCode buffers for each channel. */ | ||
| 70 | unsigned mcbufsz; | ||
| 71 | /* ioremap'ed address of PL330 registers. */ | ||
| 72 | void __iomem *base; | ||
| 73 | /* Client can freely use it. */ | ||
| 74 | void *client_data; | ||
| 75 | /* PL330 core data, Client must not touch it. */ | ||
| 76 | void *pl330_data; | ||
| 77 | /* Populated by the PL330 core driver during pl330_add */ | ||
| 78 | struct pl330_config pcfg; | ||
| 79 | /* | ||
| 80 | * If the DMAC has some reset mechanism, then the | ||
| 81 | * client may want to provide pointer to the method. | ||
| 82 | */ | ||
| 83 | void (*dmac_reset)(struct pl330_info *pi); | ||
| 84 | }; | ||
| 85 | |||
| 86 | enum pl330_byteswap { | ||
| 87 | SWAP_NO = 0, | ||
| 88 | SWAP_2, | ||
| 89 | SWAP_4, | ||
| 90 | SWAP_8, | ||
| 91 | SWAP_16, | ||
| 92 | }; | ||
| 93 | |||
| 94 | /** | ||
| 95 | * Request Configuration. | ||
| 96 | * The PL330 core does not modify this and uses the last | ||
| 97 | * working configuration if the request doesn't provide any. | ||
| 98 | * | ||
| 99 | * The Client may want to provide this info only for the | ||
| 100 | * first request and a request with new settings. | ||
| 101 | */ | ||
| 102 | struct pl330_reqcfg { | ||
| 103 | /* Address Incrementing */ | ||
| 104 | unsigned dst_inc:1; | ||
| 105 | unsigned src_inc:1; | ||
| 106 | |||
| 107 | /* | ||
| 108 | * For now, the SRC & DST protection levels | ||
| 109 | * and burst size/length are assumed same. | ||
| 110 | */ | ||
| 111 | bool nonsecure; | ||
| 112 | bool privileged; | ||
| 113 | bool insnaccess; | ||
| 114 | unsigned brst_len:5; | ||
| 115 | unsigned brst_size:3; /* in power of 2 */ | ||
| 116 | |||
| 117 | enum pl330_dstcachectrl dcctl; | ||
| 118 | enum pl330_srccachectrl scctl; | ||
| 119 | enum pl330_byteswap swap; | ||
| 120 | }; | ||
| 121 | |||
| 122 | /* | ||
| 123 | * One cycle of DMAC operation. | ||
| 124 | * There may be more than one xfer in a request. | ||
| 125 | */ | ||
| 126 | struct pl330_xfer { | ||
| 127 | u32 src_addr; | ||
| 128 | u32 dst_addr; | ||
| 129 | /* Size to xfer */ | ||
| 130 | u32 bytes; | ||
| 131 | /* | ||
| 132 | * Pointer to next xfer in the list. | ||
| 133 | * The last xfer in the req must point to NULL. | ||
| 134 | */ | ||
| 135 | struct pl330_xfer *next; | ||
| 136 | }; | ||
| 137 | |||
| 138 | /* The xfer callbacks are made with one of these arguments. */ | ||
| 139 | enum pl330_op_err { | ||
| 140 | /* The all xfers in the request were success. */ | ||
| 141 | PL330_ERR_NONE, | ||
| 142 | /* If req aborted due to global error. */ | ||
| 143 | PL330_ERR_ABORT, | ||
| 144 | /* If req failed due to problem with Channel. */ | ||
| 145 | PL330_ERR_FAIL, | ||
| 146 | }; | ||
| 147 | |||
| 148 | enum pl330_reqtype { | ||
| 149 | MEMTOMEM, | ||
| 150 | MEMTODEV, | ||
| 151 | DEVTOMEM, | ||
| 152 | DEVTODEV, | ||
| 153 | }; | ||
| 154 | |||
| 155 | /* A request defining Scatter-Gather List ending with NULL xfer. */ | ||
| 156 | struct pl330_req { | ||
| 157 | enum pl330_reqtype rqtype; | ||
| 158 | /* Index of peripheral for the xfer. */ | ||
| 159 | unsigned peri:5; | ||
| 160 | /* Unique token for this xfer, set by the client. */ | ||
| 161 | void *token; | ||
| 162 | /* Callback to be called after xfer. */ | ||
| 163 | void (*xfer_cb)(void *token, enum pl330_op_err err); | ||
| 164 | /* If NULL, req will be done at last set parameters. */ | ||
| 165 | struct pl330_reqcfg *cfg; | ||
| 166 | /* Pointer to first xfer in the request. */ | ||
| 167 | struct pl330_xfer *x; | ||
| 168 | }; | ||
| 169 | |||
| 170 | /* | ||
| 171 | * To know the status of the channel and DMAC, the client | ||
| 172 | * provides a pointer to this structure. The PL330 core | ||
| 173 | * fills it with current information. | ||
| 174 | */ | ||
| 175 | struct pl330_chanstatus { | ||
| 176 | /* | ||
| 177 | * If the DMAC engine halted due to some error, | ||
| 178 | * the client should remove-add DMAC. | ||
| 179 | */ | ||
| 180 | bool dmac_halted; | ||
| 181 | /* | ||
| 182 | * If channel is halted due to some error, | ||
| 183 | * the client should ABORT/FLUSH and START the channel. | ||
| 184 | */ | ||
| 185 | bool faulting; | ||
| 186 | /* Location of last load */ | ||
| 187 | u32 src_addr; | ||
| 188 | /* Location of last store */ | ||
| 189 | u32 dst_addr; | ||
| 190 | /* | ||
| 191 | * Pointer to the currently active req, NULL if channel is | ||
| 192 | * inactive, even though the requests may be present. | ||
| 193 | */ | ||
| 194 | struct pl330_req *top_req; | ||
| 195 | /* Pointer to req waiting second in the queue if any. */ | ||
| 196 | struct pl330_req *wait_req; | ||
| 197 | }; | ||
| 198 | |||
| 199 | enum pl330_chan_op { | ||
| 200 | /* Start the channel */ | ||
| 201 | PL330_OP_START, | ||
| 202 | /* Abort the active xfer */ | ||
| 203 | PL330_OP_ABORT, | ||
| 204 | /* Stop xfer and flush queue */ | ||
| 205 | PL330_OP_FLUSH, | ||
| 206 | }; | ||
| 207 | |||
| 208 | extern int pl330_add(struct pl330_info *); | ||
| 209 | extern void pl330_del(struct pl330_info *pi); | ||
| 210 | extern int pl330_update(const struct pl330_info *pi); | ||
| 211 | extern void pl330_release_channel(void *ch_id); | ||
| 212 | extern void *pl330_request_channel(const struct pl330_info *pi); | ||
| 213 | extern int pl330_chan_status(void *ch_id, struct pl330_chanstatus *pstatus); | ||
| 214 | extern int pl330_chan_ctrl(void *ch_id, enum pl330_chan_op op); | ||
| 215 | extern int pl330_submit_req(void *ch_id, struct pl330_req *r); | ||
| 216 | |||
| 217 | #endif /* __PL330_CORE_H */ | ||
diff --git a/arch/arm/include/asm/hardware/uengine.h b/arch/arm/include/asm/hardware/uengine.h new file mode 100644 index 00000000000..b442d65c659 --- /dev/null +++ b/arch/arm/include/asm/hardware/uengine.h | |||
| @@ -0,0 +1,62 @@ | |||
| 1 | /* | ||
| 2 | * Generic library functions for the microengines found on the Intel | ||
| 3 | * IXP2000 series of network processors. | ||
| 4 | * | ||
| 5 | * Copyright (C) 2004, 2005 Lennert Buytenhek <buytenh@wantstofly.org> | ||
| 6 | * Dedicated to Marija Kulikova. | ||
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or modify | ||
| 9 | * it under the terms of the GNU Lesser General Public License as | ||
| 10 | * published by the Free Software Foundation; either version 2.1 of the | ||
| 11 | * License, or (at your option) any later version. | ||
| 12 | */ | ||
| 13 | |||
| 14 | #ifndef __IXP2000_UENGINE_H | ||
| 15 | #define __IXP2000_UENGINE_H | ||
| 16 | |||
| 17 | extern u32 ixp2000_uengine_mask; | ||
| 18 | |||
| 19 | struct ixp2000_uengine_code | ||
| 20 | { | ||
| 21 | u32 cpu_model_bitmask; | ||
| 22 | u8 cpu_min_revision; | ||
| 23 | u8 cpu_max_revision; | ||
| 24 | |||
| 25 | u32 uengine_parameters; | ||
| 26 | |||
| 27 | struct ixp2000_reg_value { | ||
| 28 | int reg; | ||
| 29 | u32 value; | ||
| 30 | } *initial_reg_values; | ||
| 31 | |||
| 32 | int num_insns; | ||
| 33 | u8 *insns; | ||
| 34 | }; | ||
| 35 | |||
| 36 | u32 ixp2000_uengine_csr_read(int uengine, int offset); | ||
| 37 | void ixp2000_uengine_csr_write(int uengine, int offset, u32 value); | ||
| 38 | void ixp2000_uengine_reset(u32 uengine_mask); | ||
| 39 | void ixp2000_uengine_set_mode(int uengine, u32 mode); | ||
| 40 | void ixp2000_uengine_load_microcode(int uengine, u8 *ucode, int insns); | ||
| 41 | void ixp2000_uengine_init_context(int uengine, int context, int pc); | ||
| 42 | void ixp2000_uengine_start_contexts(int uengine, u8 ctx_mask); | ||
| 43 | void ixp2000_uengine_stop_contexts(int uengine, u8 ctx_mask); | ||
| 44 | int ixp2000_uengine_load(int uengine, struct ixp2000_uengine_code *c); | ||
| 45 | |||
| 46 | #define IXP2000_UENGINE_8_CONTEXTS 0x00000000 | ||
| 47 | #define IXP2000_UENGINE_4_CONTEXTS 0x80000000 | ||
| 48 | #define IXP2000_UENGINE_PRN_UPDATE_EVERY 0x40000000 | ||
| 49 | #define IXP2000_UENGINE_PRN_UPDATE_ON_ACCESS 0x00000000 | ||
| 50 | #define IXP2000_UENGINE_NN_FROM_SELF 0x00100000 | ||
| 51 | #define IXP2000_UENGINE_NN_FROM_PREVIOUS 0x00000000 | ||
| 52 | #define IXP2000_UENGINE_ASSERT_EMPTY_AT_3 0x000c0000 | ||
| 53 | #define IXP2000_UENGINE_ASSERT_EMPTY_AT_2 0x00080000 | ||
| 54 | #define IXP2000_UENGINE_ASSERT_EMPTY_AT_1 0x00040000 | ||
| 55 | #define IXP2000_UENGINE_ASSERT_EMPTY_AT_0 0x00000000 | ||
| 56 | #define IXP2000_UENGINE_LM_ADDR1_GLOBAL 0x00020000 | ||
| 57 | #define IXP2000_UENGINE_LM_ADDR1_PER_CONTEXT 0x00000000 | ||
| 58 | #define IXP2000_UENGINE_LM_ADDR0_GLOBAL 0x00010000 | ||
| 59 | #define IXP2000_UENGINE_LM_ADDR0_PER_CONTEXT 0x00000000 | ||
| 60 | |||
| 61 | |||
| 62 | #endif | ||
