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/mips/alchemy/devboards/db1x00 | |
| parent | 8dea78da5cee153b8af9c07a2745f6c55057fe12 (diff) | |
Diffstat (limited to 'arch/mips/alchemy/devboards/db1x00')
| -rw-r--r-- | arch/mips/alchemy/devboards/db1x00/Makefile | 8 | ||||
| -rw-r--r-- | arch/mips/alchemy/devboards/db1x00/board_setup.c | 255 | ||||
| -rw-r--r-- | arch/mips/alchemy/devboards/db1x00/platform.c | 118 |
3 files changed, 381 insertions, 0 deletions
diff --git a/arch/mips/alchemy/devboards/db1x00/Makefile b/arch/mips/alchemy/devboards/db1x00/Makefile new file mode 100644 index 00000000000..613c0c0c8be --- /dev/null +++ b/arch/mips/alchemy/devboards/db1x00/Makefile | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | # | ||
| 2 | # Copyright 2000, 2008 MontaVista Software Inc. | ||
| 3 | # Author: MontaVista Software, Inc. <source@mvista.com> | ||
| 4 | # | ||
| 5 | # Makefile for the Alchemy Semiconductor DBAu1xx0 boards. | ||
| 6 | # | ||
| 7 | |||
| 8 | obj-y := board_setup.o platform.o | ||
diff --git a/arch/mips/alchemy/devboards/db1x00/board_setup.c b/arch/mips/alchemy/devboards/db1x00/board_setup.c new file mode 100644 index 00000000000..5c956fe8760 --- /dev/null +++ b/arch/mips/alchemy/devboards/db1x00/board_setup.c | |||
| @@ -0,0 +1,255 @@ | |||
| 1 | /* | ||
| 2 | * | ||
| 3 | * BRIEF MODULE DESCRIPTION | ||
| 4 | * Alchemy Db1x00 board setup. | ||
| 5 | * | ||
| 6 | * Copyright 2000, 2008 MontaVista Software Inc. | ||
| 7 | * Author: MontaVista Software, Inc. <source@mvista.com> | ||
| 8 | * | ||
| 9 | * This program is free software; you can redistribute it and/or modify it | ||
| 10 | * under the terms of the GNU General Public License as published by the | ||
| 11 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 12 | * option) any later version. | ||
| 13 | * | ||
| 14 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED | ||
| 15 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
| 16 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN | ||
| 17 | * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
| 18 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
| 19 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | ||
| 20 | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||
| 21 | * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
| 22 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||
| 23 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
| 24 | * | ||
| 25 | * You should have received a copy of the GNU General Public License along | ||
| 26 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 27 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 28 | */ | ||
| 29 | |||
| 30 | #include <linux/gpio.h> | ||
| 31 | #include <linux/init.h> | ||
| 32 | #include <linux/interrupt.h> | ||
| 33 | #include <linux/pm.h> | ||
| 34 | |||
| 35 | #include <asm/mach-au1x00/au1000.h> | ||
| 36 | #include <asm/mach-au1x00/au1xxx_eth.h> | ||
| 37 | #include <asm/mach-db1x00/db1x00.h> | ||
| 38 | #include <asm/mach-db1x00/bcsr.h> | ||
| 39 | #include <asm/reboot.h> | ||
| 40 | |||
| 41 | #include <prom.h> | ||
| 42 | |||
| 43 | #ifdef CONFIG_MIPS_DB1500 | ||
| 44 | char irq_tab_alchemy[][5] __initdata = { | ||
| 45 | [12] = { -1, AU1500_PCI_INTA, 0xff, 0xff, 0xff }, /* IDSEL 12 - HPT371 */ | ||
| 46 | [13] = { -1, AU1500_PCI_INTA, AU1500_PCI_INTB, AU1500_PCI_INTC, AU1500_PCI_INTD }, /* IDSEL 13 - PCI slot */ | ||
| 47 | }; | ||
| 48 | |||
| 49 | #endif | ||
| 50 | |||
| 51 | |||
| 52 | #ifdef CONFIG_MIPS_DB1550 | ||
| 53 | char irq_tab_alchemy[][5] __initdata = { | ||
| 54 | [11] = { -1, AU1550_PCI_INTC, 0xff, 0xff, 0xff }, /* IDSEL 11 - on-board HPT371 */ | ||
| 55 | [12] = { -1, AU1550_PCI_INTB, AU1550_PCI_INTC, AU1550_PCI_INTD, AU1550_PCI_INTA }, /* IDSEL 12 - PCI slot 2 (left) */ | ||
| 56 | [13] = { -1, AU1550_PCI_INTA, AU1550_PCI_INTB, AU1550_PCI_INTC, AU1550_PCI_INTD }, /* IDSEL 13 - PCI slot 1 (right) */ | ||
| 57 | }; | ||
| 58 | #endif | ||
| 59 | |||
| 60 | |||
| 61 | #ifdef CONFIG_MIPS_BOSPORUS | ||
| 62 | char irq_tab_alchemy[][5] __initdata = { | ||
| 63 | [11] = { -1, AU1500_PCI_INTA, AU1500_PCI_INTB, 0xff, 0xff }, /* IDSEL 11 - miniPCI */ | ||
| 64 | [12] = { -1, AU1500_PCI_INTA, 0xff, 0xff, 0xff }, /* IDSEL 12 - SN1741 */ | ||
| 65 | [13] = { -1, AU1500_PCI_INTA, AU1500_PCI_INTB, AU1500_PCI_INTC, AU1500_PCI_INTD }, /* IDSEL 13 - PCI slot */ | ||
| 66 | }; | ||
| 67 | |||
| 68 | /* | ||
| 69 | * Micrel/Kendin 5 port switch attached to MAC0, | ||
| 70 | * MAC0 is associated with PHY address 5 (== WAN port) | ||
| 71 | * MAC1 is not associated with any PHY, since it's connected directly | ||
| 72 | * to the switch. | ||
| 73 | * no interrupts are used | ||
| 74 | */ | ||
| 75 | static struct au1000_eth_platform_data eth0_pdata = { | ||
| 76 | .phy_static_config = 1, | ||
| 77 | .phy_addr = 5, | ||
| 78 | }; | ||
| 79 | |||
| 80 | static void bosporus_power_off(void) | ||
| 81 | { | ||
| 82 | while (1) | ||
| 83 | asm volatile (".set mips3 ; wait ; .set mips0"); | ||
| 84 | } | ||
| 85 | |||
| 86 | const char *get_system_type(void) | ||
| 87 | { | ||
| 88 | return "Alchemy Bosporus Gateway Reference"; | ||
| 89 | } | ||
| 90 | #endif | ||
| 91 | |||
| 92 | |||
| 93 | #ifdef CONFIG_MIPS_MIRAGE | ||
| 94 | char irq_tab_alchemy[][5] __initdata = { | ||
| 95 | [11] = { -1, AU1500_PCI_INTD, 0xff, 0xff, 0xff }, /* IDSEL 11 - SMI VGX */ | ||
| 96 | [12] = { -1, 0xff, 0xff, AU1500_PCI_INTC, 0xff }, /* IDSEL 12 - PNX1300 */ | ||
| 97 | [13] = { -1, AU1500_PCI_INTA, AU1500_PCI_INTB, 0xff, 0xff }, /* IDSEL 13 - miniPCI */ | ||
| 98 | }; | ||
| 99 | |||
| 100 | static void mirage_power_off(void) | ||
| 101 | { | ||
| 102 | alchemy_gpio_direction_output(210, 1); | ||
| 103 | } | ||
| 104 | |||
| 105 | const char *get_system_type(void) | ||
| 106 | { | ||
| 107 | return "Alchemy Mirage"; | ||
| 108 | } | ||
| 109 | #endif | ||
| 110 | |||
| 111 | |||
| 112 | #if defined(CONFIG_MIPS_BOSPORUS) || defined(CONFIG_MIPS_MIRAGE) | ||
| 113 | static void mips_softreset(void) | ||
| 114 | { | ||
| 115 | asm volatile ("jr\t%0" : : "r"(0xbfc00000)); | ||
| 116 | } | ||
| 117 | |||
| 118 | #else | ||
| 119 | |||
| 120 | const char *get_system_type(void) | ||
| 121 | { | ||
| 122 | return "Alchemy Db1x00"; | ||
| 123 | } | ||
| 124 | #endif | ||
| 125 | |||
| 126 | |||
| 127 | void __init board_setup(void) | ||
| 128 | { | ||
| 129 | unsigned long bcsr1, bcsr2; | ||
| 130 | |||
| 131 | bcsr1 = DB1000_BCSR_PHYS_ADDR; | ||
| 132 | bcsr2 = DB1000_BCSR_PHYS_ADDR + DB1000_BCSR_HEXLED_OFS; | ||
| 133 | |||
| 134 | #ifdef CONFIG_MIPS_DB1000 | ||
| 135 | printk(KERN_INFO "AMD Alchemy Au1000/Db1000 Board\n"); | ||
| 136 | #endif | ||
| 137 | #ifdef CONFIG_MIPS_DB1500 | ||
| 138 | printk(KERN_INFO "AMD Alchemy Au1500/Db1500 Board\n"); | ||
| 139 | #endif | ||
| 140 | #ifdef CONFIG_MIPS_DB1100 | ||
| 141 | printk(KERN_INFO "AMD Alchemy Au1100/Db1100 Board\n"); | ||
| 142 | #endif | ||
| 143 | #ifdef CONFIG_MIPS_BOSPORUS | ||
| 144 | au1xxx_override_eth_cfg(0, ð0_pdata); | ||
| 145 | |||
| 146 | printk(KERN_INFO "AMD Alchemy Bosporus Board\n"); | ||
| 147 | #endif | ||
| 148 | #ifdef CONFIG_MIPS_MIRAGE | ||
| 149 | printk(KERN_INFO "AMD Alchemy Mirage Board\n"); | ||
| 150 | #endif | ||
| 151 | #ifdef CONFIG_MIPS_DB1550 | ||
| 152 | printk(KERN_INFO "AMD Alchemy Au1550/Db1550 Board\n"); | ||
| 153 | |||
| 154 | bcsr1 = DB1550_BCSR_PHYS_ADDR; | ||
| 155 | bcsr2 = DB1550_BCSR_PHYS_ADDR + DB1550_BCSR_HEXLED_OFS; | ||
| 156 | #endif | ||
| 157 | |||
| 158 | /* initialize board register space */ | ||
| 159 | bcsr_init(bcsr1, bcsr2); | ||
| 160 | |||
| 161 | /* Not valid for Au1550 */ | ||
| 162 | #if defined(CONFIG_IRDA) && \ | ||
| 163 | (defined(CONFIG_SOC_AU1000) || defined(CONFIG_SOC_AU1100)) | ||
| 164 | { | ||
| 165 | u32 pin_func; | ||
| 166 | |||
| 167 | /* Set IRFIRSEL instead of GPIO15 */ | ||
| 168 | pin_func = au_readl(SYS_PINFUNC) | SYS_PF_IRF; | ||
| 169 | au_writel(pin_func, SYS_PINFUNC); | ||
| 170 | /* Power off until the driver is in use */ | ||
| 171 | bcsr_mod(BCSR_RESETS, BCSR_RESETS_IRDA_MODE_MASK, | ||
| 172 | BCSR_RESETS_IRDA_MODE_OFF); | ||
| 173 | } | ||
| 174 | #endif | ||
| 175 | bcsr_write(BCSR_PCMCIA, 0); /* turn off PCMCIA power */ | ||
| 176 | |||
| 177 | /* Enable GPIO[31:0] inputs */ | ||
| 178 | alchemy_gpio1_input_enable(); | ||
| 179 | |||
| 180 | #ifdef CONFIG_MIPS_MIRAGE | ||
| 181 | { | ||
| 182 | u32 pin_func; | ||
| 183 | |||
| 184 | /* GPIO[20] is output */ | ||
| 185 | alchemy_gpio_direction_output(20, 0); | ||
| 186 | |||
| 187 | /* Set GPIO[210:208] instead of SSI_0 */ | ||
| 188 | pin_func = au_readl(SYS_PINFUNC) | SYS_PF_S0; | ||
| 189 | |||
| 190 | /* Set GPIO[215:211] for LEDs */ | ||
| 191 | pin_func |= 5 << 2; | ||
| 192 | |||
| 193 | /* Set GPIO[214:213] for more LEDs */ | ||
| 194 | pin_func |= 5 << 12; | ||
| 195 | |||
| 196 | /* Set GPIO[207:200] instead of PCMCIA/LCD */ | ||
| 197 | pin_func |= SYS_PF_LCD | SYS_PF_PC; | ||
| 198 | au_writel(pin_func, SYS_PINFUNC); | ||
| 199 | |||
| 200 | /* | ||
| 201 | * Enable speaker amplifier. This should | ||
| 202 | * be part of the audio driver. | ||
| 203 | */ | ||
| 204 | alchemy_gpio_direction_output(209, 1); | ||
| 205 | |||
| 206 | pm_power_off = mirage_power_off; | ||
| 207 | _machine_halt = mirage_power_off; | ||
| 208 | _machine_restart = (void(*)(char *))mips_softreset; | ||
| 209 | } | ||
| 210 | #endif | ||
| 211 | |||
| 212 | #ifdef CONFIG_MIPS_BOSPORUS | ||
| 213 | pm_power_off = bosporus_power_off; | ||
| 214 | _machine_halt = bosporus_power_off; | ||
| 215 | _machine_restart = (void(*)(char *))mips_softreset; | ||
| 216 | #endif | ||
| 217 | au_sync(); | ||
| 218 | } | ||
| 219 | |||
| 220 | static int __init db1x00_init_irq(void) | ||
| 221 | { | ||
| 222 | #if defined(CONFIG_MIPS_MIRAGE) | ||
| 223 | irq_set_irq_type(AU1500_GPIO7_INT, IRQF_TRIGGER_RISING); /* TS pendown */ | ||
| 224 | #elif defined(CONFIG_MIPS_DB1550) | ||
| 225 | irq_set_irq_type(AU1550_GPIO0_INT, IRQF_TRIGGER_LOW); /* CD0# */ | ||
| 226 | irq_set_irq_type(AU1550_GPIO1_INT, IRQF_TRIGGER_LOW); /* CD1# */ | ||
| 227 | irq_set_irq_type(AU1550_GPIO3_INT, IRQF_TRIGGER_LOW); /* CARD0# */ | ||
| 228 | irq_set_irq_type(AU1550_GPIO5_INT, IRQF_TRIGGER_LOW); /* CARD1# */ | ||
| 229 | irq_set_irq_type(AU1550_GPIO21_INT, IRQF_TRIGGER_LOW); /* STSCHG0# */ | ||
| 230 | irq_set_irq_type(AU1550_GPIO22_INT, IRQF_TRIGGER_LOW); /* STSCHG1# */ | ||
| 231 | #elif defined(CONFIG_MIPS_DB1500) | ||
| 232 | irq_set_irq_type(AU1500_GPIO0_INT, IRQF_TRIGGER_LOW); /* CD0# */ | ||
| 233 | irq_set_irq_type(AU1500_GPIO3_INT, IRQF_TRIGGER_LOW); /* CD1# */ | ||
| 234 | irq_set_irq_type(AU1500_GPIO2_INT, IRQF_TRIGGER_LOW); /* CARD0# */ | ||
| 235 | irq_set_irq_type(AU1500_GPIO5_INT, IRQF_TRIGGER_LOW); /* CARD1# */ | ||
| 236 | irq_set_irq_type(AU1500_GPIO1_INT, IRQF_TRIGGER_LOW); /* STSCHG0# */ | ||
| 237 | irq_set_irq_type(AU1500_GPIO4_INT, IRQF_TRIGGER_LOW); /* STSCHG1# */ | ||
| 238 | #elif defined(CONFIG_MIPS_DB1100) | ||
| 239 | irq_set_irq_type(AU1100_GPIO0_INT, IRQF_TRIGGER_LOW); /* CD0# */ | ||
| 240 | irq_set_irq_type(AU1100_GPIO3_INT, IRQF_TRIGGER_LOW); /* CD1# */ | ||
| 241 | irq_set_irq_type(AU1100_GPIO2_INT, IRQF_TRIGGER_LOW); /* CARD0# */ | ||
| 242 | irq_set_irq_type(AU1100_GPIO5_INT, IRQF_TRIGGER_LOW); /* CARD1# */ | ||
| 243 | irq_set_irq_type(AU1100_GPIO1_INT, IRQF_TRIGGER_LOW); /* STSCHG0# */ | ||
| 244 | irq_set_irq_type(AU1100_GPIO4_INT, IRQF_TRIGGER_LOW); /* STSCHG1# */ | ||
| 245 | #elif defined(CONFIG_MIPS_DB1000) | ||
| 246 | irq_set_irq_type(AU1000_GPIO0_INT, IRQF_TRIGGER_LOW); /* CD0# */ | ||
| 247 | irq_set_irq_type(AU1000_GPIO3_INT, IRQF_TRIGGER_LOW); /* CD1# */ | ||
| 248 | irq_set_irq_type(AU1000_GPIO2_INT, IRQF_TRIGGER_LOW); /* CARD0# */ | ||
| 249 | irq_set_irq_type(AU1000_GPIO5_INT, IRQF_TRIGGER_LOW); /* CARD1# */ | ||
| 250 | irq_set_irq_type(AU1000_GPIO1_INT, IRQF_TRIGGER_LOW); /* STSCHG0# */ | ||
| 251 | irq_set_irq_type(AU1000_GPIO4_INT, IRQF_TRIGGER_LOW); /* STSCHG1# */ | ||
| 252 | #endif | ||
| 253 | return 0; | ||
| 254 | } | ||
| 255 | arch_initcall(db1x00_init_irq); | ||
diff --git a/arch/mips/alchemy/devboards/db1x00/platform.c b/arch/mips/alchemy/devboards/db1x00/platform.c new file mode 100644 index 00000000000..978d5ab3d67 --- /dev/null +++ b/arch/mips/alchemy/devboards/db1x00/platform.c | |||
| @@ -0,0 +1,118 @@ | |||
| 1 | /* | ||
| 2 | * DBAu1xxx board platform device registration | ||
| 3 | * | ||
| 4 | * Copyright (C) 2009 Manuel Lauss | ||
| 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
| 19 | */ | ||
| 20 | |||
| 21 | #include <linux/init.h> | ||
| 22 | #include <linux/platform_device.h> | ||
| 23 | |||
| 24 | #include <asm/mach-au1x00/au1xxx.h> | ||
| 25 | #include <asm/mach-db1x00/bcsr.h> | ||
| 26 | #include "../platform.h" | ||
| 27 | |||
| 28 | /* DB1xxx PCMCIA interrupt sources: | ||
| 29 | * CD0/1 GPIO0/3 | ||
| 30 | * STSCHG0/1 GPIO1/4 | ||
| 31 | * CARD0/1 GPIO2/5 | ||
| 32 | * Db1550: 0/1, 21/22, 3/5 | ||
| 33 | */ | ||
| 34 | |||
| 35 | #define DB1XXX_HAS_PCMCIA | ||
| 36 | #define F_SWAPPED (bcsr_read(BCSR_STATUS) & BCSR_STATUS_DB1000_SWAPBOOT) | ||
| 37 | |||
| 38 | #if defined(CONFIG_MIPS_DB1000) | ||
| 39 | #define DB1XXX_PCMCIA_CD0 AU1000_GPIO0_INT | ||
| 40 | #define DB1XXX_PCMCIA_STSCHG0 AU1000_GPIO1_INT | ||
| 41 | #define DB1XXX_PCMCIA_CARD0 AU1000_GPIO2_INT | ||
| 42 | #define DB1XXX_PCMCIA_CD1 AU1000_GPIO3_INT | ||
| 43 | #define DB1XXX_PCMCIA_STSCHG1 AU1000_GPIO4_INT | ||
| 44 | #define DB1XXX_PCMCIA_CARD1 AU1000_GPIO5_INT | ||
| 45 | #define BOARD_FLASH_SIZE 0x02000000 /* 32MB */ | ||
| 46 | #define BOARD_FLASH_WIDTH 4 /* 32-bits */ | ||
| 47 | #elif defined(CONFIG_MIPS_DB1100) | ||
| 48 | #define DB1XXX_PCMCIA_CD0 AU1100_GPIO0_INT | ||
| 49 | #define DB1XXX_PCMCIA_STSCHG0 AU1100_GPIO1_INT | ||
| 50 | #define DB1XXX_PCMCIA_CARD0 AU1100_GPIO2_INT | ||
| 51 | #define DB1XXX_PCMCIA_CD1 AU1100_GPIO3_INT | ||
| 52 | #define DB1XXX_PCMCIA_STSCHG1 AU1100_GPIO4_INT | ||
| 53 | #define DB1XXX_PCMCIA_CARD1 AU1100_GPIO5_INT | ||
| 54 | #define BOARD_FLASH_SIZE 0x02000000 /* 32MB */ | ||
| 55 | #define BOARD_FLASH_WIDTH 4 /* 32-bits */ | ||
| 56 | #elif defined(CONFIG_MIPS_DB1500) | ||
| 57 | #define DB1XXX_PCMCIA_CD0 AU1500_GPIO0_INT | ||
| 58 | #define DB1XXX_PCMCIA_STSCHG0 AU1500_GPIO1_INT | ||
| 59 | #define DB1XXX_PCMCIA_CARD0 AU1500_GPIO2_INT | ||
| 60 | #define DB1XXX_PCMCIA_CD1 AU1500_GPIO3_INT | ||
| 61 | #define DB1XXX_PCMCIA_STSCHG1 AU1500_GPIO4_INT | ||
| 62 | #define DB1XXX_PCMCIA_CARD1 AU1500_GPIO5_INT | ||
| 63 | #define BOARD_FLASH_SIZE 0x02000000 /* 32MB */ | ||
| 64 | #define BOARD_FLASH_WIDTH 4 /* 32-bits */ | ||
| 65 | #elif defined(CONFIG_MIPS_DB1550) | ||
| 66 | #define DB1XXX_PCMCIA_CD0 AU1550_GPIO0_INT | ||
| 67 | #define DB1XXX_PCMCIA_STSCHG0 AU1550_GPIO21_INT | ||
| 68 | #define DB1XXX_PCMCIA_CARD0 AU1550_GPIO3_INT | ||
| 69 | #define DB1XXX_PCMCIA_CD1 AU1550_GPIO1_INT | ||
| 70 | #define DB1XXX_PCMCIA_STSCHG1 AU1550_GPIO22_INT | ||
| 71 | #define DB1XXX_PCMCIA_CARD1 AU1550_GPIO5_INT | ||
| 72 | #define BOARD_FLASH_SIZE 0x08000000 /* 128MB */ | ||
| 73 | #define BOARD_FLASH_WIDTH 4 /* 32-bits */ | ||
| 74 | #else | ||
| 75 | /* other board: no PCMCIA */ | ||
| 76 | #undef DB1XXX_HAS_PCMCIA | ||
| 77 | #undef F_SWAPPED | ||
| 78 | #define F_SWAPPED 0 | ||
| 79 | #if defined(CONFIG_MIPS_BOSPORUS) | ||
| 80 | #define BOARD_FLASH_SIZE 0x01000000 /* 16MB */ | ||
| 81 | #define BOARD_FLASH_WIDTH 2 /* 16-bits */ | ||
| 82 | #elif defined(CONFIG_MIPS_MIRAGE) | ||
| 83 | #define BOARD_FLASH_SIZE 0x04000000 /* 64MB */ | ||
| 84 | #define BOARD_FLASH_WIDTH 4 /* 32-bits */ | ||
| 85 | #endif | ||
| 86 | #endif | ||
| 87 | |||
| 88 | static int __init db1xxx_dev_init(void) | ||
| 89 | { | ||
| 90 | #ifdef DB1XXX_HAS_PCMCIA | ||
| 91 | db1x_register_pcmcia_socket(PCMCIA_ATTR_PHYS_ADDR, | ||
| 92 | PCMCIA_ATTR_PHYS_ADDR + 0x000400000 - 1, | ||
| 93 | PCMCIA_MEM_PHYS_ADDR, | ||
| 94 | PCMCIA_MEM_PHYS_ADDR + 0x000400000 - 1, | ||
| 95 | PCMCIA_IO_PHYS_ADDR, | ||
| 96 | PCMCIA_IO_PHYS_ADDR + 0x000010000 - 1, | ||
| 97 | DB1XXX_PCMCIA_CARD0, | ||
| 98 | DB1XXX_PCMCIA_CD0, | ||
| 99 | /*DB1XXX_PCMCIA_STSCHG0*/0, | ||
| 100 | 0, | ||
| 101 | 0); | ||
| 102 | |||
| 103 | db1x_register_pcmcia_socket(PCMCIA_ATTR_PHYS_ADDR + 0x004000000, | ||
| 104 | PCMCIA_ATTR_PHYS_ADDR + 0x004400000 - 1, | ||
| 105 | PCMCIA_MEM_PHYS_ADDR + 0x004000000, | ||
| 106 | PCMCIA_MEM_PHYS_ADDR + 0x004400000 - 1, | ||
| 107 | PCMCIA_IO_PHYS_ADDR + 0x004000000, | ||
| 108 | PCMCIA_IO_PHYS_ADDR + 0x004010000 - 1, | ||
| 109 | DB1XXX_PCMCIA_CARD1, | ||
| 110 | DB1XXX_PCMCIA_CD1, | ||
| 111 | /*DB1XXX_PCMCIA_STSCHG1*/0, | ||
| 112 | 0, | ||
| 113 | 1); | ||
| 114 | #endif | ||
| 115 | db1x_register_norflash(BOARD_FLASH_SIZE, BOARD_FLASH_WIDTH, F_SWAPPED); | ||
| 116 | return 0; | ||
| 117 | } | ||
| 118 | device_initcall(db1xxx_dev_init); | ||
